diff --git a/.gitignore b/.gitignore index 3fd0c318fdbc523a92d30f4b26dd4958c6898134..a40cd7472b0fb88382dbda47b54906dfe7f9de31 100644 --- a/.gitignore +++ b/.gitignore @@ -20,9 +20,12 @@ general/performance/states/ org.lamport.tla.toolbox.jnlp/files/dist-tlc.zip workspace/ states/ +states +tlatools/states .DS_Store screenshots/ tlatools/.gradle tlatools/build !**/gradle/wrapper/gradle-wrapper.jar ajcore.*.txt +tlatools/test-model/CodePlexBug08/checkpoint/ diff --git a/.travis-settings.xml b/.travis-settings.xml new file mode 100644 index 0000000000000000000000000000000000000000..6d08ab25c5f096f62dcc64b26ded17d908650401 --- /dev/null +++ b/.travis-settings.xml @@ -0,0 +1,46 @@ +<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 + http://maven.apache.org/xsd/settings-1.0.0.xsd"> + <localRepository> + </localRepository> + <interactiveMode/> + <usePluginRegistry/> + <offline/> + <pluginGroups/> + <servers/> + <mirrors> + <mirror> + <id>osuosl-ajdt</id> + <mirrorOf>eclipse-ajdt</mirrorOf> + <url>http://ftp.osuosl.org/pub/eclipse/tools/ajdt/mars/update/</url> + <layout>p2</layout> + <mirrorOfLayouts>p2</mirrorOfLayouts> + </mirror> + <mirror> + <id>osuosl-orbit</id> + <mirrorOf>eclipse-orbit</mirrorOf> + <url>http://ftp.osuosl.org/pub/eclipse/tools/orbit/downloads/drops/R20140114142710/repository</url> + <layout>p2</layout> + <mirrorOfLayouts>p2</mirrorOfLayouts> + </mirror> + <mirror> + <id>osuosl-swtbot</id> + <mirrorOf>eclipse-swtbot</mirrorOf> + <url>http://ftp.osuosl.org/pub/eclipse/technology/swtbot/releases/2.2.1</url> + <layout>p2</layout> + <mirrorOfLayouts>p2</mirrorOfLayouts> + </mirror> + <mirror> + <id>osuosl-eclipse</id> + <mirrorOf>eclipse</mirrorOf> + <url>http://ftp.osuosl.org/pub/eclipse/eclipse/updates/4.5</url> + <layout>p2</layout> + <mirrorOfLayouts>p2</mirrorOfLayouts> + </mirror> + </mirrors> + + <proxies/> + <profiles/> + <activeProfiles/> +</settings> diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000000000000000000000000000000000..7a0da72810896c3401baf4d4cf3b9b07d895df9a --- /dev/null +++ b/.travis.yml @@ -0,0 +1,45 @@ + sudo: required + dist: trusty + language: java + jdk: oraclejdk8 + install: true + + env: + global: + - DISPLAY=:99.0 + - MAVEN_OPTS="-Xmx4g" + + before_install: + # Check and free memory. + - sudo service --status-all + - sudo free -m -t + - sudo /etc/init.d/atd stop + - sudo /etc/init.d/cron stop + - sudo /etc/init.d/friendly-recovery stop + - sudo /etc/init.d/ssh stop + - sudo /etc/init.d/sshguard stop + - sudo /etc/init.d/haveged stop + - sudo /etc/init.d/docker stop + - sudo /etc/init.d/memcached stop + - sudo /etc/init.d/postgresql stop + - sudo free -m -t + # Turn OOM killer off to stop it from killing JUnit tests. + - sudo sysctl vm.overcommit_memory=2 + +## Disable instable UI tests for now. It means we won't need maven and can run shortly running ant directly. +# # Install Window Manager. +# - sudo apt-get install --no-install-recommends metacity libwebkit-dev +# # Start X & Window Manager. +# - sh -e /etc/init.d/xvfb start +# - sleep 5 # Give xvfb some time to start. +# - metacity --sm-disable --replace & +# script: +# - mvn -B -V --settings .travis-settings.xml -Dmaven.test.halt=true verify + + script: + - ant -f tlatools/customBuild.xml -Dmaven.test.halt=true compile compile-test dist test-dist + + after_failure: + - dmesg + - grep -r --include=TEST-*.xml -h -A9999 -B9999 -E '<error|<failure' ./ + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000000000000000000000000000000000..f236d1f6f141982774ec133a2ca61e88de40e30a --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,8 @@ +Please open issues to discuss your contributions prior to any patch you write. Some parts of the tlaplus repository follow a very strict contribution policy. We do not want to reject your 1k LOC patch because the actual change is not considered sensible by us. + +[For instructions on how to setup the Eclipse IDE, please go to https://github.com/tlaplus/tlaplus/tree/master/general/ide.](https://github.com/tlaplus/tlaplus/tree/master/general/ide) + +Quality Metrics +--------------- + +We collect [quality metrics](https://sonarqube.com/organizations/tlaplus/projects). If you want to help out with the project, the reports indicate several low hanging fruits to pick. diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..6bfd1641eee2def3d263c14e68080f111c189181 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +[](https://travis-ci.org/tlaplus/tlaplus) [](https://twitter.com/tlaplus) + +For more information, visit https://research.microsoft.com/en-us/um/people/lamport/tla/tla.html + +Contributing +------------ +Please read our [contribution guide](https://raw.githubusercontent.com/tlaplus/tlaplus/master/CONTRIBUTING.md) before you start working on your contribution. We also have a [feature wishlist](https://github.com/tlaplus/tlaplus/blob/master/general/docs/contributions.md). + +License +------- + +Copyright (c) 199?-2003 HP Corporation +Copyright (c) 2003-2017 Microsoft Corporation + +Licensed under the [MIT License](http://lamport.azurewebsites.net/tla/license.html) diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.pdf b/examples/CarTalkPuzzle/CarTalkPuzzle.pdf deleted file mode 100644 index 0032848bbe073d3789a7aec9e1a35e5b3c870708..0000000000000000000000000000000000000000 Binary files a/examples/CarTalkPuzzle/CarTalkPuzzle.pdf and /dev/null differ diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.tla b/examples/CarTalkPuzzle/CarTalkPuzzle.tla deleted file mode 100644 index 0dcec73129465e0987d31ec4c943ebf869e37c24..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.tla +++ /dev/null @@ -1,160 +0,0 @@ ----------------------------- MODULE CarTalkPuzzle --------------------------- -(***************************************************************************) -(* Car Talk is a U.S. radio program about car repair. Each show includes *) -(* a puzzle, which is often a little mathematical problem. Usually, those *) -(* problems are easy for a mathematically sophisticated listener to solve. *) -(* However, I was not able immediately to see how to solve the puzzle from *) -(* the 22 October 2011 program. I decided to specify the problem in TLA+ *) -(* and let TLC (the TLA+ model checker) compute the solution. This is the *) -(* specification I wrote. (I have tried to explain in comments all TLA+ *) -(* notation that is not standard mathematical notation.) Once TLC had *) -(* found the solution, it was not hard to understand why it worked. *) -(* *) -(* Here is the problem. A farmer has a 40 pound stone and a balance *) -(* scale. How can he break the stone into 4 pieces so that, using those *) -(* pieces and the balance scale, he can weigh out any integral number of *) -(* pounds of corn from 1 pound through 40 pounds. *) -(***************************************************************************) - -(***************************************************************************) -(* The following statement imports the standard operators of arithmetic *) -(* such as + and =< (less than or equals). It also defines the operator *) -(* .. so that i..j is the set of all integers k with i =< k =< j. *) -(***************************************************************************) -EXTENDS Integers - -(***************************************************************************) -(* For generality, I solve the problem of breaking an N pound stone into P *) -(* pieces. The following statement declares N and P to be unspecified *) -(* constant values. *) -(***************************************************************************) -CONSTANTS N, P - -(***************************************************************************) -(* I define the operator Sum so that if f is any integer-valued function, *) -(* and S any finite subset of its domain, then Sum(f, S) is the sum of *) -(* f[x] for all x in S. (In TLA+, function application is indicated by *) -(* square brackets instead of parentheses, as it is in ordinary math.) *) -(* *) -(* A RECURSIVE declaration must precede a recursively defined operator. *) -(* The operator CHOOSE is known to logicians as Hilbert's Epsilon. It is *) -(* defined so that CHOOSE x \in S : P(x) equals some unspecified value v *) -(* such that P(v) is true, if such a value exists. *) -(***************************************************************************) -RECURSIVE Sum(_,_) -Sum(f,S) == IF S = {} THEN 0 - ELSE LET x == CHOOSE x \in S : TRUE - IN f[x] + Sum(f, S \ {x}) - -(***************************************************************************) -(* I now define the set Break of all "breaks", where a break represents a *) -(* method of breaking the stone into P (integer-weight) pieces. The *) -(* obvious definition of a break would be a set of weights. However, that *) -(* doesn't work because it doesn't handle the situation in which two of *) -(* pieces have the same weight. Instead, I define a break of the N pound *) -(* stone into P pieces to be a function B from 1..P (the integers from 1 *) -(* through P) into 1..N such that B[i] is the weight of piece number i. *) -(* To avoid solutions that differ only by how the pieces are numbered, I *) -(* consider only breaks in which the pieces are numbered in non-decreasing *) -(* order of their weight. This leads to the following definition of the *) -(* set Break of all breaks. *) -(* *) -(* In TLA+, [S -> T] is the set of all functions with domain S and range a *) -(* subset of T. \A and \E are the universal and existential quantifiers. *) -(***************************************************************************) -Break == {B \in [1..P -> 1..N] : Sum(B, 1..P) = N - /\ \A i \in 1..P : \A j \in (i+1)..P : B[i] =< B[j]} - -(***************************************************************************) -(* To weigh a quantity of corn, we can put some of the weights on the same *) -(* side of the balance scale as the corn and other weights on the other *) -(* side of the balance. The following operator is true for a weight w, a *) -(* break B, and sets S and T of pieces if w plus the weight of the pieces *) -(* in S equals the weight of the pieces in T. The elements of S and T are *) -(* piece numbers (numbers in 1..P), so Sum(B, S) is the weight of the *) -(* pieces in S. *) -(***************************************************************************) -IsRepresentation(w, B, S, T) == S \cap T = {} - /\ w + Sum(B,S) = Sum(B,T) -(***************************************************************************) -(* I now define IsSolution(B) to be true iff break B solves the problem, *) -(* meaning that it can be used to balance any weight in 1..N. *) -(* *) -(* SUBSET S is the set of all subsets of S (the power set of S). *) -(***************************************************************************) -IsSolution(B) == \A w \in 1..N : - \E S, T \in SUBSET (1..P) : IsRepresentation(w, B, S, T) - -(***************************************************************************) -(* I define AllSolutions to be the set of all breaks B that solve the *) -(* problem. *) -(***************************************************************************) -AllSolutions == { B \in Break : IsSolution(B) } - -(***************************************************************************) -(* We can now have TLC compute the solution to the problem as follows. We *) -(* open this module in the TLA+ Toolbox (an Integrated Development *) -(* Environment for the TLA+ tools). We then create a new TLC model in *) -(* which we assign the values 40 to N and 4 to P. We specify in the model *) -(* that TLC should compute the value of AllSolutions and run TLC on the *) -(* model. (We do this by entering AllSolutions in the Evaluate Constant *) -(* Expression section of the model's Model Checking Results page.) After *) -(* running for 22 seconds on my 3 year old 2.5 GHz laptop, it prints the *) -(* result *) -(* *) -(* { <<1, 3, 9, 27>> } *) -(* *) -(* In TLA+, a k-tuple is represented as a function f with domain 1..k . *) -(* Therefore, TLC prints a break B, which with P = 4 is a function with *) -(* domain 1..4, as the tuple <<B[1], B[2], B[3], B[4]>>. Its output *) -(* therefore indicates that there is a single break that solves the Car *) -(* Talk puzzle, and it breaks the stone into pieces of weights 1, 3, 9, *) -(* and 27 pounds. *) -(* *) -(* You have undoubtedly observed that the weights of the four pieces are *) -(* 3^0, 3^1, 3^2, and 3^3. You may also have observed that 40 equals 1111 *) -(* base 3. These facts should give you enough of a hint to be able to *) -(* answer this: *) -(* *) -(* For what values of N and P is the problem solvable, and what *) -(* is a solution for those values? *) -(***************************************************************************) ------------------------------------------------------------------------------ -(***************************************************************************) -(* It's a good idea to check that the definition of AllSolutions really *) -(* generates solutions. The following operator defines ExpandSolutions to *) -(* be a set of sequences, one for each solution in AllSolutions. Each of *) -(* those sequences is of length N, where the element i shows how to weigh *) -(* i pounds of corn. For example, for the single solution with N = 40 and *) -(* P = 4, element 7 of the sequence is *) -(* *) -(* <<7, {3}, {1, 9}>> *) -(* *) -(* indicating that to weight 7 pounds of corn, we can put the 3 pound *) -(* weight on the same side of the balance as the corn and the 1 and 9 *) -(* pound weights on the other side. For simplicity, I have made the *) -(* definition work only only when the solution breaks the stone into *) -(* pieces with unequal weights. As an exercise, modify the definition so *) -(* it prints the elements using sequences instead of sets, as in *) -(* *) -(* << 7, <<3>>, <<1, 9>> >> *) -(* *) -(* so it works if the weights of the pieces are not all distinct. *) -(* *) -(* The definition below uses the following notation: *) -(* *) -(* \X is the Cartesian product of sets. *) -(* *) -(* [w \in 1..N |-> F(w)] is the N tuple with F(i) as element i. *) -(* *) -(***************************************************************************) -ExpandSolutions == - LET PiecesFor(w, B) == CHOOSE ST \in (SUBSET (1..P)) \X (SUBSET (1..P)) : - IsRepresentation(w, B, ST[1], ST[2]) - Image(S, B) == {B[x] : x \in S} - SolutionFor(w, B) == << w, - Image(PiecesFor(w, B)[1], B), - Image(PiecesFor(w, B)[2], B) >> - IN { [w \in 1..N |-> SolutionFor(w, B)] : B \in AllSolutions } -=============================================================================== -Created by Leslie Lamport on 26 October 2011 diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/.project b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/.project deleted file mode 100644 index 25b7bb7c94c83947d7b82500879e965a0198be83..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/.project +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>CarTalkPuzzle</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>toolbox.builder.TLAParserBuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>toolbox.builder.PCalAlgorithmSearchingBuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>toolbox.natures.TLANature</nature> - </natures> - <linkedResources> - <link> - <name>CarTalkPuzzle.tla</name> - <type>1</type> - <location>C:/lamport/tla/newtools/tla-workspace/examples/CarTalkPuzzle/CarTalkPuzzle.tla</location> - </link> - </linkedResources> -</projectDescription> diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/.settings/org.lamport.tla.toolbox.prefs b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/.settings/org.lamport.tla.toolbox.prefs deleted file mode 100644 index 00326281d09336cca38a676a85299d513b99167d..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/.settings/org.lamport.tla.toolbox.prefs +++ /dev/null @@ -1,4 +0,0 @@ -#Wed Mar 13 11:12:12 PDT 2013 -ProjectRootFile=C\:\\lamport\\tla\\newtools\\tla-workspace\\examples\\CarTalkPuzzle\\CarTalkPuzzle.tla -ProjectToolboxDirSize=396 -eclipse.preferences.version=1 diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/CarTalkPuzzle.aux b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/CarTalkPuzzle.aux deleted file mode 100644 index 54cd7ee0c20afbb686c63f6be6169798244385f8..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/CarTalkPuzzle.aux +++ /dev/null @@ -1 +0,0 @@ -\relax diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/CarTalkPuzzle.pdf b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/CarTalkPuzzle.pdf deleted file mode 100644 index 0032848bbe073d3789a7aec9e1a35e5b3c870708..0000000000000000000000000000000000000000 Binary files a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/CarTalkPuzzle.pdf and /dev/null differ diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/CarTalkPuzzle.tex b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/CarTalkPuzzle.tex deleted file mode 100644 index 45dbed21682a8c0ca659a266853b51f3d2479ed4..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/CarTalkPuzzle.tex +++ /dev/null @@ -1,1216 +0,0 @@ -\batchmode %% Suppresses most terminal output. -\documentclass{article} -\usepackage{color} -\definecolor{boxshade}{gray}{0.85} -\setlength{\textwidth}{360pt} -\setlength{\textheight}{541pt} -\usepackage{latexsym} -\usepackage{ifthen} -% \usepackage{color} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% SWITCHES % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\newboolean{shading} -\setboolean{shading}{false} -\makeatletter - %% this is needed only when inserted into the file, not when - %% used as a package file. -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% % -% DEFINITIONS OF SYMBOL-PRODUCING COMMANDS % -% % -% TLA+ LaTeX % -% symbol command % -% ------ ------- % -% => \implies % -% <: \ltcolon % -% :> \colongt % -% == \defeq % -% .. \dotdot % -% :: \coloncolon % -% =| \eqdash % -% ++ \pp % -% -- \mm % -% ** \stst % -% // \slsl % -% ^ \ct % -% \A \A % -% \E \E % -% \AA \AA % -% \EE \EE % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\newlength{\symlength} -\newcommand{\implies}{\Rightarrow} -\newcommand{\ltcolon}{\mathrel{<\!\!\mbox{:}}} -\newcommand{\colongt}{\mathrel{\!\mbox{:}\!\!>}} -\newcommand{\defeq}{\;\mathrel{\smash %% keep this symbol from being too tall - {{\stackrel{\scriptscriptstyle\Delta}{=}}}}\;} -\newcommand{\dotdot}{\mathrel{\ldotp\ldotp}} -\newcommand{\coloncolon}{\mathrel{::\;}} -\newcommand{\eqdash}{\mathrel = \joinrel \hspace{-.28em}|} -\newcommand{\pp}{\mathbin{++}} -\newcommand{\mm}{\mathbin{--}} -\newcommand{\stst}{*\!*} -\newcommand{\slsl}{/\!/} -\newcommand{\ct}{\hat{\hspace{.4em}}} -\newcommand{\A}{\forall} -\newcommand{\E}{\exists} -\renewcommand{\AA}{\makebox{$\raisebox{.05em}{\makebox[0pt][l]{% - $\forall\hspace{-.517em}\forall\hspace{-.517em}\forall$}}% - \forall\hspace{-.517em}\forall \hspace{-.517em}\forall\,$}} -\newcommand{\EE}{\makebox{$\raisebox{.05em}{\makebox[0pt][l]{% - $\exists\hspace{-.517em}\exists\hspace{-.517em}\exists$}}% - \exists\hspace{-.517em}\exists\hspace{-.517em}\exists\,$}} -\newcommand{\whileop}{\.{\stackrel - {\mbox{\raisebox{-.3em}[0pt][0pt]{$\scriptscriptstyle+\;\,$}}}% - {-\hspace{-.16em}\triangleright}}} - -% Commands are defined to produce the upper-case keywords. -% Note that some have space after them. -\newcommand{\ASSUME}{\textsc{assume }} -\newcommand{\ASSUMPTION}{\textsc{assumption }} -\newcommand{\AXIOM}{\textsc{axiom }} -\newcommand{\BOOLEAN}{\textsc{boolean }} -\newcommand{\CASE}{\textsc{case }} -\newcommand{\CONSTANT}{\textsc{constant }} -\newcommand{\CONSTANTS}{\textsc{constants }} -\newcommand{\ELSE}{\settowidth{\symlength}{\THEN}% - \makebox[\symlength][l]{\textsc{ else}}} -\newcommand{\EXCEPT}{\textsc{ except }} -\newcommand{\EXTENDS}{\textsc{extends }} -\newcommand{\FALSE}{\textsc{false}} -\newcommand{\IF}{\textsc{if }} -\newcommand{\IN}{\settowidth{\symlength}{\LET}% - \makebox[\symlength][l]{\textsc{in}}} -\newcommand{\INSTANCE}{\textsc{instance }} -\newcommand{\LET}{\textsc{let }} -\newcommand{\LOCAL}{\textsc{local }} -\newcommand{\MODULE}{\textsc{module }} -\newcommand{\OTHER}{\textsc{other }} -\newcommand{\STRING}{\textsc{string}} -\newcommand{\THEN}{\textsc{ then }} -\newcommand{\THEOREM}{\textsc{theorem }} -\newcommand{\LEMMA}{\textsc{lemma }} -\newcommand{\PROPOSITION}{\textsc{proposition }} -\newcommand{\COROLLARY}{\textsc{corollary }} -\newcommand{\TRUE}{\textsc{true}} -\newcommand{\VARIABLE}{\textsc{variable }} -\newcommand{\VARIABLES}{\textsc{variables }} -\newcommand{\WITH}{\textsc{ with }} -\newcommand{\WF}{\textrm{WF}} -\newcommand{\SF}{\textrm{SF}} -\newcommand{\CHOOSE}{\textsc{choose }} -\newcommand{\ENABLED}{\textsc{enabled }} -\newcommand{\UNCHANGED}{\textsc{unchanged }} -\newcommand{\SUBSET}{\textsc{subset }} -\newcommand{\UNION}{\textsc{union }} -\newcommand{\DOMAIN}{\textsc{domain }} -% Added for tla2tex -\newcommand{\BY}{\textsc{by }} -\newcommand{\OBVIOUS}{\textsc{obvious }} -\newcommand{\HAVE}{\textsc{have }} -\newcommand{\QED}{\textsc{qed }} -\newcommand{\TAKE}{\textsc{take }} -\newcommand{\DEF}{\textsc{ def }} -\newcommand{\HIDE}{\textsc{hide }} -\newcommand{\RECURSIVE}{\textsc{recursive }} -\newcommand{\USE}{\textsc{use }} -\newcommand{\DEFINE}{\textsc{define }} -\newcommand{\PROOF}{\textsc{proof }} -\newcommand{\WITNESS}{\textsc{witness }} -\newcommand{\PICK}{\textsc{pick }} -\newcommand{\DEFS}{\textsc{defs }} -\newcommand{\PROVE}{\settowidth{\symlength}{\ASSUME}% - \makebox[\symlength][l]{\textsc{prove}}\@s{-4.1}}% - %% The \@s{-4.1) is a kludge added on 24 Oct 2009 [happy birthday, Ellen] - %% so the correct alignment occurs if the user types - %% ASSUME X - %% PROVE Y - %% because it cancels the extra 4.1 pts added because of the - %% extra space after the PROVE. This seems to works OK. - %% However, the 4.1 equals Parameters.LaTeXLeftSpace(1) and - %% should be changed if that method ever changes. -\newcommand{\SUFFICES}{\textsc{suffices }} -\newcommand{\NEW}{\textsc{new }} -\newcommand{\LAMBDA}{\textsc{lambda }} -\newcommand{\STATE}{\textsc{state }} -\newcommand{\ACTION}{\textsc{action }} -\newcommand{\TEMPORAL}{\textsc{temporal }} -\newcommand{\ONLY}{\textsc{only }} %% added by LL on 2 Oct 2009 -\newcommand{\OMITTED}{\textsc{omitted }} %% added by LL on 31 Oct 2009 -\newcommand{\@pfstepnum}[2]{\ensuremath{\langle#1\rangle}\textrm{#2}} -\newcommand{\bang}{\@s{1}\mbox{\small !}\@s{1}} -%% We should format || differently in PlusCal code than in TLA+ formulas. -\newcommand{\p@barbar}{\ifpcalsymbols - \,\,\rule[-.25em]{.075em}{1em}\hspace*{.2em}\rule[-.25em]{.075em}{1em}\,\,% - \else \,||\,\fi} -%% PlusCal keywords -\newcommand{\p@fair}{\textbf{fair }} -\newcommand{\p@semicolon}{\textbf{\,; }} -\newcommand{\p@algorithm}{\textbf{algorithm }} -\newcommand{\p@mmfair}{\textbf{-{}-fair }} -\newcommand{\p@mmalgorithm}{\textbf{-{}-algorithm }} -\newcommand{\p@assert}{\textbf{assert }} -\newcommand{\p@await}{\textbf{await }} -\newcommand{\p@begin}{\textbf{begin }} -\newcommand{\p@end}{\textbf{end }} -\newcommand{\p@call}{\textbf{call }} -\newcommand{\p@define}{\textbf{define }} -\newcommand{\p@do}{\textbf{ do }} -\newcommand{\p@either}{\textbf{either }} -\newcommand{\p@or}{\textbf{or }} -\newcommand{\p@goto}{\textbf{goto }} -\newcommand{\p@if}{\textbf{if }} -\newcommand{\p@then}{\,\,\textbf{then }} -\newcommand{\p@else}{\ifcsyntax \textbf{else } \else \,\,\textbf{else }\fi} -\newcommand{\p@elsif}{\,\,\textbf{elsif }} -\newcommand{\p@macro}{\textbf{macro }} -\newcommand{\p@print}{\textbf{print }} -\newcommand{\p@procedure}{\textbf{procedure }} -\newcommand{\p@process}{\textbf{process }} -\newcommand{\p@return}{\textbf{return}} -\newcommand{\p@skip}{\textbf{skip}} -\newcommand{\p@variable}{\textbf{variable }} -\newcommand{\p@variables}{\textbf{variables }} -\newcommand{\p@while}{\textbf{while }} -\newcommand{\p@when}{\textbf{when }} -\newcommand{\p@with}{\textbf{with }} -\newcommand{\p@lparen}{\textbf{(\,\,}} -\newcommand{\p@rparen}{\textbf{\,\,) }} -\newcommand{\p@lbrace}{\textbf{\{\,\,}} -\newcommand{\p@rbrace}{\textbf{\,\,\} }} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% REDEFINE STANDARD COMMANDS TO MAKE THEM FORMAT BETTER % -% % -% We redefine \in and \notin % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\renewcommand{\_}{\rule{.4em}{.06em}\hspace{.05em}} -\newlength{\equalswidth} -\let\oldin=\in -\let\oldnotin=\notin -\renewcommand{\in}{% - {\settowidth{\equalswidth}{$\.{=}$}\makebox[\equalswidth][c]{$\oldin$}}} -\renewcommand{\notin}{% - {\settowidth{\equalswidth}{$\.{=}$}\makebox[\equalswidth]{$\oldnotin$}}} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% % -% HORIZONTAL BARS: % -% % -% \moduleLeftDash |~~~~~~~~~~ % -% \moduleRightDash ~~~~~~~~~~| % -% \midbar |----------| % -% \bottombar |__________| % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\newlength{\charwidth}\settowidth{\charwidth}{{\small\tt M}} -\newlength{\boxrulewd}\setlength{\boxrulewd}{.4pt} -\newlength{\boxlineht}\setlength{\boxlineht}{.5\baselineskip} -\newcommand{\boxsep}{\charwidth} -\newlength{\boxruleht}\setlength{\boxruleht}{.5ex} -\newlength{\boxruledp}\setlength{\boxruledp}{-\boxruleht} -\addtolength{\boxruledp}{\boxrulewd} -\newcommand{\boxrule}{\leaders\hrule height \boxruleht depth \boxruledp - \hfill\mbox{}} -\newcommand{\@computerule}{% - \setlength{\boxruleht}{.5ex}% - \setlength{\boxruledp}{-\boxruleht}% - \addtolength{\boxruledp}{\boxrulewd}} - -\newcommand{\bottombar}{\hspace{-\boxsep}% - \raisebox{-\boxrulewd}[0pt][0pt]{\rule[.5ex]{\boxrulewd}{\boxlineht}}% - \boxrule - \raisebox{-\boxrulewd}[0pt][0pt]{% - \rule[.5ex]{\boxrulewd}{\boxlineht}}\hspace{-\boxsep}\vspace{0pt}} - -\newcommand{\moduleLeftDash}% - {\hspace*{-\boxsep}% - \raisebox{-\boxlineht}[0pt][0pt]{\rule[.5ex]{\boxrulewd - }{\boxlineht}}% - \boxrule\hspace*{.4em }} - -\newcommand{\moduleRightDash}% - {\hspace*{.4em}\boxrule - \raisebox{-\boxlineht}[0pt][0pt]{\rule[.5ex]{\boxrulewd - }{\boxlineht}}\hspace{-\boxsep}}%\vspace{.2em} - -\newcommand{\midbar}{\hspace{-\boxsep}\raisebox{-.5\boxlineht}[0pt][0pt]{% - \rule[.5ex]{\boxrulewd}{\boxlineht}}\boxrule\raisebox{-.5\boxlineht% - }[0pt][0pt]{\rule[.5ex]{\boxrulewd}{\boxlineht}}\hspace{-\boxsep}} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% FORMATING COMMANDS % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% PLUSCAL SHADING % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% The TeX pcalshading switch is set on to cause PlusCal shading to be -% performed. This changes the behavior of the following commands and -% environments to cause full-width shading to be performed on all lines. -% -% \tstrut \@x cpar mcom \@pvspace -% -% The TeX pcalsymbols switch is turned on when typesetting a PlusCal algorithm, -% whether or not shading is being performed. It causes symbols (other than -% parentheses and braces and PlusCal-only keywords) that should be typeset -% differently depending on whether they are in an algorithm to be typeset -% appropriately. Currently, the only such symbol is "||". -% -% The TeX csyntax switch is turned on when typesetting a PlusCal algorithm in -% c-syntax. This allows symbols to be format differently in the two syntaxes. -% The "else" keyword is the only one that is. - -\newif\ifpcalshading \pcalshadingfalse -\newif\ifpcalsymbols \pcalsymbolsfalse -\newif\ifcsyntax \csyntaxfalse - -% The \@pvspace command makes a vertical space. It uses \vspace -% except with \ifpcalshading, in which case it sets \pvcalvspace -% and the space is added by a following \@x command. -% -\newlength{\pcalvspace}\setlength{\pcalvspace}{0pt}% -\newcommand{\@pvspace}[1]{% - \ifpcalshading - \par\global\setlength{\pcalvspace}{#1}% - \else - \par\vspace{#1}% - \fi -} - -% The lcom environment was changed to set \lcomindent equal to -% the indentation it produces. This length is used by the -% cpar environment to make shading extend for the full width -% of the line. This assumes that lcom environments are not -% nested. I hope TLATeX does not nest them. -% -\newlength{\lcomindent}% -\setlength{\lcomindent}{0pt}% - -%\tstrut: A strut to produce inter-paragraph space in a comment. -%\rstrut: A strut to extend the bottom of a one-line comment so -% there's no break in the shading between comments on -% successive lines. -\newcommand\tstrut% - {\raisebox{\vshadelen}{\raisebox{-.25em}{\rule{0pt}{1.15em}}}% - \global\setlength{\vshadelen}{0pt}} -\newcommand\rstrut{\raisebox{-.25em}{\rule{0pt}{1.15em}}% - \global\setlength{\vshadelen}{0pt}} - - -% \.{op} formats operator op in math mode with empty boxes on either side. -% Used because TeX otherwise vary the amount of space it leaves around op. -\renewcommand{\.}[1]{\ensuremath{\mbox{}#1\mbox{}}} - -% \@s{n} produces an n-point space -\newcommand{\@s}[1]{\hspace{#1pt}} - -% \@x{txt} starts a specification line in the beginning with txt -% in the final LaTeX source. -\newlength{\@xlen} -\newcommand\xtstrut% - {\setlength{\@xlen}{1.05em}% - \addtolength{\@xlen}{\pcalvspace}% - \raisebox{\vshadelen}{\raisebox{-.25em}{\rule{0pt}{\@xlen}}}% - \global\setlength{\vshadelen}{0pt}% - \global\setlength{\pcalvspace}{0pt}} - -\newcommand{\@x}[1]{\par - \ifpcalshading - \makebox[0pt][l]{\shadebox{\xtstrut\hspace*{\textwidth}}}% - \fi - \mbox{$\mbox{}#1\mbox{}$}} - -% \@xx{txt} continues a specification line with the text txt. -\newcommand{\@xx}[1]{\mbox{$\mbox{}#1\mbox{}$}} - -% \@y{cmt} produces a one-line comment. -\newcommand{\@y}[1]{\mbox{\footnotesize\hspace{.65em}% - \ifthenelse{\boolean{shading}}{% - \shadebox{#1\hspace{-\the\lastskip}\rstrut}}% - {#1\hspace{-\the\lastskip}\rstrut}}} - -% \@z{cmt} produces a zero-width one-line comment. -\newcommand{\@z}[1]{\makebox[0pt][l]{\footnotesize - \ifthenelse{\boolean{shading}}{% - \shadebox{#1\hspace{-\the\lastskip}\rstrut}}% - {#1\hspace{-\the\lastskip}\rstrut}}} - - -% \@w{str} produces the TLA+ string "str". -\newcommand{\@w}[1]{\textsf{``{#1}''}} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% SHADING % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\def\graymargin{1} - % The number of points of margin in the shaded box. - -% \definecolor{boxshade}{gray}{.85} -% Defines the darkness of the shading: 1 = white, 0 = black -% Added by TLATeX only if needed. - -% \shadebox{txt} puts txt in a shaded box. -\newlength{\templena} -\newlength{\templenb} -\newsavebox{\tempboxa} -\newcommand{\shadebox}[1]{{\setlength{\fboxsep}{\graymargin pt}% - \savebox{\tempboxa}{#1}% - \settoheight{\templena}{\usebox{\tempboxa}}% - \settodepth{\templenb}{\usebox{\tempboxa}}% - \hspace*{-\fboxsep}\raisebox{0pt}[\templena][\templenb]% - {\colorbox{boxshade}{\usebox{\tempboxa}}}\hspace*{-\fboxsep}}} - -% \vshade{n} makes an n-point inter-paragraph space, with -% shading if the `shading' flag is true. -\newlength{\vshadelen} -\setlength{\vshadelen}{0pt} -\newcommand{\vshade}[1]{\ifthenelse{\boolean{shading}}% - {\global\setlength{\vshadelen}{#1pt}}% - {\vspace{#1pt}}} - -\newlength{\boxwidth} -\newlength{\multicommentdepth} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% THE cpar ENVIRONMENT % -% ^^^^^^^^^^^^^^^^^^^^ % -% The LaTeX input % -% % -% \begin{cpar}{pop}{nest}{isLabel}{d}{e}{arg6} % -% XXXXXXXXXXXXXXX % -% XXXXXXXXXXXXXXX % -% XXXXXXXXXXXXXXX % -% \end{cpar} % -% % -% produces one of two possible results. If isLabel is the letter "T", % -% it produces the following, where [label] is the result of typesetting % -% arg6 in an LR box, and d is is a number representing a distance in % -% points. % -% % -% prevailing |<-- d -->[label]<- e ->XXXXXXXXXXXXXXX % -% left | XXXXXXXXXXXXXXX % -% margin | XXXXXXXXXXXXXXX % -% % -% If isLabel is the letter "F", then it produces % -% % -% prevailing |<-- d -->XXXXXXXXXXXXXXXXXXXXXXX % -% left | <- e ->XXXXXXXXXXXXXXXX % -% margin | XXXXXXXXXXXXXXXX % -% % -% where d and e are numbers representing distances in points. % -% % -% The prevailing left margin is the one in effect before the most recent % -% pop (argument 1) cpar environments with "T" as the nest argument, where % -% pop is a number \geq 0. % -% % -% If the nest argument is the letter "T", then the prevailing left % -% margin is moved to the left of the second (and following) lines of % -% X's. Otherwise, the prevailing left margin is left unchanged. % -% % -% An \unnest{n} command moves the prevailing left margin to where it was % -% before the most recent n cpar environments with "T" as the nesting % -% argument. % -% % -% The environment leaves no vertical space above or below it, or between % -% its paragraphs. (TLATeX inserts the proper amount of vertical space.) % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\newcounter{pardepth} -\setcounter{pardepth}{0} - -% \setgmargin{txt} defines \gmarginN to be txt, where N is \roman{pardepth}. -% \thegmargin equals \gmarginN, where N is \roman{pardepth}. -\newcommand{\setgmargin}[1]{% - \expandafter\xdef\csname gmargin\roman{pardepth}\endcsname{#1}} -\newcommand{\thegmargin}{\csname gmargin\roman{pardepth}\endcsname} -\newcommand{\gmargin}{0pt} - -\newsavebox{\tempsbox} - -\newlength{\@cparht} -\newlength{\@cpardp} -\newenvironment{cpar}[6]{% - \addtocounter{pardepth}{-#1}% - \ifthenelse{\boolean{shading}}{\par\begin{lrbox}{\tempsbox}% - \begin{minipage}[t]{\linewidth}}{}% - \begin{list}{}{% - \edef\temp{\thegmargin} - \ifthenelse{\equal{#3}{T}}% - {\settowidth{\leftmargin}{\hspace{\temp}\footnotesize #6\hspace{#5pt}}% - \addtolength{\leftmargin}{#4pt}}% - {\setlength{\leftmargin}{#4pt}% - \addtolength{\leftmargin}{#5pt}% - \addtolength{\leftmargin}{\temp}% - \setlength{\itemindent}{-#5pt}}% - \ifthenelse{\equal{#2}{T}}{\addtocounter{pardepth}{1}% - \setgmargin{\the\leftmargin}}{}% - \setlength{\labelwidth}{0pt}% - \setlength{\labelsep}{0pt}% - \setlength{\itemindent}{-\leftmargin}% - \setlength{\topsep}{0pt}% - \setlength{\parsep}{0pt}% - \setlength{\partopsep}{0pt}% - \setlength{\parskip}{0pt}% - \setlength{\itemsep}{0pt} - \setlength{\itemindent}{#4pt}% - \addtolength{\itemindent}{-\leftmargin}}% - \ifthenelse{\equal{#3}{T}}% - {\item[\tstrut\footnotesize \hspace{\temp}{#6}\hspace{#5pt}] - }% - {\item[\tstrut\hspace{\temp}]% - }% - \footnotesize} - {\hspace{-\the\lastskip}\tstrut - \end{list}% - \ifthenelse{\boolean{shading}}% - {\end{minipage}% - \end{lrbox}% - \ifpcalshading - \setlength{\@cparht}{\ht\tempsbox}% - \setlength{\@cpardp}{\dp\tempsbox}% - \addtolength{\@cparht}{.15em}% - \addtolength{\@cpardp}{.2em}% - \addtolength{\@cparht}{\@cpardp}% - % I don't know what's going on here. I want to add a - % \pcalvspace high shaded line, but I don't know how to - % do it. A little trial and error shows that the following - % does a reasonable job approximating that, eliminating - % the line if \pcalvspace is small. - \addtolength{\@cparht}{\pcalvspace}% - \ifdim \pcalvspace > .8em - \addtolength{\pcalvspace}{-.2em}% - \hspace*{-\lcomindent}% - \shadebox{\rule{0pt}{\pcalvspace}\hspace*{\textwidth}}\par - \global\setlength{\pcalvspace}{0pt}% - \fi - \hspace*{-\lcomindent}% - \makebox[0pt][l]{\raisebox{-\@cpardp}[0pt][0pt]{% - \shadebox{\rule{0pt}{\@cparht}\hspace*{\textwidth}}}}% - \hspace*{\lcomindent}\usebox{\tempsbox}% - \par - \else - \shadebox{\usebox{\tempsbox}}\par - \fi}% - {}% - } - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% THE ppar ENVIRONMENT % -% ^^^^^^^^^^^^^^^^^^^^ % -% The environment % -% % -% \begin{ppar} ... \end{ppar} % -% % -% is equivalent to % -% % -% \begin{cpar}{0}{F}{F}{0}{0}{} ... \end{cpar} % -% % -% The environment is put around each line of the output for a PlusCal % -% algorithm. % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%\newenvironment{ppar}{% -% \ifthenelse{\boolean{shading}}{\par\begin{lrbox}{\tempsbox}% -% \begin{minipage}[t]{\linewidth}}{}% -% \begin{list}{}{% -% \edef\temp{\thegmargin} -% \setlength{\leftmargin}{0pt}% -% \addtolength{\leftmargin}{\temp}% -% \setlength{\itemindent}{0pt}% -% \setlength{\labelwidth}{0pt}% -% \setlength{\labelsep}{0pt}% -% \setlength{\itemindent}{-\leftmargin}% -% \setlength{\topsep}{0pt}% -% \setlength{\parsep}{0pt}% -% \setlength{\partopsep}{0pt}% -% \setlength{\parskip}{0pt}% -% \setlength{\itemsep}{0pt} -% \setlength{\itemindent}{0pt}% -% \addtolength{\itemindent}{-\leftmargin}}% -% \item[\tstrut\hspace{\temp}]}% -% {\hspace{-\the\lastskip}\tstrut -% \end{list}% -% \ifthenelse{\boolean{shading}}{\end{minipage} -% \end{lrbox}% -% \shadebox{\usebox{\tempsbox}}\par}{}% -% } - - %%% TESTING - \newcommand{\xtest}[1]{\par - \makebox[0pt][l]{\shadebox{\xtstrut\hspace*{\textwidth}}}% - \mbox{$\mbox{}#1\mbox{}$}} - -% \newcommand{\xxtest}[1]{\par -% \makebox[0pt][l]{\shadebox{\xtstrut{#1}\hspace*{\textwidth}}}% -% \mbox{$\mbox{}#1\mbox{}$}} - -%\newlength{\pcalvspace} -%\setlength{\pcalvspace}{0pt} -% \newlength{\xxtestlen} -% \setlength{\xxtestlen}{0pt} -% \newcommand\xtstrut% -% {\setlength{\xxtestlen}{1.15em}% -% \addtolength{\xxtestlen}{\pcalvspace}% -% \raisebox{\vshadelen}{\raisebox{-.25em}{\rule{0pt}{\xxtestlen}}}% -% \global\setlength{\vshadelen}{0pt}% -% \global\setlength{\pcalvspace}{0pt}} - - %%%% TESTING - - %% The xcpar environment - %% Note: overloaded use of \pcalvspace for testing. - %% -% \newlength{\xcparht}% -% \newlength{\xcpardp}% - -% \newenvironment{xcpar}[6]{% -% \addtocounter{pardepth}{-#1}% -% \ifthenelse{\boolean{shading}}{\par\begin{lrbox}{\tempsbox}% -% \begin{minipage}[t]{\linewidth}}{}% -% \begin{list}{}{% -% \edef\temp{\thegmargin}% -% \ifthenelse{\equal{#3}{T}}% -% {\settowidth{\leftmargin}{\hspace{\temp}\footnotesize #6\hspace{#5pt}}% -% \addtolength{\leftmargin}{#4pt}}% -% {\setlength{\leftmargin}{#4pt}% -% \addtolength{\leftmargin}{#5pt}% -% \addtolength{\leftmargin}{\temp}% -% \setlength{\itemindent}{-#5pt}}% -% \ifthenelse{\equal{#2}{T}}{\addtocounter{pardepth}{1}% -% \setgmargin{\the\leftmargin}}{}% -% \setlength{\labelwidth}{0pt}% -% \setlength{\labelsep}{0pt}% -% \setlength{\itemindent}{-\leftmargin}% -% \setlength{\topsep}{0pt}% -% \setlength{\parsep}{0pt}% -% \setlength{\partopsep}{0pt}% -% \setlength{\parskip}{0pt}% -% \setlength{\itemsep}{0pt}% -% \setlength{\itemindent}{#4pt}% -% \addtolength{\itemindent}{-\leftmargin}}% -% \ifthenelse{\equal{#3}{T}}% -% {\item[\xtstrut\footnotesize \hspace{\temp}{#6}\hspace{#5pt}]% -% }% -% {\item[\xtstrut\hspace{\temp}]% -% }% -% \footnotesize} -% {\hspace{-\the\lastskip}\tstrut -% \end{list}% -% \ifthenelse{\boolean{shading}}{\end{minipage} -% \end{lrbox}% -% \setlength{\xcparht}{\ht\tempsbox}% -% \setlength{\xcpardp}{\dp\tempsbox}% -% \addtolength{\xcparht}{.15em}% -% \addtolength{\xcpardp}{.2em}% -% \addtolength{\xcparht}{\xcpardp}% -% \hspace*{-\lcomindent}% -% \makebox[0pt][l]{\raisebox{-\xcpardp}[0pt][0pt]{% -% \shadebox{\rule{0pt}{\xcparht}\hspace*{\textwidth}}}}% -% \hspace*{\lcomindent}\usebox{\tempsbox}% -% \par}{}% -% } -% -% \newlength{\xmcomlen} -%\newenvironment{xmcom}[1]{% -% \setcounter{pardepth}{0}% -% \hspace{.65em}% -% \begin{lrbox}{\alignbox}\sloppypar% -% \setboolean{shading}{false}% -% \setlength{\boxwidth}{#1pt}% -% \addtolength{\boxwidth}{-.65em}% -% \begin{minipage}[t]{\boxwidth}\footnotesize -% \parskip=0pt\relax}% -% {\end{minipage}\end{lrbox}% -% \setlength{\xmcomlen}{\textwidth}% -% \addtolength{\xmcomlen}{-\wd\alignbox}% -% \settodepth{\alignwidth}{\usebox{\alignbox}}% -% \global\setlength{\multicommentdepth}{\alignwidth}% -% \setlength{\boxwidth}{\alignwidth}% -% \global\addtolength{\alignwidth}{-\maxdepth}% -% \addtolength{\boxwidth}{.1em}% -% \raisebox{0pt}[0pt][0pt]{% -% \ifthenelse{\boolean{shading}}% -% {\hspace*{-\xmcomlen}\shadebox{\rule[-\boxwidth]{0pt}{0pt}% -% \hspace*{\xmcomlen}\usebox{\alignbox}}}% -% {\usebox{\alignbox}}}% -% \vspace*{\alignwidth}\pagebreak[0]\vspace{-\alignwidth}\par} -% % a multi-line comment, whose first argument is its width in points. -% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% THE lcom ENVIRONMENT % -% ^^^^^^^^^^^^^^^^^^^^ % -% A multi-line comment with no text to its left is typeset in an lcom % -% environment, whose argument is a number representing the indentation % -% of the left margin, in points. All the text of the comment should be % -% inside cpar environments. % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\newenvironment{lcom}[1]{% - \setlength{\lcomindent}{#1pt} % Added for PlusCal handling. - \par\vspace{.2em}% - \sloppypar - \setcounter{pardepth}{0}% - \footnotesize - \begin{list}{}{% - \setlength{\leftmargin}{#1pt} - \setlength{\labelwidth}{0pt}% - \setlength{\labelsep}{0pt}% - \setlength{\itemindent}{0pt}% - \setlength{\topsep}{0pt}% - \setlength{\parsep}{0pt}% - \setlength{\partopsep}{0pt}% - \setlength{\parskip}{0pt}} - \item[]}% - {\end{list}\vspace{.3em}\setlength{\lcomindent}{0pt}% - } - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% THE mcom ENVIRONMENT AND \mutivspace COMMAND % -% ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ % -% % -% A part of the spec containing a right-comment of the form % -% % -% xxxx (*************) % -% yyyy (* ccccccccc *) % -% ... (* ccccccccc *) % -% (* ccccccccc *) % -% (* ccccccccc *) % -% (*************) % -% % -% is typeset by % -% % -% XXXX \begin{mcom}{d} % -% CCCC ... CCC % -% \end{mcom} % -% YYYY ... % -% \multivspace{n} % -% % -% where the number d is the width in points of the comment, n is the % -% number of xxxx, yyyy, ... lines to the left of the comment. % -% All the text of the comment should be typeset in cpar environments. % -% % -% This puts the comment into a single box (so no page breaks can occur % -% within it). The entire box is shaded iff the shading flag is true. % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\newlength{\xmcomlen}% -\newenvironment{mcom}[1]{% - \setcounter{pardepth}{0}% - \hspace{.65em}% - \begin{lrbox}{\alignbox}\sloppypar% - \setboolean{shading}{false}% - \setlength{\boxwidth}{#1pt}% - \addtolength{\boxwidth}{-.65em}% - \begin{minipage}[t]{\boxwidth}\footnotesize - \parskip=0pt\relax}% - {\end{minipage}\end{lrbox}% - \setlength{\xmcomlen}{\textwidth}% % For PlusCal shading - \addtolength{\xmcomlen}{-\wd\alignbox}% % For PlusCal shading - \settodepth{\alignwidth}{\usebox{\alignbox}}% - \global\setlength{\multicommentdepth}{\alignwidth}% - \setlength{\boxwidth}{\alignwidth}% % For PlusCal shading - \global\addtolength{\alignwidth}{-\maxdepth}% - \addtolength{\boxwidth}{.1em}% % For PlusCal shading - \raisebox{0pt}[0pt][0pt]{% - \ifthenelse{\boolean{shading}}% - {\ifpcalshading - \hspace*{-\xmcomlen}% - \shadebox{\rule[-\boxwidth]{0pt}{0pt}\hspace*{\xmcomlen}% - \usebox{\alignbox}}% - \else - \shadebox{\usebox{\alignbox}} - \fi - }% - {\usebox{\alignbox}}}% - \vspace*{\alignwidth}\pagebreak[0]\vspace{-\alignwidth}\par} - % a multi-line comment, whose first argument is its width in points. - - -% \multispace{n} produces the vertical space indicated by "|"s in -% this situation -% -% xxxx (*************) -% xxxx (* ccccccccc *) -% | (* ccccccccc *) -% | (* ccccccccc *) -% | (* ccccccccc *) -% | (*************) -% -% where n is the number of "xxxx" lines. -\newcommand{\multivspace}[1]{\addtolength{\multicommentdepth}{-#1\baselineskip}% - \addtolength{\multicommentdepth}{1.2em}% - \ifthenelse{\lengthtest{\multicommentdepth > 0pt}}% - {\par\vspace{\multicommentdepth}\par}{}} - -%\newenvironment{hpar}[2]{% -% \begin{list}{}{\setlength{\leftmargin}{#1pt}% -% \addtolength{\leftmargin}{#2pt}% -% \setlength{\itemindent}{-#2pt}% -% \setlength{\topsep}{0pt}% -% \setlength{\parsep}{0pt}% -% \setlength{\partopsep}{0pt}% -% \setlength{\parskip}{0pt}% -% \addtolength{\labelsep}{0pt}}% -% \item[]\footnotesize}{\end{list}} -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% % Typesets a sequence of paragraphs like this: % -% % % -% % left |<-- d1 --> XXXXXXXXXXXXXXXXXXXXXXXX % -% % margin | <- d2 -> XXXXXXXXXXXXXXX % -% % | XXXXXXXXXXXXXXX % -% % | % -% % | XXXXXXXXXXXXXXX % -% % | XXXXXXXXXXXXXXX % -% % % -% % where d1 = #1pt and d2 = #2pt, but with no vspace between % -% % paragraphs. % -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Commands for repeated characters that produce dashes. % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \raisedDash{wd}{ht}{thk} makes a horizontal line wd characters wide, -% raised a distance ht ex's above the baseline, with a thickness of -% thk em's. -\newcommand{\raisedDash}[3]{\raisebox{#2ex}{\setlength{\alignwidth}{.5em}% - \rule{#1\alignwidth}{#3em}}} - -% The following commands take a single argument n and produce the -% output for n repeated characters, as follows -% \cdash: - -% \tdash: ~ -% \ceqdash: = -% \usdash: _ -\newcommand{\cdash}[1]{\raisedDash{#1}{.5}{.04}} -\newcommand{\usdash}[1]{\raisedDash{#1}{0}{.04}} -\newcommand{\ceqdash}[1]{\raisedDash{#1}{.5}{.08}} -\newcommand{\tdash}[1]{\raisedDash{#1}{1}{.08}} - -\newlength{\spacewidth} -\setlength{\spacewidth}{.2em} -\newcommand{\e}[1]{\hspace{#1\spacewidth}} -%% \e{i} produces space corresponding to i input spaces. - - -%% Alignment-file Commands - -\newlength{\alignboxwidth} -\newlength{\alignwidth} -\newsavebox{\alignbox} - -% \al{i}{j}{txt} is used in the alignment file to put "%{i}{j}{wd}" -% in the log file, where wd is the width of the line up to that point, -% and txt is the following text. -\newcommand{\al}[3]{% - \typeout{\%{#1}{#2}{\the\alignwidth}}% - \cl{#3}} - -%% \cl{txt} continues a specification line in the alignment file -%% with text txt. -\newcommand{\cl}[1]{% - \savebox{\alignbox}{\mbox{$\mbox{}#1\mbox{}$}}% - \settowidth{\alignboxwidth}{\usebox{\alignbox}}% - \addtolength{\alignwidth}{\alignboxwidth}% - \usebox{\alignbox}} - -% \fl{txt} in the alignment file begins a specification line that -% starts with the text txt. -\newcommand{\fl}[1]{% - \par - \savebox{\alignbox}{\mbox{$\mbox{}#1\mbox{}$}}% - \settowidth{\alignwidth}{\usebox{\alignbox}}% - \usebox{\alignbox}} - - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Ordinarily, TeX typesets letters in math mode in a special math italic % -% font. This makes it typeset "it" to look like the product of the % -% variables i and t, rather than like the word "it". The following % -% commands tell TeX to use an ordinary italic font instead. % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\ifx\documentclass\undefined -\else - \DeclareSymbolFont{tlaitalics}{\encodingdefault}{cmr}{m}{it} - \let\itfam\symtlaitalics -\fi - -\makeatletter -\newcommand{\tlx@c}{\c@tlx@ctr\advance\c@tlx@ctr\@ne} -\newcounter{tlx@ctr} -\c@tlx@ctr=\itfam \multiply\c@tlx@ctr"100\relax \advance\c@tlx@ctr "7061\relax -\mathcode`a=\tlx@c \mathcode`b=\tlx@c \mathcode`c=\tlx@c \mathcode`d=\tlx@c -\mathcode`e=\tlx@c \mathcode`f=\tlx@c \mathcode`g=\tlx@c \mathcode`h=\tlx@c -\mathcode`i=\tlx@c \mathcode`j=\tlx@c \mathcode`k=\tlx@c \mathcode`l=\tlx@c -\mathcode`m=\tlx@c \mathcode`n=\tlx@c \mathcode`o=\tlx@c \mathcode`p=\tlx@c -\mathcode`q=\tlx@c \mathcode`r=\tlx@c \mathcode`s=\tlx@c \mathcode`t=\tlx@c -\mathcode`u=\tlx@c \mathcode`v=\tlx@c \mathcode`w=\tlx@c \mathcode`x=\tlx@c -\mathcode`y=\tlx@c \mathcode`z=\tlx@c -\c@tlx@ctr=\itfam \multiply\c@tlx@ctr"100\relax \advance\c@tlx@ctr "7041\relax -\mathcode`A=\tlx@c \mathcode`B=\tlx@c \mathcode`C=\tlx@c \mathcode`D=\tlx@c -\mathcode`E=\tlx@c \mathcode`F=\tlx@c \mathcode`G=\tlx@c \mathcode`H=\tlx@c -\mathcode`I=\tlx@c \mathcode`J=\tlx@c \mathcode`K=\tlx@c \mathcode`L=\tlx@c -\mathcode`M=\tlx@c \mathcode`N=\tlx@c \mathcode`O=\tlx@c \mathcode`P=\tlx@c -\mathcode`Q=\tlx@c \mathcode`R=\tlx@c \mathcode`S=\tlx@c \mathcode`T=\tlx@c -\mathcode`U=\tlx@c \mathcode`V=\tlx@c \mathcode`W=\tlx@c \mathcode`X=\tlx@c -\mathcode`Y=\tlx@c \mathcode`Z=\tlx@c -\makeatother - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% THE describe ENVIRONMENT % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% -% It is like the description environment except it takes an argument -% ARG that should be the text of the widest label. It adjusts the -% indentation so each item with label LABEL produces -%% LABEL blah blah blah -%% <- width of ARG ->blah blah blah -%% blah blah blah -\newenvironment{describe}[1]% - {\begin{list}{}{\settowidth{\labelwidth}{#1}% - \setlength{\labelsep}{.5em}% - \setlength{\leftmargin}{\labelwidth}% - \addtolength{\leftmargin}{\labelsep}% - \addtolength{\leftmargin}{\parindent}% - \def\makelabel##1{\rm ##1\hfill}}% - \setlength{\topsep}{0pt}}%% - % Sets \topsep to 0 to reduce vertical space above - % and below embedded displayed equations - {\end{list}} - -% For tlatex.TeX -\usepackage{verbatim} -\makeatletter -\def\tla{\let\%\relax% - \@bsphack - \typeout{\%{\the\linewidth}}% - \let\do\@makeother\dospecials\catcode`\^^M\active - \let\verbatim@startline\relax - \let\verbatim@addtoline\@gobble - \let\verbatim@processline\relax - \let\verbatim@finish\relax - \verbatim@} -\let\endtla=\@esphack - -\let\pcal=\tla -\let\endpcal=\endtla -\let\ppcal=\tla -\let\endppcal=\endtla - -% The tlatex environment is used by TLATeX.TeX to typeset TLA+. -% TLATeX.TLA starts its files by writing a \tlatex command. This -% command/environment sets \parindent to 0 and defines \% to its -% standard definition because the writing of the log files is messed up -% if \% is defined to be something else. It also executes -% \@computerule to determine the dimensions for the TLA horizonatl -% bars. -\newenvironment{tlatex}{\@computerule% - \setlength{\parindent}{0pt}% - \makeatletter\chardef\%=`\%}{} - - -% The notla environment produces no output. You can turn a -% tla environment to a notla environment to prevent tlatex.TeX from -% re-formatting the environment. - -\def\notla{\let\%\relax% - \@bsphack - \let\do\@makeother\dospecials\catcode`\^^M\active - \let\verbatim@startline\relax - \let\verbatim@addtoline\@gobble - \let\verbatim@processline\relax - \let\verbatim@finish\relax - \verbatim@} -\let\endnotla=\@esphack - -\let\nopcal=\notla -\let\endnopcal=\endnotla -\let\noppcal=\notla -\let\endnoppcal=\endnotla - -%%%%%%%%%%%%%%%%%%%%%%%% end of tlatex.sty file %%%%%%%%%%%%%%%%%%%%%%% -% last modified on Fri 3 August 2012 at 14:23:49 PST by lamport - -\begin{document} -\tlatex -\setboolean{shading}{true} -\@x{}\moduleLeftDash\@xx{ {\MODULE} CarTalkPuzzle}\moduleRightDash\@xx{}% -\begin{lcom}{0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% - Car Talk is a \ensuremath{U.S}. radio program about car repair. Each show - includes - a puzzle, which is often a little mathematical problem. Usually, those - problems are easy for a mathematically sophisticated listener to solve. - However, I was not able immediately to see how to solve the puzzle from - the 22 \ensuremath{October} 2011 program. I decided to specify the problem - in TLA+ - and let \ensuremath{TLC} (the TLA+ model checker) compute the solution. This - is the - specification I wrote. (I have tried to explain in comments all TLA+ - notation that is not standard mathematical notation.) Once \ensuremath{TLC} - had - found the solution, it was not hard to understand why it worked. -\end{cpar}% -\vshade{5.0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% -Here is the problem. A farmer has a 40 pound stone and a balance - scale. How can he break the stone into 4 pieces so that, using those - pieces and the balance scale, he can weigh out any integral number of - pounds of corn from 1 pound through 40 pounds. -\end{cpar}% -\end{lcom}% -\@pvspace{8.0pt}% -\begin{lcom}{0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% -The following statement imports the standard operators of arithmetic - such as + and \ensuremath{\.{\leq}} (less than or equals). It also defines - the operator - \ensuremath{\.{\dotdot}} so that \ensuremath{i\.{\dotdot}j} is the set of - all integers \ensuremath{k} with \ensuremath{i \.{\leq} k \.{\leq} j}. -\end{cpar}% -\end{lcom}% -\@x{ {\EXTENDS} Integers}% -\@pvspace{8.0pt}% -\begin{lcom}{0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% - For generality, I solve the problem of breaking an \ensuremath{N} pound stone - into \ensuremath{P - } pieces. The following statement declares \ensuremath{N} and \ensuremath{P} - to be unspecified - constant values. -\end{cpar}% -\end{lcom}% -\@x{ {\CONSTANTS} N ,\, P}% -\@pvspace{8.0pt}% -\begin{lcom}{0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% - I define the operator \ensuremath{Sum} so that if \ensuremath{f} is any - integer-valued function, - and \ensuremath{S} any finite subset of its domain, then - \ensuremath{Sum(f,\, S)} is the sum of - \ensuremath{f[x]} for all \ensuremath{x} in \ensuremath{S}. (In TLA+, - function application is indicated by - square brackets instead of parentheses, as it is in ordinary math.) -\end{cpar}% -\vshade{5.0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% -A RECURSIVE declaration must precede a recursively defined operator. - The operator \ensuremath{{\CHOOSE}} is known to logicians as - \ensuremath{Hilbert}\mbox{'}s Epsilon. It is - defined so that \ensuremath{{\CHOOSE} x \.{\in} S} : \ensuremath{P(x)} - equals some unspecified value \ensuremath{v -} such that \ensuremath{P(v)} is true, if such a value exists. -\end{cpar}% -\end{lcom}% -\@x{ {\RECURSIVE} Sum ( \_ ,\, \_ )}% -\@x{ Sum ( f ,\, S ) \.{\defeq} {\IF} S \.{=} \{ \} \.{\THEN} 0}% - \@x{\@s{107.02} \.{\ELSE} \.{\LET} x \.{\defeq} {\CHOOSE} x \.{\in} S \.{:} - {\TRUE}}% - \@x{\@s{138.33} \.{\IN} f [ x ] \.{+} Sum ( f ,\, S \.{\,\backslash\,} \{ x - \} )}% -\@pvspace{8.0pt}% -\begin{lcom}{0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% - I now define the set \ensuremath{Break} of all ``breaks'', where a break - represents a - method of breaking the stone into \ensuremath{P} (integer-weight) pieces. The - obvious definition of a break would be a set of weights. However, that - doesn\mbox{'}t work because it doesn\mbox{'}t handle the situation in which - two of - pieces have the same weight. Instead, I define a break of the \ensuremath{N} - pound - stone into \ensuremath{P} pieces to be a function \ensuremath{B} from - \ensuremath{1\.{\dotdot}P} (the integers from 1 - through \ensuremath{P}) into \ensuremath{1\.{\dotdot}N} such that - \ensuremath{B[i]} is the weight of piece number \ensuremath{i}. - To avoid solutions that differ only by how the pieces are numbered, I - consider only breaks in which the pieces are numbered in non-decreasing - order of their weight. This leads to the following definition of the - set \ensuremath{Break} of all breaks. -\end{cpar}% -\vshade{5.0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% - In TLA+, [\ensuremath{S \.{\rightarrow} T}] is the set of all functions with - domain \ensuremath{S} and range a - subset of \ensuremath{T}. \ensuremath{\A\,} and \ensuremath{\E\,} are the - universal and existential quantifiers. -\end{cpar}% -\end{lcom}% - \@x{ Break \.{\defeq} \{ B \.{\in} [ 1 \.{\dotdot} P \.{\rightarrow} 1 - \.{\dotdot} N ] \.{:}\@s{12.29} Sum ( B ,\, 1 \.{\dotdot} P ) \.{=} N}% - \@x{\@s{152.65} \.{\land}\@s{1.32} \A\, i \.{\in} 1 \.{\dotdot} P \.{:} \A\, - j \.{\in} ( i \.{+} 1 ) \.{\dotdot} P \.{:} B [ i ] \.{\leq} B [ j ] \}}% -\@pvspace{8.0pt}% -\begin{lcom}{0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% -To weigh a quantity of corn, we can put some of the weights on the same - side of the balance scale as the corn and other weights on the other - side of the balance. The following operator is true for a weight - \ensuremath{w}, a - break \ensuremath{B}, and sets \ensuremath{S} and \ensuremath{T} of pieces - if \ensuremath{w} plus the weight of the pieces - in \ensuremath{S} equals the weight of the pieces in \ensuremath{T}. The - elements of \ensuremath{S} and \ensuremath{T} are - piece numbers (numbers in \ensuremath{1\.{\dotdot}P}), so - \ensuremath{Sum(B,\, S)} is the weight of the - pieces in \ensuremath{S}. -\end{cpar}% -\end{lcom}% - \@x{ IsRepresentation ( w ,\, B ,\, S ,\, T ) \.{\defeq}\@s{12.29} S \.{\cap} - T \.{=} \{ \}}% -\@x{\@s{146.97} \.{\land} w \.{+} Sum ( B ,\, S ) \.{=} Sum ( B ,\, T )}% -\begin{lcom}{0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% - I now define \ensuremath{IsSolution(B)} to be true iff break \ensuremath{B} - solves the problem, - meaning that it can be used to balance any weight in - \ensuremath{1\.{\dotdot}N}. -\end{cpar}% -\vshade{5.0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% - \ensuremath{{\SUBSET} S} is the set of all subsets of \ensuremath{S} (the - power set of \ensuremath{S}). -\end{cpar}% -\end{lcom}% - \@x{ IsSolution ( B ) \.{\defeq}\@s{4.1} \A\, w \.{\in} 1 \.{\dotdot} N - \.{:}}% - \@x{\@s{90.54} \E\, S ,\, T \.{\in} {\SUBSET} ( 1 \.{\dotdot} P ) \.{:} - IsRepresentation ( w ,\, B ,\, S ,\, T )}% -\@pvspace{8.0pt}% -\begin{lcom}{0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% - I define \ensuremath{AllSolutions} to be the set of all breaks \ensuremath{B} - that solve the - problem. -\end{cpar}% -\end{lcom}% -\@x{ AllSolutions \.{\defeq} \{ B \.{\in} Break \.{:} IsSolution ( B ) \}}% -\@pvspace{8.0pt}% -\begin{lcom}{0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% - We can now have \ensuremath{TLC} compute the solution to the problem as - follows. We - open this module in the TLA+ \ensuremath{Toolbox} (an Integrated Development - Environment for the TLA+ tools). We then create a new \ensuremath{TLC} model - in - which we assign the values 40 to \ensuremath{N} and 4 to \ensuremath{P}. We - specify in the model - that \ensuremath{TLC} should compute the value of \ensuremath{AllSolutions} - and run \ensuremath{TLC} on the - model. (We do this by entering \ensuremath{AllSolutions} in the Evaluate - Constant - Expression section of the model\mbox{'}s Model Checking Results page.) After - running for 22 seconds on my 3 year old 2.5 \ensuremath{GHz} laptop, it - prints the - result -\end{cpar}% -\vshade{5.0}% -\begin{cpar}{0}{T}{F}{7.5}{0}{}% -\ensuremath{\{ {\langle}1,\, 3,\, 9,\, 27{\rangle} \} -}% -\end{cpar}% -\vshade{5.0}% -\begin{cpar}{1}{F}{F}{0}{0}{}% - In TLA+, a k-tuple is represented as a function \ensuremath{f} with domain - \ensuremath{1\.{\dotdot}k} . - Therefore, \ensuremath{TLC} prints a break \ensuremath{B}, which with - \ensuremath{P \.{=} 4} is a function with - domain \ensuremath{1\.{\dotdot}4}, as the tuple \ensuremath{{\langle}B[1],\, - B[2],\, B[3],\, B[4]{\rangle}}. Its output - therefore indicates that there is a single break that solves the Car - Talk puzzle, and it breaks the stone into pieces of weights 1, 3, 9, - and 27 pounds. -\end{cpar}% -\vshade{5.0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% -You have undoubtedly observed that the weights of the four pieces are - \ensuremath{3\.{\ct}0}, \ensuremath{3\.{\ct}1}, \ensuremath{3\.{\ct}2}, and - \ensuremath{3\.{\ct}3}. You may also have observed that 40 equals 1111 - base 3. These facts should give you enough of a hint to be able to - answer this: -\end{cpar}% -\vshade{5.0}% -\begin{cpar}{0}{T}{F}{7.5}{0}{}% - For what values of \ensuremath{N} and \ensuremath{P} is the problem solvable, - and what - is a solution for those values\.{?} -\end{cpar}% -\end{lcom}% -\@x{}\midbar\@xx{}% -\begin{lcom}{0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% - It\mbox{'}s a good idea to check that the definition of - \ensuremath{AllSolutions} really - generates solutions. The following operator defines - \ensuremath{ExpandSolutions} to - be a set of sequences, one for each solution in \ensuremath{AllSolutions}. - Each of - those sequences is of length \ensuremath{N}, where the element - \ensuremath{i} shows how to weigh - \ensuremath{i} pounds of corn. For example, for the single solution with - \ensuremath{N \.{=} 40} and - \ensuremath{P \.{=} 4}, element 7 of the sequence is -\end{cpar}% -\vshade{5.0}% -\begin{cpar}{0}{T}{F}{7.5}{0}{}% -\ensuremath{{\langle}7,\, \{3\},\, \{1,\, 9\}{\rangle} -}% -\end{cpar}% -\vshade{5.0}% -\begin{cpar}{1}{F}{F}{0}{0}{}% -indicating that to weight 7 pounds of corn, we can put the 3 pound - weight on the same side of the balance as the corn and the 1 and 9 - pound weights on the other side. For simplicity, I have made the - definition work only only when the solution breaks the stone into - pieces with unequal weights. As an exercise, modify the definition so - it prints the elements using sequences instead of sets, as in -\end{cpar}% -\vshade{5.0}% -\begin{cpar}{0}{T}{F}{5.0}{0}{}% - \ensuremath{{\langle} 7,\, {\langle}3{\rangle},\, {\langle}1,\, 9{\rangle} - {\rangle} -}% -\end{cpar}% -\vshade{5.0}% -\begin{cpar}{1}{F}{F}{0}{0}{}% -so it works if the weights of the pieces are not all distinct. -\end{cpar}% -\vshade{5.0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% -The definition below uses the following notation: -\end{cpar}% -\vshade{5.0}% -\begin{cpar}{0}{T}{F}{5.0}{0}{}% -\ensuremath{\.{\times}} is the \ensuremath{Cartesian} product of sets. -\end{cpar}% -\vshade{5.0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% - [\ensuremath{w \.{\in} 1\.{\dotdot}N \.{\mapsto} F(w)}] is the \ensuremath{N} - tuple with \ensuremath{F(i)} as element \ensuremath{i}. -\end{cpar}% -\end{lcom}% -\@x{ ExpandSolutions \.{\defeq}}% - \@x{\@s{8.2} \.{\LET} PiecesFor ( w ,\, B ) \.{\defeq} {\CHOOSE} ST \.{\in} ( - {\SUBSET} ( 1 \.{\dotdot} P ) ) \.{\times} ( {\SUBSET} ( 1 \.{\dotdot} P ) ) - \.{:}}% -\@x{\@s{128.24} IsRepresentation ( w ,\, B ,\, ST [ 1 ] ,\, ST [ 2 ] )}% -\@x{\@s{28.59} Image ( S ,\, B ) \.{\defeq} \{ B [ x ] \.{:} x \.{\in} S \}}% -\@x{\@s{32.69} SolutionFor ( w ,\, B ) \.{\defeq} {\langle} w ,\,}% -\@x{\@s{137.09} Image ( PiecesFor ( w ,\, B ) [ 1 ] ,\, B ) ,\,}% -\@x{\@s{137.09} Image ( PiecesFor ( w ,\, B ) [ 2 ] ,\, B ) {\rangle}}% - \@x{\@s{8.2} \.{\IN}\@s{4.09} \{ [ w \.{\in} 1 \.{\dotdot} N \.{\mapsto} - SolutionFor ( w ,\, B ) ] \.{:} B \.{\in} AllSolutions \}}% -\@x{}\bottombar\@xx{}% -\setboolean{shading}{false} -\begin{lcom}{0}% -\begin{cpar}{0}{F}{F}{0}{0}{}% - Created by \ensuremath{Leslie} \ensuremath{Lamport} on 26 - \ensuremath{October} 2011 -\end{cpar}% -\end{lcom}% -\end{document} diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/CarTalkPuzzle___Model_1.launch b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/CarTalkPuzzle___Model_1.launch deleted file mode 100644 index f9e3b08f898ede3ece5578c2f5746b772a742194..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/CarTalkPuzzle___Model_1.launch +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<launchConfiguration type="org.lamport.tla.toolbox.tool.tlc.modelCheck"> -<intAttribute key="autoLockTime" value="15"/> -<stringAttribute key="configurationName" value="Model_1"/> -<intAttribute key="dfidDepth" value="100"/> -<booleanAttribute key="dfidMode" value="false"/> -<booleanAttribute key="distributedTLC" value="false"/> -<stringAttribute key="distributedTLCScript" value=""/> -<stringAttribute key="distributedTLCVMArgs" value=""/> -<intAttribute key="fpBits" value="0"/> -<intAttribute key="maxHeapSize" value="500"/> -<booleanAttribute key="mcMode" value="true"/> -<stringAttribute key="modelBehaviorInit" value=""/> -<stringAttribute key="modelBehaviorNext" value=""/> -<stringAttribute key="modelBehaviorSpec" value=""/> -<intAttribute key="modelBehaviorSpecType" value="0"/> -<stringAttribute key="modelBehaviorVars" value=""/> -<booleanAttribute key="modelCorrectnessCheckDeadlock" value="true"/> -<listAttribute key="modelCorrectnessInvariants"/> -<listAttribute key="modelCorrectnessProperties"/> -<stringAttribute key="modelExpressionEval" value="\* ExpandSolutions \* CHOOSE B \in Break : IsSolution(B) <<3^5 - 1, 40 + 3^4>>"/> -<stringAttribute key="modelParameterActionConstraint" value=""/> -<listAttribute key="modelParameterConstants"> -<listEntry value="N;;40;0;0"/> -<listEntry value="P;;4;0;0"/> -</listAttribute> -<stringAttribute key="modelParameterContraint" value=""/> -<listAttribute key="modelParameterDefinitions"/> -<stringAttribute key="modelParameterModelValues" value="{}"/> -<stringAttribute key="modelParameterNewDefinitions" value=""/> -<intAttribute key="numberOfWorkers" value="1"/> -<booleanAttribute key="recover" value="false"/> -<intAttribute key="simuAril" value="-1"/> -<intAttribute key="simuDepth" value="100"/> -<intAttribute key="simuSeed" value="-1"/> -<stringAttribute key="specName" value="CarTalkPuzzle"/> -<stringAttribute key="view" value=""/> -</launchConfiguration> diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/CarTalkPuzzle___Model_2.launch b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/CarTalkPuzzle___Model_2.launch deleted file mode 100644 index 33aafc6422e56d009c9585d5396716ccee68ec56..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/CarTalkPuzzle___Model_2.launch +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<launchConfiguration type="org.lamport.tla.toolbox.tool.tlc.modelCheck"> -<intAttribute key="autoLockTime" value="15"/> -<stringAttribute key="configurationName" value="Model_2"/> -<intAttribute key="dfidDepth" value="100"/> -<booleanAttribute key="dfidMode" value="false"/> -<booleanAttribute key="distributedTLC" value="false"/> -<stringAttribute key="distributedTLCScript" value=""/> -<stringAttribute key="distributedTLCVMArgs" value=""/> -<intAttribute key="fpBits" value="0"/> -<intAttribute key="maxHeapSize" value="500"/> -<booleanAttribute key="mcMode" value="true"/> -<stringAttribute key="modelBehaviorInit" value=""/> -<stringAttribute key="modelBehaviorNext" value=""/> -<stringAttribute key="modelBehaviorSpec" value=""/> -<intAttribute key="modelBehaviorSpecType" value="0"/> -<stringAttribute key="modelBehaviorVars" value=""/> -<booleanAttribute key="modelCorrectnessCheckDeadlock" value="true"/> -<listAttribute key="modelCorrectnessInvariants"/> -<listAttribute key="modelCorrectnessProperties"/> -<stringAttribute key="modelExpressionEval" value="AllSolutions"/> -<stringAttribute key="modelParameterActionConstraint" value=""/> -<listAttribute key="modelParameterConstants"> -<listEntry value="N;;15;0;0"/> -<listEntry value="P;;4;0;0"/> -</listAttribute> -<stringAttribute key="modelParameterContraint" value=""/> -<listAttribute key="modelParameterDefinitions"/> -<stringAttribute key="modelParameterModelValues" value="{}"/> -<stringAttribute key="modelParameterNewDefinitions" value=""/> -<intAttribute key="numberOfWorkers" value="1"/> -<booleanAttribute key="recover" value="false"/> -<intAttribute key="simuAril" value="-1"/> -<intAttribute key="simuDepth" value="100"/> -<intAttribute key="simuSeed" value="-1"/> -<stringAttribute key="specName" value="CarTalkPuzzle"/> -<stringAttribute key="view" value=""/> -</launchConfiguration> diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/CarTalkPuzzle___Model_3.launch b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/CarTalkPuzzle___Model_3.launch deleted file mode 100644 index 7070bf2d778649731f40719bb61ca8f9ccda1656..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/CarTalkPuzzle___Model_3.launch +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<launchConfiguration type="org.lamport.tla.toolbox.tool.tlc.modelCheck"> -<intAttribute key="autoLockTime" value="15"/> -<stringAttribute key="configurationName" value="Model_3"/> -<intAttribute key="dfidDepth" value="100"/> -<booleanAttribute key="dfidMode" value="false"/> -<booleanAttribute key="distributedTLC" value="false"/> -<stringAttribute key="distributedTLCScript" value=""/> -<stringAttribute key="distributedTLCVMArgs" value=""/> -<intAttribute key="fpBits" value="0"/> -<intAttribute key="maxHeapSize" value="500"/> -<booleanAttribute key="mcMode" value="true"/> -<stringAttribute key="modelBehaviorInit" value=""/> -<stringAttribute key="modelBehaviorNext" value=""/> -<stringAttribute key="modelBehaviorSpec" value=""/> -<intAttribute key="modelBehaviorSpecType" value="0"/> -<stringAttribute key="modelBehaviorVars" value=""/> -<booleanAttribute key="modelCorrectnessCheckDeadlock" value="true"/> -<listAttribute key="modelCorrectnessInvariants"/> -<listAttribute key="modelCorrectnessProperties"/> -<stringAttribute key="modelExpressionEval" value="AllSolutions"/> -<stringAttribute key="modelParameterActionConstraint" value=""/> -<listAttribute key="modelParameterConstants"> -<listEntry value="N;;121;0;0"/> -<listEntry value="P;;5;0;0"/> -</listAttribute> -<stringAttribute key="modelParameterContraint" value=""/> -<listAttribute key="modelParameterDefinitions"/> -<stringAttribute key="modelParameterModelValues" value="{}"/> -<stringAttribute key="modelParameterNewDefinitions" value=""/> -<intAttribute key="numberOfWorkers" value="1"/> -<booleanAttribute key="recover" value="false"/> -<intAttribute key="simuAril" value="-1"/> -<intAttribute key="simuDepth" value="100"/> -<intAttribute key="simuSeed" value="-1"/> -<stringAttribute key="specName" value="CarTalkPuzzle"/> -<stringAttribute key="view" value=""/> -</launchConfiguration> diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_1/CarTalkPuzzle.tla b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_1/CarTalkPuzzle.tla deleted file mode 100644 index 38fed758b966f4d740999392d291f99de121ea70..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_1/CarTalkPuzzle.tla +++ /dev/null @@ -1,158 +0,0 @@ ----------------------------- MODULE CarTalkPuzzle --------------------------- -(***************************************************************************) -(* Car Talk is a U.S. radio program about car repair. Each show includes *) -(* a puzzle, which is often a little mathematical problem. Usually, those *) -(* problems are easy for a mathematically sophisticated listener to solve. *) -(* However, I was not able immediately to see how to solve the puzzle from *) -(* the 22 October 2011 program. I decided to specify the problem in TLA+ *) -(* and let TLC (the TLA+ model checker) compute the solution. This is the *) -(* specification I wrote. (I have tried to explain in comments all TLA+ *) -(* notation that is not standard mathematical notation.) Once TLC had *) -(* found the solution, it was not hard to understand why it worked. *) -(* *) -(* Here is the problem. A farmer has a 40 pound stone and a balance *) -(* scale. How can he break the stone into 4 pieces so that, using those *) -(* pieces and the balance scale, he can weigh out any integral number of *) -(* pounds of corn from 1 pound through 40 pounds. *) -(***************************************************************************) - -(***************************************************************************) -(* The following statement imports the standard operators of arithmetic *) -(* such as + and =< (less than or equals). It also defines the operator *) -(* .. so that i..j is the set of all integers k with i =< k =< j. *) -(***************************************************************************) -EXTENDS Integers - -(***************************************************************************) -(* For generality, I solve the problem of breaking an N pound stone into P *) -(* pieces. The following statement declares N and P to be unspecified *) -(* constant values. *) -(***************************************************************************) -CONSTANTS N, P - -(***************************************************************************) -(* I define the operator Sum so that if f is any integer-valued function, *) -(* and S any finite subset of its domain, then Sum(f, S) is the sum of *) -(* f[x] for all x in S. (In TLA+, function application is indicated by *) -(* square brackets instead of parentheses, as it is in ordinary math.) *) -(* *) -(* A RECURSIVE declaration must precede a recursively defined operator. *) -(* The operator CHOOSE is known to logicians as Hilbert's Epsilon. It is *) -(* defined so that CHOOSE x \in S : P(x) equals some unspecified value v *) -(* such that P(v) is true, if such a value exists. *) -(***************************************************************************) -RECURSIVE Sum(_,_) -Sum(f,S) == IF S = {} THEN 0 - ELSE LET x == CHOOSE x \in S : TRUE - IN f[x] + Sum(f, S \ {x}) - -(***************************************************************************) -(* I now define the set Break of all "breaks", where a break represents a *) -(* method of breaking the stone into P (integer-weight) pieces. The *) -(* obvious definition of a break would be a set of weights. However, that *) -(* doesn't work because it doesn't handle the situation in which two of *) -(* pieces have the same weight. Instead, I define a break of the N pound *) -(* stone into P pieces to be a function B from 1..P (the integers from 1 *) -(* through P) into 1..N such that B[i] is the weight of piece number i. *) -(* To avoid solutions that differ only by how the pieces are numbered, I *) -(* consider only breaks in which the pieces are numbered in non-decreasing *) -(* order of their weight. This leads to the following definition of the *) -(* set Break of all breaks. *) -(* *) -(* In TLA+, [S -> T] is the set of all functions with domain S and range a *) -(* subset of T. \A and \E are the universal and existential quantifiers. *) -(***************************************************************************) -Break == {B \in [1..P -> 1..N] : Sum(B, 1..P) = N - /\ \A i \in 1..P : \A j \in (i+1)..P : B[i] =< B[j]} - -(***************************************************************************) -(* To weigh a quantity of corn, we can put some of the weights on the same *) -(* side of the balance scale as the corn and other weights on the other *) -(* side of the balance. The following operator is true for a weight w, a *) -(* break B, and sets S and T of pieces if w plus the weight of the pieces *) -(* in S equals the weight of the pieces in T. The elements of S and T are *) -(* piece numbers (numbers in 1..P), so Sum(B, S) is the weight of the *) -(* pieces in S. *) -(***************************************************************************) -IsRepresentation(w, B, S, T) == S \cap T = {} - /\ w + Sum(B,S) = Sum(B,T) -(***************************************************************************) -(* I now define IsSolution(B) to be true iff break B solves the problem, *) -(* meaning that it can be used to balance any weight in 1..N. *) -(* *) -(* SUBSET S is the set of all subsets of S (the power set of S). *) -(***************************************************************************) -IsSolution(B) == \A w \in 1..N : - \E S, T \in SUBSET (1..P) : IsRepresentation(w, B, S, T) -========== -(***************************************************************************) -(* I define AllSolutions to be the set of all breaks B that solve the *) -(* problem. *) -(***************************************************************************) -AllSolutions == { B \in Break : IsSolution(B) } - -(***************************************************************************) -(* We can now have TLC compute the solution to the problem as follows. We *) -(* open this module in the TLA+ Toolbox (an Integrated Development *) -(* Environment for the TLA+ tools). We then create a new TLC model in *) -(* which we assign the values 40 to N and 4 to P. We specify in the model *) -(* that TLC should compute the value of AllSolutions and run TLC on the *) -(* model. After running for 22 seconds on my 3 year old 2.5 GHz laptop, *) -(* it prints the result *) -(* *) -(* { <<1, 3, 9, 27>> } *) -(* *) -(* In TLA+, a k-tuple is represented as a function f with domain 1..k . *) -(* Therefore, TLC prints a break B, which with P = 4 is a function with *) -(* domain 1..4, as the tuple <<B[1], B[2], B[3], B[4]>>. Its output *) -(* therefore indicates that there is a single break that solves the Car *) -(* Talk puzzle, and it breaks the stone into pieces of weights 1, 3, 9, *) -(* and 27 pounds. *) -(* *) -(* You have undoubtedly observed that the weights of the four pieces are *) -(* 3^0, 3^1, 3^2, and 3^3. You may also have observed that 40 equals 1111 *) -(* base 3. These facts should give you enough of a hint to be able to *) -(* answer this: *) -(* *) -(* For what values of N and P is the problem solvable, and what *) -(* is a solution for those values? *) -(***************************************************************************) ------------------------------------------------------------------------------ -(***************************************************************************) -(* It's a good idea to check that the definition of AllSolutions really *) -(* generates solutions. The following operator defines ExpandSolutions to *) -(* be a set of sequences, one for each solution in AllSolutions. Each of *) -(* those sequences is of length N, where the element i shows how to weight *) -(* i pounds of corn. For example, for the single solution with N = 40 and *) -(* P = 4, element 7 of the sequence is *) -(* *) -(* <<7, {3}, {1, 9}>> *) -(* *) -(* indicating that to weight 7 pounds of corn, we can put the 3 pound *) -(* weight on the same side of the balance as the corn and the 1 and 9 *) -(* pound weights on the other side. For simplicity, I have made the *) -(* definition work only only when the solution breaks the stone into *) -(* pieces with unequal weights. As an exercise, modify the definition so *) -(* it prints the elements using sequences instead of sets, as in *) -(* *) -(* << 7, <<3>>, <<1, 9>> >> *) -(* *) -(* so it works if the weights of the pieces are not all distinct. *) -(* *) -(* The definition below uses the following notation: *) -(* *) -(* \X is the Cartesian product of sets. *) -(* *) -(* [w \in 1..N |-> F(w)] is the N tuple with F(i) as element i. *) -(* *) -(***************************************************************************) -ExpandSolutions == - LET PiecesFor(w, B) == CHOOSE ST \in (SUBSET (1..P)) \X (SUBSET (1..P)) : - IsRepresentation(w, B, ST[1], ST[2]) - Image(S, B) == {B[x] : x \in S} - SolutionFor(w, B) == << w, - Image(PiecesFor(w, B)[1], B), - Image(PiecesFor(w, B)[2], B) >> - IN { [w \in 1..N |-> SolutionFor(w, B)] : B \in AllSolutions } -=============================================================================== -Created by Leslie Lamport on 26 October 2011 diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_1/MC.cfg b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_1/MC.cfg deleted file mode 100644 index df9b1c459b34c5a5ad9d5ac2da820185c19533a5..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_1/MC.cfg +++ /dev/null @@ -1,7 +0,0 @@ -\* CONSTANT definitions -CONSTANT -N <- const_131986752160123000 -\* CONSTANT definitions -CONSTANT -P <- const_131986752161624000 -\* Generated on Fri Oct 28 22:52:01 PDT 2011 \ No newline at end of file diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_1/MC.out b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_1/MC.out deleted file mode 100644 index 17d5dd79a68cdebbb8e3efed4fd1c780bcc480f2..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_1/MC.out +++ /dev/null @@ -1,53 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.03 of 20 July 2011 -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running in Model-Checking mode. -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file MC.tla -Parsing file CarTalkPuzzle.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\TLC.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Integers.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Naturals.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module CarTalkPuzzle -Semantic processing of module Sequences -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2011-10-28 22:52:02) -@!@!@ENDMSG 2185 @!@!@ -<<"$!@$!@$!@$!@$!", <<242, 121>>>> -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 0 distinct states generated. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2193:0 @!@!@ -Model checking completed. No error has been found. - Estimates of the probability that TLC did not check all reachable states - because two distinct states had the same fingerprint: - calculated (optimistic): val = 0 - based on the actual fingerprints: val = 1.1E-19 -@!@!@ENDMSG 2193 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(0) at 2011-10-28 22:52:02: 0 states generated, 0 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -0 states generated, 0 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2194:0 @!@!@ -The depth of the complete state graph search is 0. -@!@!@ENDMSG 2194 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished. (2011-10-28 22:52:02) -@!@!@ENDMSG 2186 @!@!@ diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_1/MC.tla b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_1/MC.tla deleted file mode 100644 index 5aa206b9b3519d0818e4a37d0aade3bd1701afe7..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_1/MC.tla +++ /dev/null @@ -1,27 +0,0 @@ ----- MODULE MC ---- -EXTENDS CarTalkPuzzle, TLC - -\* CONSTANT definitions @modelParameterConstants:0N -const_131986752160123000 == -40 ----- - -\* CONSTANT definitions @modelParameterConstants:1P -const_131986752161624000 == -4 ----- - -\* Constant expression definition @modelExpressionEval -const_expr_131986752163225000 == -\* ExpandSolutions -\* CHOOSE B \in Break : IsSolution(B) -<<3^5 - 1, 40 + 3^4>> ----- - -\* Constant expression ASSUME statement @modelExpressionEval -ASSUME PrintT(<<"$!@$!@$!@$!@$!",const_expr_131986752163225000>>) ----- - -============================================================================= -\* Modification History -\* Created Fri Oct 28 22:52:01 PDT 2011 by lamport diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_1/MC_TE.out b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_1/MC_TE.out deleted file mode 100644 index 17d5dd79a68cdebbb8e3efed4fd1c780bcc480f2..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_1/MC_TE.out +++ /dev/null @@ -1,53 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.03 of 20 July 2011 -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running in Model-Checking mode. -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file MC.tla -Parsing file CarTalkPuzzle.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\TLC.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Integers.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Naturals.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module CarTalkPuzzle -Semantic processing of module Sequences -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2011-10-28 22:52:02) -@!@!@ENDMSG 2185 @!@!@ -<<"$!@$!@$!@$!@$!", <<242, 121>>>> -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 0 distinct states generated. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2193:0 @!@!@ -Model checking completed. No error has been found. - Estimates of the probability that TLC did not check all reachable states - because two distinct states had the same fingerprint: - calculated (optimistic): val = 0 - based on the actual fingerprints: val = 1.1E-19 -@!@!@ENDMSG 2193 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(0) at 2011-10-28 22:52:02: 0 states generated, 0 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -0 states generated, 0 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2194:0 @!@!@ -The depth of the complete state graph search is 0. -@!@!@ENDMSG 2194 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished. (2011-10-28 22:52:02) -@!@!@ENDMSG 2186 @!@!@ diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_2/CarTalkPuzzle.tla b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_2/CarTalkPuzzle.tla deleted file mode 100644 index 1ef24e4f0d5f569ee40cde20ad75e5ca7c21d241..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_2/CarTalkPuzzle.tla +++ /dev/null @@ -1,158 +0,0 @@ ----------------------------- MODULE CarTalkPuzzle --------------------------- -(***************************************************************************) -(* Car Talk is a U.S. radio program about car repair. Each show includes *) -(* a puzzle, which is often a little mathematical problem. Usually, those *) -(* problems are easy for a mathematically sophisticated listener to solve. *) -(* However, I was not able immediately to see how to solve the puzzle from *) -(* the 22 October 2011 program. I decided to specify the problem in TLA+ *) -(* and let TLC (the TLA+ model checker) compute the solution. This is the *) -(* specification I wrote. (I have tried to explain in comments all TLA+ *) -(* notation that is not standard mathematical notation.) Once TLC had *) -(* found the solution, it was not hard to understand why it worked. *) -(* *) -(* Here is the problem. A farmer has a 40 pound stone and a balance *) -(* scale. How can he break the stone into 4 pieces so that, using those *) -(* pieces and the balance scale, he can weigh out any integral number of *) -(* pounds of corn from 1 pound through 40 pounds. *) -(***************************************************************************) - -(***************************************************************************) -(* The following statement imports the standard operators of arithmetic *) -(* such as + and =< (less than or equals). It also defines the operator *) -(* .. so that i..j is the set of all integers k with i =< k =< j. *) -(***************************************************************************) -EXTENDS Integers - -(***************************************************************************) -(* For generality, I solve the problem of breaking an N pound stone into P *) -(* pieces. The following statement declares N and P to be unspecified *) -(* constant values. *) -(***************************************************************************) -CONSTANTS N, P - -(***************************************************************************) -(* I define the operator Sum so that if f is any integer-valued function, *) -(* and S any finite subset of its domain, then Sum(f, S) is the sum of *) -(* f[x] for all x in S. (In TLA+, function application is indicated by *) -(* square brackets instead of parentheses, as it is in ordinary math.) *) -(* *) -(* A RECURSIVE declaration must precede a recursively defined operator. *) -(* The operator CHOOSE is known to logicians as Hilbert's Epsilon. It is *) -(* defined so that CHOOSE x \in S : P(x) equals some unspecified value v *) -(* such that P(v) is true, if such a value exists. *) -(***************************************************************************) -RECURSIVE Sum(_,_) -Sum(f,S) == IF S = {} THEN 0 - ELSE LET x == CHOOSE x \in S : TRUE - IN f[x] + Sum(f, S \ {x}) - -(***************************************************************************) -(* I now define the set Break of all "breaks", where a break represents a *) -(* method of breaking the stone into P (integer-weight) pieces. The *) -(* obvious definition of a break would be a set of weights. However, that *) -(* doesn't work because it doesn't handle the situation in which two of *) -(* pieces have the same weight. Instead, I define a break of the N pound *) -(* stone into P pieces to be a function B from 1..P (the integers from 1 *) -(* through P) into 1..N such that B[i] is the weight of piece number i. *) -(* To avoid solutions that differ only by how the pieces are numbered, I *) -(* consider only breaks in which the pieces are numbered in non-decreasing *) -(* order of their weight. This leads to the following definition of the *) -(* set Break of all breaks. *) -(* *) -(* In TLA+, [S -> T] is the set of all functions with domain S and range a *) -(* subset of T. \A and \E are the universal and existential quantifiers. *) -(***************************************************************************) -Break == {B \in [1..P -> 1..N] : Sum(B, 1..P) = N - /\ \A i \in 1..P : \A j \in (i+1)..P : B[i] =< B[j]} - -(***************************************************************************) -(* To weigh a quantity of corn, we can put some of the weights on the same *) -(* side of the balance scale as the corn and other weights on the other *) -(* side of the balance. The following operator is true for a weight w, a *) -(* break B, and sets S and T of pieces if w plus the weight of the pieces *) -(* in S equals the weight of the pieces in T. The elements of S and T are *) -(* piece numbers (numbers in 1..P), so Sum(B, S) is the weight of the *) -(* pieces in S. *) -(***************************************************************************) -IsRepresentation(w, B, S, T) == S \cap T = {} - /\ w + Sum(B,S) = Sum(B,T) -(***************************************************************************) -(* I now define IsSolution(B) to be true iff break B solves the problem, *) -(* meaning that it can be used to balance any weight in 1..N. *) -(* *) -(* SUBSET S is the set of all subsets of S (the power set of S). *) -(***************************************************************************) -IsSolution(B) == \A w \in 1..N : - \E S, T \in SUBSET (1..P) : IsRepresentation(w, B, S, T) - -(***************************************************************************) -(* I define AllSolutions to be the set of all breaks B that solve the *) -(* problem. *) -(***************************************************************************) -AllSolutions == { B \in Break : IsSolution(B) } - -(***************************************************************************) -(* We can now have TLC compute the solution to the problem as follows. We *) -(* open this module in the TLA+ Toolbox (an Integrated Development *) -(* Environment for the TLA+ tools). We then create a new TLC model in *) -(* which we assign the values 40 to N and 4 to P. We specify in the model *) -(* that TLC should compute the value of AllSolutions and run TLC on the *) -(* model. After running for 22 seconds on my 3 year old 2.5 GHz laptop, *) -(* it prints the result *) -(* *) -(* { <<1, 3, 9, 27>> } *) -(* *) -(* In TLA+, a k-tuple is represented as a function f with domain 1..k . *) -(* Therefore, TLC prints a break B, which with P = 4 is a function with *) -(* domain 1..4, as the tuple <<B[1], B[2], B[3], B[4]>>. Its output *) -(* therefore indicates that there is a single break that solves the Car *) -(* Talk puzzle, and it breaks the stone into pieces of weights 1, 3, 9, *) -(* and 27 pounds. *) -(* *) -(* You have undoubtedly observed that the weights of the four pieces are *) -(* 3^0, 3^1, 3^2, and 3^3. You may also have observed that 40 equals 1111 *) -(* base 3. These facts should give you enough of a hint to be able to *) -(* answer this: *) -(* *) -(* For what values of N and P is the problem solvable, and what *) -(* is a solution for those values? *) -(***************************************************************************) ------------------------------------------------------------------------------ -(***************************************************************************) -(* It's a good idea to check that the definition of AllSolutions really *) -(* generates solutions. The following operator defines ExpandSolutions to *) -(* be a set of sequences, one for each solution in AllSolutions. Each of *) -(* those sequences is of length N, where the element i shows how to weight *) -(* i pounds of corn. For example, for the single solution with N = 40 and *) -(* P = 4, element 7 of the sequence is *) -(* *) -(* <<7, {3}, {1, 9}>> *) -(* *) -(* indicating that to weight 7 pounds of corn, we can put the 3 pound *) -(* weight on the same side of the balance as the corn and the 1 and 9 *) -(* pound weights on the other side. For simplicity, I have made the *) -(* definition work only only when the solution breaks the stone into *) -(* pieces with unequal weights. As an exercise, modify the definition so *) -(* it prints the elements using sequences instead of sets, as in *) -(* *) -(* << 7, <<3>>, <<1, 9>> >> *) -(* *) -(* so it works if the weights of the pieces are not all distinct. *) -(* *) -(* The definition below uses the following notation: *) -(* *) -(* \X is the Cartesian product of sets. *) -(* *) -(* [w \in 1..N |-> F(w)] is the N tuple with F(i) as element i. *) -(* *) -(***************************************************************************) -ExpandSolutions == - LET PiecesFor(w, B) == CHOOSE ST \in (SUBSET (1..P)) \X (SUBSET (1..P)) : - IsRepresentation(w, B, ST[1], ST[2]) - Image(S, B) == {B[x] : x \in S} - SolutionFor(w, B) == << w, - Image(PiecesFor(w, B)[1], B), - Image(PiecesFor(w, B)[2], B) >> - IN { [w \in 1..N |-> SolutionFor(w, B)] : B \in AllSolutions } -=============================================================================== -Created by Leslie Lamport on 26 October 2011 diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_2/MC.cfg b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_2/MC.cfg deleted file mode 100644 index 5bb0e317f06a9d4a501aac7156419820b6143faa..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_2/MC.cfg +++ /dev/null @@ -1,7 +0,0 @@ -\* CONSTANT definitions -CONSTANT -N <- const_131965207585635000 -\* CONSTANT definitions -CONSTANT -P <- const_131965207587136000 -\* Generated on Wed Oct 26 11:01:15 PDT 2011 \ No newline at end of file diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_2/MC.out b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_2/MC.out deleted file mode 100644 index 40ef2681186aba297da21cf2d7727245c206b485..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_2/MC.out +++ /dev/null @@ -1,64 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.03 of 20 July 2011 -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running in Model-Checking mode. -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file MC.tla -Parsing file CarTalkPuzzle.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\TLC.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Integers.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Naturals.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module CarTalkPuzzle -Semantic processing of module Sequences -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2011-10-26 11:01:16) -@!@!@ENDMSG 2185 @!@!@ -<< "$!@$!@$!@$!@$!", - { <<1, 1, 3, 10>>, - <<1, 1, 4, 9>>, - <<1, 1, 5, 8>>, - <<1, 2, 2, 10>>, - <<1, 2, 3, 9>>, - <<1, 2, 4, 8>>, - <<1, 2, 5, 7>>, - <<1, 2, 6, 6>>, - <<1, 3, 3, 8>>, - <<1, 3, 4, 7>>, - <<1, 3, 5, 6>> } >> -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 0 distinct states generated. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2193:0 @!@!@ -Model checking completed. No error has been found. - Estimates of the probability that TLC did not check all reachable states - because two distinct states had the same fingerprint: - calculated (optimistic): val = 0 - based on the actual fingerprints: val = 1.1E-19 -@!@!@ENDMSG 2193 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(0) at 2011-10-26 11:01:18: 0 states generated, 0 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -0 states generated, 0 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2194:0 @!@!@ -The depth of the complete state graph search is 0. -@!@!@ENDMSG 2194 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished. (2011-10-26 11:01:18) -@!@!@ENDMSG 2186 @!@!@ diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_2/MC.tla b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_2/MC.tla deleted file mode 100644 index f1e49a181c91f69c2a3d615f7fe042d72ccb71ee..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_2/MC.tla +++ /dev/null @@ -1,25 +0,0 @@ ----- MODULE MC ---- -EXTENDS CarTalkPuzzle, TLC - -\* CONSTANT definitions @modelParameterConstants:0N -const_131965207585635000 == -15 ----- - -\* CONSTANT definitions @modelParameterConstants:1P -const_131965207587136000 == -4 ----- - -\* Constant expression definition @modelExpressionEval -const_expr_131965207588737000 == -AllSolutions ----- - -\* Constant expression ASSUME statement @modelExpressionEval -ASSUME PrintT(<<"$!@$!@$!@$!@$!",const_expr_131965207588737000>>) ----- - -============================================================================= -\* Modification History -\* Created Wed Oct 26 11:01:15 PDT 2011 by lamport diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_2/MC_TE.out b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_2/MC_TE.out deleted file mode 100644 index 40ef2681186aba297da21cf2d7727245c206b485..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_2/MC_TE.out +++ /dev/null @@ -1,64 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.03 of 20 July 2011 -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running in Model-Checking mode. -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file MC.tla -Parsing file CarTalkPuzzle.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\TLC.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Integers.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Naturals.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module CarTalkPuzzle -Semantic processing of module Sequences -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2011-10-26 11:01:16) -@!@!@ENDMSG 2185 @!@!@ -<< "$!@$!@$!@$!@$!", - { <<1, 1, 3, 10>>, - <<1, 1, 4, 9>>, - <<1, 1, 5, 8>>, - <<1, 2, 2, 10>>, - <<1, 2, 3, 9>>, - <<1, 2, 4, 8>>, - <<1, 2, 5, 7>>, - <<1, 2, 6, 6>>, - <<1, 3, 3, 8>>, - <<1, 3, 4, 7>>, - <<1, 3, 5, 6>> } >> -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 0 distinct states generated. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2193:0 @!@!@ -Model checking completed. No error has been found. - Estimates of the probability that TLC did not check all reachable states - because two distinct states had the same fingerprint: - calculated (optimistic): val = 0 - based on the actual fingerprints: val = 1.1E-19 -@!@!@ENDMSG 2193 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(0) at 2011-10-26 11:01:18: 0 states generated, 0 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -0 states generated, 0 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2194:0 @!@!@ -The depth of the complete state graph search is 0. -@!@!@ENDMSG 2194 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished. (2011-10-26 11:01:18) -@!@!@ENDMSG 2186 @!@!@ diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_3/CarTalkPuzzle.tla b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_3/CarTalkPuzzle.tla deleted file mode 100644 index 76a08862faa696fca1a265d106bff02d6a1c70fd..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_3/CarTalkPuzzle.tla +++ /dev/null @@ -1,158 +0,0 @@ ----------------------------- MODULE CarTalkPuzzle --------------------------- -(***************************************************************************) -(* Car Talk is a U.S. radio program about car repair. Each show includes *) -(* a puzzle, which is often a little mathematical problem. Usually, those *) -(* problems are easy for a mathematically sophisticated listener to solve. *) -(* However, I was not able immediately to see how to solve the puzzle from *) -(* the 22 October 2011 program. I decided to specify the problem in TLA+ *) -(* and let TLC (the TLA+ model checker) compute the solution. This is the *) -(* specification I wrote. (I have tried to explain in comments all TLA+ *) -(* notation that is not standard mathematical notation.) Once TLC had *) -(* found the solution, it was not hard to understand why it worked. *) -(* *) -(* Here is the problem. A farmer has a 40 pound stone and a balance *) -(* scale. How can he break the stone into 4 pieces so that, using those *) -(* pieces and the balance scale, he can weigh out any integral number of *) -(* pounds of corn from 1 pound through 40 pounds. *) -(***************************************************************************) - -(***************************************************************************) -(* The following statement imports the standard operators of arithmetic *) -(* such as + and =< (less than or equals). It also defines the operator *) -(* .. so that i..j is the set of all integers k with i =< k =< j. *) -(***************************************************************************) -EXTENDS Integers - -(***************************************************************************) -(* For generality, I solve the problem of breaking an N pound stone into P *) -(* pieces. The following statement declares N and P to be unspecified *) -(* constant values. *) -(***************************************************************************) -CONSTANTS N, P - -(***************************************************************************) -(* I define the operator Sum so that if f is any integer-valued function, *) -(* and S any finite subset of its domain, then Sum(f, S) is the sum of *) -(* f[x] for all x in S. (In TLA+, function application is indicated by *) -(* square brackets instead of parentheses, as it is in ordinary math.) *) -(* *) -(* A RECURSIVE declaration must precede a recursively defined operator. *) -(* The operator CHOOSE is known to logicians as Hilbert's Epsilon. It is *) -(* defined so that CHOOSE x \in S : P(x) equals some unspecified value v *) -(* such that P(v) is true, if such a value exists. *) -(***************************************************************************) -RECURSIVE Sum(_,_) -Sum(f,S) == IF S = {} THEN 0 - ELSE LET x == CHOOSE x \in S : TRUE - IN f[x] + Sum(f, S \ {x}) - -(***************************************************************************) -(* I now define the set Break of all "breaks", where a break represents a *) -(* method of breaking the stone into P (integer-weight) pieces. The *) -(* obvious definition of a break would be a set of weights. However, that *) -(* doesn't work because it doesn't handle the situation in which two of *) -(* pieces have the same weight. Instead, I define a break of the N pound *) -(* stone into P pieces to be a function B from 1..P (the integers from 1 *) -(* through P) into 1..N such that B[i] is the weight of piece number i. *) -(* To avoid solutions that differ only by how the pieces are numbered, I *) -(* consider only breaks in which the pieces are numbered in non-decreasing *) -(* order of their weight. This leads to the following definition of the *) -(* set Break of all breaks. *) -(* *) -(* In TLA+, [S -> T] is the set of all functions with domain S and range a *) -(* subset of T. \A and \E are the universal and existential quantifiers. *) -(***************************************************************************) -Break == {B \in [1..P -> 1..N] : Sum(B, 1..P) = N - /\ \A i \in 1..P : \A j \in (i+1)..P : B[i] =< B[j]} - -(***************************************************************************) -(* To weigh a quantity of corn, we can put some of the weights on the same *) -(* side of the balance scale as the corn and other weights on the other *) -(* side of the balance. The following operator is true for a weight w, a *) -(* break B, and sets S and T of pieces if w plus the weight of the pieces *) -(* in S equals the weight of the pieces in T. The elements of S and T are *) -(* piece numbers (numbers in 1..P), so Sum(B, S) is the weight of the *) -(* pieces in S. *) -(***************************************************************************) -IsRepresentation(w, B, S, T) == S \cap T = {} - /\ w + Sum(B,S) = Sum(B,T) -(***************************************************************************) -(* I now define IsSolution(B) to be true iff break B solves the problem, *) -(* meaning that it can be used to balance any weight in 1..N. *) -(* *) -(* SUBSET S is the set of all subsets of S (the power set of S). *) -(***************************************************************************) -IsSolution(B) == \A w \in 1..N : - \E S, T \in SUBSET (1..P) : IsRepresentation(w, B, S, T) - -(***************************************************************************) -(* I define AllSolutions to be the set of all breaks B that solve the *) -(* problem. *) -(***************************************************************************) -AllSolutions == { B \in Break : IsSolution(B) } -========= -(***************************************************************************) -(* We can now have TLC compute the solution to the problem as follows. We *) -(* open this module in the TLA+ Toolbox (an Integrated Development *) -(* Environment for the TLA+ tools). We then create a new TLC model in *) -(* which we assign the values 40 to N and 4 to P. We specify in the model *) -(* that TLC should compute the value of AllSolutions and run TLC on the *) -(* model. After running for 22 seconds on my 3 year old 2.5 GHz laptop, *) -(* it prints the result *) -(* *) -(* { <<1, 3, 9, 27>> } *) -(* *) -(* In TLA+, a k-tuple is represented as a function f with domain 1..k . *) -(* Therefore, TLC prints a break B, which with P = 4 is a function with *) -(* domain 1..4, as the tuple <<B[1], B[2], B[3], B[4]>>. Its output *) -(* therefore indicates that there is a single break that solves the Car *) -(* Talk puzzle, and it breaks the stone into pieces of weights 1, 3, 9, *) -(* and 27 pounds. *) -(* *) -(* You have undoubtedly observed that the weights of the four pieces are *) -(* 3^0, 3^1, 3^2, and 3^3. You may also have observed that 40 equals 1111 *) -(* base 3. These facts should give you enough of a hint to be able to *) -(* answer this: *) -(* *) -(* For what values of N and P is the problem solvable, and what *) -(* is a solution for those values? *) -(***************************************************************************) ------------------------------------------------------------------------------ -(***************************************************************************) -(* It's a good idea to check that the definition of AllSolutions really *) -(* generates solutions. The following operator defines ExpandSolutions to *) -(* be a set of sequences, one for each solution in AllSolutions. Each of *) -(* those sequences is of length N, where the element i shows how to weight *) -(* i pounds of corn. For example, for the single solution with N = 40 and *) -(* P = 4, element 7 of the sequence is *) -(* *) -(* <<7, {3}, {1, 9}>> *) -(* *) -(* indicating that to weight 7 pounds of corn, we can put the 3 pound *) -(* weight on the same side of the balance as the corn and the 1 and 9 *) -(* pound weights on the other side. For simplicity, I have made the *) -(* definition work only only when the solution breaks the stone into *) -(* pieces with unequal weights. As an exercise, modify the definition so *) -(* it prints the elements using sequences instead of sets, as in *) -(* *) -(* << 7, <<3>>, <<1, 9>> >> *) -(* *) -(* so it works if the weights of the pieces are not all distinct. *) -(* *) -(* The definition below uses the following notation: *) -(* *) -(* \X is the Cartesian product of sets. *) -(* *) -(* [w \in 1..N |-> F(w)] is the N tuple with F(i) as element i. *) -(* *) -(***************************************************************************) -ExpandSolutions == - LET PiecesFor(w, B) == CHOOSE ST \in (SUBSET (1..P)) \X (SUBSET (1..P)) : - IsRepresentation(w, B, ST[1], ST[2]) - Image(S, B) == {B[x] : x \in S} - SolutionFor(w, B) == << w, - Image(PiecesFor(w, B)[1], B), - Image(PiecesFor(w, B)[2], B) >> - IN { [w \in 1..N |-> SolutionFor(w, B)] : B \in AllSolutions } -=============================================================================== -Created by Leslie Lamport on 26 October 2011 diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_3/MC.cfg b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_3/MC.cfg deleted file mode 100644 index 58901de0c1b5a56599e21bb1293999874b09b456..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_3/MC.cfg +++ /dev/null @@ -1,7 +0,0 @@ -\* CONSTANT definitions -CONSTANT -N <- const_131986786702435000 -\* CONSTANT definitions -CONSTANT -P <- const_131986786704036000 -\* Generated on Fri Oct 28 22:57:47 PDT 2011 \ No newline at end of file diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_3/MC.out b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_3/MC.out deleted file mode 100644 index ca4ee15705c4424c35e7b40841848e916949f460..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_3/MC.out +++ /dev/null @@ -1,27 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.03 of 20 July 2011 -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running in Model-Checking mode. -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file MC.tla -Parsing file CarTalkPuzzle.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\TLC.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Integers.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Naturals.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module CarTalkPuzzle -Semantic processing of module Sequences -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2011-10-28 22:57:47) -@!@!@ENDMSG 2185 @!@!@ diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_3/MC.tla b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_3/MC.tla deleted file mode 100644 index 2dd201f2ee6d79070c15ee6f597be6c4e46fba2f..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_3/MC.tla +++ /dev/null @@ -1,25 +0,0 @@ ----- MODULE MC ---- -EXTENDS CarTalkPuzzle, TLC - -\* CONSTANT definitions @modelParameterConstants:0N -const_131986786702435000 == -121 ----- - -\* CONSTANT definitions @modelParameterConstants:1P -const_131986786704036000 == -5 ----- - -\* Constant expression definition @modelExpressionEval -const_expr_131986786705637000 == -AllSolutions ----- - -\* Constant expression ASSUME statement @modelExpressionEval -ASSUME PrintT(<<"$!@$!@$!@$!@$!",const_expr_131986786705637000>>) ----- - -============================================================================= -\* Modification History -\* Created Fri Oct 28 22:57:47 PDT 2011 by lamport diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_3/MC_TE.out b/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_3/MC_TE.out deleted file mode 100644 index ca4ee15705c4424c35e7b40841848e916949f460..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_3/MC_TE.out +++ /dev/null @@ -1,27 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.03 of 20 July 2011 -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running in Model-Checking mode. -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file MC.tla -Parsing file CarTalkPuzzle.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\TLC.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Integers.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Naturals.tla -Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module CarTalkPuzzle -Semantic processing of module Sequences -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2011-10-28 22:57:47) -@!@!@ENDMSG 2185 @!@!@ diff --git a/examples/CarTalkPuzzle/orc-solution.txt b/examples/CarTalkPuzzle/orc-solution.txt deleted file mode 100644 index 6c81261a12236f52a5d6cbfc7a6c4c59a04152d4..0000000000000000000000000000000000000000 --- a/examples/CarTalkPuzzle/orc-solution.txt +++ /dev/null @@ -1,55 +0,0 @@ -The following solution programmed in the Orc language was provided by -Jayadev Misra (email address lastname@cs.utexas.edu) -on Wednesday, November 02, 2011 8:04 AM - -It produces [1, 2, 5, 5, 27] as one of the solutions for (P,N) = (5,40) - -============================================================== -val nw = 5 -- number of weights -val n = 40 -- number of values to be measured - -{- Enumerate all distinct nw-tuples that sum to n. - - Each tuple is represented as a list - - the list elements are in ascending order from head onward -Below, for(i,j) publishes all k, i <= k < j. - - enum(last, remsum, k) enumerates all lists in ascending order - - starting at last - - adding up to remsum - - having k elements --} - -def enum(last, remsum, 1) = [remsum] -def enum(last, remsum, k) = - for(last, remsum/k+1) >x> enum(x,remsum-x,k-1) >xs> (x:xs) - -{- psum(zs), where zs is a list, publishes all values j where j can - be obtained by multiplying each element of zs independently by -1,0 - or 1, and adding the result. --} - -def psum([]) = 0 -def psum(x:xs) = psum(xs) >y> (-x+y | y | x+y) - -{- check(zs) checks if list zs is a solution; it outputs zs if - it is and halts silently otherwise. - An array b of write-once cells are used. Counter c holds the number - of distinct values in b that have been written to; once n different - values have been written, it outputs zs. --} - -def check(zs) = - val b = Table(n+1, lambda (_) = Cell()) - val c = Counter(n) - - psum(zs) >j> - Ift(j :> 0) >> - b(j) := signal >> - c.dec() >> stop - | c.onZero() >> zs - -{- Enumerate all tuples and for each check if it is a - solution. Stop after finding the first one. --} - -Let(enum(1,n,nw) >zs> check(zs)) diff --git a/examples/DieHard/DieHard.pdf b/examples/DieHard/DieHard.pdf deleted file mode 100644 index 4524db13d910b535da73eabaf9e9f222e8202946..0000000000000000000000000000000000000000 --- a/examples/DieHard/DieHard.pdf +++ /dev/null @@ -1,1107 +0,0 @@ -%PDF-1.2 -9 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F1 -/FontDescriptor 8 0 R -/BaseFont/DOYHVL+CMCSC10 -/FirstChar 33 -/LastChar 196 -/Widths[319.4 552.8 902.8 552.8 902.8 844.4 319.4 436.1 436.1 552.8 844.4 319.4 377.8 -319.4 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 319.4 319.4 -844.4 844.4 844.4 523.6 844.4 813.9 770.8 786.1 829.2 741.7 712.5 851.4 813.9 405.6 -566.7 843 683.3 988.9 813.9 844.4 741.7 844.4 800 611.1 786.1 813.9 813.9 1105.5 -813.9 813.9 669.4 319.4 552.8 319.4 552.8 319.4 319.4 613.3 580 591.1 624.4 557.8 -535.6 641.1 613.3 302.2 424.4 635.6 513.3 746.7 613.3 635.6 557.8 635.6 602.2 457.8 -591.1 613.3 613.3 835.6 613.3 613.3 502.2 552.8 1105.5 552.8 552.8 552.8 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 683.3 902.8 844.4 755.5 -727.8 813.9 786.1 844.4 786.1 844.4 0 0 786.1 552.8 552.8 319.4 319.4 523.6 302.2 -424.4 552.8 552.8 552.8 552.8 552.8 813.9 494.4 915.6 735.6 824.4 635.6 975 1091.7 -844.4 319.4 552.8] ->> -endobj -12 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F2 -/FontDescriptor 11 0 R -/BaseFont/NJAPIB+CMTI10 -/FirstChar 33 -/LastChar 196 -/Widths[306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 -306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 -306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 -525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 -743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7 -460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 -460 664.4 463.9 485.6 408.9 511.1 1022.2 511.1 511.1 511.1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 627.2 817.8 766.7 692.2 664.4 743.3 715.6 -766.7 715.6 766.7 0 0 715.6 613.3 562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 -511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 511.1] ->> -endobj -15 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F3 -/FontDescriptor 14 0 R -/BaseFont/RZXUGU+CMR8 -/FirstChar 33 -/LastChar 196 -/Widths[295.1 531.3 885.4 531.3 885.4 826.4 295.1 413.2 413.2 531.3 826.4 295.1 354.2 -295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 -295.1 826.4 501.7 501.7 826.4 795.8 752.1 767.4 811.1 722.6 693.1 833.5 795.8 382.6 -545.5 825.4 663.6 972.9 795.8 826.4 722.6 826.4 781.6 590.3 767.4 795.8 795.8 1091 -795.8 795.8 649.3 295.1 531.3 295.1 531.3 295.1 295.1 531.3 590.3 472.2 590.3 472.2 -324.7 531.3 590.3 295.1 324.7 560.8 295.1 885.4 590.3 531.3 590.3 560.8 414.1 419.1 -413.2 590.3 560.8 767.4 560.8 560.8 472.2 531.3 1062.5 531.3 531.3 531.3 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 663.6 885.4 826.4 736.8 -708.3 795.8 767.4 826.4 767.4 826.4 0 0 767.4 619.8 590.3 590.3 885.4 885.4 295.1 -324.7 531.3 531.3 531.3 531.3 531.3 795.8 472.2 531.3 767.4 826.4 531.3 958.7 1076.8 -826.4 295.1 531.3] ->> -endobj -18 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F4 -/FontDescriptor 17 0 R -/BaseFont/CNGBQC+CMTI8 -/FirstChar 33 -/LastChar 196 -/Widths[329.2 550 877.8 816 877.8 822.9 329.2 438.9 438.9 548.6 822.9 329.2 384 329.2 -548.6 548.6 548.6 548.6 548.6 548.6 548.6 548.6 548.6 548.6 548.6 329.2 329.2 329.2 -822.9 548.6 548.6 822.9 796.5 754.9 768.1 809.7 727.4 700 830 796.5 412.5 562.8 824 -672.6 961.1 796.5 822.9 727.4 822.9 782.3 603.5 768.1 796.5 796.5 1070.8 796.5 796.5 -658.3 329.2 550 329.2 548.6 329.2 329.2 548.6 493.8 493.8 548.6 493.8 329.2 493.8 -548.6 329.2 329.2 493.8 274.3 877.8 603.5 548.6 548.6 493.8 452.6 438.9 356.6 576 -493.8 713.2 494.8 521.2 438.9 548.6 1097.2 548.6 548.6 548.6 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 672.6 877.8 822.9 741.7 713.2 796.5 -768.1 822.9 768.1 822.9 0 0 768.1 658.3 603.5 630.9 946.4 960.1 329.2 356.6 548.6 -548.6 548.6 548.6 548.6 884.5 493.8 576 768.1 768.1 548.6 946.9 1056.6 822.9 274.3 -548.6] ->> -endobj -21 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F5 -/FontDescriptor 20 0 R -/BaseFont/XLKDTT+CMMI10 -/FirstChar 33 -/LastChar 196 -/Widths[622.5 466.3 591.4 828.1 517 362.8 654.2 1000 1000 1000 1000 277.8 277.8 500 -500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8 500 530.9 -750 758.5 714.7 827.9 738.2 643.1 786.2 831.3 439.6 554.5 849.3 680.6 970.1 803.5 -762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 -388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 -298.4 878 600.2 484.7 503.1 446.4 451.2 468.8 361.1 572.5 484.7 715.9 571.5 490.3 -465 322.5 384 636.5 500 277.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 615.3 833.3 762.8 694.4 742.4 831.3 779.9 583.3 666.7 612.2 0 0 772.4 -639.7 565.6 517.7 444.4 405.9 437.5 496.5 469.4 353.9 576.2 583.3 602.5 494 437.5 -570 517 571.4 437.2 540.3 595.8 625.7 651.4 277.8] ->> -endobj -24 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F6 -/FontDescriptor 23 0 R -/BaseFont/BAFFOF+CMSY8 -/FirstChar 33 -/LastChar 196 -/Widths[1062.5 531.3 531.3 1062.5 1062.5 1062.5 826.4 1062.5 1062.5 649.3 649.3 1062.5 -1062.5 1062.5 826.4 288.2 1062.5 708.3 708.3 944.5 944.5 0 0 590.3 590.3 708.3 531.3 -767.4 767.4 826.4 826.4 649.3 849.5 694.7 562.6 821.7 560.8 758.3 631 904.2 585.5 -720.1 807.4 730.7 1264.5 869.1 841.6 743.3 867.7 906.9 643.4 586.3 662.8 656.2 1054.6 -756.4 705.8 763.6 708.3 708.3 708.3 708.3 708.3 649.3 649.3 472.2 472.2 472.2 472.2 -531.3 531.3 413.2 413.2 295.1 531.3 531.3 649.3 531.3 295.1 885.4 795.8 885.4 443.6 -708.3 708.3 826.4 826.4 472.2 472.2 472.2 649.3 826.4 826.4 826.4 826.4 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 826.4 295.1 826.4 531.3 826.4 -531.3 826.4 826.4 826.4 826.4 0 0 826.4 826.4 826.4 1062.5 531.3 531.3 826.4 826.4 -826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 826.4 1062.5 1062.5 826.4 826.4 -1062.5 826.4] ->> -endobj -27 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F7 -/FontDescriptor 26 0 R -/BaseFont/HFVFDN+CMR5 -/FirstChar 33 -/LastChar 196 -/Widths[402.8 680.6 1097.2 680.6 1097.2 1027.8 402.8 541.7 541.7 680.6 1027.8 402.8 -472.2 402.8 680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6 402.8 -402.8 1027.8 1027.8 1027.8 645.8 1027.8 980.6 934.7 958.3 1004.2 900 865.3 1033.4 -980.6 494.5 691.7 1015.3 830.6 1188.9 980.6 1027.8 900 1027.8 969.5 750 958.3 980.6 -980.6 1327.8 980.6 980.6 819.5 402.8 680.6 402.8 680.6 402.8 402.8 680.6 750 611.1 -750 611.1 437.5 680.6 750 402.8 437.5 715.3 402.8 1097.2 750 680.6 750 715.3 541.7 -548.6 541.7 750 715.3 958.3 715.3 715.3 611.1 680.6 1361.1 680.6 680.6 680.6 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 830.6 1097.2 1027.8 -911.1 888.9 980.6 958.3 1027.8 958.3 1027.8 0 0 958.3 680.6 680.6 402.8 402.8 645.8 -402.8 437.5 680.6 680.6 680.6 680.6 680.6 980.6 611.1 680.6 958.3 1027.8 680.6 1177.8 -1316.7 1027.8 402.8 680.6] ->> -endobj -30 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F8 -/FontDescriptor 29 0 R -/BaseFont/ZFHUDM+CMR10 -/FirstChar 33 -/LastChar 196 -/Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 -500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 -750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 -680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 -277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 -500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500 -500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3 -777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3 -277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 -277.8 500] ->> -endobj -33 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F9 -/FontDescriptor 32 0 R -/BaseFont/RURNMV+CMSY10 -/FirstChar 33 -/LastChar 196 -/Widths[1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 -275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 -611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 -820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 -666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 -500 500 611.1 500 277.8 833.3 750 833.3 416.7 666.7 666.7 777.8 777.8 444.4 444.4 -444.4 611.1 777.8 777.8 777.8 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 0 0 777.8 -777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 -777.8 777.8 1000 1000 777.8 777.8 1000 777.8] ->> -endobj -36 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F10 -/FontDescriptor 35 0 R -/BaseFont/PWFQLZ+CMSY7 -/FirstChar 33 -/LastChar 196 -/Widths[1138.9 585.3 585.3 1138.9 1138.9 1138.9 892.9 1138.9 1138.9 708.3 708.3 1138.9 -1138.9 1138.9 892.9 329.4 1138.9 769.8 769.8 1015.9 1015.9 0 0 646.8 646.8 769.8 -585.3 831.4 831.4 892.9 892.9 708.3 917.6 753.4 620.2 889.5 616.1 818.4 688.5 978.6 -646.5 782.1 871.7 791.7 1342.7 935.6 905.8 809.2 935.9 981 702.2 647.8 717.8 719.9 -1135.1 818.9 764.4 823.1 769.8 769.8 769.8 769.8 769.8 708.3 708.3 523.8 523.8 523.8 -523.8 585.3 585.3 462.3 462.3 339.3 585.3 585.3 708.3 585.3 339.3 938.5 859.1 954.4 -493.6 769.8 769.8 892.9 892.9 523.8 523.8 523.8 708.3 892.9 892.9 892.9 892.9 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 892.9 339.3 892.9 585.3 -892.9 585.3 892.9 892.9 892.9 892.9 0 0 892.9 892.9 892.9 1138.9 585.3 585.3 892.9 -892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 1138.9 892.9 -892.9 1138.9 892.9] ->> -endobj -38 0 obj -<< -/Filter[/FlateDecode] -/Length 2705 ->> -stream -x��[Ys�~ϯ��9e L��������ڎ��UU�$E �x9�������F$�#i��ʒKzq4����(�X��~�����w�ˡ2x�� ����,؏Ո%A���$�" �3)WE�W�_��A��$8=D$X�Ԃ�*8��_�)�J��}����H'#�DY�o���hW* -K$�=u+�L���KK!Y�gK6g|:�X���){r�|�� �d��q��4a��sp��us���_�1�%R����#L֩d�B�M�Z�2���B�Y�,�4��"T��SR)>�/`� �n���C����/LM=��b�WWT�4p[TUS���9}߯D�n�f�L����>j>��~�nS�t�9�+�G��GN�P��2,���VWqx^ݳ�Z�"�eh�h���7nvݓ���y�`�D����Q�� -@���4MvMu�W��JW�_��Y��T9oZ*�����v$�3�v���|�\����֞���:��#Ж�2��i������q�}kzM�+���X��C���詣�ݦ5g��9DW���i ۀ#��Q� -����� -"�o3+ߏ��C���+���ョ�����>����N�8�G7��*c���D�f���/���,U����t�� D�$�zP�{]#rQr�=�F�M�[��)O(��W���� L`1>�i���E{�jN�ڢ'�����5¨�\Ej��_'P�m�,�,� 6�h��;6L�?e��q������f3�����2��+r����F_����*Z�m�^��h���u�RYX�}������O|�'����:��3�c�3��n5v�q��(x�q.��q��P��$c���C�e�v6^Щ��5�������L|�¿���E�Zg�cAs;&�r.���Yj��Q�������g��Fy>ʱ���M�sL�Ck���`��;v3}�����3Q��|z&���cr`4 "�,�'��/&�AL���8IM8!����S�yEz��iOr��2^]��@���l,Y��,8Dg� ��G�^9EM��/�L�U�5�@o]���N�=��v��'$�V �Н��O�|�qr -y��8_�CYX�ah�~� "*r*s�T&.J�zL ���H���]Cg�*�ï��� أҵ��k�Jԕy�>K.���n�E��4�IN{���=0�M&��� 7�g�:w�k�p+L�HacL)@k4�Gۿ%��RD�|Ư�7�PjW��똿)�N���g����Ͱs�Z]��°<�P��.D�W��d*�{�ꆮ�j˓�Sa<݈��Eʸ�5#c�M�;��p�wp�xD!���fĤآ��K>; ���0��#y��ܒnNݶy������������VRWU�ۡ�j;" -�Q�X�*�鞀KߢM�\.ﴐW�,w#p�O8v7 �g�'�Og����:�$ �����5&3EB����� ��!����t�A��I6�Tqe��J�|�8oZJWEG-gCU�akk?+��$��K/��Y -l���k��H�#+������;M8�oC��'��#R�Wf�C)�,,M7B�Kc+L�7��&:zn���dPco@ߑ~(��l� g����F[-��f[; Oy�j���u��8O���BWfoj�YKeY56[��[<FC�v�H���ܧ^�n_�� j[唘~�ֹ��Ӻ�6&C`�.:�Wڣ����ٿ������j�Y�ߒ���{�Vۄy�� -gj�p�Ε�R�(�;u�p>T.h2��h�T���bDǀx�U�X��On[�����h��H�B -"��)�d=�|E��و�@.� e���@n>c�3�G��/�E�(?��R�-�$�yx�\w���!h���?f>���|��W�JQ��4�V-���Y��+|�&kJ���1�c�ek�me����i���hui�%DN�̙W�9��Q�a����1Rw�SZ����:q���l\��ޭ�<J^��^�����+�����N�\�^�M���\��G�'��EVcZտ}�?sD���u˞�ZNc�/>�b3)P�;�by�.VwPţ*��#3�o�Z�c��L_ -�RqW}����Z�>��Ji��&�����`j�Gr���*4١���Գ�+L:n&�2,6���f�ߗ���ҕN͵�L:�������D�'-To�1�}���l����TB�\�j�q�?Ӏ5A���4b9��5q���`8��N��(���@(S�tS��)�G�H����0B�獑����N1�cжm���AD�y/W�Q1��H�ڈ����J�t��9��R����\�Y'Ee�1.^�d�W3 -頲G�гE��،~O�)O�:���]2�oM��C8���֝�&�ڃ�MQ��pX��7-��qO5n��� ?$o�v&�)F -Q�/(�o��S�6"8c��l��Ee�%C��֧B�K����s�#��+�3���x�t�93D�~�+��ҍ�3�7����έHb�l��8��|˧��(b<w��tQ��1>�a�.���z���K��j< -�s��5b��yk����k��.p<N���Շ�d��6�c|ǹ�F��ٿ<�����)>����y�s^��#s�[���FJ���0>�˸#7�����3�p�@F�Y�-���?Bf��s�7]��ϥL��#�I>��|�x���VEe8�� O��'qFg��z����L�� -endstream -endobj -40 0 obj -<< -/F1 9 0 R -/F2 12 0 R -/F3 15 0 R -/F4 18 0 R -/F5 21 0 R -/F6 24 0 R -/F7 27 0 R -/F8 30 0 R -/F9 33 0 R -/F10 36 0 R ->> -endobj -6 0 obj -<< -/ProcSet[/PDF/Text/ImageC] -/Font 40 0 R ->> -endobj -45 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F11 -/FontDescriptor 44 0 R -/BaseFont/UUJCBO+CMMI8 -/FirstChar 33 -/LastChar 196 -/Widths[660.7 490.6 632.1 882.1 544.1 388.9 692.4 1062.5 1062.5 1062.5 1062.5 295.1 -295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 -295.1 826.4 531.3 826.4 531.3 559.7 795.8 801.4 757.3 871.7 778.7 672.4 827.9 872.8 -460.7 580.4 896 722.6 1020.4 843.3 806.2 673.6 835.7 800.2 646.2 618.6 718.8 618.8 -1002.4 873.9 615.8 720 413.2 413.2 413.2 1062.5 1062.5 434 564.4 454.5 460.2 546.7 -492.9 510.4 505.6 612.3 361.7 429.7 553.2 317.1 939.8 644.7 513.5 534.8 474.4 479.5 -491.3 383.7 615.2 517.4 762.5 598.1 525.2 494.2 349.5 400.2 673.4 531.3 295.1 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 642.9 885.4 806.2 736.8 -783.4 872.8 823.4 619.8 708.3 654.8 0 0 816.7 682.4 596.2 547.3 470.1 429.5 467 533.2 -495.7 376.2 612.3 619.8 639.2 522.3 467 610.1 544.1 607.2 471.5 576.4 631.6 659.7 -694.5 295.1] ->> -endobj -48 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F12 -/FontDescriptor 47 0 R -/BaseFont/RIIFBU+LASY10 -/FirstChar 33 -/LastChar 195 -/Widths[0 0 0 0 0 0 0 333.3 333.3 500 500 0 0 0 0 722.2 722.2 747.2 791.7 0 0 0 0 -0 0 666.7 1000 777.8 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 777.8 777.8 777.8 -777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] ->> -endobj -51 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F13 -/FontDescriptor 50 0 R -/BaseFont/GLGDJM+CMTI7 -/FirstChar 33 -/LastChar 196 -/Widths[368.3 603.2 955.6 880.2 955.6 896.8 368.3 485.7 485.7 603.2 896.8 368.3 427 -368.3 603.2 603.2 603.2 603.2 603.2 603.2 603.2 603.2 603.2 603.2 603.2 368.3 368.3 -368.3 896.8 603.2 603.2 896.8 865.9 822.6 838.1 881.4 793.3 763.9 903.8 865.9 454.8 -617.1 895.3 734.5 1042.1 865.9 896.8 793.3 896.8 852 661.9 838.1 865.9 865.9 1159.5 -865.9 865.9 720.6 368.3 603.2 368.3 603.2 368.3 368.3 603.2 544.5 544.5 603.2 544.5 -368.3 544.5 603.2 368.3 368.3 544.5 309.5 955.6 661.9 603.2 603.2 544.5 500.4 485.7 -397.6 632.5 544.5 779.4 544.5 573.8 485.7 603.2 1206.4 603.2 603.2 603.2 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 734.5 955.6 896.8 807.2 -779.4 865.9 838.1 896.8 838.1 896.8 0 0 838.1 736.5 677.8 707.2 1060.7 1075.4 368.3 -397.6 603.2 603.2 603.2 603.2 603.2 953.8 544.5 632.6 838.1 838.1 603.2 1028.2 1145.7 -896.8 309.5 603.2] ->> -endobj -54 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F14 -/FontDescriptor 53 0 R -/BaseFont/TCHEYT+CMMI7 -/FirstChar 33 -/LastChar 196 -/Widths[719.7 539.7 689.9 950 592.7 439.2 751.4 1138.9 1138.9 1138.9 1138.9 339.3 -339.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 585.3 339.3 -339.3 892.9 585.3 892.9 585.3 610.1 859.1 863.2 819.4 934.1 838.7 724.5 889.4 935.6 -506.3 632 959.9 783.7 1089.4 904.9 868.9 727.3 899.7 860.6 701.5 674.8 778.2 674.6 -1074.4 936.9 671.5 778.4 462.3 462.3 462.3 1138.9 1138.9 478.2 619.7 502.4 510.5 -594.7 542 557.1 557.3 668.8 404.2 472.7 607.3 361.3 1013.7 706.2 563.9 588.9 523.6 -530.4 539.2 431.6 675.4 571.4 826.4 647.8 579.4 545.8 398.6 442 730.1 585.3 339.3 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 693.8 954.4 868.9 -797.6 844.5 935.6 886.3 677.6 769.8 716.9 0 0 880 742.7 647.8 600.1 519.2 476.1 519.8 -588.6 544.1 422.8 668.8 677.6 694.6 572.8 519.8 668 592.7 662 526.8 632.9 686.9 713.8 -756 339.3] ->> -endobj -55 0 obj -<< -/Filter[/FlateDecode] -/Length 2917 ->> -stream -x���r��P��bq�'������lv�L�bW�ޤh��8#�)���n4@���l���/$��F���,��dv;3����??'[�2���������q�g�73��T�����O?E�m��o����/��]:�q���T�<��X��+.9 �:p3�yC�n�S��%��_��q����]Wvu��t��f���LĚ��pi��g����|��� �@k� ��\�C[<�m��/TmF�p��9�VaI���2��.ᰀ���~P�I̲�=�S�;r϶3�Y,\u3��x.˼��Qd�,�oE&�1����<ˢ�M�hW�y�SeY��jU6XS��|!��>4��Z�ql��2�i�-uԻ� -��W��<��5Պ]�_�M<_H���ۢڝA��Q[�v.�耴T*��,6��$Vg���Y,�������i���wl!d�dp��9�I�nx^v�c��2�L��z���}gv�'P��#���m�Gm�kK�w����e����W�f�înF zI�0�1�(V�qtB�W,��w+��,[��5T��6Z��c!S���3����K�S= �he2N�1�P�䶳�!`�u��� -i�m� ��eѪ���Z�\q���R��p�~]�-���YQ��p�\,���nS����=]r�:*G.@d �����I� f_��Po}C<Ϧ�� -0�aH��ӯ0Ǒ����'��@��<�#.jd�\%"3ҜYi�p�1Rg:VG�!����m����� �Y�,�?b�-m��)��`eCI�_E��|0.�@�P{�'�#�Q�O^��H� U��������%�@Ȉ�<��KT�5������A�Z����53[��>*���g�m���g%�U�UP���Pq��o�ˡ|)T��} g����[�&��3EW�:�NThǩo����+� {���_���i2��¶�U[��aK�6� G�l/���צ�A������2��ƃN�����$u>��Y�������p���'DzXO�Cq��)�O2g��V���O�,����pT��i7\��p�$Е���5�1c����v�ÔS���ba'��h��d�dr�|,ĩ[�ܴ��d��������4�E��T��_ڏf���s{�g!9�%�;�mj����(v(Y��6$ggY�}f��wh.�B��k���� -� �&X�5�&�0.F�ǰrN�j��C�f+�:o ��L{�5jD���%�/(:e��r��~[�R*��@�$O�I�hj@����Ц�y�`m� ����� ����,ܖp*��é�?�j�3 �oFBS��ŕ�A��q�%)�;��i��;��t�|�tG�/`�:S�%��c��9��T��/���ғG5u��o�y�sJ�z�!@-�"D�t1 E_�����E��|d�/�,qL����� ���G(ˆ��I�%} -៝ D*N��R5<�l��$���q���tΝ��:w/��q�P��,��:��xj�/hޕ���v_�mGSn�vF���Zb�Y��hЦ���}�(F�VL �s=O���=�5 -p�^�GjAY�~��3S0x⃘v_���0����s)���Q;bPCG[}�L��\h�$Ʌ�9� ���j�iż�(�џ�ݲ<g@�B=�/�⫪�VU��[Z�|��n���� -}�,ôn����/vn�X9���G�Ļ��@�tw7q��13��$���$,�$,s;x*j'���u4B�BxGܳ���`qp/'R��(����yi�#t���a"�9LX��dtS7[ԑ�M1�r:Y��+����ܧ���>�g�/fnFʽš�$E���eg�8� -���)w��:���yk��̕sw3X2�f�����v�Z�%�1����簩�~���"���Lݙ�#���jlF��<�Z/��^���X*?��<`UZ�h:�^�R��p�z̚�^��V1�C(�ѕ -w���+���i��,v̰������������XX:X�� -��j�O��*��С�)�m���m�� �6�y'X -w�^��/ -��d��3k�]b86�v-���ßF��8MG�4�g͟�aN^�- ����v�G�&}X����o'&���o�Ddǂ{��3��R�����2A���I��d��8iƙ�F+(1���@��X��kA>bu<���J����̮���ݗ6�R@�O -��4V��4� ��:V���n��̰��CǶ,�CSR�>�y���Q��������z���_[�xh��p�w1�$����koҵ��pm�`Aя@Q���QI�}5�MT�@�h�lXo�$��c���5����R�}�C�[hMYt��&?Aw���Y��j�<�R`@�<��|C�������,�C;��]�(q��]9%���_����@9��EW���ꜟAzה�jI��`3��1z��'�t�{���C�O�+G����j���>�G� ќ`��K��i+;���H���CZ�)�� ��d��x���Ȫ^�S�U翸�ϔ��]�%�эy $II��6?$͓0|z�z�i©�Y��8���G9)K�u������p���NT<\��.�o�wz��i���4UA��P��N��̍���N�/���=��B�����N��K�G��?��*���O�M�,K�i���hˈ�76�K�݊f@���������7 ʁ� *{�7Dc�e]��ʢ�=��&�94��cLT�)�g��o�۪A;����0� ��*z[�i�MI�2�m��azK�Z�,�j�^t�Ͱ�-����ap�����,9I�߮��n�� -��÷nG�eȯawz�q�#Z�����%*�l�8"� v !�g��:)CӾ��^�خ#���o���K� -endstream -endobj -56 0 obj -<< -/F2 12 0 R -/F7 27 0 R -/F8 30 0 R -/F9 33 0 R -/F10 36 0 R -/F3 15 0 R -/F4 18 0 R -/F11 45 0 R -/F5 21 0 R -/F1 9 0 R -/F6 24 0 R -/F12 48 0 R -/F13 51 0 R -/F14 54 0 R ->> -endobj -42 0 obj -<< -/ProcSet[/PDF/Text/ImageC] -/Font 56 0 R ->> -endobj -8 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[14 -250 1077 750] -/FontName/DOYHVL+CMCSC10 -/ItalicAngle 0 -/StemV 72 -/FontFile 7 0 R -/Flags 4 ->> -endobj -7 0 obj -<< -/Filter[/FlateDecode] -/Length1 1006 -/Length2 3713 -/Length3 533 -/Length 4395 ->> -stream -x��gXm���]�ކ)I�iҫ�R�@( �H�E�ҋHQE�4A�"ҥ+� ],�l�}އ}����~�kg���������s�5 s u8���A�$��PE@�H�\ -��:H�pơ0hMgB��`P@�@���������h`|�(7w �!�+KP�F`Q��h����&��:{�W ��^^�ٯ-��3�5�����B8�� �Ph:�/Wzh$����}�Z�C`�}"D����%�� -��$�C�� z���o\�S\��e���K�O��-����)o<��0p��Tk�wF8 -���U=���U��� B�k�(n�¹�Hg�k��q�O�����ּl�ke(��X�,�8��8��� ����п��",���C$!(1�x�����rZhW�v�d��g,�9��x��$A� ��3X����ĶH���L��;� -�!���/�B �~��q��0���`�(�Q'���ua���o$v�>��B�HTƞ@��(�q'��B�H���7J~���%!�XKBJ��A��< / ��y�h�/�� �B ���QW<�@�~'���#Q�Ӄ@�t9��(ҫ�b_��������G���`*���C�K�E����%-ɘ���{�����>�ԝ���s�����j��Q�b�,�r���Z����~��ː^��@����iQ'�E\P -� ��){��쿋fܨvڦh�h�d�e�)��d -����/��O�J�j����k -�:�0&�ϝ$i�i'W5A��P�� ����)�ƨ�9�C),������G��-.����V�G;�wgϧΰ�|����P;�zp�疍�'��Rsc��6e���^\ą����b���zRr�����6c��[�NOy�]A]s�Y���W�^�����������+wEzlM���~|���Z�p\e��8]�D�2��I�(+�G���3�6@�:���zDi�ɖmY�������4�q݃-�#S�k�% -��3f�;խ�.ϔ�H�ux�b��k���X�E?�m:�h�5��I��\X#\�t��x;F�Y"i���ԡ�1��:��#��Fu�� -9YO����מ?Rj�-;���3]�f*�}��S���P���R�z�v�`j10:��´�\�>�ѩ*4�O��,����:M�h��݉���+-ط�.��ߵo�/��y{�斊�4��sz�e(��^��6��^��hX�O��ge�/2�^��r�u��x)O+��[q ��W�y�����?��w%�L��C�<g;�<R@���c1V���|̷���@9��Z*���:Z��~+d��س�*�q�Õ��EE��F:���$i 7��Xl�fw�/H�$�Tϒfz�V�1���]�9��)S��f�ζ��{[��V��=sV�a��MK_Ϯ��ݠ=p�͐���3�Z/�� ^��ހ�'˿�c �u�?���e������ ~�-=�y�A������9=���L�n�e`�k�Ng[�~d���w�|ol�I��D-X�7MOj��_��f�������YѺ�k��T��X��u9Ɇ����Zm���'B⾼���̫��B�%L�Y�ySB�&<�k�u�n!��V$0��V���[7;�$q-|�m�^���+ڠ��|��� -u�B���@�\p��Njo*������2N{��Y�z�ݐ��(�LL�·�֩�wv��%J ;����o:R��I�����@�2L��.�ne��Zi�'E^���p�(v����ǎN�>i�p�'M��;���tA1�R�������A)�-�l�Z?)�Q�e|�7S� -��h�c�=1�GW���Դ }̥�n$ܵΡَ^���-�RSm��I�w����ڷ�G��d������<�]���/��㌕���$,a���(Ŵ/��K�37��r`O���cX{J�S��:q��|EW[���<�V՞�]�z��jɵ�㓾�W���2 �'���:V���]*_ںU��7SG<άՉ5�n�~F�����E|g��fQT�\9ov��)�˱�� -�UQ��[���w�:�����"��Skk^�3��h]�^�`j�Ry��m�yڇ���|�Nv����`;k��Xl���ċ�C�J�k�v�&�X��"+�ϰ�5��|����ñi��W�P?`s�M�e$���s1�z��㮛���<:�s�ył�# ����uM����W��\s%�WB��`ş'�?$�l��oO:7Z�ޕS]��A�~�f30P]cJ -�i�c�%��>�#�zfg�A_�#]��V�����<��A�e<Q�E��M�)I^����B?>�_A.~q�46��E`s)����uF�Zq��� �i�,�w�2�J�=��a;�Q�s�`h_�әa�fbf�EL����od���B��q��*i2(��U;���>����) ;�=���J���ӟ��0�����t�9�������~y���N�r��A� Kߏ;BG�4����-�~�:�Q�*@x������Y��?u�MQu�T�=�9R�9S -�� �/O�]��+Jcu�������i� �.RNi��v�t}�ݪm��,��2��������9-�C�_��Í�6�{�|��7ٌ����ܷ J.`>�-��q�a�麃�l��?�j�(�xz�N��8_M�3��C�|� R�F���X�-ԕ��ϫ��Q��@[�t��}�N��w�UTMK����JS��;]�&� Ԑ�(���Y_�.q�|���Y�0��K�I}�a�H>���br�Q�ǤJ���6O�;�<7C�Ԥv�\������沙�NT�Z2�iV{z}���<��39{���,��7.U�CH^�ڌ��/upW����ye �`cJUp�v -2�(��1{�`��lD�g��]8%sEe�������U�]��,�N���NK�ۢ���n�V�c�w�OH|��3}]Q�nk���s3� �+�p���T�kBKV�W�X{��֍iDeU��}}��5t������pf����e��Y^xqf[�f�Rn����G�J��'|���O�������� `)�w��t!����H��^[� ��gwIU9U���%��^���?i�?I�WLO2A�������1��z:Q*��x��+(���m:vV����>�Yʮa<ͅ!~�1�]{�4�U�=T�����y���C�v�7�$k���_-��W��G�n��~U�i����A�)d8hJ��ގ�������V��n(��A�Rf��O�S���6��5R�+��ȭ9�rb�'��s�1��v����Dm��[��d��b���Q�&M9����lx�%��O�G�8� E�*/4GjW�\[j�es9�"v�1���^���nGc�p��^�YL��Q�̇���/V�#�$��� ��r� ���a;��J���ꥋ�$%�/�N���H��(�.�}�+f��7n�I��'8�S�}��ࠑ��r��5U�=�O����3k�`���r�`ܛ�n�?J��Q��H�.�m�>��`��sL@M\��ҙm���ա�nT_Gd�v4ӓY����p� ������J�q'�*���O{��S��zS/5D�=*����P�'Ėq;��r�� -X�[����f��v����ڹ�]|:s}����������V�f�~���z���3�S�9�,ξr*�&��]��>��Dz@�Tx�蚟�0�^u\@I���s���Oϒ���5Q�)�F(��Gr�$�dWl�����nƚ�d��S�d��Z�,� r�o��&�����WA�]�|�۾���/���G�����&"�aQQ9=7��,eN�Y�jʒ��LaD�-�S�P��w�Lhy�^��_�J�La�t2_jj_>����j�T�S�|�܃� C���(q-�K���; / �:����N���?Zf;��l� ���5H!��@�@b닿�@��A���5,�^ g8~� �<�'�aM%��6R��Z�0PSc�6�2��|��9��|��C}��k��A��g�H�œ6qZ[�n�o��Iu� A{��e�B�e=<,)n9>i�}"Y �:��ղ��"�*үnE����=gq��}�RE���c��kf�!�&�,�]��Kn{�$:�Gzq� �S�M�w|�(��ih�X�M:Y�#t�d��B߲^h�)�J�0eg��Y��f� '+���#tL�\n���:P�NBV>�~�"�#)�d�I�·�`<I�Y E���C���3o�j�B���&c4amfϱ��|�IK�y����� W/�3��v�z���J�D -endstream -endobj -11 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-163 -250 1146 969] -/FontName/NJAPIB+CMTI10 -/ItalicAngle -14.04 -/StemV 68 -/FontFile 10 0 R -/Flags 68 ->> -endobj -10 0 obj -<< -/Filter[/FlateDecode] -/Length1 1225 -/Length2 8175 -/Length3 533 -/Length 8961 ->> -stream -x��eX�֦q'H� иӸ%�w ��n�qw�{Bp �'��Cp � A������93�sMU��{�����Zo#��6�n����<\<��UEn�7�4#�����d�`Q���/@l�x�x� -����0d�Nk�E���,!���4�T�6`裈��=@n #<���){{��_�8���`'W0�����X"�`k��-E� ��0��ῗ\�NΏ��,;e<��a��� -��~t�l���?��]���̡��ݬ�e� -����8��v��A`'����eN��@�sUan���Yۃ�<�\����C��!�`�ai�2�w��@������)Ii(J���t���a�!t<���?�3�~��`���f����������������s''s�Ǎ�H�/����\08���ck|�Vp'��+(�J�� ��H���7 q����|����@�?��*�!�P� ��豞�z���o~���C��:���4�C�*�Q������h�������"���G��ࣰ�?�Q�G -�������9��;�9����>���?�ц��}���|���7���PZ����#�����˅ @DP���ԅA]����nnna^ΰ�.NN`��?���o��<~`�;��_[S��e���̴��%p�a -�)ɋJ����*����A^���t�0��C����L�5g�א_�\Md���˼�6�l_��M�|3%� #|?��#F���y�����O��Էڼ��D��3�u�K���"�+�ט�p���N�O�nC�,��lwc�� FƖ�1ƃZ��И|����s���c��ڂX�A�5�;��x��s�eQ�J��4�0gܵ�{�����J��;n�D.�W�m�>��Ŝ�z>�ƕ�>�*of����9nh(�r�ҷ��WQ�kOz4��2���{��P�Q�*��*��W�9�>N���j=�Zx�X���zf�y�����d��i?l I�ާ������i�,�顋���r�j4@�� ��IF7+�wc�XI������fuUR$�3&�ۘ?� -����~f��/���QƂ�ѕq��-hP1]'��M��b��nf�B�,������� ��r6���G-�薶={�g3��M�С��61�6���Mq��JX9|t��jE�r�3��ڤ!#~�߽g$,���W�O����ࡧ��?6mv��x�:Q[��a�ifu�������IB�)a�o��?��:�'@��~]�@x\���&�=8�X��)��,�� BH��S�O�k�3�㗲�����z�!��Bޔ��~ṅ�up�`�l�3c��n�ur�w�(N�\�o�G��F���._~&@i���j�$��#T�[f���\T�F"�{��KC;wN^�*MW|APK�^�V0Ӡ�W�2����m��gX$)& �.B�?1���zM�J�@��Nk��[.%Wh[ðS�[o��L��a�s�8�JB + o�}S>1�u=3��+3ē]���O�:Vq���7�����zM]j��5S�a��4��Y��j�J����-�=I�)�)�{����>Mj�>��� 9+��Ǿ��p+��h%ؘ������"F�<y+z���z���e9��G%IO9'-����×_[�_�H������������K^i��t,�ٟB�� �Mߓ6&�ٗ\vf�^z/ X��Tq?A_x��MP�0K�[��4�)���ȊY�V���K�<�wt욎.���\� ;e,��{�f��︖�q2����n�6g:��F�=#s��^��,Ӻ~�I�w�5�\OJ�D�'N`�w��⥡��1 w ��� 6�|�:�\7$+.�Ҳ�]n���庤�0[+���D,{��y�6���^�M��1+Y����"Ai�.��NJ����y7l�[�}�� :�<�I�֕"g��'���v�R����S�A�:����5O�Z.�o���H)?�m_֛��O�O,n[�CzH���L�^�8�b�̞h=J�# �e�����k��� -�ɚ����%�6�Yr�E�L����l�^_�̀�~�ɽ��ځ�\��41�XJ%�L�PM��İ`{Ms���/��)/ڼ�������-7����a��bڽ�S�H5����#��"4އϽ:��NDF2d;��e�fs)XG=�B�P=�Eu����\��̛�Ӟɨ����@ry:�/�|37E�_2;k-{�d���G�� -P��t]�����7y�s�!�������a���%J��G�t�։����Nicfp�xe�\ۛ�k��`�� F��<��,�%A 1��t+7���*����JZ�tz�¥��JA��z�^����mߡ#%=�~��s�ګ�����%���Ș� ��^���ۂ��C�<�23���z�B�i��iV�$�S�rM���ؐx:�|�ud�FR�b��[�e�C[u:ZB�aC�����#҃c��2� �+sRT�*�������^c -Y�n -Yo������WW�P?G�Z��|6he|�7�*:���S���B�s{}�6�����wM����1p%��a-�9@%�}�TJ�[(��e��[�P�O�a����1��W�� -��&=����>+c3U�'U��*� �u,��QW����������{7[̔���[���2�]f��7�{ �����g�]՚&pn� �fs�|�L�k�7S��Y/�搈㚭�*��3���������]�իW3u]���j�e���G��#,f�yٹ����}�8��L�/�y��[��uNho̩�!�:��%1�Ǖ���>�?e� -�g�2%�\����5�*e����o4\6� �G�iX� �0�fHL�~v�1�����p�.�e���������w�A��^䓢��QT�?�+��r�+���V�K�)��ֵ��T�%^�Ӑw ���tU�] Ǩ��|�.NN���ē���$gJ>v֎���Γv$BJ%s�|���m#�?�U�un$)͍pw|x��fO�x���K�Q���F��Bj:�U[���i:��������o�X �D�2��<[�G�=�&^Qλ����_����L��8��hD�)�m����Mu�w�Ct�����"]({0�A~2-M ݄��0C�]_���*���X�4�,���ގ�b{$��.> BE� -�\4ť�V�v��P����aj�y�,)�>�Q�<�<ͱ,p˘$����k�~�F?Õ���9�����%��A(i�#�5���@�N�˔��Lr���љ��8GS�Σv}�8�T=wnh)�R �Q�;�c��~Z��{�PL{ܐ�˗�;` ��3�֒rA�Z��A�/<�Դ���dKZ���k�B�����0�� KK�f�m�gc���B�S�[%&c��H���f�V���]�]��{L���K_J{� [UJd���f�Cs9�t5�����Mӱ/�Z�S���Q�;��^_��;&.,e��g.�� -���̌W�mU�J�6Ѓ�+�PԲ���tjH~��m�9?Q�\j����Zv`�XJ�O����,��_��~o�G��S*d'�OD ��z�_��F�6DRu�\٨���b���#�������Wꌦ��X�C��y ��d�����n͢YBDV��H0d�B��,K�{�0W8�,��ogRd��K�F9v:�uO~�y�o���")(�/x�+2@�>B��ߠ��nD��ooM�N���<P���@.����aV}���Q��2��E<���L@f��E����i�k}K3��$���>b1g����� [&w�9n -'s�; ��2˹�R��;9�f�J��N��Ԣ����S�Z§o/c=�y��iz#��EJ����PVXhٔu�v.iG��~�}y�V4r핢����d)���S���I5�}��k�X&�fR����k�ǗT�01Ap��x�[vS�T�Ӎ�Y��!�{Ӓ{3� ۠��7s�"²<6���z'l��;���Ø`h���>�~�j�i�^)��� -���36N��ۋ��9&G�g�?қ����]y��(q�M%�f92��'��j��U�\M�*����g�Θ*iʋ8���Y��3�\l�1���y!��jW���<Ҍ�,8���XQ�]�T�E�5g���U��������o͔]���;�]3^�h�%ncC����)رM�՛A���+������EaY�2'�Gb�``m�;O3�H�H����I[i:�Ϭ�N�j��#�- l�Q��"ߵUl|�Zl�^"'< 'Aw�q�W��U�ɟ��P���M�����#�Q����2���n� -fy��O�� �F�A'{������,��aƉ��k�2�2�|qQ�"�X�sA�&�-��H{���8 -K4\��{� ��k��bPtyЬ���K2��J���� -%�J�+� -[k�˳<�C���6��d�����w�{_ 8�%�����]b8�� i�����I.~v�Lp���6*;;�d�[��C.w����u��D��{/W(� PQ��8$9���k�� -5c��/�^�f���H�F�p\:����ݷ�8��q�|�9ԅ!�@1�ۚ.��qM���H�S��07�~�؊S���>�(����`��z�NU��If��$%����c�[a�ڸ�*��Fn2�>?���MohK���[\�b����/Z�iN�3;iX�o���:��P,��|���fq0�-�?��zp�{���o#�}a�AE�=�%꠴�j -$�V�*Y[�==�"31-JV�c��/s��^ݵ�Ѱ.�U����������q��M]j�Xj|R��+��^��g�N -�/�H��WQ,��!vs�E�wD%�ˮ��{*���ɹ ���-�@�n%]�l,�:ͻ�Ӡ9}����Ų��C'd[�����PE���"4u���=�I�����Y*���M/O8�pX&��b�yE�x�����O�Z� -�s5��f���R�z�Z��D��c�-+��b�a`[�Y����<n&՛�\�xh�к!7�p ���K���t)�� nl��z�M�E� ��W��T*��u��ܚ�O$��,ʴ8�|��q�b�&��>��v�F��8m$a��tX� -��.t�A��5;[�����fH��_.H��m�m^z�:� ��ר.{|9ZV�%>����f��O�j�ɹ�|I=톀�j2�|����������n��=�E�L�����P< ��N�G��3:���#�p�� {1*T�4oΔV��|�R��t�+�[���>O�6�G�����p\����e�WQ�I4����S4`�Z�RK��K�V������M9��:��-�k��=���J-�v�!�̓�l��բ/��R��7�CMK��}W/��~�ֽ_����M%x3 A<�a�6pV��L��������9�~=�)�l�Ԁ['�`��y]�q��3}b9���C�(��T/i��9j����s�X�1����*;� p�6Ǡ�����ʔA�W�IΩ -ӳ�4>���C��2�{���� }BK����íSgq��-��aS��m��7%/��ܕ'�� ���m>��(�X����xLw��A��5c�F��o�x�Ͱ�V�n�˭��X���bLHҬ��ĺY2���۶ �h�H>S� -h�ai�2:�v*[,hS8u�iئ��BwI��Z����;��e,E!����o ;§a��m5�����L9�C�j���ϵ��ϕ�ΰ��\�p���� ��c� g���[*xB�r��/֒�*I5W -��`#���B� #���xD��D��J�> ���$�сO�����esB�a���� ;�)�2��\<��;1���<�S8��z��IL�]��V�i� �����E��L��+�����։ӉQ�*m�����?t?��7-�>4���S -U/0��u="��k\�^�����T�q�P0<��m�~��ĩ�ܳ�V7:j���%E5ٟ�.�� �Y��i�J�h�� �^��,*��2 ^p��t;Ԗ�W$r�0-7�SQ����pp�5�`3LG�f��I"��[!a����F}�/s��(��D0M�~Y+,��8����PL�� -���D���ׯk�Y�h�P��O�،�)���9����"��HC@�;�� -b���H�lPӈF�TO~s�����7�ء���"ڽ7/BꋖQ�^g3�E�P���}���]��7�6���eߧ���.�7�F���b�$C�^�"gI�|ݿy�wd��y-�%"c/���#��3�fh���/��dfw ���s�&S�J3�uK��0�*������T.������F<]���E�n�Gx0�x�P�-)ۏ�OGv�kI�*�&n2���pŚ$���K}��C9�<�w\�/�z�dz�d�<���F�#� - -n{�rq���-¡�1,l%Եq�IĒa���������~)m~1�]��i�|���!ƥ�a�oS0������4��7�T�P�W�O��Q�S������,Mw���M�{���#F��l������2��.��A�aGggpւ����4���)�j_�b�{�u��Db�;rf a��,��V �� � ��_�)� �<��װ�N�o� �Z��e�Y�A�3ԧ�?���p�)$��0n�!_�0h������� \��t4 �A �ۘ1p[���[QP�k��$OV�Z쮄�HO�ABX���I�kd�S�ʭ��n�o���*Of�akmcje:1�!������M��$`����}?�� �R�cA�M>����qeH6_<U)I��4��w�VQ�+�^����vYfJ�������2d��6QEg� ��}5�g6%ճD�J59̄���njھ�o&�ǁO -��F����bO�e?�/�ZR%e�L]c_�ѓ���+��l;�lϳR=r!z���l��&ݱ2������<�����.3&�P!�fP��c�}vX���~�$Cy|�V�GуT�σ:�HM�����b�p��~�!�K�NR�~:.�%W'A��zȸ� </���N����E���i��4��F�����eV�<��3)���J�+���F�c*k��˯/i�U���zz�6��iR���pVJS�����4ޏ\ܯ���Nt��}i����[�Z1s�^p����1������������_ �� B%o��{j�gȴ.k?�.nrbM6e��t@��F �4���M����3�����-��/xRl�7�B�1y�:?��@=e��G��T��k�ޤL�7Qml~�$/3��kҫ$cO8�0N�QI3�r#Hy-P+�#�� O�#"��8IEY9��S��Ɲ��<��\ZH��!I�������!�T���y�)��l�����@Q5�2q��8鷠��yca5� -,}��)�"�,B��0�g��F%�c��mK�*�,�,b�v]uDƵ_8�NXS^�Uo]���);*�(�/��;4��(�b��B�ג'��e�>�|}�=�gU��"�S;�ƫg;P/+���t�X�����6���G��rZ�܌�j��D��orct�-~>Q�*���+��������yk*�ŀ�o�y�N-_C}�?8g���j[(+�F��f��^5L��ҹ^���b�}%��ڭ{W#��{L�(u�Pȉ4�T�1i��d���y)�R�D��<���� 3$I���L�Da�&��gF������ f_�V���b(�PHJәSn3<A��pL�bRI(�J��~4�J�� 7ҍ7�u7˒�rǮ�:�G0 )��d�a�%n\/�����RϫT��w6%!r�`�1y���ƅ�y����m�*��:8u[���D���[��N~��IK�x����1��2��p�O`���!�����Z�rghIcC�����_�@3`<'9��P��{�H|JJE\�G^g ~��JH�ѯb��� -\1�v= ���G7s\�u����UR�K�qHMoS��.9���_�D���i��lt��;W��?�]3����M�k�gL2q͐��i2�\�V���j����`����c�Jl�Va�H.%�)������#��Zp�Bu�*P��X`@G�ҫR��f��J0W�ړ����MJ7v���7��hr�I(C�dY��J�UJu���v�!?���-��nBGZy�����(q�bO���G~��Ш��c���b���#�UG��Mk��6gd�^{fW<��Y�O�GZ�+�uIA�9P��Q� ^q�/���d�g*��9��Y|�@��wV(�{g�7X�%��XS��Um���K���U^�稼��[:�]]�����\�����2hi_n����G�̱h��y -��"�6����r;�<� �cyG�I�w�A]G>Ԟ7?���`[\�|"&�p��F�gӏ�ie�B�-�~�7vq���3�>л�F�آ�m�|9�pK�Y��e2.�kQ=Wd�&9\yӗ��:�/��^�q�-QL�JăUqm��l�&5�B�?r�ؑ��D1�}3�?��'܊:Ic�[�hzU�ӡ�\�V��{��#)��{�D_h�:6]c�SE��yW�F:5?є�ު�3d"B���a�WQ�{B�⎜3(#���r�������>���R�ڇ^x��+M��>��I?�Ⱦ�*Ҁ����^���&}c���G9�?�7Ѵ}J#֭�yl��{9t���:����&Sa*es��_�$}��ngg]e=6�<j��f���e�%�H밣f��.��x)r�����fG��ڻ Cl���PΡ���7!������?!`i6wB���Nv88���߀ -endstream -endobj -14 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-36 -250 1070 750] -/FontName/RZXUGU+CMR8 -/ItalicAngle 0 -/StemV 76 -/FontFile 13 0 R -/Flags 4 ->> -endobj -13 0 obj -<< -/Filter[/FlateDecode] -/Length1 1639 -/Length2 9710 -/Length3 533 -/Length 10658 ->> -stream -x��UX��֠�`A ָ�K����qh��w����Np���L�#;9矛y�n���wU}k����jrbezAc�!Pd�H�����U�030!��� �A6"�@�3773@����`��a��acBD$�l���M�T����Z�͍l���f@kp#+�2�������ZY��z��t��;�����F��C��� "�_J�6& ��?��N��r�;���T`Oj���dc�0� 2ʁ�Հ`��c����'s���3��+=�M�c������_� k['G�=@d���������͝��{T�����H��� -`�g��A��h�`�hd01�r��#�1�o p��������*�J�� �瘂��������Y���f����؛�������������Z�6F cs�`�����!������sc�+�� -fd�9��{�0�#���̜��F��b0[�ͬl�F;'�#����[����F�3��`�5��XM��2�+�_�Y�a+'��p9#����������h�;V���b�w4�GX���9�����P�?fp�U� -�;18������9�����o?/�7q��-����%~���og��M��F���)���-�����~���oWP�M�.��&p����������_N��m���&����3�61��j��W��@���v3�� ���1�{c���,�@��������`+�?l��V� ���[���`+�?l������@����r�������[����!$r��g��г�3��x&�';��NT�1�sJ��ؙ��8��yi9ك�-�������lb���@W�bZ�{sH=:���y���� -������YX�C?��`,B�,���"�>�V{��Fw�����}([Ţ1m��q�S�u�~�^���Ѭ�UK�����vi��h�q�O���4?�ݱd\�I�1�X��� -�c4/�"K�M��̈́��&�[���?kЫ�����l���FM^}������} >�I��~ -D�D�2��\��z���0�uo�݅�C�",O�y�ˍzb�m4آ��rm�iQ�+����v2�0���{=G�^if��u���T�)�ͩ���Y��;r��VlvO���.Ԣ�@|�� -/�|9;;'��=�Z(�C��WSn$� -ٌ��G�� 첥��M���숎�^Rg����q��r����J�܋>a_G�� ���� B,D���L����i"���%h/��OZ�ͳHy�9�F��Y��������5��4 )o��鳥%��u��>&v�(i<{U� � 7,G��H�� +ZЕ�%��Ԇ6�ѱ�[�|�Q�Π�����4-�OW��$g��d3��26.+-�3wl@�XL�/�\�.+�L��qr�k�����#����U-�������5y&��x�+C"��8�Re�-�Qq?�uU��H��#��7���y��xP�d�,G\MTY��U���,=l�'MY�4�>�ƽ��*q��2��"3���H�?�oM�������n����L�C�\�C�@<��P��[+�U�U�Dp��R8�!�!qM��r9Y��|o���Ƽ��S -�!nQ͚��S�wt"�B���`)~&�zd���p����$��EO�O��q�OT��E�$�Q�u|R��e�1��h�����dF��B�%*��o�J��>�BH�%]����p��/Jݕm�u���("�F�E�u�y�iN|Q�X���������$�/��8�^�J,f�� �)��LC������F4��I1�tږ0$�V>��L�3~�1'��r_Z��A~5���Щv�x�j ⇦=8O�B&Qq./h�F%1"���1T�����7G�������V�X�(�`��p��d�h&YkDwu6�́l�S���h�Qo��Fۘ���7�O4��ɽ�h'Ѣ&�Ob���h垩��[���V���%Y�bͯ�S�ڣy�{���sp�Hp�1��^A���1��� %��|N����ݥ�� C���+eե�Q�Jv���gl, -��2��B��6�w��Rb�,��Mi��5�*��,�[3��̛��L8�,C,E��w���`a��$�4��L�X!��9K^��UcY���I��i�7Ԍ�:1�yI� -�UI��t�Ӱ4�>'�Z�-ŗn�kB,�6��nZ ���i���a�̀����;餂�τ�3k�VcF8���?�U�IW�7Ǟ���Z����:Dm�(۰�̐+�X+1���ݿ�h9�Ғ��\m��q,�x�/�������BW��~������X[k�4:yʦ'VַŪ��i�jA/զ6��К���Ǥ�A��� bP�Qܩq8i�&�?�ܠ�A��so��!8~�J0��~]`Y7LR���=%�o����m -e���6��o0�����&4|�Lp��TC�B����(0b�D����0�#U��Sf�R^�;x)�l/���SMi@&^�p�g�m�����SZ~���/ -b|�S�f7��hQ���*���#]̺�D���~�2�m1��!��%S��m%�GaD60@��0jҍE��錅��Β�@�47"���V��a��*h+����l��V�2��� tU7�5�{U���8�g��1:�l/U��q�Ы�h�]M摪'n��g�52oղ�1���.���_E'wQ�R7�2�e/���)H�� �;7��d�_�IƘ�82�Ic~z Q�3����)��ֳu9H[`I�5��I/��f!H��O���� ����'[����!�^�_C̢��́�h���/<� �a_�^�<��N�/G��D�' ~Q �bC5/�Z�ۍ��픂�VT�wV��P�k������&��!��I��>������]�2�|N -j���db�?'G���&����S��?�3�?o�r�[}�2ľ%x#r�.3rM,�C���P�w�G{f�qH�R��p� �y��Q�d=�a><.������B�����;�E,�)�}Z�MړE���%<�Z���<��@�6�D�|*zn�La�$��l � ����S��;ܚ��!��ᡠ���4.8��bxHǦ ��`?�L��>{�>e��[o���Uq}�Ʒ���8���Dlo���M�i~�w�?bs� )ZΦFk�j�r���:S)NiO;X����]�tk��f��1�Hs���g�G�ەWq_V�_�U��d������]S^�'�� ���������1����ۘ��DSix�G��� -_3յ���M�QD� ���d:��L�d�3�畱�@��=cSY;�Tԟ��oD�=K=/8��@.�c;�����ڣ ��8�����G��A��dqd�g���+ -�)&��rZ��q�<C�X�ш%T,̙�I��/�M��.,����Ϗ�#�<tUʹ����y}B�_C��fC^�� ��No�U�]r�=Z: ��qR˵9��&��48�2n�w� ��9�������RwӁ�^W�3*9�pT_� -���j//�I(>�>�K��!8��@��°�B]5#t�Ɨ3�T���s�"�;~1��)�gj�;�]>*+Ç8zHS�,���⮛'B[Sg�ӢJQt�ߖH�-�O>�܁i�J-6=�������H+f[7" ݎ��kG��)� u����E���˵� L�0���+�f�$��ꂚ~@b)����&M��0vEdL'M�Ȩm�}�g��Q��#I�JO>��jm��\@M�X�祏ϵ�q�$����K�������u��ː?��L�<N��%_>4��F�p o� -�����eznO �F��| �8��E��Y%~�¬Hn���Ê��$"�2�P ��g�m�a��(��1|�t��%����s"q��~h�Q����ϝ�{ }�Z� -Gr�@��yɶkLe�B��r{R퐀.K�n��^uXSVƟZ�{�uE4$h,?��q*ޥҤ8�M-0��e8ݎ����w��ϊ@�U�t�ƹV'ճA�$R$�V��L̀�{r ; -/kǕAP���A��ahM���+���վT���M��"�yR ce���\�+����H@���%^�(�X[�D~�W+�o��e�c]����B���McN�-�Y2,7_�L��(d`ʺ/���F<K�������D�5���Nx� �l��\�N��$S��(��|G�*�#lʲ����D)���$d����2�&�����i��;���xH�O�}���휹���V�4y;x��F��k�\��Y3�� ��P�k4B^��2��q���7�����iezE���M �g�c��}�2�<'�@����O��2avFy�DwnyeϠQs�0�� ���� -���!���Q�!�cJ�t�(�PI�z��u{�Gi(��㙺�DRb�!���(�ԣ��2��F�vLx!G[�ɇ�ʯ��gp -��J�Cc<�f���%7�oB���9�]�� -�;;+!ܣ�b E������13��Zl��� -�+>f�%$��Y��E����� �l�W��z�Z��H{��|����3�+|�*�.���#�4���.7��$�#��J����X+��^����y���r��ss"V��c��p�g�m�:�M�*���T�p�µ'�(���Y\ڒ䲭�zR�wqGUoL-��sT�'�6KaSC��؉Yx���)�|!���'�ц��ؗ���}������J�a�2B��Y�Z h�6���]W��[Z1��*��}��"�yDG��d�}(�˅��#f�k p�2O�;�ΣSdb����h�6C+�"�~,'�<O�����p�7N˟��L�h�-�T��ަ��f��R�m�1�[#����s㈤�nb�-� �S|�A���tU�=,W���5it�o����9�+�QuΗ�� n8������b��Pg�?��Ru�v���2��M�B�Ȟ���|j�q�$p�F������*���j������|���M$�Ok��U�N6Mb�&�A퉶xr�oq�,�y��{?��I��5��o�v=ʕ��J�������²O���A�J��!�D^c��h/�s��lj�L�w�f��pѡN@H3� �(f��U�A3M����s=y5BBo�����R�VB� ���[e�,Ɣ�1�����h)U���BV7� ��l�3��h��^(nþ�]u��,���Դ-��k �!{�\5e�#��4w>"7.��fL��}�%ZZV��,���Ka��㙄����^���%��=��o?ۙ�M�=4k�K��}<��t��:V�9ͺm���$�"��O��.x��u_;�m�����ܟĠ$#���A� ����r�w���p��aP%�%�(�� x�D�> n���T)���C3,����H�!���j�������$u}՚��ʔ+��d�y㶐.�O���mN�AcV÷��dY �ex��/�/�G e�#�E;�������yf�v����|S%��Lǻ�Aۈ�W��C�".V�G4����g';9P���ϱO,�~ߎ�.��U$W����Ml_P(e����Ѫv:%�C�S���L</j�- ~DUm��^�|d%��A�-������/]"��Ɨ�D*Z�왡/}{i!q���і��I�Pr�g.�,(f���BL4*�=�ʩ膈v��4�~>��wp~��.-27����Bi?�9z� �Ke�]�;�LZ -R��)ص� ��"�� 4-H��W�pW?�+rV����$�2�N�:����,��,�o0�R�Nfq�mh�l���~�E_)�]{}9��fkD�-���(Fl�&�psH?^���''�v��v���[��.n��Z�ȴ�m���m��F�#�Y�gX�j�è�U��>�'�JJېJ:2*���X�b9�z�I)ѷ7 -��[3-��V^ (:t��خ���eB��f�߀t���ɺR��]�ź/W� ��Ĕ���{qo�rK�gsڈA���'è�Ȍ�j��:�Ȟ��tvn'�~�ȏ�Dj���j;�B-��6���0���2�{QE3ZQV���T -FL"�w\ڍP��K�9���L-gMN7iV�č��[�����&u� (�6�ۗ -y淧��D5��5�Y^��=ˤ����0^��5[�W^�j=� -c�rH��z�vX*�,Hm�I�����E������qs��q���o��<���<�����d{ʇ-�.��2�m4<)z���� ��aq��|ݐ�M�+�Y�� ����#̎o����Q�T������� r�i�^�|ӕ�͕1`�X�i����Le/#F+�F�I-�e��}m��?�Χ����T�.�>��U�Y��C c����z2t��֠1>��x}\�&1F��[� �'��U2�l6S�t��&BI�8�u�0�|�:�r�C�����b슚�e��]���,d��^��I��ǩ��ܐs��7���h����T�5�Fd���:*�Bm�w�ٱF���D5�]�)��J0��f�<C�p��p1�(L��9����I��*R�����G�����V����S�a�i�ag�3D�o��� -h�-�����=*]K��X�&��I�I�غHM�Cp�}5���A9 -@�`6���ctnt�NL�����@���K��f��Asek N�-:��� ��QK�V��Ya��(A�H�N�R:�xO*T���:Z�j���|��P-Y��*�Lh�"3��o�E�/F#N�d��w�!̂� �ߺ�s�M��U.���JFIr�Y�@`�,.�1+��QP��c�&WKQ��ؤs%��b-�cŕ���҂�(�!y����S������'j� =�w;Qq�6��<6���!������}軱.����n�@L���-�8�p��y^��5i���=���~�vG �v'����|��zn)%�V��Pf�v�,ܙL�t�YyD�G^@fD�נA -��.�w��6�S������ܻ�1���XIw��b�´�v���{�����Z�=���p���r>�\S�a��, ��%ި|�X���R�'*/ �%$U>5��L�� �E�mpp"O&'e���F d��e�.Q���.<�c�D=��.yMR�S`)kR�bA��y�-���5�|->gC��[���s̤�#5�EI��0��'n-4��VS'U����a�M4����>���p�ӢR�lv�2��j��2�/b--����t�6����F=�s�؞�#j&�'wK�gT1ʥ��Үi�qMwgS��M�"��lW&{WK��J�;B4�VvH�S�pE��i'���� P�2��F^�����t�Z(�_pt�����E0x��Ȉn����};F>s�L��[[�R��¤:������7M�pF+�yYr�lظ[VoB��¶Y��?1�����+�|�=���d~?�g��w���G��)�"�,�)BW� ��@�5B�K��IVҤ�7���n�>f��*[H����od?�?�l8�/�%p�muFS�$� l�)����� ��E��k˖��P�(�u�M�s��ɨu�k{���P�����&�E�uv�I�{�����r�{W*?ΊT���f�x���z -bW@Ъh��a�(�EJU���>2)��x�7��O���-��k���NaEGu�7�q�C,~�%� 8o&f;�ry<G8%1:�܁�/�B����۾y��?%59�W��K�*7>G{���}L狇v�{*~_r+E����8�U�q7�Su.��K�Z=X�R5)%��IϬ5�b�����z�g|n`'�[��il�YIVo�7�P�wPDO�+��j/�������$̾Oܽ�����,9ą7����}L�ϳ����-�U�|��� YE��n}|�.�^F�y���3�j�G�-��D�`��X(��P8S�7^ �5D��5U���fz_���&G�.侘����>tCS�xHS�3�(g�W5��M��pS -�ͣ�� -"'�m[������<]mM���%���Q�Y��l���z���eha5�R���� ���~yBɓ�J�Gj �ّ���]�Oݡ�W�n���ܽQ���%ҷ682<���BSw��d{�����7�쬳���}3���z8j��;�PSy������i�l� �����J5y?��.u�_�1&?� -�1�P�4[�[�ݙ�ʘ�צ���>�0ԣ���ݯ�,�����̉;f^�&� -���t�i�9e\Mo��~N��{K~f� ꍙ����<��;aqDWBON��Kk������l�<i����&3g4(�)x��B�_�2�H<]�� -�\�� �Q�q�(:\K�4�(j�u|�ҫ�R����j�}kc���Ցf�+����a�)y�E����wV������A@�=ϬԂ��+��i5�F�z��9����i�|$/.�/�J�(���.f�[�ӄ��2.k�6��+��VQ����(���I�')6t�I��E��=�8���ԃ&D��Q�uA�Y���P^�5�^�� -���]������t��s��C=h�}��贛 ��A�o39��NH�~���'!Bqzǰ �ؗ�%����b7���T��h����y��d�$&:'��0I�r�I�<a��i���B�� �(��u������W�g� >��[�ڀ�G_���:Z�t_kh�x���dR?��8��Hݼ����p�J?�yu�L����B^6����)�B|��Ek�������jY�h4{���k�ۖ:Ep ��*MR��@�`c1���;�.װb�p-.���\� ���1_W���}=�aV�`�)�9����$���q�)� 3<��� -j��C��6u�V��.:�L�m����V�۬�#�4DG�k�I0��Έx�(� ��w�U%��/�_�h���oN��� ��.i�ރ���Ҡ����C��e�m|��>h��DN�W���g5��c�>m�)�2o��J���}���Ji<ҥ�R86�q=�Cv|ҝ.��V#ޘ��"�+�'CY[B%>�K�<'e���>�;RqI�p�'InY�շ�&���k\��gëv�Sa<�aB�>H��c��7�� ��ȸ���ekW�w�2 �|3)�*�j����<�2A~������+��7���?����.���j��`cג�d�Uxo��c�C���9�J���7���������*�~l4pDgn��2q�=�㻳��ܸ�Fe�'٫�/�8�%ɴͱ��,D���+�k���hT�^f�Zc�,�֏���-�Յ53��p�'ݣ�hROL�ڕ� ��zV�7���i�o���~Rn�\�>vy�qR�Xn+:�=��Կ���|�X3n�S<!I����~�6�y���F�d_=��*� ����+��u���g�8:XE�U�+��9BA�n�q�� ��{.��U��P��N~Ũ� -Ⱦr�t�VÏ�{���U���]H}_y2\���+J�ΐr}(���Jj*?F8s -�l`!l�8�t�Wi Z�g�I���X�ӫ�B������%�nm���L���y�lҨ�N��ʉ��6�W�Ka��F�m��� ��tQ���Tt�0;��k�okU�c��ë -��>{���C^;s�$PJ�X�a뱅���q�:����~Wr�䋩a���Cԗ�w=�*��>�֠ C�I%�p�I�X����~d��}eWO�z5�Ip�i�i�IM)4�?euVf��S�mD`��N 1[W1�f��t�V���<�_����d]�u�F�"Y����O��fz9�gl� 4���j��n�a�v�:$`LJ*��'L����|��ZF���T?O�k@�0��M[�*S��y��Uһ��2=��{F��j�w�wJ�v�hq������VoQ��D���r�_�a��LDγru~ʖ����є�~��J�q�s^�5�EӴ='���J ��kM��=����;����� -E�������[�L��9�0��G$DJ� 9~�C�Y=���)�Q�����fU��F���f�^W}vi�Lt.�_��h���-Ĥ����̢ܣ0 Sh���ba�ծr��c�ހ>��?{�Ȇ̪e��ͽ�-�)]���Ϋeڸ_tf���ԇ�Lu` � U�|�����A���� UT�����G7�WdITwSWk�B1|�^��z�g�Ff߅�Si'�W[��í5��g�½�*���A��=��XLs[&�����'����$��JÅE�<�g���qV'A�~>�+�iS��i�P4�KKj��m�M���E��L�.I���s,0�om�*\Ռ �~�,�>@����a�}�P8�ri���|&8 �v/���z�N*�ǣ{`A�:f�<���Es��Z@v�Im���n�sF���d^Zx�܊���[��lNz��i=� �l�G_���������yY����t�.α<�C5�dL�Wd�X��Y���������tD �K��ݙ{��m� -J$G9��d�9���tۘ�/?��?�� ����� k{KD��+Ez -endstream -endobj -17 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-35 -250 1190 750] -/FontName/CNGBQC+CMTI8 -/ItalicAngle -14.04 -/StemV 73 -/FontFile 16 0 R -/Flags 68 ->> -endobj -16 0 obj -<< -/Filter[/FlateDecode] -/Length1 1145 -/Length2 6324 -/Length3 533 -/Length 7076 ->> -stream -x��g4�m��ը� ��n�1z�щ�u��(3�ނ(�D �轋�A�މ�a��{?O��w�k{�;ח����q��Z���<iSF"�x�|` �������Ǐ�Ʀ��A��H�� &��������@�,�/*!$���PD:{��vn�NE�_U��y' -n A�� nv0�;k�#@i ��y����ݿZ\�0W�����P��� -fG���AD� Cݝ���\�|8�|w.�H��7� -��i#����?�����OqewGGm��_��鿤!NpG��]�trvw���ZH(���R#�?`P���f�� �pky��#����'wU�{��:p7k;� ���w��������������D���s�'��#����a����3�7��������� -��3��a��H(a@P(�7>�����0��#�0/����1��t�k�m�`�D��u�""���_�H���IT�R�M����o����Mw}Z�I���M�����؝��o���Mw��Mw*V��N������� ����wCl��;��?�N���Sv���;e�x���� �?�N���[��x7��7 -�){��w����= - -H/_^Aa�����i�������� �.�05%�0??�����Qkw -�p�������b��e���`��o�)��<�ܧ�'m�F�_6�s���e�9pj�2��s�3�g��$O����b��FW�ިȩ�Q��_�V�>��'/|O 2��\4�f�<���2��� � ����{a������rg�vhy��|���x����Iꙇ �iY���/�⻬�Ȩ����s��Ơv� ��Lh�4&}_�������&����c��HkTRt���g�&��)B7Gޱ.ϲYd�*�/f8��� -�R�^�����������L3}��4���u+��s��p<���i����\�Xg�R��V~�_��\~�֯n3<�T���?�r��r��[���&?�#���=�N}�N��U����K��mz��l�:�����m�wy�Cy�����=������G�b���>"4�� -��0�����V'�{�P���DwYn�h���m�4w���}x`��p�&�,�`࠘U���c�`@.����z���g�Yݴ�ޡ�D���7V���J�a8��Ȕ)�~l��*4ACs~��H�4谪w�M!�]՚A���U�*0`�'E�4.���I�ɷ��hKVS˾�a�{J�h�M3�7���L�7$�b�l_�3���KUZ�̇ �}�@�'�i?�v��c�>�X���{@g�6�{�~��6~_ʋ�bY}F���U�Q��sÙE?���do��y�/�U����x����[Ң%����0�t����ٵ)���׀^9o��_Rg���'ąU*7�6VN6d �� -~-�.�DP�<�?#�D -���Mu����W?��G�<D�pXdG֊LтB�* -���JWK�A� �?�OK��)���cc:6�}۷T�}��)7m%k���>�ѕܚ3t�o�Ѱ��rՆ�-�'�����-���ЪQp�-3�KL)K�S��3� u�T��/���J�ax�O��܀�Յ��d�^쓲i؆h��lqvy��p����2�P#7���w�5+Y�r6��S�%����v#�{������xZ.�����mŠڼ�*�AUc4�r�����2�'��Nb蓈r���x��W-1ŁI������T������εy���u�+P@�t�?`+�qY]5�L�;�G��4���頾"=������c^9z��H��Q����oω1w�Ur|�Yw�S��"Zw)S��2�#1Yp��gR���0�ꅔ�F���]�F;����p�2+�?@���! �L��ӧS���<��+,��\ -s�+�ș��.H�Y�61ܥ4Cj/s�J56=�'�P�xќӻM=�ϖ�"�o����O�")�#d4��/����WA��?^��Dj��]͉��6FU��/nwikm`a4��r��ˣ�R�9I�wc�U1��n���(��*vm��G����s%�)�ƈB���}�7�T�W�MdL$���OH�<�-s~p���DTG��u�F&�S��H��b�Rj��N�,�9ʾ3/s3�B��Ƿ�q�T� �$�~7��vH�(��4��k��Jm�=�P��22U��μgw���e֒��ї����Bg��_�c~�0_S��IG]K7��Ka���~8��&U�����8�$4��Ct��8g�ߎ$��>��;0C��&�X�`�-�� S<�v�ŀƫ?$�s��+[��~ҍ���QqJT}��x���.?&��=c;)�v����i�/�>a�����T7��dQ�xu�|�Qe�`~!y��5D��[aU�Ҏ��b0a%�����$����v�?d�xJI���6�MӢ��3�{�nϐ�r�n�̴H�xx����m��پ�Iw��P�pJ �������٭�AC� �C�۽�Fʓ�6��������a�,z,(�Ԝɰ�^��=�X1�e+�cvF��G@y�]�Ī�~�"3�\�3��K�Ǻ����iR�6Tf�+}���T�Kމ��?hQ��V�������0"Y�� ���|�ɃT��@��.'�"�s~����@X✯x�>����4a�^>_/�ym�M/�uȪ �x��j���&�~�EǾ��|���7��P�/%6���й��'uW�G?�ě��n,�#>�����Fmm���M:�n�7Ϣ��O2�鯂g4sϋ�`�Y.�Y�yy�qaHÝl{�W|�'���ۊ�Ȁ����+��i_\�+�}�*�)�g�O�¶ &-k��.|�l��2�gHn���^�V�OBKIX���RJ��._���=�w�Uݽ���T����v�R�Ԏ}AgE>���`3j��HW�+����K�_���j�tH�q��+��}jf��<��7����c���$��ϙ��>�wW�R��#��nL��)�S��Iu�l������7��W�K������Ϧ�Wu���A�cC��%k*�����<m�Kz����b��&�����Q���(��S'*�ގ�6����c>4}u��Λ�p��h�%^�D���}�OV%./����o<����n�j�Ŗ��y+����k���4a<+B�"Vu���[�&+C+�A,x���?ʃ[�����P�����y�s�q�Zن�đE�H�k0�k�k�������[����ۿО�!�@g��d��h.�1��W����� - -Z�B�����kdb��9i�o6�2μ�C���s��T)���f����Y����c�~Is��4 -��.��$�p%� ��JhɆ��GU�n�+v~���ٱS*�{ �0}�/{�L���F��y��P�!��|h�UI��l����;v��S�5Q@18S�������������v���\�=e*Q-+��X�h:��蘠5P�������n">S�-��*���k1�V� H�A�������ȉ�=s��A�(�֯RO继')+��_�S��� ���:Ӈԃ��"Fe�.ҖIz�O��9��x�*n�1���Κ��V���M~@Y�-χ=��_��[R�|�ഒ�Sح_�3����zK|��g�oI��6� ���E�9��I0������ާ3}��VZ�G�VQ��������[����W��4�Œ�a�g��Inj�qt�a�&&:r�TZ1�[�F�s8��[NaR����_�VW��1�K��>m�z�������/�ɥb���T��h��W������`�"�`��;����Z�;cӘՑ֪��)J�]�A|�tT�G)�eZ�"oޔ�uy�eq>��L G��VeBB8�����F�Q���@� -���(�1�Uf(z+�����o�F6��a_?�Q b��W�[��An9��9�n�I��@��9.�S�i��������g�=��t�����j���7#GԿ�$�����m�Y��<�9�I��3�la�Y�ۦ>'Ǣ���Uvq�����!\دY��Q��vTFS ��L�J����U�")E��>�r� ����p����aw�ѓO1�T�~9O&�Pؤ�mҴ�y�g���8Ω�_ci_=�̤����8ϧ��<45a��J� -e-��[��G�Y���(�Z�L��^ҁ�pZ�~{�:�S��&�� -�3���T.#�{*f=04� �A�O��`PX�w�C���tw���jI`<d�L'W&ރ�$Q&]�k�J����;z�#�.l��q�=/�v��;��g ������@R}���-3��:��!2ܖ F⒰'gԋ��^�ʤ���ϛ`V�h�k�eq�a�uU�_N��R>����=Okng]]�''\>ŷ��n��Z�Kg�%�Z�jFL3��w��G���:���9�/��3��A2V��+@Wo��������ݗ���A������~lD�L�ܬ��Y%H7�y��d�C��D~{��bl�W{�E��I��SD�Sނ��X�5���;�֍`��7;�[�e�膠M53�S^�2�숬��R��mz�.�&���ו�ƗHw>#QA�`ГQ���7�E� ��;F����эg���ֺ�ʓ�����3}���0�����T���QY"-��B�+%�O 3YM��W�%}���Q;�V�$��I�86l�����+Eo��.D�pbW�a���^��� ������6>��k���,�Ku#��ñ�I'Y�4��AP��Ul<���xK5Li�9��>�Ti>q -^�iv5��8��t65�A���4�h�Iy�|��e=�&��T3��i~9�ζ���0Q ��\��r�������+��w����4��d�hd~<�M��ա�H;�aMǪ�T��b�=�`�.�T a�N��B���2{�E*��:�Z��I"��#*NA�uj -���s.��Ղղ9���jOG�n�P��"� �f';N�Om �1a�0�cҵR��y';;&�j@X�zSƗ,���ҋ}�6�9�Y< �اdͅ'���X=.��W�W��wx^����̣�H��+6�������� 7�-}�W��{#i��6�=����~ -�����-��t��X_E�3��ڸ�K&_�Ȧ�|T�R���P�NE�F�a�5.0�����^8^f+�ֈ���p�p��I��=�Fu����$�ٜ���s-qr���J�2`A�_������� `@��N a�Р4���� o}����[�Ce�\!��lR\H0P?n*�~`���%�i$.F�W^G(����dMo۬��ս������o�E��Ȥ�T��=�s��3o�$��d}��⟥�����'.�u�KB��pa�f���7�j=?��B٧�DL��[L���E��T9i�[���I��9ә�i��U�JM�K�G����H�ߎ�Md{V�(��CV$(���k --|��-���b�,+��YZz�1�|b5$p��Mt�^�hI"��T�Q&���p� -9�������Q9� ��*f�>~w9 L��E-!�� ̋Pv=%�r��j�x �頳�=Ouŗ'ׄa��[��1d(�P>���nʸ��.�9����l�8��c�=p�����îl�lq���܄��b�&-��=s�O\���y=��7�^#�y�[��2Fi�O��>�P3�� -rl���w�!��ۚ~e�:ȣ�U{��Z��f�#�:��q�I�;u�Bڠ���2�-`͡��yJ��1f.���Y����͢&�g4f��Q�fJp�L�NؘLϟ�X��(����i֭��:e��� �q��x�fJ�&�I��=p�(�I���m�gNkփB�-<�hP�s��a� -��xLc�VQ��xر����`D�̘e�מ��=��ǔ��ܝ]E -�<O�ɭ��9(���z;�!��A$�i�M�dE�%�c!ᗈ�1R��|df(E�V�hl%�BƩUc[�]VӄR;7�m���5��wړ�56L<ch"�{ll�� Z�����; �&������T�sc�|)V��E����}h>�k��0�8ܺ�g|�qy�'�%L�G�dTi" M���d�z������HƟ_�@���Iō<i;�)���N��P��=��]8�����J�'�dR��k�_��[��f��ѳ�,II���î��P��o��gb���,;�tG&��a�l��s��sad���Wy�j�şc�g�a��q��G�zu��lB\�;��������\ۮ�$�#�I��e����v=�bF���]=�m�;�Ҙi��0.���-��A9ݯ3,�lrR�w�4�?[3c7���4���;Ŧ��`�DыYz_p6�8�g�o�Ӑ��m6f �x�{�R&3M��`G���������������|�Yf��ك �tZH-#�L}춦���=�`:OS�ˡ"��ȗ>H-�P"*���8��6|P5&5�p_:����t�'&~inJ � -��\&��P��ej�Z�BaM^b�S�b���ս *D�n����hFJ͛dw�܈���Z�P�M�q���.=�ݗ�b�bdF(�i���ʁ��ϦO�â����k/Y��ǹ�n?m=����<��'^�bp���?anyI'\���U#����B���E�����;�B��4f�5��$��Ȕ^��ާi~�O�Q�~�wҪj��$R����ۨYJ�Ui49�/y��� -7Q3ϙ���1�O2́�~�[� Q6��h���A�L�"�h�5;*z�}Q��F`X�Y���n -RlEp��M~�L~ߑ'>p^k��#Ծ�7|o���,��ZʲO�܍ �7������kW����*�%�Z�=�Cnw��O����g���Y�K��/�n�?_�1���as3�2OP��ʂ4�J0 (��jg%�ө�՛[�V*I�1�䧢e0��@��H�uG�C�EH�IT�>�����[X;� (7�倏��� � � -endstream -endobj -20 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-32 -250 1048 750] -/FontName/XLKDTT+CMMI10 -/ItalicAngle -14.04 -/StemV 72 -/FontFile 19 0 R -/Flags 68 ->> -endobj -19 0 obj -<< -/Filter[/FlateDecode] -/Length1 814 -/Length2 1294 -/Length3 533 -/Length 1893 ->> -stream -x��RiX�W���LA��P� M� 6�,_�O�/1�AD�Ru�T"����V)(h@ٴ �Y�e�VE��N���g���3����=�=��N��L�+fCbD��c�T������á����K���<�� B�A�82�D���(��K�0_ .~�3,2�� )�a! �%@"}K�b���ЄB�i�l�d�T q�(�0G�FP�3�O�`�B�1���2�.�2���urň0p!�=D������������BaK4S~֬��Y"X�C,�(�����K��>����B47ː��0�������X��`� ��ౄ2h��\%z�fu�G}����t?dCY0"��@��+}6���]��*���px=Q�?����ሹ0�$O��JY�(�G�G$��0 T�R�%�c�\�I<�53X�p��g#��� -p�E"ֿOpB2�,������U ��x���qD/@&�����;��p^d�i�(�R��~3��c���T�51>����݃ϡ�t�r�T�2�S�Et$�0_��_���D:�$������<�����dR#k�'q��ڷ�T�8�0����|A������ܪ��6!���C++��cA}q��>?�ܣ�r��+��Ku��;~�f+�O�l�+��읖��S���+������w1�N�.�Q/V��Lu�7�[�oQ`>��D_^�jD�_E��PLO���+͗ZM�<{����z�V'�t|3�_tYQ���2�`����Ӗ�p����S��C��NX�`���?ot����i]&Pvn+z_]�3E4�8l6?53�u�g�����U����0�X -k�4��n(v��1y:�0���+a`j���� Nm�B/��Tp���8��]n�����t�[�Yc�?�:�����r,x�M��[ǰ�/ 촊Љ�AG/�t�*�v~;���GC�-�{��ize�[U���He��'��}���5BӃ�QO�w�#�5���u��o����V�4�ف]濩�-�;Ea���# -J�|����U����:{���+[O�{��|��d:}c����c�S��}��|�6+8�--UP�����C�k�ƅ��7� -�����F-�T�ݺ�@���^�oJ�3�Y����a���Gi�M�2����G{�����sm���(5zc����^ÝI���/�j�>�C+.�첝�k���3˧���z�y��źL�?�.m�O���P�r&;�m�=�=�h����g��#��I��]]�~͚��je~����@VFV��cf��;�����٩l�1� ���{���=�9oi���c�S��M�{쒪dcn��+,�b��t(ح��'�͛d���Y�?u��+T���4��PbٗI��F�)Y�<Ҵ8̗ϯ�bx;����+]@��1�G�K�º�˅1�E�zy������K[Y�&K3�#?Sފ-˕6��J���M�>!���「76���Ą"s6�~7n��f�d�#����*�(���ܹ�0�cɊ��\��lA����=�U��� fK�٧�r�F�Nk���m��ݺ�ED��_�U��,�$n�n�-H*�%?�_�H2�l� h���=G"҇[��T����j��,� �"����J�O���_7��D�;�F�xޡ�fS{���OQ�4QJ/T���ޢ����o���cS��9���C���)B\��M���4���ۏ�Zk��Ek��s;���^����C�ȕ�G4̑صGR�hr���ů�{�&���G����Չg�.�n\DX3�l�n�A������w.���! -p�K*�X�(��+H�, -endstream -endobj -23 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-30 -955 1185 779] -/FontName/BAFFOF+CMSY8 -/ItalicAngle -14.035 -/StemV 89 -/FontFile 22 0 R -/Flags 68 ->> -endobj -22 0 obj -<< -/Filter[/FlateDecode] -/Length1 882 -/Length2 1121 -/Length3 533 -/Length 1754 ->> -stream -x��RkXg�Z,F-W��)(B�� $�MP. � -��8$�0:� �$�*S�(�R�5(��Z��-��l -��R@�����Z��V� ��K��>�o���3�9�;ߙ�}��a,���E� �bq��&�6�pt�#�B |-L!>����B� -px���xx�p ���$U�Q���-���j�D�0B`*Q�&ra�E�$6�B��# I@H�`3P�r -�"*g�3�J�a�V��!d�8�9�tJ�cI@�(��� ���DZ�M����Z��j���O�a5�%�S@�5Z -!A�@H|�4���(P�z&D�*�*,� y� 4�MDR���%�% S8�+fF��7�]$��_��:=�iR -�8�1I���7�T�����D���]� AZH�/��g\�� -W�*��$�Āh+�p��+�D�$҉��8A�G�ݚ4�$H�q�<.p��Ԯ%`pB���b�i#T�9��/��y/a�|�r Z �X�oG(QR��x���H��k"�����˛���x�������M8�E��A^�)T�%I�����ȋZ��SD�DD�()]�Ίqc�Nl�k�CDms[��CN�g8K%���&��8��������Y[��y��/��}��o���5���;�����_6��Z��=��v�CL�|9n� /� �������}G�%�6D���n�Xwm�~Rf}6�U�}��0q�l�V��}V`�n��o֖��˺xBж ����orFJ�5���Мf�f���2k���Hn����xteEى����-ev�`�ɸ4��M�\��nO���Cw�%�rҰ��V���_=�&7+�����r)(�!z��D���7���S�.�����j�ʁ�ѕ�Y�l uM�Q͗s/R��[�:��f3wX�~�*P�����jmMh�2~g��#�"�_�� �v~�X4o�͑�os"dA��Y�5� squ���w�R߫͏�����پ�����Z|�hU��LN����yX��A�=�v�Vm,[�pn����h��R�5��s���eֵjc�`�@Q�'o��6pvYv�����㗝-�̽]�$�ӝ�e7��7(��(iy�D۱��?���d�q���6{�[�m�Vۻ������������������g�G;�^�G0��G��L�g�~��ۜ/?'l��L�s|y��ݑx��vAa��Ns�_<WMڭU��Kw���n�u�mY��%�/�O9��s��k�fx˥2��܆��P^�к{ݞ���<���`/�KZ%o�������y<k��Ͳ�P�X��sbX-��9��:�f��}]RX%�$�������y�/��1-ޯx�Nn��-.�l�mi�h�.6�-�<"�-�t�K��<��w�jO_c��w��>��!8X"��L��?��hcG{�д��O݂�z'���v��,aEV��Ya���RG+u��%�� U�o���]�S��P�͟��g���h�a^߫�={_�ɧ2�p�k�`SA�'���`�bN��VjU��������>��?����ɼP���c���(]��;��3n���}����Aӻ룘��J�%a�/P}o�m�Fl�U�U��r~���!4Ҷ�Nݭ�df�G�=�|���ýu�_:��� >��6]�/ȸ��I�UY� -v���������>;=234��u�s���JШ}��/�� �'������Ư��� -endstream -endobj -26 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-341 -250 1304 965] -/FontName/HFVFDN+CMR5 -/ItalicAngle 0 -/StemV 89 -/FontFile 25 0 R -/Flags 4 ->> -endobj -25 0 obj -<< -/Filter[/FlateDecode] -/Length1 769 -/Length2 1230 -/Length3 533 -/Length 1807 ->> -stream -x��yTS��ԎA�,adQH�E�AX";e K�|$/� �×D'�eQ�3�0�3"���F�8�A�F-� E 2���)�z�_ϼ�����~��~�%����z��D��m)D -��"��#�Q�� -!:@qv��P"6�~:�F'Sq8���IP8)YXz[-u9�<�Y ��a�\ a��PB�O.]Z"�B!���D�B�0K$BI0GZ���s��c�-J�T����\&�0N6��J�6����l?������Jq_���1�~Uy0W�K᥉� -"l�l��>�BlX�[Y��\���O�B��c -��b�Y��� -��<�g����[F ��F�2�l�/�c-���pI�?U���cʿb�1d�] -ֈ�O��{��Y�'T���((��1)*�dP��φ��$ƀID>"Ė��'Y�AqK�Iq�$��Kyܯ��先3l��)�-��)ۑ�gZֿw����D�?���dG'��,K��_��v0�>�������|a�Ѐl��day辪� �����\ׇ%O/}=�ٺm��X[*.����%L͞Y�p7;���P����Y.���n�����Zбo���W�h�td?\����U��HW��QY["���� ��eAG�9>��fY��l�Y�������؝Q���� ����c�>��ME)j��>���ٵ]�ꓜqՎ���bR��{�c�~���7���h�ʦ��z�N��⌗���Q��&Ѳ��S�{G�گ�庒-!��;�|��J��2Tl��[�>u�g���!W4�5^_�G}l9 ʌ(eLgE��M����4��t�Oz�xi�iŦ�^5-�C�����⪳c��{ύ -�{�"5�K�c��G��l`�����J�^�3����=U���7�:���H5z6�Io��qTS�������h����WI��m?��������ڲ�y?��BN4k��+���[@d��� -�x]�r�|$7O�� ;��S�4f���}����nb63�{P_��dz��S�(_"�s�V��s�.ħ��`�s���Β/���g֗�Z�rB.���s~���w��#����`��κ����m�Ρ�X�wj5�rF��E�#^`���=c8�K0�"��]�[լT��0��N����R��&T��R:�t]z���������~utW�;���j��ҽ&��\_����djU��b�0��hJǏ&�%M��Ϣ�b�8X�Nʒ�'z�u�om-RS���UO�_���jc�O�ܬ/�L�s��u��9�n���a(e�8ѷ(��ż��\�A�������K�+��a���s�'�����������扝���������b�HAY��Ϣe�v���t{a��)��u�y��L�|�܍��5qA��srN@\wrϭ�5�Q$?̮cG��y���u�g�Yuɾ�6��\���%婧�)��P�2�hb7Ӈ�% �]\̝3���<�5�}ܳފ]�fzP���@�N��Ss��l��v;Kx��.["*4����݊��W�o��jFQuߥƏY��į�Na�_�0�: �L� 7��$�W>q���^�b�R;\��Y�wH\���4�ún�4�y9�p��J��Kv(�^�~���//4��|�w��N㍐�53�%��r'ShF�sNcѨ�t~M����'�����p�Mc3������Ot! 2+�;�<I�|�W�� �4~�+�$T�Y�M� /�g���9�3Z�-6��3N��[�v(a��BNx�j��ҹ�M�?�o�,.�B���8�?�_�� -endstream -endobj -29 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-251 -250 1009 969] -/FontName/ZFHUDM+CMR10 -/ItalicAngle 0 -/StemV 69 -/FontFile 28 0 R -/Flags 4 ->> -endobj -28 0 obj -<< -/Filter[/FlateDecode] -/Length1 983 -/Length2 4110 -/Length3 533 -/Length 4807 ->> -stream -x��VgTS[���i� �"�P�KG��i! $@HB� M��A��KQ�T��"����$���^�w�������;�3��k��Yk�1�0����&� -�à�`)�2P����@ -���6�#1h�+)������Q��S�������@,���i��d)�5Qp, -A�!xE�B���(��5���?���p��I�`0��pw$ �ӕ� T��|��J���8�/�؟NŁd�0�+���M0���d7�cc������zy�@P?��꿤!(�W���/�c`p,��T[�/o�p��Ϭ⅄j�ݽ�@�/��C�afH<t�x���p4�&ȕ�ӂ�������į��J�A�h�U��߲?����1�<Xd��&�\_0�H��9�c1]4C�݁2�W�, � r$�h<� ;��Bc��)@rQn�0X�ώʁ���,�w��L�B��B��oX�{��~�@� 8�PJc��cy�<��w^�,�G`���!�v��b�Eܐ~�W�s�>����DF\��'�o��d��������Kʐ��_�b�@J@�+J���i�F��� t���)���P_,�*�?r���ݐ�m����ۖ��b�bӜ N�R�����pUk��^j�q �s�*ѽn�w����0I�����N���늒���#�T� �[�#�6m4LX�v���H�&.@�ơ�v��xU{�V�C�[|���Y2&����Bf�� �;O+��iZ}m�^���Oq���i`�y��F=������A���%����E�е�Qͻ͐T�n��J������1�#~4-����~>C")!�M�L`r���t`�:4�w�5�ըkJ�y�8l(�9vAR*��G�Z)�����3���qR�sZ#��D&��1O�N��Ƚ���'�z�y:c\"�k�^��8���zؘMe����df����z$?�H�H��JoX��J�h[�^�|e������=P�ZO;�c����?�˾eY��=)�ZP-�=�*���������B�c�'/e��:�/q��T�����ݤ�\��3�[%<��z8�>�-=E&���h����gS��~�Ѹ�[%�u���3�e괃r����a]��<kvXqW�y�t�1��!R�0�2g{�x²l��l����X����Ǿ;���?�nS�F=~4@}[!?$~�u���r}PcD��>Ϗ[���Ue��������)��kϧ*O������<Y(��H�5m��u�����*��5��C�{�?FxOw1��n���M�\:C����B��5�j=iFx�J�%�='۷�q�#R�pjFy�I=�B��#z[���N�����do����]H`D�վ��_TU��mއTtw�����~����ͼ�^�AV�����w+���<wE��(�[1hƃ�p2%���<�e�C^��R������s���l�U�����'u�`��є�����N��ʵs7�(�UC�n_���?�t�N�c8{����-1� MA�$�ӿ٬V�l�,lB>o�0>o�½�V����1 -E��꩗������IȎ����YE��}����{-u�}2`�x���@��U��ÅC�R��k�����3n����=���qhL9�NO�.~�&���k�p=\�����4��������_���o4Z�>�E�#���/3��=�>���!Ur�uhRq�D�(5��m.�*�5�.;���G�<���V�ޱE�= -�U�+f+#5�-?EȞ�ޓ��u�V�N����9�0Qz�X\n���FFEqʷ�R�S�1�g�D�@,������gV �7}��7|�D�ˑ�XАP�eV0\:H|�sE; �Jym�s��"yT�����/v�n\�b�O4�.������`(�|\���&D=���y�d�9�jQ��fĶ�����ީ -(�`ܭ�v���dㄚ�Z*l��G�rm�9��Ѽ��"��z�px��3{�['�������bY�BѹX�V�q���z�a��t�r��#�^L��b���1�?A7}O -��@��u���ɰ�=�p�I"U�Y�O�ǝ�P��z���N��UnT��;b���:�(|�c������� &�%�Bռz��.=X��Rt��ٽ�õ@����� �ըĜ���R�b�.�]Ewp�,��zjT� K�h�?�Y=}_ -����eU�ؚ��v�Nb��C��iCƊu�� -�iy)�+�����Q1�l�<Ǎ_�gt��Y�)�@Ĥ��v���Vq5��5I������<�u=��1�]M�r�ܣ�e���u�(|0Mu��rf�9�s�wJ��7ן����R��3�OT&ʮ�v]vE�#��L�e�E�O�:�8�F�e;k�tE9���r͠�F ٥r�� �- H�Z�C�觡�>�A�mg],v����5���!�@���8ݟ4��Oԥ��a�lM6�eo��W��#�.���2�J��ez��Mx���E�a�!s|Y<h�����3���fɕZシ�Kn.�9o2"K�v%X0= mU�P�����q�Dp.�G�gWY�����d$J��J���*A�.�>4@YW�bN��Oj�4��$Ǫ��+�Ԇ����t��w\���+ͼH�y�X�\4j������)���Q]i�;������A���n�9�|X=����z�Ồs��q�����eQ��ڽ������*�i~E�C�� c��~Cw��mO�(x�e&/s��Q|�3��K�r%m�FF7� o.o�D^�v`�7V����;�U�R�@�-F(n��s����E�����[���(��6i�>���0���B�X�>ֻr3S��{�����^0ax5I%eI�_D�yv�<��roVӞ���|��f��a��jm)/e���� 9Gp@��EO����*#�a>�*��+���dV4I}��W�j[';F]�O�0N���`�Ď��7oH�T�{��sX�������FɩZu��Kw����b�G��.�6f��.nO<�c=��Ɉ~�����E22(3��$���}%�:�6I�~��:&������x��������.$�]�������g��eN��G�?�f��+3Ly�e -�+�v!Q�+�� -S����hda��*)��mW�o=��l���&��⌺��j��' �Q�6�mϴ�J%*�p)�}��&�G1��.�#"a�f�mr_E�݊�}�p�* ���+���{,��:���r��T���ły��"N�i]g6;��J��.uK���0_:b�v�}�V�n�A/�9���� �/��e�zf�#e��(�mQM��wH#VÍ9w#�~=�K��^���_����6���`#W�V--u��+xDH��ѥ�(ZȺq5[�XWH7,v���6�-oz��02ujb��B?�~v؟c�)9��X��d����1_�٬�w��,���ջ��V�.�6hq� -w���lО�Zp� b �*�A��K��(�ZkѨ����Zt�I�@\Te?��z�aV�ݠ�W�f�ڪ�E^���RW�X����{�z����%�P�-<*�Tq� �z��iB��*<��e<�/;�p0�R<��p�+��(j� ���{��%����ʟë� -�7�m��il�d��\��vZZ��IJ��W��.?Fe��U�}!��u�����Z��1�LW���!!� ��<>-:S q���霃�-��&~���R�uD�WL s�@��#�����1��M㴀�<�Z��ΤO(E�&:�8e@3i*�J��h�|x�W�����i�+X���[��~��g[E�~&����O���`'�#�uv�v�5�$�ԕWBC�v�(�����}Q~���x�`ۜg�j���b��&�X�Q����lvo��r�1��ifԹ�ʅ�������ݧ孌�����BᬤL�m�{Ky�y���iX�>j�l(�mѹ�fbqϤ��U�6��|��5C���6'�<���������=��Z���fi�v �m�:�j�zG�R�%�Υq�~��k��'�aj;��2�j[Y���������'��.K��>(|'���{l�- z�i�U�Q*��~���_�Ъ�=��o���F�c����r�5��' ��M����i��gρ�(��㣅`���<郎S�+��9����S�e�I�4����S�[�dFJ��/��zk -�eg��f�1ףj{aK�m��mɺ0��鴓�YG�n���߉�v�����DA�J�r��͎6�g�=���m�z0�R���`����K9��Cvn2�Yz�:�9ԧ��X����p���B�U��!����k+�zb��~~];C��_�����2��E$|��ͭ�lZ3��9��@�?4B�� -��C -Y6r�&X|S���s�N�>.w�J]`1�D���+�ZL��I:��%��.��ܛ���ن~3��~�̼U��9����m��Hw��`�#\��͉�ԍsI�=�k��,��`Oͦ9��W�� �6g�J��Wb���b����]ڍ�z5�g�oGE��bB)�xY�O`3 -K�=��&9�R�8Ff`6(U��i��J� ���A�z�ԡǖ�Z%�Q�׆t{�14�/͊�!���UΏ�Zy��b��(����^<�xBd���~�'�pzoT4�a�����mJ� -yl<�B{���h��%:_솸ڙb��V�.����r�,�i�&%ۊ���̰�ȋz�<}?���w��5_��k#!��P6�+�j���ۧ@�����'�^p�AA������ �~ -endstream -endobj -32 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-29 -960 1116 775] -/FontName/RURNMV+CMSY10 -/ItalicAngle -14.035 -/StemV 85 -/FontFile 31 0 R -/Flags 68 ->> -endobj -31 0 obj -<< -/Filter[/FlateDecode] -/Length1 867 -/Length2 1070 -/Length3 533 -/Length 1696 ->> -stream -x��kTg�QK����V�R�rQ.��. �R0H%d�00���� -���v*R.R�)(�(�F��"��*���ȥx9�p�z��=�m��|����g~����!a�B��A�H�v�ٰ�E�����ZD�2# ���χ�P��0@<7'ȍ�c����L�R�"��Ek��x@�D)L.#@���C���a�Ci-�!��Щ#*��P*E�,�� U`�3���%oFFԉ/�d�R1\`5ù0�I�Z���,��d��2,�1ֿ��=�O��b�rj�tP�eJ���A*�4J� A)bvk:�"�Z9�]K�pL.$8 -a6�̝10��A���ǁX�B�u�@f�0�M�pBׅ��$��v� �a�MD��}��_�LL� 6�L#�����7_BN"��N\W �(����"��`�j��a�9l���#��& Ēkj��+8J�P���i���J��_i.�C���K��e����qpR1�P�K��R&�i��!y{��G'>p�2�0� -x<nڿ6�#�$5�և����fB��)������^Ա�4ՠrV��E�+��G��_��8���S��Vz^*>��U�q&)��8c�0Q��u[��nga�� �P����x��ڕ_'vv��]pe��1p�ܻF :K���Kz�`��L� 0�����'[�G��/U,�>�a��i��J3�J��Z$�jr�6 �u�29��̭�r1�����z\u�(�d���W����I�����':�Ӂ]�7�{Y�'"���8��5��Ֆ�_P�6��[��œ�}Ɨl�A�D��x۬���Ym��z�D��hBbY�l)���kTPoj_����u���A��-�] -�D�b8�0~^F�5۩�U�O�P6�g�����wV|y�!g\��r�t�#�M�m��Z�w����ۤ��06��n��m�����_���M���=�<���Y����s��`k{�b��%&�Ϣ�$����?�<��2O��c��� -\������M��}e��ŝt��}����s���p��������T�۟ӧ����O���ϴ\e��zGһ�SǑI�^��>�o,N9T�-,�������n�7w��o ��eK+R���c����>M��̀��������*�a {ܸ�Av.1k~���K5�9e�;;�8\����7V��s/Wo��Y�k���@�)m}'�L�ʅ���W�Ts�t>�J�>�~x�Z��|nhW�g���;����u74��֨� �7���irp��?-��6�0�����ֹ��K��@FcM���� �1��)�c����7�e= �a� �Y|��wT�q��Gnn0�f\������}���ۖ�����Dv��S+OEk���h������>ꦝtE�������ΞQ�U�U��dw�Տ�>;������Ѹ��儕M�!2���Y�_�Ȯg-G�:�ԥ߰����ָ��(�e�Y���M[���+0D�Ё(9�w��X��4����w��3�����uE -+ij�D�]��\Zz�_S�њ���K`^� ]Ui#�@Ju���'i������>��^azR�<�����P���&�mբU�Sm�x&|{�*/��G�EQ98�|�>6?r������#�s<���f����?�b�GeM*eT��Oeɖ� -endstream -endobj -35 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-15 -951 1252 782] -/FontName/PWFQLZ+CMSY7 -/ItalicAngle -14.035 -/StemV 93 -/FontFile 34 0 R -/Flags 68 ->> -endobj -34 0 obj -<< -/Filter[/FlateDecode] -/Length1 829 -/Length2 877 -/Length3 533 -/Length 1469 ->> -stream -x��kPW����A��B9*(h���� A%������V�ݰl��(�P�� �uGP��D[u�� -�RE�8E�� -��,v�:Z�N�u��Ϟ���{�y�c3���^� C�'I��(ub��@���FLA��I���3@��P �*�����:�y,� ��+�h`+�����R�#��à�1�c*�O�qH���T*��$��HHEA��BQ���4�J�`9�3y�$�Z�) -R��e8��C� �(`(�AJ2�A��c� �PsO�J%�����9}&cj\����Tk�4���T@����$P�k�CU/S�r�TA`���"��A��ģ����a SE:$CQ��@|<}��vP��p�^��@�|�أ�LH �"\A�Ff}�� �l!'8�<�|�Q�c!���1(� �0�!v�$�L4� ��X�S���8h(��e��0BBa�pH�`(����T�q��y���dt�=�^��(@y|,����q%�Gh���#��T�Z��=��p?�Cqf FC9+3k<>,�c9�ep�ņg�jK3f�@'Kk�%��n#�e55�s9/rw�_m�j�_����Lu�ܵu�L}��2���bG��zDS��㍟"��rɈ���݇W�8.���vD�t���n���8P9���5`̢�R�(S$���r�+a&�d��7��U2�]�W�-1�i���m������}l���c��fo_�z�`b��fMp|x��+az=�/�YT��9��Gɍ�'�8[��̎��7����m�ю���3���i{�<�qi=Uw�n�ؕ�u'6$O�ޖ|����#�����r�gY͉�%�ę"��'~��B��e7-� -Ҝ˳Λ�}"x�kh�"_�7�)�`r3m�r㳎{��u��E~=�}�;_�ſD�5J�d�����{��S��K��� 䴙6�M"���ƮUW[p���C���>���� -Ju�g�u<n�[�l���m�#�Z���ĝ��7Hz�R��pck�]�#��m������q�����kΘ��s�-����Ď�"o��t;��ge{pON���`e��I�#[��̰�a�،e��iu�����ۛ�W?��&>��&�?����@]�`��B��iICs��}�6��f��.$��|�zӍ|Q�&e�N�,I -I�"�� /@�/��[x��kNT�Z�"�!/LzО��X���h}�K֖��G=^N^/�J7��:�-��n)��\-x����2���鱯��]�1����$��l���������=jT� �-�.�[u�Xk��{Lb��X�>���э�eVZ�\��y�OMqE��'Ji�ͷ�)�����HNk{�2�����r-uw�K��T�����U���xc���?������ �u{�ln����{vwh�MXr��)�F74�' ��c�o�0�� FѤ��Y�?��i O -endstream -endobj -44 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-24 -250 1110 750] -/FontName/UUJCBO+CMMI8 -/ItalicAngle -14.04 -/StemV 78 -/FontFile 43 0 R -/Flags 68 ->> -endobj -43 0 obj -<< -/Filter[/FlateDecode] -/Length1 775 -/Length2 1102 -/Length3 533 -/Length 1683 ->> -stream -x��kXW�EXZS�����I��̐!viC4�&�"�1`L2�� Pu\l��K�*ʥؔZ��h�"vA$�"R@`}�,�/��[������=���{uU�Н'��!S��4����~`�B�J��H���:���ˋ �U2����'��ಘ$�q��@��`5�eZ� xr�@�"�� ��h"ɀ��RC�'����-� ID�$DB#�`HP�lC�Q�D�����p�9[���[I�h��gH]��S�c2 � q$zn<1���`��k��@%������Y��-��2Ϳ�\�R"�%�͕F"�l��U��v��"*�a�2��LĜ���T�HBP�8ĉd��L�$sI���p�����>�kf�v�"B1e�F���W���um̈@� �Al����9���ĸ��� D!Ґ ���R`�bD ���N�p�q0&� -�p�4}�,/@�r�h�L������w&p�`}a�,(�?���C���,����0f�bA �r�3z��C��"��2��ݧ�|nA=觖���=��K���OhV�Xщ"��:gC^��Z���:��Nnl��;��H!7Rg3���M~�E�2M�xSzϊ[�����4o�3����t2�c��h�QBcIK�:���˹���,N��h��W���6��U�K�_��$V[����x���\Yh��ֹ���J�᤺��j3���Ī�*/��-}�d4��������_tMT��8Cp��:��.�5��5<�<jgG���������.�?g]�����=(8�C?�֙{�*����eT�%/��-���{Ryi8|Hn*��kz���$[�f8��q��}Ztpyj��Z�K����B�S���⁋��M��3��a���I��n��4!�<��?���T_N�Q�ؠSr�b���vN�,�X��7�l�+�|�@ߐ�BWi]����?�wb�����"7�Z^�%���;]��{�5\y����ch��M�&f�#�ox��]:P|���+&�ʲ�a���-��C�-)�]��"e���>rh�]+��G�K�� -ݚ���gCN�7ͭ�a�)�gM�d }��ݑkeu�&���,�`<b}V|-g�3� �ty���ѭ܆z�G��5����{k�g]���A��q'S� 7�WU����`����u༹,��Q����`;�X��]W>��v���~���N��K��5���$)}���O�흕g/h��O��B2^P�����S��m��)E�-o���m-�l6�V�Q*���N��w]�F�ԅ0B���{}_�4�Ά���M��ַh�z)�%P-Ɯ��ՙ��M�a�yW*x����� 6����ڀ���#���e(3|�k� Ťv�l�n��K�����?`ˎ ':*�l/i}�qW�Uy����W/7T�쾓L{�x�f���dA=S e�OՎ��f�7���t=:n���"ņƚ�(��M�)��F5�74���4u���Fu�s�}bQӬ -_Y��p����aּ�?ڢ=߶j�xr��ro|��Y��S=��:O��X��}9�+3`qwqvl���V� �l������G����W�؏߮>vq͑�5��H���U�TfR�bC>�^�:X�i���@��j�9������y_�>�����rM�����o��0����"BJ"��~ -endstream -endobj -47 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-19 -192 944 683] -/FontName/RIIFBU+LASY10 -/ItalicAngle -14.035 -/StemV 40 -/FontFile 46 0 R -/Flags 68 ->> -endobj -46 0 obj -<< -/Filter[/FlateDecode] -/Length1 822 -/Length2 1123 -/Length3 533 -/Length 1717 ->> -stream -x��RkXg�VQ��կ�\�2��(H��K -"+�a2��d&�$$$�&T��jU,�"P���\�KE����X"� -r���h���e���gg�g��|�{�y�;���0�3G@ģ�.s��'��@���jg�+EaF��2�@l�+Ed�� \��b��T�%���Jf�@9�oHT;�KHTR,!Q}i3�XNs\��b��X����~,|�P���G$3�� MF� -T@�R!0RJ<���T�� ������k�\�. -T:#8�NE�L����0� ;����P��7���\$��b�˜�� ��^S����y��蜶T����`�aO��r�3��,�S��0L�$!,JFg��Ƭ�� -\"�\��u��a �1\��J���l��I�����1�4I$�_O����G�'�Ww�K���J���T`��UTIJv�ㄌL�, )u��3�L~�K��1||e�3�&� W���<~�L�-/�v�Q�d)b��go�T���"�5b��(�D����γYQ�<%���m����Нeo���pʽ���8m�+�>�H*��|n!� ���ӷ���<2�Y�,���Fv�����8k˸� ���W����J�6�n-�z��pl\oi��;�^�����-��퇖nov��ϒ�9܍��V����/��I�O��%��}_]��s�d���u�w�m��(����דr�)qЕ�KO�o�ž�&8�ӽ�î����a��k��Y�whu���Sⷩ�l_�|:��0|��@�mI]:�۹�R��Ҽ3��gh5�E w2M�o��yXU���R�����G�^ۛ3�>PV�����/���[�_vd�����O��o��~��R>f`p��Q_�4lS�:y�lh6�Տ����q,���?v]��5r�8�^ Y-�*�^^�t(o��2����9߉l"��!��>۟6]�rA��]�8�x��0�2l�)=�6�g�e�y���6�9��Kz�+bA�?�p}ɒ�.��/�欱�÷��7����3��7�l�sA�F���nZ<8��s d��>�^,魼��Y}͔����r�ך�����u�Z�|'�8�4���nQcؾ�E��%A��:�/6��'z8f�@�h(6�̢�r�MA��� ��u�z����q�8�bؾ*+�\/�GFޡ�xK�K���|wU�-�P��B�i��M��s�5��Dž]9��o��z�&������q����3p,80tW�*��j��o�,|���!��e�����:�¥�{2�W� -�t0�r��K��b6�W�K3ޡ?��}^e����$h�P�ѭ�u/�;�<�WV�mZ{��rR��{��� �}���kw��y��v�y-��]�VM5>�|�O��oʛa����r��g1<9ej]� ��Z�(��g��m�>�Id���z F6��)c��[�����&�.h�&:��֯�������OK�߹:�ޯ���S6��dNnc��>h��~����6�ˎLVp�xN�l���Sp�to6��|,ϵ�u�o����'hF�����,/O�5��k�ˣ�9�s��e�r�G�Y;�ǚ�@A���74��i��kQr��:��.!�'0g��r�9涟v�[� �5�� -�TR��y��2�K��0�w��d �Jh�[�sa����������DD��R!��IT�/���� -endstream -endobj -50 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-27 -250 1268 750] -/FontName/GLGDJM+CMTI7 -/ItalicAngle -14.04 -/StemV 76 -/FontFile 49 0 R -/Flags 68 ->> -endobj -49 0 obj -<< -/Filter[/FlateDecode] -/Length1 856 -/Length2 2389 -/Length3 533 -/Length 3012 ->> -stream -x��y8���-EM*�xS<ʾ�����De��0�YC$�DY*��D�Y��,Ye�X�VvI�(�T�=�{z�?�:���<�?����������#!fvZAOq�)d�\�`L����""!���8�B���@5��F�m?w�� - �j0�\��0�@*�݃Hcd��P�6 �\qd�G��I�!�8"p��J�i����M$ߏ��/H��� �4�t'�!��L�d7 -��Y��y�����,.@��)�(�21��n�)�u�b���� կ����DS����9���#���0PH�~4� -�P� ���� -��f� ~�_��4��Mv'��\Y���N��'�x3��p�}�u��������������Ͻ�l��dڙ@o������hVFTB�`S���,#�������Ȯ<�� �*��J�B`�Q$�2���1T�L�����d�7 -�}���@q�K?�*�u���Ô����$��$Yf�$����p�����k8::�� -P@ Y�U�����ђL�� u$SE T]��T�L��O���]�X������*@`w�?,��R�w��q�ۈ�mh�&�wI�hF�������3�����M�xR]�Dc�������?9np� -#�����Ry�Y]*T�26��*s��p�� 6)՝]���a���$�yդ����&j��C�۪4l��x_��gy��چ�s7:&�i�*b�`�8lI��O<��Oer�xQ :ӧJ8\j"����o��NJZ>>h��S�j�1��7wW�q�{g���ŕ ��/Xae�������Ʒ'o�M��>�Q^"��NE>c���uY��d#sl|� Q�>�ã�3��m��G2O����=��3�{�Q����)E1�¬���M��������E�dder�F�غ���%��"�4ԲST��7�_o|ە�"�I�;2�`N-I<z��z��x��!M>�{V���n����&�x�9�6vy���WG��d���3=C)��85z�3��t��B�x�6�dSv(��� ��M����/;�V*�j�o�'�<r���{����/��Y�vx���r��Q�:�P�0�RW�b�$�o�jO�D���[���r{�z���s�cgSGCE<t�%'*��ɽ�Ϫ�ؘr�*gS���b�rpOG���N=yޥ����[�ϰ��N���4�VZދv�j._�����mK�t]�l�}�q�}����g� �J.�����n�AW@�ދ�Xئ���꽾p}w��r^��oU��O)Z�70Rōy�����.�8��8!�c�G��~-%�{v�[���]����̬�m6҈7·�:��T�.��9�hm�O�ɛϺx���j�E,��.��.�H�1Z�H�=�����7�{�-��Gl��S^"2B���ÃWi"\2\7 Y�� �o��Pv�;�5��eem��>3�-�,�&��k���=��B}��rVYk�&�V2C -�3|�����aY"%p@�=�z������--I���3�t��?�+#�VIio��+�[iB�ϋ�=ǖ?hZA�J8./�v;��?�y�Nh�7R8����>)rm�Js0�僐=��SY�L-Ī)i�)I�u���,���D(a�&�/��y9�r7�?2�)�e_v`�gL��)��V�TO(-O�'c���]�r�yl��4�Z�9V��>7�JH-Jn��[ -<ܰvm����Tg�1%�R�Fa� �g�����#Lq���/���� a���K�CIK�{��N��$;4sTH��u.���ɪ���C=^����u�*t�ӗ�3��%V�oɻW��jg;m�c��b���& ����^N�#υ)�4�ʜ�C]'�D����9�p� �Oi������V��3y�������̗*��*�x��n���2�� ���q9�K}[55�,2�*�������ʈ2e�Tܰx!W��־�ϻ[\ɇ���/,�Sw�0mk7�>�V9ϵ���W -[0�Ԉ:%�9o�}���(4w����4�:'��t�몲��>����IF{���� Gbf`/�j:��8��R�q[⤇F-d��}r���"�����U�f�����9Thjooy,V�14dS�%��g3��?�@f=�Xw'��Ϣ4�_̨��/R�\���|ʺF�_*2�b��qX�X/��kZ�?5���@~��=�������-an�)���>������r�5��p��uáق��·\�� -F,��u;϶��O�9�JZY ��� - �Y��xbg4���;c�p���LǷ�.ˬ�,K�{@�мpWf��F��K��؍^1]��[<m9�W���]tg`��Ym�3�t>�f�ؔ�oO��*���K<��\=�>����|�A�n���^]w&��tu�m --$��oz�\M��B@��F"CǴ�퐔��w��f�)�K�St���W/dM��]Ϲ ��/Z��$�m�v�I;��Ua����"��9��Ч[�*�>�}a���r-�YR� ��������TXU[�*��x'vV��ӱ�o�+-���U�&J�r�{�����C��:���*� /����y�cN֍꿺R�5���c$ -�z���҆M��p#�g�/�שO��mD��"��E�ب[u��b$�}�)�5��[շ�ů�ݚ_���/˝��~�;���goe����o�̓V�� -�8������}e��Z��pk��2�Z{���7�єZcl���ǎ;̿V�y���N�X�jq?ꁖО -��`�1:�Ij��A�iJsŐ�m�q�}NiLka8�]�f�j��ߜ�h�W -�<�z��}{��3h�KG7��1�mE�Q�}���}l�I97�4�C��j�I�>GI��I��h3��o������.Z��A�����70W��yC2�l���E�o R-���Y�$�>y�: mfV�):��{�l�C{.h -�/���Op%�8*�B�Q� ��� -endstream -endobj -53 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[0 -250 1171 750] -/FontName/TCHEYT+CMMI7 -/ItalicAngle -14.04 -/StemV 81 -/FontFile 52 0 R -/Flags 68 ->> -endobj -52 0 obj -<< -/Filter[/FlateDecode] -/Length1 773 -/Length2 1105 -/Length3 533 -/Length 1686 ->> -stream -x��mTW�AI*���l+zI��b� $��B�iX1�[ -�1`4��!� Aj+P��`���@[_q��Titu)Ă�A��%���*EIi:�zz��=�mOg�ý��s����^��f13X�oC�pL��8| ����B�N�Dq,V"|�����Tr�� _>ϛ��T:��ZMMSw�nj�+����4DA�Ha9�RQjY���`�̒��@5"cQ���R%؆���=C%�Rp�;W���_���Ar�YR@r�pL�2$�ʎ������\���Try$������mX�ʵ���t�!��!6_�̱��R�� -���c�r09\ĝ��a��mF��4��3��:��擐��r����=��v��F1e�6����9��9��j�bA����Q��6bR\�b����`���T�����@����DC�Y�$��2�l��ԙc���W(��2����k� ��⑮_��A��.ۊ�;U�0� ?_o?�٪TE���>dB/�)(*�h)5���;�rz����I�ۯR�kX��XYe��Z��X�&��,4�g��u>K�}b��ؖ�P���_��Ȣ��������������1��Ɩ�'��N���}����!3��'�����~���Xƻ���f������?3}����+��9��ood��>pG��i-?��Z�;�Q�Eu����˒���떪������ZW�j_��]��kwc��٤�r���wS��8<17([b�[�]?ߗ�?=�ܾ�~��Jf���}�3|�9}�lOIAE��#�#��Uy��1��j�n�K��Z�����kG��P��>�6���c�u�u?n����.G����}���a�шÈdMM瑧W�SyAE��mۯZ���;*�c��h�H�3�`�ǟ�w2�o�2ee�tS@��V��kRx�fx��<+7R�q -j�7���4��G����Y��S���}����@��sK�\�ۆ�쉮��#K��x�XC�%n��|+�V�UJ�c�1q/�W��o;_zTx�r�W �챾�(7��X����ZA5NQr\T��3_|r5{늩���4f��^���DT���t�Lˋ��vx��N��ʼ��&��K�6?N�7+2lܾ9�=u2F[���UPBGm&��;O��y��+��)��-y��t��9��ϋ�O_��kzO�:hJ�Zf~7�g��wT����ϗ$���x�A;���;�*s�x.?8L�g���0:������Ok�|>�9���)5�_p��{۠������8�\�P�gUOUW��O�Ȓv`��7�\s �_]�p���cö8���B���7va�I�P�룆�hg6����D��������r����m��Z}wŵ��������0^�N'}q9TU�s�/����K3~L�}8E,��z��`k䇟N|�:�Juwq��VS!�T�/v -�p�'��l���п���(��]0%,_���ev]�y,�Ar%���i�^nrmW�Z��Ɖ��役��<n�2s�km�iʻw�m��.K:�:�W� -#Z�Z��,�����%$o�D��K�)?��G�~���Ci�����;*'�����U�H�s��߾� ������m��LJ������T���W��*�7g��� -endstream -endobj -1 0 obj -<< -/Creator( TeX output 2003.12.13:1434) -/Producer(dvipdfm 0.13.2c, Copyright \251 1998, by Mark A. Wicks) -/CreationDate(D:20031213223532+00'00') ->> -endobj -5 0 obj -<< -/Type/Page -/Resources 6 0 R -/Contents[37 0 R 4 0 R 38 0 R 39 0 R] -/Parent 3 0 R ->> -endobj -41 0 obj -<< -/Type/Page -/Resources 42 0 R -/Contents[37 0 R 4 0 R 55 0 R 39 0 R] -/Parent 3 0 R ->> -endobj -3 0 obj -<< -/Type/Pages -/Count 2 -/Kids[5 0 R 41 0 R] -/MediaBox[0 0 595 842] ->> -endobj -37 0 obj -<< -/Length 1 ->> -stream - -endstream -endobj -39 0 obj -<< -/Length 1 ->> -stream - -endstream -endobj -4 0 obj -<< -/Length 33 ->> -stream -1.00028 0 0 1.00028 72 769.82 cm -endstream -endobj -57 0 obj -<< ->> -endobj -58 0 obj -null -endobj -59 0 obj -<< ->> -endobj -2 0 obj -<< -/Type/Catalog -/Pages 3 0 R -/Outlines 57 0 R -/Threads 58 0 R -/Names 59 0 R ->> -endobj -xref -0 60 -0000000000 65535 f -0000076219 00000 n -0000076919 00000 n -0000076587 00000 n -0000076772 00000 n -0000076383 00000 n -0000012553 00000 n -0000019509 00000 n -0000019323 00000 n -0000000009 00000 n -0000024213 00000 n -0000024018 00000 n -0000000988 00000 n -0000033475 00000 n -0000033289 00000 n -0000001952 00000 n -0000044442 00000 n -0000044249 00000 n -0000002936 00000 n -0000051827 00000 n -0000051633 00000 n -0000003905 00000 n -0000054028 00000 n -0000053834 00000 n -0000004834 00000 n -0000056083 00000 n -0000055896 00000 n -0000005824 00000 n -0000058192 00000 n -0000058004 00000 n -0000006814 00000 n -0000063308 00000 n -0000063113 00000 n -0000007715 00000 n -0000065312 00000 n -0000065118 00000 n -0000008649 00000 n -0000076672 00000 n -0000009642 00000 n -0000076722 00000 n -0000012421 00000 n -0000076484 00000 n -0000019261 00000 n -0000067087 00000 n -0000066894 00000 n -0000012614 00000 n -0000069078 00000 n -0000068884 00000 n -0000013597 00000 n -0000071102 00000 n -0000070909 00000 n -0000014124 00000 n -0000074419 00000 n -0000074228 00000 n -0000015112 00000 n -0000016090 00000 n -0000019081 00000 n -0000076854 00000 n -0000076876 00000 n -0000076897 00000 n -trailer -<< -/Size 60 -/Root 2 0 R -/Info 1 0 R ->> -startxref -77014 -%%EOF diff --git a/examples/DieHard/DieHarder.pdf b/examples/DieHard/DieHarder.pdf deleted file mode 100644 index 8141b31a6620fc4db7fbf2c8ab57c571883540c3..0000000000000000000000000000000000000000 --- a/examples/DieHard/DieHarder.pdf +++ /dev/null @@ -1,958 +0,0 @@ -%PDF-1.2 -9 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F1 -/FontDescriptor 8 0 R -/BaseFont/XJNVNI+CMCSC10 -/FirstChar 33 -/LastChar 196 -/Widths[319.4 552.8 902.8 552.8 902.8 844.4 319.4 436.1 436.1 552.8 844.4 319.4 377.8 -319.4 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 319.4 319.4 -844.4 844.4 844.4 523.6 844.4 813.9 770.8 786.1 829.2 741.7 712.5 851.4 813.9 405.6 -566.7 843 683.3 988.9 813.9 844.4 741.7 844.4 800 611.1 786.1 813.9 813.9 1105.5 -813.9 813.9 669.4 319.4 552.8 319.4 552.8 319.4 319.4 613.3 580 591.1 624.4 557.8 -535.6 641.1 613.3 302.2 424.4 635.6 513.3 746.7 613.3 635.6 557.8 635.6 602.2 457.8 -591.1 613.3 613.3 835.6 613.3 613.3 502.2 552.8 1105.5 552.8 552.8 552.8 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 683.3 902.8 844.4 755.5 -727.8 813.9 786.1 844.4 786.1 844.4 0 0 786.1 552.8 552.8 319.4 319.4 523.6 302.2 -424.4 552.8 552.8 552.8 552.8 552.8 813.9 494.4 915.6 735.6 824.4 635.6 975 1091.7 -844.4 319.4 552.8] ->> -endobj -12 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F2 -/FontDescriptor 11 0 R -/BaseFont/UDMDEG+CMTI10 -/FirstChar 33 -/LastChar 196 -/Widths[306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 -306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 -306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 -525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 -743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7 -460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 -460 664.4 463.9 485.6 408.9 511.1 1022.2 511.1 511.1 511.1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 627.2 817.8 766.7 692.2 664.4 743.3 715.6 -766.7 715.6 766.7 0 0 715.6 613.3 562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 -511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 511.1] ->> -endobj -15 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F3 -/FontDescriptor 14 0 R -/BaseFont/KLYRMV+CMR8 -/FirstChar 33 -/LastChar 196 -/Widths[295.1 531.3 885.4 531.3 885.4 826.4 295.1 413.2 413.2 531.3 826.4 295.1 354.2 -295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 -295.1 826.4 501.7 501.7 826.4 795.8 752.1 767.4 811.1 722.6 693.1 833.5 795.8 382.6 -545.5 825.4 663.6 972.9 795.8 826.4 722.6 826.4 781.6 590.3 767.4 795.8 795.8 1091 -795.8 795.8 649.3 295.1 531.3 295.1 531.3 295.1 295.1 531.3 590.3 472.2 590.3 472.2 -324.7 531.3 590.3 295.1 324.7 560.8 295.1 885.4 590.3 531.3 590.3 560.8 414.1 419.1 -413.2 590.3 560.8 767.4 560.8 560.8 472.2 531.3 1062.5 531.3 531.3 531.3 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 663.6 885.4 826.4 736.8 -708.3 795.8 767.4 826.4 767.4 826.4 0 0 767.4 619.8 590.3 590.3 885.4 885.4 295.1 -324.7 531.3 531.3 531.3 531.3 531.3 795.8 472.2 531.3 767.4 826.4 531.3 958.7 1076.8 -826.4 295.1 531.3] ->> -endobj -18 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F4 -/FontDescriptor 17 0 R -/BaseFont/PBZRRG+CMMI10 -/FirstChar 33 -/LastChar 196 -/Widths[622.5 466.3 591.4 828.1 517 362.8 654.2 1000 1000 1000 1000 277.8 277.8 500 -500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8 500 530.9 -750 758.5 714.7 827.9 738.2 643.1 786.2 831.3 439.6 554.5 849.3 680.6 970.1 803.5 -762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 -388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 -298.4 878 600.2 484.7 503.1 446.4 451.2 468.8 361.1 572.5 484.7 715.9 571.5 490.3 -465 322.5 384 636.5 500 277.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 615.3 833.3 762.8 694.4 742.4 831.3 779.9 583.3 666.7 612.2 0 0 772.4 -639.7 565.6 517.7 444.4 405.9 437.5 496.5 469.4 353.9 576.2 583.3 602.5 494 437.5 -570 517 571.4 437.2 540.3 595.8 625.7 651.4 277.8] ->> -endobj -21 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F5 -/FontDescriptor 20 0 R -/BaseFont/XWOHFC+CMTI8 -/FirstChar 33 -/LastChar 196 -/Widths[329.2 550 877.8 816 877.8 822.9 329.2 438.9 438.9 548.6 822.9 329.2 384 329.2 -548.6 548.6 548.6 548.6 548.6 548.6 548.6 548.6 548.6 548.6 548.6 329.2 329.2 329.2 -822.9 548.6 548.6 822.9 796.5 754.9 768.1 809.7 727.4 700 830 796.5 412.5 562.8 824 -672.6 961.1 796.5 822.9 727.4 822.9 782.3 603.5 768.1 796.5 796.5 1070.8 796.5 796.5 -658.3 329.2 550 329.2 548.6 329.2 329.2 548.6 493.8 493.8 548.6 493.8 329.2 493.8 -548.6 329.2 329.2 493.8 274.3 877.8 603.5 548.6 548.6 493.8 452.6 438.9 356.6 576 -493.8 713.2 494.8 521.2 438.9 548.6 1097.2 548.6 548.6 548.6 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 672.6 877.8 822.9 741.7 713.2 796.5 -768.1 822.9 768.1 822.9 0 0 768.1 658.3 603.5 630.9 946.4 960.1 329.2 356.6 548.6 -548.6 548.6 548.6 548.6 884.5 493.8 576 768.1 768.1 548.6 946.9 1056.6 822.9 274.3 -548.6] ->> -endobj -24 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F6 -/FontDescriptor 23 0 R -/BaseFont/PMEVFX+CMSY10 -/FirstChar 33 -/LastChar 196 -/Widths[1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 -275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 -611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 -820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 -666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 -500 500 611.1 500 277.8 833.3 750 833.3 416.7 666.7 666.7 777.8 777.8 444.4 444.4 -444.4 611.1 777.8 777.8 777.8 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 0 0 777.8 -777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 -777.8 777.8 1000 1000 777.8 777.8 1000 777.8] ->> -endobj -27 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F7 -/FontDescriptor 26 0 R -/BaseFont/RUFBTD+CMR10 -/FirstChar 33 -/LastChar 196 -/Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 -500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 -750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 -680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 -277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 -500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500 -500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3 -777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3 -277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 -277.8 500] ->> -endobj -30 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F8 -/FontDescriptor 29 0 R -/BaseFont/IYBVWR+CMR5 -/FirstChar 33 -/LastChar 196 -/Widths[402.8 680.6 1097.2 680.6 1097.2 1027.8 402.8 541.7 541.7 680.6 1027.8 402.8 -472.2 402.8 680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6 402.8 -402.8 1027.8 1027.8 1027.8 645.8 1027.8 980.6 934.7 958.3 1004.2 900 865.3 1033.4 -980.6 494.5 691.7 1015.3 830.6 1188.9 980.6 1027.8 900 1027.8 969.5 750 958.3 980.6 -980.6 1327.8 980.6 980.6 819.5 402.8 680.6 402.8 680.6 402.8 402.8 680.6 750 611.1 -750 611.1 437.5 680.6 750 402.8 437.5 715.3 402.8 1097.2 750 680.6 750 715.3 541.7 -548.6 541.7 750 715.3 958.3 715.3 715.3 611.1 680.6 1361.1 680.6 680.6 680.6 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 830.6 1097.2 1027.8 -911.1 888.9 980.6 958.3 1027.8 958.3 1027.8 0 0 958.3 680.6 680.6 402.8 402.8 645.8 -402.8 437.5 680.6 680.6 680.6 680.6 680.6 980.6 611.1 680.6 958.3 1027.8 680.6 1177.8 -1316.7 1027.8 402.8 680.6] ->> -endobj -33 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F9 -/FontDescriptor 32 0 R -/BaseFont/LASJCG+CMMI8 -/FirstChar 33 -/LastChar 196 -/Widths[660.7 490.6 632.1 882.1 544.1 388.9 692.4 1062.5 1062.5 1062.5 1062.5 295.1 -295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 -295.1 826.4 531.3 826.4 531.3 559.7 795.8 801.4 757.3 871.7 778.7 672.4 827.9 872.8 -460.7 580.4 896 722.6 1020.4 843.3 806.2 673.6 835.7 800.2 646.2 618.6 718.8 618.8 -1002.4 873.9 615.8 720 413.2 413.2 413.2 1062.5 1062.5 434 564.4 454.5 460.2 546.7 -492.9 510.4 505.6 612.3 361.7 429.7 553.2 317.1 939.8 644.7 513.5 534.8 474.4 479.5 -491.3 383.7 615.2 517.4 762.5 598.1 525.2 494.2 349.5 400.2 673.4 531.3 295.1 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 642.9 885.4 806.2 736.8 -783.4 872.8 823.4 619.8 708.3 654.8 0 0 816.7 682.4 596.2 547.3 470.1 429.5 467 533.2 -495.7 376.2 612.3 619.8 639.2 522.3 467 610.1 544.1 607.2 471.5 576.4 631.6 659.7 -694.5 295.1] ->> -endobj -36 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F10 -/FontDescriptor 35 0 R -/BaseFont/VCNSUD+CMSY7 -/FirstChar 33 -/LastChar 196 -/Widths[1138.9 585.3 585.3 1138.9 1138.9 1138.9 892.9 1138.9 1138.9 708.3 708.3 1138.9 -1138.9 1138.9 892.9 329.4 1138.9 769.8 769.8 1015.9 1015.9 0 0 646.8 646.8 769.8 -585.3 831.4 831.4 892.9 892.9 708.3 917.6 753.4 620.2 889.5 616.1 818.4 688.5 978.6 -646.5 782.1 871.7 791.7 1342.7 935.6 905.8 809.2 935.9 981 702.2 647.8 717.8 719.9 -1135.1 818.9 764.4 823.1 769.8 769.8 769.8 769.8 769.8 708.3 708.3 523.8 523.8 523.8 -523.8 585.3 585.3 462.3 462.3 339.3 585.3 585.3 708.3 585.3 339.3 938.5 859.1 954.4 -493.6 769.8 769.8 892.9 892.9 523.8 523.8 523.8 708.3 892.9 892.9 892.9 892.9 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 892.9 339.3 892.9 585.3 -892.9 585.3 892.9 892.9 892.9 892.9 0 0 892.9 892.9 892.9 1138.9 585.3 585.3 892.9 -892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 892.9 1138.9 1138.9 892.9 -892.9 1138.9 892.9] ->> -endobj -38 0 obj -<< -/Filter[/FlateDecode] -/Length 3216 ->> -stream -x��[Ys��~ﯠ�BN��H�N�&N��ng��>�j"! 6�h[��=w�Bj���z!q���%(If3����?~�L��6� _e�w3.a������$f��?B'fj��(��~8��9�e(��s�,� �� �g'?��W�z�)�'�~��~,A����Dz�s�[p<_;�8����M�1�'g�!���M/�Nq؇/���\�]��<(��P���R̖R���10��85�m�����CgeA` ��d�hb��"M��b�6�����Lᢨ�]�)�������]s�)*��|�T�ZQ�yP��6�e� �kL���4����t�k��;+�]��2������l�TC(2� ���h��G,�E��~�����+��zg��f]��%�l�6Ua���?����X�ڼj�z��T�D9W����ء�(�w�#�����z{��� �ﻢ^�#���b��_��^�|�i�V�)�p��M1f�����Ȩ�ͨ��Y�X5V�ºXm���4(oL목�.7�hj��.� -E��C�jL3DS�c�� -(�q�������̂`(q���!x�N�2TQ<�%����$ߧ�(�:�t�Vt������� `�]���ͅ��pxJm�\��A�?�[�6���� M�w�8�̓*�'����M8�g�"����+���)��,vV;��3��=}p<>�0�(q�^!��C}=zI�+��� ��U��9&�bȀ��s���ÓI���OPD2=�ύ�rw�+�����L����A�����Fe�[ˆ��5�{��诱w�5�}k��*�v�+>�����25���S~T3>*�yI����u��U�P��@G� ��v_m�l�L��;3e$ma�ơh��_�t���(�r�w#�")��M ��~�`�fZ��P��2�z��v��&�%J{山���ڦ-���<���Dq�t���*��#4Ĉ9��a~�u5�� ��_ �y���]�>�h����遳p v� Ê4;��ᅥ�[ -�$�h���GL��Y�����I�@^5�b5�m}��X*Z�e��z�~�D�_�Z�G�2�� ��v�*Iӛ�E�b���q4hMFG���Q���=� m��kn�>�T�!j�[��u�z -�(M����Giq�F)!J�}��*mcg.�x������Ю���@���h��e=�N`X��X��.��"/�z���1�n���4�p�� ��Ԃ�K.����/�m�+]�-��X�!�9Kc!�l-b��,�o�7�<�.��uO��`�L8��{�UlB�=��V��6�X?��A��0�0�߷�ڛ2��CؠA(TC�LQ�cò75X�=|�QuP�jaS��`�L[<�a#a��`�-}��L��OO�cqCƇ��X� �a�f��h�$� EL�HLJp�������Ŧ-�^���!�`��gສB����#��`�!�`+�?b�����3� �p���(7�]nH�:3��K��ES�_��eA�U���/�]�T�^���P�-z��ui�[Z�p� -j�LU����_/���u��t%+֥ZT��s�r�x}��Ng�BH8�[���]Qw��`�!*aJ*A5�I�]2��S�N�R�y�� -l�h�=�H�ͷ&c���lt)�G���&�>�u� �(��K�G���"�0�W�sZH�h���oCɴ{�.�L -�!-���qߗM8�Β1��Vώ"Ѿ�b2�d.�� *}ZI�z�I�e|��m�;c��<6���YI���tNٽ*��2:��tR������*�1�#��RZbP)l�X��#��h���G$xP)��Uz�U��V)(K�)�§/a��0�A `D�D��koa�jg맕�JP��i;;���U`S-E��e���~i�9�ռ-�}kV�*�hZ��`e32�qhs�.@�`���v��Ж�v32��]�i>|��,�2�ͫYjOL$���NG�+�4O�ό�Ԉ1U ���S�h� r3��Q�l���l$���;&\��'�2~Q���萭?����#kzk��;�ҋ�Pw�&d:�� -�=��V)w�eg��S;e L�7�!���>A�d�POz�4�g�_ ꅠ -Uzof�+�UL%I��9���"U�o����_�}m�M����9(�L�H��LR�A�3,Ν�cN)V��~A�|Ul�B&!��d4�������NAp�RF�G�_���3JO.}�( �ɰ�v�Ӗ�h��g`�2�.K�N��e�c�6��B��hd�ŐP$��{!����m^٧��54������$pH�c"�.�T,� ��)��կt�)���c�a�$Sv�پ=�v��m;qܒ5��Ƞ2�$��^U�����fc���*Q �F������(���`��܉&�����$�G%��Νr��F>z�J�8��U��j��Fb2���I�Py�#Kƴm���%>(0e��c�����,^|J|j�K���P�E6�p��"�v'#c# �����>�?�4�!�X͔�l��u�3��h#�E6ݹ/&�"���C�.3��¦��J&p<�xod��!�l2�<��ƙ3,;.&��;;���w��d&� ĸZ� q������q�7��N�guA,� V���>����<�c{j�:>����cr2��X0����|��D�ȟ�S���&ȋ� �>"y�l�ϗ��c�EH�[��)y�fũ 7�/������8X3uّF~4e��0�CiG2VҾ�0>yq<c�݉F�],�2_2��h�l��G8$��,C9��7�3�B_:\�fzl�7%$&���4�q���@6�9�nZcZ�a�6E-�P�g������* -p�_b���Q2��V����<&�B3| ��f�CF���Q���GY���7���LY�`V̾`������Iժ�v[K����K���'�������x�q�1��^�aˏ����r!k>EB�d�o�N��K�y]��m�w��+6���bzı����7i�Ɇda�uپߛH�m:�0^� -pl��$�A�����<^շx_� -C��\�۵%V����'�/�BJ\�s��x���^,4Z�C��x�]$7\Kd`Ik`�:YF�xP'-�!��`~p�L~�v<�t����,ܰƜM�f������&�N�՛�/�E��7������|:R -endstream -endobj -40 0 obj -<< -/F1 9 0 R -/F2 12 0 R -/F3 15 0 R -/F4 18 0 R -/F5 21 0 R -/F6 24 0 R -/F7 27 0 R -/F8 30 0 R -/F9 33 0 R -/F10 36 0 R ->> -endobj -6 0 obj -<< -/ProcSet[/PDF/Text/ImageC] -/Font 40 0 R ->> -endobj -45 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F11 -/FontDescriptor 44 0 R -/BaseFont/DPHUEN+LASY10 -/FirstChar 33 -/LastChar 195 -/Widths[0 0 0 0 0 0 0 333.3 333.3 500 500 0 0 0 0 722.2 722.2 747.2 791.7 0 0 0 0 -0 0 666.7 1000 777.8 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 777.8 777.8 777.8 -777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] ->> -endobj -48 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F12 -/FontDescriptor 47 0 R -/BaseFont/OMLBYK+CMTI7 -/FirstChar 33 -/LastChar 196 -/Widths[368.3 603.2 955.6 880.2 955.6 896.8 368.3 485.7 485.7 603.2 896.8 368.3 427 -368.3 603.2 603.2 603.2 603.2 603.2 603.2 603.2 603.2 603.2 603.2 603.2 368.3 368.3 -368.3 896.8 603.2 603.2 896.8 865.9 822.6 838.1 881.4 793.3 763.9 903.8 865.9 454.8 -617.1 895.3 734.5 1042.1 865.9 896.8 793.3 896.8 852 661.9 838.1 865.9 865.9 1159.5 -865.9 865.9 720.6 368.3 603.2 368.3 603.2 368.3 368.3 603.2 544.5 544.5 603.2 544.5 -368.3 544.5 603.2 368.3 368.3 544.5 309.5 955.6 661.9 603.2 603.2 544.5 500.4 485.7 -397.6 632.5 544.5 779.4 544.5 573.8 485.7 603.2 1206.4 603.2 603.2 603.2 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 734.5 955.6 896.8 807.2 -779.4 865.9 838.1 896.8 838.1 896.8 0 0 838.1 736.5 677.8 707.2 1060.7 1075.4 368.3 -397.6 603.2 603.2 603.2 603.2 603.2 953.8 544.5 632.6 838.1 838.1 603.2 1028.2 1145.7 -896.8 309.5 603.2] ->> -endobj -49 0 obj -<< -/Filter[/FlateDecode] -/Length 1310 ->> -stream -x��WKo�6��W=I@ň��P�^�&A�"/�C�ʮvW�,+����p��J��.`�_���p8~�(HX���5o�??�gg�S՟V��� c�Vۀ+��Z0���/¿��ջWo� b�UA��^��v�;1�H�2n��e87 �5~��B��Y����\�9�YsβXf�-�fI���܌eY���+��ֆsM�cX�YG1�:�.v�L����s�[��`�i���QŔ�ZEF����N��~��A$�i$��/�On+x������Q�v6��:�t��2i�p.�V����S��E��떐[��x��,�Fo��ڰ�b�e�).�2�u{�I�ms��D���_ �d�O���H)0�5ɍ��%}�w ��/7��f���*:�C{m�=[�]������aš+��5[j��8��st��l���zeG�ދ]Y�.}c������9\�Kp��]���L��tb#��ԯ5l6H�$��p a�|�� �I�_�En����v.nI�(!`�:��)ڹ\&��}_|�����卷WT�?^U��]��lin��Ү��%ώ�%�y�+6lā�{t8�� xQ�s8)�r�� �����e�`�AP#r���#^�O�x��q��� ��� �ؑa��EΧܪO�iJi��>�w�6��UE2^���T��S8e8p -�#eæ�;���.S@m� �Kx#`�C��5�m/��y��t�2͇�Q,�X&�&�L'@�F�t�ӄ 3���s -O%V�'��&�2& |��3���A��fPp2���@���9P��,LK�,$M�uC���:�l���N�3�����-����2��.���87��#P�/��%.�KUbvI#0������>�v�_���KE�ADxB�n�X;�~����Sěڐ�D����?����`�>��\/�KfI���#���O57Tp'#HZ�D6I��䳃��L�S�Le� r�}/hڦ:b�K���P��J�3%'O2|����^���0i_�暼(��N��Ң�eK�r�{��ĻHʜ�F,�S@�}I���}YU��Ώm��;j�C{{( ��Z �܍3��]{D���^^����Ml���oi��-[�k�Q��s0]�Ҁ~Y�`�1NKS�P�/XO@d�hzP��͡.gQ�� /�Tn� s -���'��6}Ƹ�/9�����틶<O�>��c�:)7E"�ғr33���&�I=)7�IJ�,�������ʖq=�����WC��}�7+�b� -endstream -endobj -50 0 obj -<< -/F6 24 0 R -/F2 12 0 R -/F7 27 0 R -/F4 18 0 R -/F3 15 0 R -/F5 21 0 R -/F8 30 0 R -/F11 45 0 R -/F12 48 0 R ->> -endobj -42 0 obj -<< -/ProcSet[/PDF/Text/ImageC] -/Font 50 0 R ->> -endobj -8 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[14 -250 1077 750] -/FontName/XJNVNI+CMCSC10 -/ItalicAngle 0 -/StemV 72 -/FontFile 7 0 R -/Flags 4 ->> -endobj -7 0 obj -<< -/Filter[/FlateDecode] -/Length1 1035 -/Length2 3996 -/Length3 533 -/Length 4688 ->> -stream -x��y<���dzC�%Y������.�X˒�'ˬf��f �$��"ٕ��[(��ː�P4$k��9���{~��������~��>ߟ���z}ߟ�WR����.��� ~rPy�:�3�Y���*a����0?����èP55(���@U��������$�#z_#�����)��/� -��ǐp(0C��c��&(�`ED�0~��@����z��c|1��Z�� -�8��ĸ�L�_�LX"��g����R���K�HQsJԔh"����`���D�����I����^^����N��<���J�xo? 0#�1$�?�v�?әa�8�?WM�^8�.��@�,�| qA�e���"�|1�1�?CP'�G��Es[sٿ���������������п�:".p��C P��z����;�����%e�A"!�1QO���(�#�1A�&��,O �Q_�c �Dӯ=�n��'�`�ߤ�Q�"(��G -�1GP�c��"�v?�J�w�>^G�j����� Ոx�F�G�jD:�T#�#���� �k�� 5F�ߨ@� ��}G��A!T/9%�x!**��$��l8��>��P -TQ�$����OD=,1G=ZLŔ�Ń�q9'$��u�eX��E�BT�;55-����O��I]�|DS�>Jjz�S�Ƿ���j�c� -��t�cP)�% [��4�Y�?���Fh��>�T� �����*�zt�ho�hD������lιԴ9Ͷ��u����,;��y�EO�fz��;�qo���pW^DRΜ���Fg�k��4��vX��Q��<��� ?��ND7��>.W 1��[�[~YR�F�X�s���i���l�S?�1����#(^Q�:�#o�X(���A5�� ������]&wo����L5��5T��й��l���Sλ��$�\Ȋ�bX��so� u�L�\_L�|�A�`<|�}��tg�Kl�a���x��x�����3JAS���x���'��t}�Q�y��p��Z�����2��������� .P%�s�;ן5_�D��8q���H~�y�L��4.s)�e��}��b���c�^H��Y#��l���|�(F[(�%����wV�s��V�b�0H����������+��k4/:������C����jI7v^�����]��}�v],9�@���]H�`)%��N&�j֊�V�E�7��W�&j"M����&Y� �^�{ -eJ��t�n���MW?d����i�%y�� �����V"ս�T6��.C�\�`3���9<�?��r�1p -aw?@��|A0�f`Ϡ�SN����ݠ�;�O�Na{�ۿ�+۾�<�O��Fi˾�s�TpD��Lsּ�y�YfF"� -� �o -\?)��z9 -��{BZ��4�O��[|���=SÞ����:��~\�y���|�ֆ�q/R|���������=��tE5�үyv�þ@���c�;V�K��f�7^��Nv5�HVoK��`R[����L0l����e7�I�q}S!N����`06�~����0��rX�L��v�C��@݂E���K�,r�²�c�S��l�� -|h�,���Uc�c��vD�]�d��Xi��u�~䩖���d��ar��ȹQ产��1��jB"�e=D9l'|�G����G���IoBq�G��l�Hۃ�p� 8{�K\�ZB���˃Յ�;����H�<��� ��L�]�(��/,WU�m˪�w�G��$�������J���ӡ`g�8��!F��Z��7��,��ە;�?�&�W���ݤ(MJ�C6��q9�G��K��FNʘ3Ըڛ엽�cBӥ�\�ڽv��}�T/���w�zT�x|wAQx����B� ���ҡ� �V2���^��;�@����x"�a;֭R*`T����}.�i��$U Q� �V�.Ŷ�y��M��Z�������='[�|�΅�ߘ�v�u�~��]����7 �|cW۰3ơt�0�b*��+�V2 D�X�7S��)���'bY�A��~h[� R\�sl52E�d{#F�,D�nBuX���O��Z*����Qf0s��^Ǝ q =Sl��i�� ط�*��F���3���0NY�e͢��zb��Х���U(@h�a�"��瀹Ў��֝�x�\� ,�~��t���=��*w�'}��ٗ�/o�w��8���8��b m��w���϶%a'gr�>|��eȄ>��ßOZ똈wWV1���훀��}|n�mp����v��Q&���ʍ�5Js��+Nk���S�M�K��?W��|�TY6.�;��5Xzb1��xl�ύ��N������b��4��X������b��Unt�$+X�@�\j�`jݎ$n�%�=e��S���gH~r�I~;��2 /*�P����3�^i��;�nZ(M�R���˕W�_ܢwfzt��k��^�g&�f��ivN���rJ�G]��?�̩`��a\!%A=�I��P���##9i����G�i2��gU����rԙPJ���7� E��iT���{+�Qm�t�� �t!��(��BW���V������[��7����ƛ�L"R>�w�n�k=wc�⨌>�н���R�Ƈ�of��:���M��+��:1���[l�I����ρ�&��������/�'����Z�V�7q0W�n���R����ޥ�-�������_��Y�j�h ��n\�q^_��L�ݡ��t&pg��j%�&�l|d�;�WG�P�\<pm O�����/w2L����yT>�ZO�Z��2��P"�s�x��m%&�ڳ ��H�ԙ5m"m�W��T � -�>�TCƌZF�۷�+}�w�2���\eTnO�,c��R�Zq�z�<!��QW�R�!�G��|�jP�������bQex��[���a2�K���j���$2E�i3�G.n<ē�.�1�<O�4\"����盘w*��[#���K�D�%���`�l�a�C���~�;�v�( -Uzv/֫M*|�c�9瀈w�0��g����wKr$����c|��hR �pp�D�l��Y�����XܧWFxy3Em�X�2#���W3V?�>�)�Vd;{�}�u��ǧ���7��}<��斞L�̦���X|pծ?xc�qְ���֎X���4a�� ��&����s��O��,1i�&d���b �{�ޫ��IE�����]��b��o\����` ��M���x�Oǥ���K}I \�!�n -l�G(�?-�I����0х��=쉠�WD�� �.��tgm�䜜�XM�;= ��v��ѫ�w���x_��~ȁ=�[Cf�k��X�[�ÄfL���;���o?χdDl���Ӄ��J&5���ne͊]�����)+�"N��6K����c{�.��9��SC��79���s�q\c��'�{6&:��2{K6�ӗ��5'wy�_�4�M^yy�}%�<h#��ʇ��Ov�s�pv!��I���g~�Z�Wz�R�����^m��4���T�qg�3��e[7��� ��{� �~ps�oy�,4���g�g�w��*�{E�C���1�G��xkޗ��=��[�SM�(FY$�O��q��ym(�J�&�vxϹp��Hݨ �尘egC���1�\ܪdƎ0$5d�˚[!\��Aǖ --����e���Q$���&�0Ǧ��a���_�9��!�� -)��\��rdP�V��z�&�mYZQ���f^�=4�\��WG���nJ��jc���l��g�;�"6��e!5'Z\�p�MED�ӄE�C6fu������E ���+ww��-��-�-ǎ���FgiG��UΠ�&._!ҹ��6���TŲ��=��,��P�,e}�քdZ�;}[��'�r�9օ�>$²[�rAuy�fb{�v� l���m��x������q8v�*��x+��R2�;�{�o��.�y�Bu�N]@�0gQ�@����\1������R��F�"%�Օ���7��zA3�?Oi�y�k�t]6�#N�� -v�d:�J ����b��2[�rNu[��ў�d/ ��?֕�Ց�(+���L��Y5 �;F_��2.sl���|�u���Ҩw�9�4��%�3����Dm��4yp����@�X�k]�p1|IV|���ٮ�M�J^F�A��D�-%����r��'%ш�ʫ�8�p���5�*�vxexys���ݗ ��!�욖�S-��J���~�J{��E��Ok�Z��1�1��?ٚ]r��d4����66��L��[�zf��V�wL�!h^���,g�}�H���=7 -����i��6 Vp��<YE�u$Uo�5'B�~��ui��u�n�'k�E�鏄l�,.%JE�¬���]�o�y�t4��i���]��]3����l�"pUb���a>Y8��p!����ߨ��aJO��Ѵ��i�9_:AыA�P�>~Q�-3/�bL���U���6��u�K����-����$�-��䁒����1o�1�Ar�Q�F���8 Wr_s���g�}��m>+���7fT��u��|x�M2b��ƆVJ���l{t��E��@͠`�M4����=�=\jm[��� W���9v&��t�<M6���&g��g�k쁘��ϧr�Ka4�q&!�|ʏ��'���o���//��o���� ���'��S�r6 -endstream -endobj -11 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-163 -250 1146 969] -/FontName/UDMDEG+CMTI10 -/ItalicAngle -14.04 -/StemV 68 -/FontFile 10 0 R -/Flags 68 ->> -endobj -10 0 obj -<< -/Filter[/FlateDecode] -/Length1 1269 -/Length2 8840 -/Length3 533 -/Length 9638 ->> -stream -x��UX\�֦ !Xp���!H���ݵ -(\ -'��w�`��!@��n�!8o�>���t���w��Z�b�c�5�o�9�"SReٙ�%�l��,L,��Qy5if�3�2��#� -��3��y,<<�� ���������e�DF���ٻ;B�-��ZQ������6`G���-@�j�y)bjl P�3����L����5@�W��*`'��Ą����AL���9���-i[3;�� g���r;:�������dgk���͐� -v/z�7����7�����������_��n��2ol�v��;{g(� o;��g�&�_��� ����JC��!�¶��`�#;3���' ����Z�̌��������t�ҿ�}������%��ku�5�d����ۃ���f�?��%G�@����,/�/����CM����5�rp��ݑ_6�q�<Y�[� �v{�d�����xi�'���#�_������q�b���7q1�����C����b���;�(�8�@�?��.��^��Ћ�⿉�E]��(������n���*��&�2���W���/e���/^!�@N�����c�|1o�|ѵ��/�������_�g�|���� ��� �?�ņ�?�ņ�d}�u��������s�dd�d0�r0��������T��88�������ܬ�GM���п�/����r��`7�)����<��"3�a95�����ԉ�`P��`��VIx�S�;AQ���ג��g�)���%ä�%A�bL�xW ���_��6�,�.���~ⱄ`$���Es��]~��>$��������yP��!��=�0�$�ie��w;&8�w��mR��:LL�_��q���QW�t�-ZHE��&���"���s������E`mQ���{�5�G��8��K�e^�*NJtQ���k�Or�ۃ��U��p��̘ L:�4��!��Q� l:M+�I$^�Z4�w�|��p����"57��kh}�ʈ6����{��`�g^�j��j���)�A�� 6o�O��|M_<��/̕/�>���8u�Q���"P|j�+���7E�-45|�eh�@�����}��{��{1#�GL�8X�>6���ƙ�6H�)t��UH��,�ǀ��Ⱦe -4y���2iw�Z �ꥱX���V#�� �juJݰ��́~�eDVH�} �̙a��o<w��(L�)#dv�셳���F��.���p��ϳ���&u�P�|�<"lc -�%I<A~Zi�al�8��M�� -�z���mV�Q=�NF�����-�ȅ�R����,Q(W�Y?�����#�?��'iW~���@��?�E�}�8!~86�?8�sj�2�㖲^9������q!��\^��B>�y���v<��9��]$����a��`7�x�(Fi�F�9ŗ>^�ա�6�2TO��P����i�������϶K��-��2S��Pҏ�7t�4�_kv�}E�t�co�)qJ���FJ`�O�5X{�ϓ+����z�'�qm+�t� i�7<���$�˅* &��mJ$ҭg^-�Ӓ�0A<�����c�gʱ�0t$<��֧6��S'������a+TSuSI��r�>9"^����B��e�O��6���:�~ؖ�J =�u??��5�q�7%��{yil;P,O�xOrR�n$�ۗS���5T^妇?<[���t���=�<V�%?�jF���.y�[���Ӫ�;E�r�L=�6���-�~�ZJ��,��q��|��(>�GB����!�-R�_�����eG/���f�O���pp虊*5G�\�rJU2�B��f�a-��d��>Z��e�TN�{!�̬oTlv��-�m���8Au��mA¼'�}���SD-O%ՠծ);���~%,c��G��:x��ܥf*�b˭>3��L�D5#�s�rm!貧����:]��O�Լz"*�Q��M�q$l��r�nT���zo8�ƍ3���!';{�qܢ�u��i����{W ��y!��Q!���*����t��b;�H3WX��CpYcvKm<�{.��cd ��9&�5�s��#Ιh;�l���@w�ԃҹ�,��C\B���@� |ؔo���3uz������4hh��^;�j"rp P��ƣ-���f ��`)X���1�!$�C7}�e�[ӽ��"o'�� -�#��d��R��R�}|�I�$f�)穧v7���)ig�H�i=�?3fb��U�rC��k?i���R���ҧE�-�.8bdk[��[Ŗ�ã�a��~��]GW������-�;Ʈǘߙ�Y���k�cZF���H�$*<�q�М���N��P��`�H����� X���H_��]M�)'��H�w��_�D�a6�V�ĵ �+qI������".� A,��n�(O&��mH�N���_�ć�E��F!�����w��]*�a����q��<pDR�)�]�+��ܧ�"Z�=�:���Q�J�Y��3\A +�vl��C�1�p\}��dpm-i�Kr�Z������;�l����e����?��,s�� ���E� -�e<�������fYu!��Id� ^/)(�a�A���s�^Q*#q�/B�X*z����tV��!r�W����ű�ɱ d�_�{ɛE�}>� ݀�_x�]���#�WO��!���vH����� ���!F=���E��.ޣ�F.�b��,�)��@qB9t�C�V�����q�%�O�����SF����[a�X�ly��:4�U��#{7T�V`n�K����#j��!i�����u��lKb���3��R�_8{� ��c�8:E� ����7U�#��5� �Ol�q{SL������+Qu�`��N��f���������EP�>䱘�&�t=?d1+�Gu�G�F#��+gu��%,�8D��L�c�jlK5���f�`)}B������Ix՞��3'U�/�(��E�hCI��H�,̺:��pL�z+L�{����R��RW�����U��8$�s�#��@�{6E�-O��NE��URD�c~���T2�(��3��$�4��z�W[����e��h���e��0˟*1C�7�]�w�-�ٌ����A>3�g�6=Z]W��g�No��ʹ�\��!�ʛ_�ev� 7 -C��:��g�)A���ˆm��C�c� -�Xy��ќo��;@]H|��꾧Tμ���h�A��E�F 2{i9���tɢ�s�P%w���@��VR��'�������T%���9%�i�Ʀy,���2��i�A����D��^u|���--y��`��]��ų�E��[̻D�����/��.�0�``��Y��f���8ݕ���n�~���:���M��࣌��}����s��uF �K���\3`�ǎ��*�"�B�Fw��A3^�:�ɗ��z� SM����� -�T0�n�<�T@!���1�ZH,���\E�Z�`�9�W�`��Z��`���5�@����ۉ�ʻ��12m�����t����8Я��Y��MN��2Mh��co���Q�uy�#��m2W߉�� ��a|R���D ��HNj�u�js�%3٪�\'��8�J�rϣY־O�%���~�0�q����(X�Dg��������C�1$����q� -z��v�R�Y�]�й3���ft%A������t�`7I ��E���;m�fC��̞X��I^V�v�l����v/��ڢ���s��r�8��܂��?Ї�>7 ���z�O+���E�)� -O��� u�dz��=�� �X�q���J=��nށ�����CᡜS�� ����53���Sd��~7tM�n� t����F$\%��5�O�U�P���f+�ClkV�b�Q���c��/J��S��%u��9��ީ����}&�Y �8���Ahj��"�p�k��T��u���1x��A�?7? -�Ie �^Ϛr�~xk'���^P��7���7�����Jtw��FbD�o�7\OM{A�J�]8C|�K�ߓ4����%�z�t8���T_W�,��¦%X8F�i�w��K��^8���xoC+v^��!D]�3Ũ2�iG��q �J���;�2��_���;��Q?I�^�̍�� �ts�����9B=M*!��|C����;<��d�!��*�c0�q�h!����shaO� n��!2b����@�[U�%���D���Mx����%�q=E�s�U��]t�݊�EC���_=��tP�F�a��dgÆ'E�KM�d��/*��h{���X�$X:��|+8����=���.�Pr���V��Y�h!�<������ -�y9�3�Y��m��}�X��G2�xM���Ά���U#/JM&�=�TXϰ�5\�l��$K��y�]g�eF��Ir>Õ�k �U�����8vzgf��:�Ɨ��5c<��L�ŠYC�*��3�7=�^'�FP�U����v����ZB�S[�j�k �m���4k]/7�<�P �r����f ������^o�l,���Ԭ�Bo���"]��rE=I���P����9��f� ��n1t{1��bL�XN~^&E8U�B�]/O�a�4�u���;g�5_�/D#�+���S�Q�SyS�/�cn�����W�֥w��p���}�����^{�u�qV����'���Wy��}��Hn�_]�C�~u�'Ũ�`l�gc���\4U�7����g�EWFs�5��?uy�R�T]j����՚�k�Zb�lE����Z��Xeʺom9+�cƔ�Ds�Meu�����9)BԱ�0�U�.N�d��)�����4/��fZ�� u���"r��l���xU,`#(�bq[���kZ["����q|��2t��y���Ě��Z���8��ܤn?�W��$��b$�*Б��Sڣ=(C(-�D�Y�A��v >���Q������Z��/-�c����`C��,4{�f^Jfⷸ:榒<͍�Ǩ��+s��� -s�c�nۓ�:{��0 ��$~���)SZ*c=-�]̰�xG�u=*bt���*�� �CG�����L����5, #�B�:��jx�m���=�wB�e�dM��D�: I�$gޥ,�\�TJu�@2��ctL��=��)��"iB��I -UH�Jc�Q��楨�2�(0ޔ鲯�VH�:2�]�/.�5c�,���h�>+�����w�a�O���j�ƶ�笿\��πqh�L�d��o���Ŝ}mu������G5��W:O���II��H)��Q�����? Y���=��3���PF|�\**�8����#�� ]5�9%*���^�~���6���DcoWhj�H5� Z��ɮ-������Q���yJ��k�B>o�����Rþ�2и.k���\s��|x�B�|\o�i��-�nȦ�g�!���W;8�~�Ny����F04�̳bƑ�l�1����˺�p�mr��^a�$_ǜ�~O3o,;W��2�B �,D}�u=m�l]c頻�\c[Re�;?'�K�i�r�R�cܡ�<�h�,�#�:���<�l�\���p}���[��v��#�#FT, e�+�|����q�eG�+�{p.T�h�%4� ˆw$��새�K�7ʬ�zس�/Q- o��F�H��ʉ�Y�4�����6��x������jfvwS�����[]_k)L�J������n�a��>��cW6��{m��`q�q^�h�N�Iæ���ybR�g��v�p������W�W('��=}4�Nm� ��m�$�磝�H�C��<o�z%��%�d����BIx%�Z��ư�{=Nb����"��UpųjJ"%S�Mo�Q����� �7�a:��%f�e:�_��!)���Կ�`�f߄��_�F�k��u�ԢG�<�<�;���N�6���Q+�Xn��@�����Ұ��N��!T���gz��h�vUYA���Y��xi�l��2̏iG�3�(� ]�g�7���4���H��Կ*�?%�;U�ƃ�u�����9��w����κWR��c�[F/� 0p�L����C=�䁰�%�7��/={h/~��Q�kW���Ze����߷䶝�o?���<r}���64�gE ��aା/�D�.�vsmU:�5�\Ϧu|�VqQޫ�`�v.��5�.�����u�)��p�d�e�M�F$]BE�X]��j�q�v�wR~��6��X����W&�>�\���J`��Y?i�B�_wlG��&�G�\�}X{�f�D3�����rb5� -��J�H�nO�UCٴL��C���n6�> -�Z�^m��>5CͬB��|8����ؕo��s�\�9��m���W岣�3?]Pf0�"[���ﰣ�v^m9Ԫw�� �NLy����@��rch�������u�t��W0V���F��H�~%��;�O���%�+�*��3�B���s���w� v��ѱ�J���N�#�D�/Cqy�l�y~�-z�yc� !qDe����IL|t�+�x�3UhΌe���+����}@������3,z5��-@�m� ��nB� �����\�����<n��2��&k�s�ys�����+���w#~\�۽���65�������ĒX�h���EN�yI�-J3�ҿ:�x�0��{O3�M�#���dg�4W2�C2�{�U��ʻ�a7b�Z7mL�M���ӄ}�{_�-l��z�.X7�����:[�C��(�l��=�2�XBH�ٖ�����U�!��� R��0��;�+���y�mv㰎���x#���*�e5�r���|H�/b��$��8K:$�gKGoZ��%�B�`��0�c�Dž|��ԓx2���0ك��VF: �"L���(q�́����+ht�pro�>���qK���حp�זH�l�����k����T_�zeo�2�<Q�p�F���G���슛&Y�>|?n�B��c�vР�^q-����L�Δ9��~G~��*�=�6w��I7o�5�x�� ��1ܶ��=?p�fj7l�ȟQ�ݟt�����@��\�>A�G�s����W��eL��:"V�z?��#W�����p�g��X�qf��Cy�U�?����(}��NNHl���Ѷie� �ڐ�¡�;���E�� � �0�uOU��p����+ݮ �-��'�p�y����M2 -�Ki$�~���-c'7Z��b\���o��U$�&�X@%�!ƌ�ۑt�z;wȅ,@�� "2�MS����o��W��N��:БG�^<�U�_ ^);��"NI}��� *�U�8ոY:�lؐL�\#l��Ųob1hf6�e�&���.����:�3}�8��L�Ϫ=w�OrO�{,�ں�m����&ŋ6�"�wm����O=�U���p9j|�o{f0w�Z�0eM -��E�n��݅�^�u|J���do~D ��t����sY*�s?t逍2Fb6S����(�]2Z�;�$���CKw A=� W�̝�Y��j�� B�Ql����H���O����ѭ��Ԟ��&4�Uw�=�f�I>#�>�=�V6e��G��Ԧ�w�$�^�|�Ư��n��EU��4]އ�Mֳ(�=��WD� 6�@�&n��#�腲p#�vp����=y�,:z��;��}�gfݯWz��K������w�|)��7�L���3�'���� ���@�b;��j��Q��k��<D��b�k��=��)kԘj}����}���_�6����"ғ���9Y�@9h�,K�pp{�k� ��<��ج�N���h��G�U}�B+S�@�֘�X,��*��F��ӛ�@� P�:��Y_h�d�#��/r�6�7XP_x�t�H�v��k4!����[h���+�! ԬGuX����&#|���b���y9��'% �@h��(K�8��������y�OCf��)fD����B���R͊5���Ho��z��?^��N�ѩ��T�U�!kc��3M���p�����ρh1~��f�l�A��#UhxS� ->�mV %�^��� -����()6�|�������/х���f����VA��֪aa�c�0e�k�P�Ī����wC�ߩhc��&M����~��� -ܡJ����k�*d��|�4X��Zq�S^�&���~Y�M<����,O����cJ��#0�Ə��}�Hq&n������i�8`�������e{�6�K����~ -�$K���R��( -+�ɛn�5^�x������a������'e�Q�^���ew�n~(/������p�U���"��������\̑y��[�v@p��3a�F��pX ��s� F��DͲR�t��UD>R�oz�Y-��ݮ{8���su����ã���H���S�o�x���>j����Ş`G�YMV����îg��q�����>�~ -b�ΐ �[Eg� |u�Jw��{���XH��+Z3�G���4\N4�t�:�%P>���#�e�j=���4(w���?��KP����E��ʧYgt¢��K����j�O��c��O��6��U �������-��3yJR�~�����MF��Gx��m �X����������"Z��eWDt�(��2@Z�q��k+Ǔ�y�;��m� ,�gD=FіwY_fo�N_1��0��m�{�F5�0ȷ�)o���]������U����l&������3R��.7FTvv�Z��|�a���[��g�����;��Ꮝzl��!���G�$L�٦���~�w*�s�����X�q���� ٔ'��/.Vu3SW����Hs}�$[_�����1�>��"x#���Q�*�~쒍ۘ���>�M��?�iG�f���Ɔ�sO�? �:�w(��=N�*����/PO(�g|TGQ�w��5��{g����+��v��,�&����5rWR[2)�b9u>�G�7�����lR)"��5��腎�fZ�he\�?�/+�؊-@��������=�OkGGcYI�GE��$C�F�Q�lP��/��i��G+���#v���:�t������3Ƶ�[%M��9�<�U#�;R5K�-oԒG��6S��fi��s0=d)�c�#�'&'�s�b�6f���צX̖��ɩ�N�z�~��9Y�6�sMP����6�U�Q����Ia<�����jsX�j ���l��]Q��&�ے���)���to��1��<���r;l�R����S�*r�%�b����|i�y��{}�l)?�1�.�a�X� ��GGiר��Ł�t27��� <�y�˷Q�Ǻ����/�>]� 2M.��6E��71t������劅�D�O�9�s�L $�c�^���J�#ʹ�5�Vf��F�Z� -D�T�9�8V��h��� ��^���\ym$�D��1��S�J���6��c��=,F�l��CQ�e���g�d��z3��8A�����ZJ�Gt�v��Z즪L�ϤX̖*wx�GD�����/��DSk��#����� -���?+Q -endstream -endobj -14 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-36 -250 1070 750] -/FontName/KLYRMV+CMR8 -/ItalicAngle 0 -/StemV 76 -/FontFile 13 0 R -/Flags 4 ->> -endobj -13 0 obj -<< -/Filter[/FlateDecode] -/Length1 1628 -/Length2 9038 -/Length3 533 -/Length 9990 ->> -stream -x��UX�˶`q'�Y8��������;���w �%x�^��{wr������f�0fU�9j�UEE���(b�` -�t�wedeb��)�rX�X���Ĝ�&� {qW /���� �f `c�r���gAB��98z9�,�\�bt�����Af&��W+�8���-@��t�b�Dlm�-q�]���@s&$$VV�9��` -��#1��$co����;l����C�@g���I�[�;��źH̊�j@��������?�K���*����ܦ�1jb����q;G7W�3@���l��S���)��Anv�9*�jb2���X��\$A�@se���������8���?%�m��������&��>��c�& {Wu/���5�_�����qy�X�XXX�������?jI؛9����G��`��l�>`����@��@O��,��d�� -^���`������d�z`��W�̠���^nkb�;^���� -47�����3��_#�~�`v4q��-���3;ں����9�ٙ���]������C��U���C�������<��q��7��>h�D��L~�p���&p��l/�����ҿ ���v��M�,��7x��o�W�M\�f�|ÙM�M�l����/��m����{���w3y�>�� �4��_��I�?�����pA�?��?�K�n��v���R� ���Ace[���`+�?l������@����r��V� ���[���`+��~{�=�@��������?��&.w�����>���F6������`����� '7��8�����������|�\��0�K�7[��/� 4C��� �4b ��1���@��1����Uz��q[�3=���i�:"�F���ñrl�/ZR��O� -|�_n ���j�㼳��ۺ�g��lօb�9ƶ�5�p�¢�]��:v_��<.�w/����w�~k܉���k� �!�L�kt��~J�\��#��]0{؋ƕ0�F�\���vCIs���VI���4?ߴ��� 5o�o�cy�^d�6>1E���]DJ��i-�s�Y_R��.�W�U� �(!r%q��}�_�E� 9�����7@1���}ʮ$nv$[s�scf�Ҵ�S��wGq;���ӣ��]>: \ N��O����c�ooNS#ѡa�%2b�B��L��؍�n�rz����nal�I?b��;�x���$&7��������*,Ϸ��q�`S7�+�k ?���O� �w�9H�b���%�H��Ǡ -�ZΦ1F�r6:�ah�YU D�%㻖,��u�B9�;C�N��U�'�:Eђі����@��ڑ%C�]2� }h������˧��E&}c]B�̶Ya"�H��t����䔂�,���(X,ը`�V��L�W1����� -�0�X��h� q�ǎ'������� %$�Ԅ��#���)��j��6�RA�P-���G&�7lp�D/%�Z�Pb�rlG�m�$����������<�bO�^���N����4-���Q:��akû��E���0n��J�fK�D*�P��G/�����Dd���9�����Q�j-e|�B�������,>S���5Q�LjELR�r���pYA�FT���1�%MI.���|A�B�ĸ)T���sy�� �u" -������D�ԶѕLf��r�eZ��@�zˀ�{.Qd��/�Ӑ���TC�������MJ���oę6̸���I�ɼMw�/ Id�STɖ��D3�:ی��c��.0��T�x�)�߯4:�q��(�oo�)�cֽv㫔.�`��Gxf]�������-p�4'�Hrqn����>�M��A�s�WgL�O��C��Yex}4��jѩ�1�ޮ�Sbb��������Y��t�W>�1CH�:�.��~�4]�թ�v�܋2jT����6��h�u�++�`��2��ʌar��V�5�Ʈ8����j%h�]h2*륏l�.��1_�:sR��z����"�˶(0�x�-47��R2X��{dja�Bx9���wei@���)O(���g���چ�鱻h I]�$�q��ɯ.�Eא�M��eP�I@t�K��3�kk�뭆�������� -���z(�#l���B�����.?k�����Q�IV���@��֛�,�s��;}�Fm�=!�^�e��c�~�d8�K�f7�>N�Ϋ�������9C��)�ɜ�Y�S��s�9���������2y��{�Ƴd���9��t�S��љ"���� ���F9r���c<W���3��J)P�-�F�Ã�0>�����j���?���D�U���C�K5ٲ_��JB�j�� �֢#�GDO��������%,\r�L��ֶL�VԻ�"��u<���T�� -Y�`�Nk:�K���>Y����_<�Ȃ���sDU���-��e��ǽpu@3k���ҧs0FU�d��`}<�s�8}t'��7j���m��ܺ�nU�л(�M?�Z��%{�����,L�� Z�g��<)|{ŏB��!$vo]�EB߆;�W��Z��m�Q����D�fz�狰�t팎����ի���IQ<4و�1�ivܽ2�5s8��0�a[���_$5�<��J��zh'm��D�8��wqG~�+���P��S�'���t��@���uʏ>��C*t[ph� ��ջ8��aQX,7��=�E�S��ו�Qv���7�&�a���{cQ�Ɨl�w��h�G�y�_��~Ŧ]����G�,��5�.w�� ��g�2/�����"|���D�D8��StKu+Q�ŬZ������Zd �%v��Ǟ��s��H6��կ�]�%!�=M�Sc���mw�Z��H�[���m�-�N�2�U�y�S�ϣ4��g��:#F�L"HKȠ�������9�<:yr��^���`*�=�����)�TE�XT����vI�:�����nj�/.��E����'�2�"p��h-�v(�� 6�K�~5����EX�R�ͫG�(7���!w�a�\7E>;M#��dA~c���j)���� ��&2���w���3�5�M�����51��/b�i���v����Y����˰l�=ł�.��A�]��QB�h:����R��;M����/�0L5V��G+n������2�X���.O�Ej�%�jk1��t�F����%�[{� E��E�~Y��<�h�� -���(��@,����N�kV?֝^/"� �T�2��OT�u��V�M}MT#��J�tB=vFs y�b���ș���-���?���*}4a�b����|M;ah���| ��s��!��9�*�GBy��-��}Ad4�i�@�^��\���spK<eJ'�J�z{�WᲢ���M��gg���^B�?�4��u�.��x2S�bҔ�H>�!L��f�YeΑ���>��檓ȑhq�V��"^x��`x��M�2���W�J�0��`��L����Wy�]�ٚW~�O:/�Ǫ���˨l��1��7a���P�ԏ������B"���[��|獥m-�|��E㻩�\ -T������7<��B�/:����a~����Ϝ��/ݹ<�nA��C��y{;:~�1�_f���)I���' -q@�������$�D���ӮEY�/��<d���S���l ��?#N1ʈ]Y}��C>Å�1z��SO2�V��6�/!!Y7Я�8������ !��r���Rt��5�^�A����b�d^&��a|�Yǻ�%�A@�)^�J�";V�r+��0v�l�kh��?2e������i�A� E���j`��m�I�yr�5�Kx�PU~u�5�'j'���8�r3��W��i��9�l��Zg��һ~�������ǒf$�Kl@ ϳ�b�aeZ�X&�p��l�*��'W��3oe��`F\�o��Î�f�6P�H�,^��k�����1��x��c �Rs�@��;T�z�}�,v�)�\&7�^5y(����?�;�|"� ��{�a�k1(:�JH=�qt�K)�x�B����/�o}f���QPc��P'�䥌=-0�C�� -�Sb�M!�������?2���8��aBN�ˆRc0����CQ��a&���}��9�5]|VVK�$�� ^,G;x���_߬5Ii�0SFD-.��ȅ}���C��TW8�����얫��1�q�{�P�z��#6z����F5��a�����L��FO����%'����p�v<e:�8"^Wg?�K\m�2����GSelb�s^d�Iӡ�!���'��|�Z{3(r����^�y7�x�N�SR��l{�7f��L_`/����1*��*��v^����� �Dt�&����i:���g���Q�g����� Ϫ1�������\��GܯY�v�� =-�,�X�6�o����!j~.�t�l����T%?m�']��}RE||t0Tˈ�Z�տ�5Z���B�/5�L��B�{��F��@VO�=Ӈ��؎R���6a���},8O�ة�-�e��EL ���B}&���p_翪K��(1&:�����|�*�dP�^�Ke�}��Y�ޢq�#�{�ҩ�~�T�F��-���n���J�g���B�}HfV��;����g�Q�hje�c��C�t��8�RH(w[�y�%#'\��6�뷓��R�K��]��,�+DC٪��m�Y�����o2X+c�ΦB��N����UVuK�J�k}1�"°*�v�_����+ʪk��jt��d���U�\�}B�]�?;���c���K��+������L5�7����Q����RN�l�}����oݹ�V$v�S�i`3�g��v7�4�ǰ�lB����W%�QO�}��q���!�Ժ�%-[ g��e��ŝ7�Q7�J�3��� ���j�.˘IwO�"�0�rz��k������Nԥ41�)%����F���$�-*�@���pB�|}?M}&����~��nB���9�l3�C�-�d�=�T�h��N�y��"��qS��GӴ���R���,s1��d�� -dG�K�K���T�f��*`Wur�i�ͪ�"Ió�;��Dc�ҁ����cPʗJ�$��*-A[�� oA�˶p[_G���Mf�MV��I��c����y|HC����_�����s%�Ģ6\���+�8�{��T��)��ZQ��R���=c�}�t+Z8�;m�)�橣�vX¿[����t��������m�~iaԏ'C-���#|[5,�&ׇ��Z���"/���s�Z��fg��ΛQ���~��g@�B� G�e���.�b ZA�K �dp;A�)7�t����eP��'*p�Ԑ�$kf�V}�4+h�3J���B�1��_��e��a -�f- �H'#���a܄\�[�����"��q꧖8ʹ��Bv�o�χ�L4�T�盅ܫ$��\�/�L�M���}�-��u�b��?y7���4 C�!�'h���`��^�d���'�3n��l����Q�R"��>���Y/ �k���h�f�����!����+�L]v�Y�qD�?m2�����c�"��.��1��G����C_�ox�R'z��c&\(1C��O���ծG�>Uãma��ro!�b 27{t:D���b�V�vl1���˗���.0*��b<�L�<�Ѱ"��T�����z��I=� -��G}3͓��˄����7����ap���`o���N��STv���i�wL9 ,�]ĜH��hI�tn��$�D� M�~%6?���2kG���*��*�K�|ޝ�r��ۣ�vʚ���:�"b��%$a�����mZ��K M.�6;q=9��>�}��cE}G� �R1��� -Ya���?�����h�÷pp;�c9z?�J�e�oV�߫�P}�I�����i�`.�Ɂ�J$� -����s"Ŗ�ZS����<���*(��l��4 |�V�&�v�+) -�.��<��8��KKQ)��h�z�]nZ���Q������]�".�.���;��8[�@:��H�R��v�����I����Y�BV!ׯP��sB�]�ȣ�b -O���B����榭ɶ�۟|�9 -;�a�=W~?�oM?�`��Q�W��"�CC]<����x����{��Ql.k��Ɨꃌs;F�p�4w��į ��M�|�6rc!Q4������]I�U�Ye�ꅮ�0D��u�h�Q�''x�P�}I[��6�0X -yn��Ac�K ���pJ,u��d��S��j���|]ݾ|�C�ku=�hB�E�H��G*��έNL(�E�:���YO"�u�؋Sj*sy�l�C�j�>9}�[�����Cq$t͠]$�K��[x�>�!������ׂ*�"��x��t����)�mk0������H���C)~��E���.�H�:��(��e�L��$�����=���J���c�)Hp���XW�� �/[e#�i�w�W��e|�u�@���"��#���b*��y͛��J��H�6O�6H�O�z���WI�9�,t=���Gᡉ���WO�및��1tUȝC����9���_�L�'u�f�MT%�(�>�:{��J_�wq4)�]v��c��x��08:��o��Ӏ`��;�6�ROկ�,�M��:��Y�i.��܃��=��7��_Q�6~���rZ�!E��ٛ_tYY(�� -*��p �����U�f������m �����ᝓ�LOa��*�g�~��A'�2���ԛ�Ā�&x����Ɯɢ��J������vw��L�Q�&�$�GzRl麛 ����o���H�$��2�W��Z��\0N%�*�^��bIi��}"���:���]����!��bid+P�L�V�ģT~9���ؘy��Ɏ�C�W�"���3�(�0e�>&���/���I�dU��a�.FH��Ӊ�dI�|I�����CQ�?Ѷ��À��{�$���IFg�PjS��GG��7~_0��`���W ��`Qj��N��9�p$-��Ӕ:�;�'JU� u�m��^;�5���[Õ"7�I_� Ѩ��8z��dp*N��N��#zA-P�#��}���ffkS��©{�m��CE0�t�\g�ђw�Y��X�36=�4������M��a;�&��N��I�V'�r}&�r�7Ef��(U���k$Jл��'ܽe]��}��6U2�� -��>��{*�〡qa�h�Oo���gԮ���&-�&��gX L��d�#�7��zO�Ǽ�P�#����k(}�p_05��,� g��fE���p�)�v����K\�Q����#�ػW�V/ԅ��R����KԻb�Xk�H">vE�ui�� 1��2$A��ͧ�'�{�s�xs���>x��vJ|������i�&�E�� �zZ��鏩ٳ�G�:V�K�_zD����4a:��_hɁ���~�:1��Ly�����kt�6!�qiҎ6�}�*� $ m��P);��¨}0N^�HZH��qt���{k�x5kj���a����R���>C��X�m)5��fѷ��_�g�XfjɐV#n/�UվJV��_�$������Y�8"��� -U����_!����{���+�����M'�/d���r|��<�]�������xFɚA8 ��ʏ2*��+03�;�y+]�h��ID�+�֤���x)��q8�~d����PNe��W,��V�����0&m2�-K-�1L����;�dͽ �+ɪGh���Zj+w�����$�"0)�1WR�ے��=�_�z�'b��7���TI��O8�x�}hi��K銷��P���v�jJ���ϛ���N�)��z%T��|4��t?Y��a��IB���"�V�gM�>�bY�K�A.�L�Vl`��טK�U��_���wʝ陆��x�Ӹ�<$�X)K�-~� -�ՊRb��[ň�1��D�5�V�,>g�yXl�.�nD��-A��|�mW�������2�Д�Cgr��ARX�v+��=��22R8��C=�s �(���{I4|�2d3�l���i�䜈 z�-�`����>jyBS:��ɭ�����������+�<g�Z�+qx�(�Yb_���qD]j�ލ�i�Q\�2�%$g��k�_S�Y�U�sʬ\SB6��CkO�� �}�m�^�����-BKVG:n>�֞�:�ʉ -���*���4'5"���рi�� :%<�����.��.8Y�]����O�ŖUDS�#A��6�f�� �]������3C&��I^�y��{k�E����k�i�*U�.O������*��5���{B��Ӽ٦o!y�J;�J9w!�s�zIg!12���� \�\���w��Jٰx�i���~��Y�[\�s�<˛vVJc�����t?ӼPi*�� ���$�RAw�!E�B&���Vo�8ُQ2��F>-��drT�γ#P�ն�'�~;�h�'��^�V����\���F��VV�0����|º�d�K�*mER�Os8A������*f�NǹW���DpB��"���fK5����!oӯ8���Γ�2C����_�����Lh�u���VԘ+��_ȩ�{��S�ؗ��U��ǡUF����n��W���{���qa��(wt<[� lh�7��m3L��S�Nq!�s�,3p��q��,dP/?�L{�;�<}s�`�i�s���ߥJq�����LiT�U������w����8�!�&�VL� qw�6���xT�9V!��Qx/k�V�1�ۯ�����#�_�ɏ�&ȥ˲7��l����a]`� �:���~�գ�2���" y)�C-t��6[�b�E?m0"'�5Vz1�G�XR��.tK��/���WBP��r�9�,M��].�]u� -+���2����V���+�ٸ��[��p�\��Y��!�QK���ϲ~ �c�Yy�2�����\О�UE~@V�r�.2bz�u�H�=�F� ބ4��bѕ��j@�nd�-۰��9 -��>R�:%��d��[����~Dܵ�՚���=EzW/�+��c(Ʒ�]�ևv��Cpo���B��a��ߪ�+l)X��E���5J��0�:�o.����/�j=9�v"��q��U=-��u^'�V͡�4��sq��q�>�Un�:��Ԉ�6~�A��F����)����gc������D�j���|��1�S:�:a;�Ӂ�s+;hͭa����5�QF�!�k,|!�b������q��0�~ v;5u��?Ж��Q�덵BYI[�i2w�w�=��z~�6隥��p��ݽWNV���y�0Mϕ}��A�[�]�,�&L�g��aJ��9XIY&�h�嘽�F��g5N%]>��<�t�'',w�����V�erpi���o�MY��n��J��XHQ�ɂ�% ��oкފ�k��Zޞ���Ԧ�x��5�Ϣ�պf�Q+ecӎi#�}�t.�U�'���-�)fE�V4¦�3��\�/K�ɠ��Gu���_��Ĺ~�qE��wٓ�k��Pg�� ]������X�p�@�;?�����|P���.�.xlW��0�%��b�ŕ �Z��1��=��� ���2Nӆ���&�Q�����>�����y�����K]�_y)Fu�k�L����z�w�Ӥ*k���Xkv�Op��G��i�� P᳣�D52�P�a3ȋ��G��Q#�w�e������~UPƅ�FW��/8_���|�M2ݯ^�]�!3�E���!;GJ����1���,ac�m`\�2g��]�*V䇐�l8g^zH��X�74�8=�(���"�}Γ�ns=Y �X�/�����'��M�]�L�m������ -endstream -endobj -17 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-32 -250 1048 750] -/FontName/PBZRRG+CMMI10 -/ItalicAngle -14.04 -/StemV 72 -/FontFile 16 0 R -/Flags 68 ->> -endobj -16 0 obj -<< -/Filter[/FlateDecode] -/Length1 815 -/Length2 1349 -/Length3 533 -/Length 1949 ->> -stream -x��R{8���3�"aI�Q�173fD�$�%B#�j.?㗙�Ls���q�V�ͬ�A�(mY�rͭ�6��E�[�AYts�$�����=����w�}�����y����y��&>~G6� ��1��Ӏ���;�gen�,�b���0� �T2�p�p� �fCA�́3_ P1�t���G$�Yx1ġOY���?>��2,��\.ػpE�B"H��(�0K�FP��ܑ>�|����T8$)u�E�[�R'��pe� ������~�R�-�?�ZZ�U��z3x���S������|�@"����φ��R*�(�b��Ҭ����Y����ő>���BlX� -!�Z�!��T�ҿE�>NA{����w?f}0"�� ��L_��c�KBX -�8^IT�O���tۅ��l��� 0�B��$ed"��Fؐ@R�dk,�+���5� �/D-|� X��<c^D�8`ͅD���Xs&Ri����:9�"`6��8�-���"�H@�����l)D[�E�% -!D�8gJ'?�!��|�B,T4I[@u��=�/��n����h�����5nHFv���R��)tS��b�E��yY��q��G�W�O��nW͖� ��e��(W;=�+T� o��J�"��l�M�����4� �{,6�}c�=9)���rSh%_�?�uѲǼn��|h">[m����H�Eͣ�5~���^���������o}�խ��=��\Gz�vD�/s��į$%z:Q���&R��s�Bs����nI���Sa�ڙ���4~M�$��p�^N��ˠ�.I�br��{[����9�7T�qY��;4 s��84\���|y��4I��Y-�S��}3nT:v��u�[=�.������oi{r,7�;�,�t�-��Dܩ!���a���[�ګb�̲�t�Oݩu�}�I�����'�v���^�Q���e�nVHvݚJ`h�?�Ir�w}3t.�3�Zl��XI����v��t�Ǝ?[5�5֪,Ne0������l�䦦^-��_�����L��fũc�_W��՟���z�]a��qޗ�^�b��{N�B�SMD�6�����&$�֊�۹;�wP�ǧ���#�72G��r�8�9� 6��A eP��U��h��ZM��`qQ�~�mz˳�n�7���g�N(6R����Et��w���P�h�f̲r����t�Y�ԵK��,��@S9�7r��X�)o���{��#л�����EM֟��Y8�we��L�o�t&�+�5v�uz4�U�L��1�1�}���O�N�%,^}�%�Y^5oo���.Ϡ��Ի�z��rB�b�t�y3ϭ%~��)��Q-��M��eu��]S��A�&�h!JE�V�|��u��:�2x�f�0ڡ��D�(}���vJq�{:s>�+?���Pgr�j��nG"QWx�x��I��`��HQױ䈠H�;���Þ�7��g�k7Eq�p����|cC5{oNP�g�I��C��Q����*}�E�*�8�s���:e� �%�}?)�9��Km7�`]��-�FE�n_���q)�� t�S�,�4z& n<���Ix�6�s��� iݿu��}�[�Z.��������gJ���5�!�����^I�ٺ��B���M�&��l�8��Ԓ�i���������)����TӇ'E��&ػt�{9�i{?��ȋ�(V{��0���� 7��'�]>Ӟ�W`�Jq����{ -����Z������yFrF��0�5��@fL�^h���J�az�:{�?,w���O2e)�Y[��QV���T��Ó�������hI��SJ5��Ո���������)߶F_�j��mx(cg��iAĊM.��-)�^���,,�)j�8Zv�����ǔ��4�pŜ������X\�!�ya -�o�;� -endstream -endobj -20 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-35 -250 1190 750] -/FontName/XWOHFC+CMTI8 -/ItalicAngle -14.04 -/StemV 73 -/FontFile 19 0 R -/Flags 68 ->> -endobj -19 0 obj -<< -/Filter[/FlateDecode] -/Length1 1176 -/Length2 6718 -/Length3 533 -/Length 7484 ->> -stream -x��eXTm��)��f�j��VA�������K�C�QJ:DJ@�A�Q�Q�����G���/�����]�����y�����s��Y׀O� -n Q��\�@� )���u ��_��]�p��aJ�)�HR�G��@�!������..;@�䉀�غ�����;BP��e�jq�o�p���P��'?� �����k�@�A�A��qqA �� -���@a�yR�Y������N�J�A.���\�>��.��0O��W@~�����l����?�� �-�j��>����#�������@nA�����7-����YuW(Xf����D�E��C]T�+]�+�`m���;�Y������ۇ������"�s�'�k��>�t��W�͠�|�G��D�_Pt_x����?Ĕa`�fX ������DE�@�(� -��x�;���]���w�` G��u�b��ſB��@@��$��&!���o��&1����t�S�7����7Iܯ3�M"��'���)��M��� $(���A��{s�ཊ�( -����n���{Y�?�ޯ�o�����{]�x������u��u]��{!��(t/���y���u�����E|B��� ��� -����OaPg$D] *(((!$�w�D 0�����[C�g�q�3(��/y�g��,�MCA_$%�rb���3��pi0.d��'O#Z��%b;FW�U�␟��`�������)l��4�e����yɘA�KDžn�-C��h�<�S�HY��w�-�믉�+̏0�e�ݬ���Tj����P�� ���/�t5n -8���d�̲ʘA�d�k�|&$��ڬ{ܨ�z��3�H�n%��5>0a�����wz�f:�>ĩ -���Ln/�K� D {m���+p�E���ȉy��l[�z�^��0��i��v3<�\2������c -��Iop�]���ZǢ��G5NWD�G�V�X�^=a�Έ��*�Bn�����;.���O�{�Y*n��7���qק{'h���#��|��>���#<�K���<�D+�/n���;�k�P����s� -�F�5���'ͦ�7�-#\f��6t��+�G������+��f����� �i&:7�?n�9�gl����W1#dSM}̝T(�G��J����JLPP�ݕu+��{�:��j`F���6MK�x�e�Q҄�R�^��v�y�9����"�Jw(��e����kn��$��Ǟg�TwW��:� 3=��JB�x�vuc�g���훹f��OEo�6�}�v��6A �AO��1+M�^u�x�lvћcq&ٓ�t�q��������Jx�5-Z��Ն6�okT�*p¡M!��t��푟x���:/8�!>.�J�9��j�1~`$� ^����G^;@���"R�o8�5z�O�q^��a�u��2/�Nl�V D��C ��y�j9�E����� -LFnĺ|\�:�o玒�S�k�]���К#O�P5!���πQ�r�ׄ��ه�l�Z���s����bB� ���O|�3Bn��l�q̹B��6�����i�f�=��ώ�n�>�H�f|�{��;����`j��j���`G�����џs�C&l:�{]��Sj! �� -+*��� XrR�<dz���6�����Ƥ`�q�a�3Y�ǮA2B6���k�:���J�N� -U-f��j�}��^|< Aw:fD�j�j��Ԍ2|^sj5�����d}��Ȁ��T1���C�g��3��˃E�N )�!��bc�:�8��INPo�L~��[c���[�$@�u'=�����r�I��k����\��g�LC �C���+��#�n���p�JoW����H<�̣��,O �d@������dG���V�S����"��U���e>��.@���nM��rc¶*�+>��i��i���4� S�o"{5�> -��~,���r�O�%De����?N$���~ޢ��L�*F*[2$�c>2��Uj4Yj��7��$$v�JMB�[�LB�ʩ��/���c�2=F�_��� �}ȃ'S�Ú�w"�:Q&�{Xc�ď�y�|���j�Q��� #���>vRFj�c��f&�b��A^��s���?����%����M֛u)傑\)RH��� e���UA�>�K����7%ZI�73^���l�����a����\�2&�<�P�ؗ2�[�á� -�҈���H&��fY4�(����TR�#�чl+�D������' -���z�$ʯ�C������ӌ�LVP!X���4�\|7y�ЭI8nhs����-�)�ɭ�� �T�<��n�ulZ� Qua�h��>�c��V����UZW�B���2��(]�c�����)6Y����.��ѮO���c��+��7*Z%���r������9��jÍ�&��G���Źpt B��zc�Ŝ���9Y�����L��e���R_YH�,!_� C�5Pe��7�A�Ӗ�D����.P������f��\��T�s���˯�sT�����oE���)�rYdNT ��3U)�(W$H�oM�H�VGэ^�;�r�[e]Ҫ�=l �;f�l�?����2�$�Y�tK��n�� �v(I-6�����$)�]�� |i[-����5E�>�^ő+=�R�ҺW�$�0�8˺r���Ԙ��zͧ>F���J�� �n�@YJ����2{��s�9���o���h��q�Ow<J��P��h�G�.h!�˘��{���j�Fnܦ��F��@���x/���F?�G����w�yś���2�^�XE��~ـ3��Qy�NjRunf�R[!�������Z���*s�&�d��t�`��MmS�T4(H��$&nXi�Yʸ��5�Mz�ů�HR)�4��}1-w>vξ��ȵ�bG���٠onW�D�x�\m��>��+9|IL5�X�CIv���v{���G�&;S#�����'ެ�ΤS|�w~Oj}X"��#h����so�R�H�Cq���r���B��!�u�+°?��W�QT�l��U��j.��p*���'��Z�\�=}9�)<I�hg{I�PU����쑤�~��Sb"���qw -���vi���9H�gL'B��R\7ʹ�XKóUN� �������$pdߴ��Q�5Wu+#����r~iȮ"�o��W� -EcC{ߥ^���?$�s�B����dsRRq>��M���Tk�L�V��6G|_zs@���o&GW��:�K͓�y�2�?�g��m�W�=|�p�!��f�컀�O��W����2�jr�C��$~�55}��ؼ��k�3� B�D��x�g�Ŝ�FÂm�t��p�����--}�� -�O�3�ٻ���Yb�0E$�l�#������ �$&����]��U�8�7���s�Ҥ��?Z�(�s�uw��jʹ"��'[�u7��r�~�v����)�Ҧ[�����\��I���_�����Z�k�!���6�<�8��"3[�I�>�b?k�en~ � �덈��!��b�䱶-<�9�P{�U#��"d$����T�f�$f�L��-�܆���b�U�LLG���U��x�ᦼ}��1_Ɇ?[��B,��g˳�:�L��H�����u��ӣG���7�{�����������e����{������<�7�x�iD���xzZޯ� �u�}*b�ԏ�&Y�˫�s9�vq�R���xtRl�%��|�T�!�ȱ��Ȕg.Qi��i<�aE fz�Lv�n�������l-ˀB�����Ax=F'R."O���f���*���%s�jH��nH��B�X���gU�0٧��/gf� |Y���/2����n�����j��>�]ѭl�RUG�*�R��)n?���JɅ�m�{�� -^���b�w;��p�������xP�V=��H>��7�D �m� -(�Q���Y���n_�Ƥ���(��Zڋ6�8�}�6�!N��[�E�.����a��6��e���:��!�*�q����Y���"�|�ꍯ�T�R�[g>0���B��e�骶�� �j�b� ���ʾJӹF��x��hPx}l%܂�!��yy�|��gj�m�@9��`�&�i�qz�N&��ë������ ����f� R���ζ[H��$eܫ���"rW�}����֎�������h��я_�"/�HOH�+�j���/s�����\$ j�R���Q՟�tI�ķږ��)�Ε�֛ׄ"���N -n -��H�%|d��_DP�n D�F<Ԭ�.�jH������r�p-����&�Dvod�GW=��mG� -���q������ٌ̀�ۃ� ��w�n�����G�~��~y�Hv�D`���C��3�!�9��u�cgu�a�Tլeމ�w����{|�E(�y��CX��l{���#Rt��hpt�����mO&�Ê���2��Z >q]�ʏ��v�!��:�_F]���<,�����f�E���ko�W�h fñ���dA\w���s̔_H������u,�(^͏f���4�l��r��2�ں��J�$��F��k�'/c}���GR���)�V���Ɇ���:��1�_�I|K=M�U`�c��RW�2|-����d��i�ty�'���Ce����kM ��R���O �����&�g63�D�>do��e_�I�����*m_�)a����ݔ^�L�"ل�x�&̱��ϯʼ#(��1Ph z�c(���N����]��ݫYJ��@�7A�G���������7si�c�TTt����hT�v����r{��_S������P�*}��|i����@5g1f�~�,�"���[ѿNϱ��><%x� J<���.:��)������8E��.ɠ7�y�]7��wK�g����c����:�D5k��1o97��\��Zw�1��m�1�d��/0zo�}�~-C �����c��I�lMC����6�� �`�R;O=+^|��O]Ͼ��G�6��P=i�m8e�Ls3@x����(a�՚�Y\3�B&����K�����k˗K���Eb���o�o��-��@Qc�c��)O�'e����Z����Oߍe<�}e&(/����O��LS������k-i��V�O��^=D�>���pX&J��.�ٝ��y� -H��MU����� -dJM�;��Q@F�ۨ��GB���m�l��� k�N�[�Kq��}`�ZIz�;vi�a��9@-r��0,�E�N�]5 F�u���9��i_Ũ��wgyg��_�gH��녥� 3+�#�t;�3^.�#8.�с��]0�B�ÇZ�k����o�H�&z��`���Ѿ��r�l�8����yO�[�/~&?���BWˉ6ɧ��y�6$�b7j7����fZ��3��r��]v��դ��X0���)ӑR�>�����͛F���a`r�ԣg�j�,@��L�=*K�#���Ght�_�γ�F!�K�e�R�hi?����e � Y�¡�娿9a{��_�qʭI�p���7K��0I��W�vz�]�)�����ObG 'H��J��������v��(R���Dk���ـ��>/b�Ű�`��e���[�B��"��:�D?����wo��v�4����y9��&D8>_�$g�1 �-g�ٱZ/����h�����X������yB�S3T$K�J���e�JG��nR��J ���4�f���g���yd�j����r�f�#��KAD�S{G�xCd®�E�����Θ<��,У�������;Jzȕ����*6�p0\Q(�bOt��Q-�5�9RYSg��ijUE{N���7 -g(��ΜE���3��t$�&S22�Q�=��w-~�J�lV���bc���"��]A����^���;Gi-�����¹��<�EB��x�p�] � ��A#��>nMz�xS�t��(>Z����"�SF-tZ�/��\ -��w)���c�~=�Q`)��7�+t��Sy�G~�Dޟ |��-�Mj�ե��G0G~�4&w*�E��/X=8���������5jw�Qu�e��`hl�ZZj�0��KjL �(�J�S�H�3����Z��#�����s��%3���Y��E�����cE������s턛U)8�QM�:6U���0m���P�;���Z��b��>j�L��d}�t�z눆�N�^ YCleȿ�Qr�Fc -i�ɯ� -Y���+@ \�8��A5��p���yD�,�y!C�S�GK��cݭ�0bZ�v ��?ÝҚ�/j������xGߪ~c>ڲ}�H�1�����WЉq���?�VR�6���{Ù� ;���������D�јw�l��������1B�d49�g���|�eIPU乢�y�h0피�[�m�BK�b���IE�zgi;��Q{��p��!�f�E[Sj��!���P�F�nH),`~��̓܃-�1ł; d`���^�"�ح�=���;������'u�+����0���N�F�>kv�J��E)�g8�kbNz���^��~����ؖ�O)N�ʜ=����Aa��>�8���{arܴ�<*i�D��Nݝ���e�Ku!jvh�yþa�[����M -��]Y,�u:��|7Ŝ� *�{���nr�߫gv��ªK�U�m����*���w�)��u��Z���OG��F����f���18uݵ*A��x&4b �m5oH>���p���U糕U�����0��U�ʎ8��ݤ��ܠ�(�Q젾�[:�g�>�cA��Ɨ�����7!�o��)�ǸHZp�o'n�0�˕Y�c� B���3�������8y��F��5���G���pR�ncgf'ż�m��}���Ą�f��ٱ�%k*@,n -mñȚ��#�F:х� j�C�]�'�f��ԓk��koh�ڀ���'�)�t��9&b)@���i����ә��.�?M[N�]`���X��e@�6Y�)��DBf�ya��{�s.��:�+�@��^n`�Cp��Q;�قV=��*�&���ؔ"�@�zdC��Ɉ�.�۳\v-/G]8�=�r:�Xc��hT��#;] -���<okRI>�4Pnuq�>�/S�����$��(�����W��O<�F�t�N�1�� -[�ȹ�=�`�/�Q- 7�U=�a�3 �[�ٞ�/�[z?��5)���0�� x�1��ᬘ��L��auD�-LջdR����+� �o���9s�o�G/�f���!���aLK�>�/��E�9�����l��7�+N�H��g[�O��{XQ�V<��h�r���g�J=�*��� �����3So���nr~��><�E�*`劲��^X0�;��BjM�g���MG��*u8���ƈzl�(�V��^����E��� -w�@����/n�� -endstream -endobj -23 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-29 -960 1116 775] -/FontName/PMEVFX+CMSY10 -/ItalicAngle -14.035 -/StemV 85 -/FontFile 22 0 R -/Flags 68 ->> -endobj -22 0 obj -<< -/Filter[/FlateDecode] -/Length1 1025 -/Length2 2012 -/Length3 533 -/Length 2724 ->> -stream -x��Sy<T{F�M%��� �\�b�,�)j��i3f���̜1�m�,��P� --��[�D յ+kZ,�P��T�=t�{��?��������s~���{~��y�G]��kE�}A{���%` &� �u�x��� ��!�mK�&��ؘ�X ����M��&�DJ��9�\���Z6��."`����H>d!$T -p������ ��o�. ��4, -E �4��|A:�F��E9��`��� 8_KA ������QI���P���pN0r�h��e�U?���L' -k�~���),��g��� �4������"�� �Ǫ��Vl:t X���ij�B@�S���p�M�Q -b߂�d�a��g�_�d -�滅r@���}aM��Fl�B!�v<�' ����k��ٱ�0 b�=C#���RBQ�!+C@H� 6 �D2ˆ����&�����\ F�ǂ��<����8���W��@&�����/�*�I�1�WZ -�LJ�CF�N���G �JDhC ���#�L�>?(��o��7�~C x=��˥P�~������ -I�K�|���������1�kl�8J D�a����P��t�E�����}��*�r��,�;�x|]�A�H�`HEef�C��u�h��L��W�����{����E�*�֨T�(�)}gKK��������k{ ۲#M�� �f���* -��6#�X_�zG��ds���"���8*I2����D�|+S���©�9�b|j6z��7�y.�k�8� rǟ�0�p� �%� }Qծ��q�w�.7�!�輪[��2�M�47�.p<�E��ۺ�O��ϡCK>>>P*ԗ�2���H�������m -���<i�:���N���wi2�8f#���cK�_D_�-�.4ny���IL��4-_�����[w���$^f0����C`�P_����ʽ\��=�u=Y�U�(� {���\xhP'�[�'<|�;lVdWA�Shm��A��#�O�65\�y��y|���_W����_�b#i(���ALu���+[:J$�R�<���k.�&�f�W)0'Bm���iy��L^���jw�o�d��;����To7w��>}*eO�ةڼtM���LU�������y+�cMHA���y@a9'���%r,Jt�ȌV���y���7m=� )[1le1���tQ��|�g&Q�l"��g�hg��mF�g��ߦ�Դ.qܴ�~Pܩd����>>��c8����Y���r��g��v�����R.�e닝%��C�~:�\�.�vc꒮��Ϳ֭UՐ�J�/�z�����{C͉��0�r��^Z'D��̢m���Q��a�s��M|B�[�4Љ�\ڠ��,a��<yU������/��5*��{�j�b%Cm��\KV��p����s�}�7''+�J��f�X�ӥM%|�))#7�>1�h�I\�����*g=�3&�7��n�պ�}-x̭��lL�J�99cj�y�K:��P~�B.�F�����/T �囤֘�ۿ�k�����u?�ļ�~_�aW�R��J|�~o�ָ3�"t�����-ckw��-��iA%9!� -ZU���������l+2�4J�c=��ȿ�D{�����^�S�|4j�6�Ւ��{Rj���)�ѻf�����e�i�X.����K��9ʅ���j����ZK=`I�j����� Y�+�AP�n|��6jMߥ��|�~�L��/��g��^���^]�+�{���'��w ��ҿ����&&����I���/fv��6�I�.j��P+���>דk���*U4��W��Y�HYb,�}%�אբ�7��:Iy�u����z��-���m?�*�0�ڔԮV���V��]ׯb4�5�Z��?��� ����v�%D*ñ}�c!��oiP��VdO�N�q� -�;5��.���ӳ��؛��Q�����a���H�Tx��q�8Wˤ�ݽ>���yDz����T.�.:,j�B-��e�P̻��V���C�v����*P�5Y̍��jo�ׯ�[�`���m����+��%C=��vjPoR�Ҹ5�H�1&�V�D��]�8�t9����v���Y�x�֜����&�Z�]�%�S��Sww D�K^7C����^�|���t~��JY搯���� -�+tM�J��2��ݰ�#�/�z5{4E; `��Yt�h���?=u��Kk���8/����I�}�F���x_�cW���h����`���6�E/8�[���H�;~"�އ��6ݺ(^�}��nڸa�����k::"KTF֑b�"&{|���M�,��n��g�����U�Ar�W�nc U�Hf b�.AD�p�Ќ���\z����+1Ý������L0]�sj�O�a�{�Wz���EG:��7$�2VN�^��-���ɳ�$��W���lA�ҋ��� �h���N'O⎏9�udI���"�*�ҕi�}�4����X��V��#X�x�b�m�U�G���g�u6D&�F;\��c+��f�U�j����� -n�zbv��zE$����O��ɉD!�ަe�[��04�H�����nz��Oj����rUI�����qs��9ݢs�{+5wN(;P����`̞P߭X��z�Q��Q�!%:b]��|P�'�� �2A -��(���_i͓_ -endstream -endobj -26 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-251 -250 1009 969] -/FontName/RUFBTD+CMR10 -/ItalicAngle 0 -/StemV 69 -/FontFile 25 0 R -/Flags 4 ->> -endobj -25 0 obj -<< -/Filter[/FlateDecode] -/Length1 983 -/Length2 4035 -/Length3 533 -/Length 4734 ->> -stream -x��SgTSk��H1(E�( -$t���EZ R �Q)Jiҥ�R��z�қ(9��tD)7�����w��u��u��k�w��y�Y3�^�c"��sD��D �$D� 5���I0Xp�&#�pX-��()Iu���S��U�����5q�>x������T� �(8�.�CMpp��# ���@�)�1���{"�$�脂��g �S�.�*� ;���ry"��. ���@�N'�tB R8j=U��X����:$4����I��W��aPh��0�$"��x�?C-j�"�P$�?��DW�:�@�����F8�A�.@$M@��#�N�A�����t4L�����;0�h���7���?l�/��<�xL�/�H}�:����6�sBa���r�@�P7�j�� @� � DxSKIbqDj -�ڔ{@$�9Q�Ս�a~�@�`��;���H�/�/�ϑ� S���$�/@(���~J@)�-G�'z���Q�84u��B䩥$�f����`��*Q�0���o�d������hh��$�� @��,0X �$�t��#Ͱ(BW�*V�R�D�$<��?.u��HuMo��� -ZMs����A#/C��)�U��.�N�'���tݘ�r��ȝ��_�.�q����D@R��=�e��ޘ � s5�����SI��,@�����7�"U��Yw-��[?�60:(�� -qޙP㫍�~Y7J��m�~�����I9 2��w���H?��rJ��JK`�&�;���d�(ȹ�kv��"��naީ ���v���$�G��E��ɬȹ��6�6wu����\�d[�>�_� !�W�A����b��\D�m�dм�H��E4�7a�d�d;��ƨ�(���F���,�6�W*�6?�O�����j~g*5��P+�y��A���`\vr�z�7���ˌ�1m-��>����@��U�[�l����=��?7m�.��[&z�i�V�GWsZ^H��r��uXC���0�|���g��� TccA� "��C��4�<L4)��3y��z�*b�:h���%���c��)E7d�I�8��{�!��V��A�w�Ԃ�%p�K�;@��Z�E��e:�h?tsb1���P��g��H�q�GY�������~� -9������0;Ά�j#j�����M�YTUe������MVk�J�s0��2e�4������7�0`Z���B��3��Y��F�Nv�"�<�Nl_:M�����I��1�t-v�ʀ�:{TkZ*���5HMojNy��F̅��{L�m\v����9��<���Py!��i�0!|P��*>�r#���k�.(��/���㵻��=l�~��6�s�YL��k���Xx��ƺ��=����GK��<�y�*ˉ]>2ct���R�����>����+�U+a�[�+�a~�9����Z��Gv��\��V:��*��.y������=wb��cl����C�o- -��=����o���I�"���~T��u��mp�;�ԋ"@�`��b!~#��÷�4�ND� zz+��WPM|���ٺVV�'����ݽ������^_�U(4��9��9������I����+u$Wo��q=�,�d��nMI���]:�L]��9j�O���D� !�ϥ�����)�%I� ��D�ZWɂ����� -n�a���3K���s7s��ୟl��0� �!К��d3�W���T����d��sVb�ڥ -��ʤ �;�0��D2�Y��ɯ���c -�T���^��eI�U��[|8���asG���l��{f �A�`��~)_ѩ��ZO�W)n�]�9�pzA�5��xO�?b�-ư[nj��o� hvq��eU%|K�����S��l3�4���#FV��SDB�K��.��ui�����ҟ��|8��dl^��O5wR�_�p�Y~3�7D�wK��o��O����TT�����Ȼ:��ù=�!�B^*3,;!����`�Y�c� �'`غ�Xo��~��Y��[i�f�jaIْ����?Z�/ ����8k�Z���N�D�}���z�c1´�ed"6� -;�B%3����+D��VdE��z옫r��ተ '�Q�yW�3Je�u�Ljvl)���w�� -�̣�g�� Ě��p��k��@�5��I��pF�,��Γ��P���z} -���=_0[}�V�a�3��'~Զ-.}�Ӟ�5�Wކ����w0uW���:?���h����~���~��'�$�"�w��#����h"�R���[t�rz�>r1�oJ���0ߗ�S��jc4��Q��Y���uI3̑�u��1I�}ؾ���8�N���y�o�MBN�v~�L�Y*����� �/�l=�t�F\�,��A�����๗o<�ހ��j�>��Ŏ*ߊ֦��c�h�3�z��<��Eѝ��%�����aI�=�t�猨�)��l�^�l������8>��l��$n�^K�K4w��c �0�f�69����8;��L>�P�W/�tg�e��x�_�[���������E��9�3�$%��B�3]�٫����������X��R~ėiz�u�� Ό�;���暒��]�?��1�3}V���?�_/ )1%iz�����^U��{m����}[���r��H�>����s�3��wX ]j)�kȺ&��79�/�5&��s0���9f�����e���w0���@�I�� ����ա��� �pSB�h��{�b|��jY����&w�S������h�+yR"��{�6�R֞�\y��Y�N��z>N�)R#mb��#7E��˛��ФI��DفF҄�V�/Y��!�y�r����gś�� 6��^׳2MI��e��uY[�w��%7����m��`���Je�g��_�z?h_�h�lu�eM7��G-�^rj�n{�A��;Q ���l]�.�$���Q�>;����1��V]����,1~�'C� �]�z��c��f��N7���o�<��pP|�cj�T��XUΠ�f5ʋ�2ա6�Yc;���mb��P�hBKVI3�ǘb�2�N�Qg��4��hN���G������`=Y5/���<��K`�X�V*�V�f����L����ͣ^�ۖ���i�]ii����o�a[�=����?��"J���eɽѕUE���_N���@�������'��>����I8OvU��OB�P�L�f�A��W���qϸ�b�f�w�+�V#�>����,v�m��'�˃YI�-�]�o�}��{:ˋN^����W����ɟ�%�,��?J��&ד�--y{�g���+?{C�H!Œa��d��߆W�oOǜ?����FU/���av�沽lՋC�� -`�y���C����T���;��o�1e�6C�mc4tH:w�w��+��Y]��$2����Z]�Zk0m)��t�[S�� "�{��.��������������[���� �s��Y:�s3`+]�N[<���������b�]�s��Dm�.|��]��c�X���tKc�] =������O�!��ر�\s3�{Px�M��.j���m�Ce�\e%>�b��ōXړ~�U�*ό�>>0M�᪼�M��� [����n!`=��;��DkH�4=qpT-�]��`t����:�>Q�5l�$4����h�mA�%���-_���鄅Y�ŊUʛ��;D5�]�O��~�Z�q�,R���ۥ�|��Jw���}t���|Ч L�/�8�N��V�}H��)�l�y�r�@�����ɏJq���j���SSo�H����g�n%�3q�Y��6kF�BD]�4�R���@Jc��!�Ϻ�|ng<3�����[ _�BO�踲q��5-��/v��jr�;8|�1k?ʖЖP<�!�gR��?뿑3&$+ěZ��s��y�M�}d�g橴a�V��e��cM4r���8k���j��[`r��'�#_[�c�(�����ԛ�<SL�ͬ�Ϊ�A -��%�P�g�G'��gX}C��7Z˿YV2��33��O�j���,Vc�/nEw��0 B�^�=A���8Y|_����wT[�`�0�+�~��R�&+e���憲ϔ�e3y#ٔMz���7=�AN�x��W�L�� <I�(�������^���9:���J$bY�x��*����&�Fz;�@���U���O�+�ss?�k�����7�M�T�*p|�[j�-�t6O��Mg���)c>t��,l�����_��]�Q��:�x��d��ݽq��\k�Ǭ�O����P����b�H��=G��]���������WW8-��^�-/^�<u��~[4�!z,�s��)�RGI��:�*��d�N -!��[l2���� .��=^�RΘ��\<$�B/� � Gg�Fg�����6�}�l\��Kԧ����L(L�-&��,���R�ک����v���a��Y��>���cx �Ѣ�8��.��T;���8�o��J�6��ם0�3�A���k�/�iо� ��2��~�!�nF!qӬ�"1'\�?���LT� -S�o=RΕ���A6��UvK��OD��F�M�K�Z�X�+���k7]�7�%�y�+ȭU�؍)����� �O�������n����: -endstream -endobj -29 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-341 -250 1304 965] -/FontName/IYBVWR+CMR5 -/ItalicAngle 0 -/StemV 89 -/FontFile 28 0 R -/Flags 4 ->> -endobj -28 0 obj -<< -/Filter[/FlateDecode] -/Length1 769 -/Length2 1230 -/Length3 533 -/Length 1807 ->> -stream -x��yTS����A�,adQH�E�AX";Ae K��<H�×D'�eQ�3�0�3"���F�8�A�F-� E 2���)�z�_ϼ�����~��~�%����yq�Dp�(D -� �"��#|P�%����t���Bv�����4�L����&A��d!`�c���x�Ab�` �%L�����6 -%D����Х% ��~�C��(���@"��8��?�E���i�(�Si?� -0.�j���89̓���#!�~ F�_�����;D<^��$�Y��*��$��~�H�@ �Qxek$�-�@"�ʪ��Ń�^p�S�`$9!���pY<��a�J̸e��wDd���~��� X.I���R�rL�W���Bb ���K���i�b/_��p 8 ����$82&E�р -��P�b�D�!��<���[�O�# 1@��������ވ8��ށ�Qi��=�pq�e�{��'���L&;9;/g�"a����L�s!�R�l\N3���CC�aB��ա�����C�{�����<���Df�ֹ�cm��L���ז05{f�����g�C�wK�g�N�?�}Tz`&B�3hAסuv��AU��Е�p)��W�� ]�VFem��WS����V�����deC��g��c��_��n�3�cwF�c�?H�ĻS��i��j�3�� 4}3&vB��]��q�����bR��{�c�~���7���h�ʶ��~�N��掗���Q��%Ѳ��S�{G�:��庑-!���;��X%Vv)6U߭P��η�����+����/ק>��d�Lּ(eLgE��M����4��t�O��xi�i�ƴ^5m�S���v��⪳c��{ύ -�{�"5�K�c��GL��g�����J�\�3����=U���7�:���H5~6�Io��qTK�������h���WIz��?>�͖u����ڲ�y?��Bn4{�����{@d��� -�x=]�r�|$/O�� ;��S�4f�������nb63�w�@��ǫ��[�(_"�s�V��s�.ħC�`�s���Β/���3��ni����z�l�]���=��@�*p6ض���d""z[�s(:��Zͻ�Q�h��7��\��1�%�i�n/ϭjV�[gX��|�pe`y��%L��9��t ����g}_=��'��讲'v*���jҽ'���^����djU��b�0��hJǏ�N%M��Ϣ�b�8ڴNʒ�'z�u�om)RS���U_�_���j�O��l �L�s6�u��9�~��0�2f�雕�b�b�&5�pPa��#%|���J�Oب����I��k�{b�&)��yb��i-�����/�>RP"��l٤�kg0�^X�qJ��p�ռ�Z&k����횸�Z �99' �;����� (�f߱=w�z��Z���d_��|�R�ܓ�����g(G�c<����K���..�Ι]�S���9�Uo�)n3;(�pq�_������j��i��%��b�� ��E�nEAӫϷ�\5�����Z�Ǭ]m�Wf�0�/kWD�ņ��X�+��i��K/�h1L��� ת�;$.0Pl���nS�J�nj�G8|_%j��%;~/�8�G�̗�x}����G���HtȚ��Œ{)4�ą9�hTk:�&x�o��ivScj8���9Q�a�p�'����ҝj��t�ү�����X���t��*�������3��pζ��M�����֦Jx��ޠ�`�ti�����������P!�g��8�?����� -endstream -endobj -32 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-24 -250 1110 750] -/FontName/LASJCG+CMMI8 -/ItalicAngle -14.04 -/StemV 78 -/FontFile 31 0 R -/Flags 68 ->> -endobj -31 0 obj -<< -/Filter[/FlateDecode] -/Length1 776 -/Length2 1076 -/Length3 533 -/Length 1658 ->> -stream -x��kT���P<�pT4*�6��H��BjY�h��K5R���$3q�@B�D{T,�آBYi���ēc]�U��[PD -E� -�3@]]��s���ՙ?���w���w����H�o�b#�9l����D���e$�c�d$���Ԫ�' �B>W������� 4&�.~�*o RC��0$#c��2��T@��QH����T*:�%��xH$@�N�p���`+�A1��U��勇B�y5J�D<�\&I]ũ�1�(`4�#����'\���Z�*X������c�U��j�������K#�[T�Z��i�)S�r�����c#��>/FuP���X-S���>��I��&9<։$�~kܦ�vj"C12L����M=Ys~���T�A8��z_������ -��|/ #���PV�|>0p��)�@E���p���d�A4N�'��/��fp�D���Y���=y�ݓOs8��#ɿ�c�6-X����+�Nv�Z��9�Q!���Q*WuPN7��;O�����G�[Y�s��S��F?g[�c�"�W9dF2u秫4��rZ�e�v��+R"�4-B�ϙ^�B�]fa��:��ہu��3پuO�W�)A�^v��;�l^C�*���չ�ci� �ٳ�/[�-3��$��I�NY����i��b�dA\����k��|]��:�Y�$��C����m=�HC^��#�#a���u��-����3� �Y��U�ֿW/��tli���i�ſ�s�e�[�m� �V�d]����[��8�/��v-%7d���N*x?�f���QE���>5M-�Q���Z�8p2�)��s�6�/J.�}K��ɻ�X|B�\Y��]��*����$�9g��'���MMf��&��ܓ��]5��1�wMJ�����y�f�{��Q�OrJm�u5�L%���^]����p���R�'ķ��_����[Ӄ���ԋ���s�X��)[��mf�5:˷��ā��(V^13�n��8�ܼV�)�Ϫ� �1�c%�' \b�y�C-��h]��e.�t�Km�����_�l���F[�3�w[�vL���;���-�r��ͅ��������*�ڞg_1��7+����27��T'9&����8��v�zL -�q'��W�[TV���({�C���缅Gr�g��+r�� ����^Y�pp��!�����Nk��5�T{��k���gk��̅$��|���0kk��@�&:�f�ku[����75�qʜU�1yL:sٜ=a�S�'��rV -`v|t�p~�ݵ�6��[^g[�)� b�\��qa��X�|�{(�R,��ty'sd�����MZ�Sxu�e�r#�c����8"Mn�^��ty}kF�#Q׃u���=�\���QV���κH��c���5�y;�&���V��2�Ϯ�ug=�v��2{zf��Q=u_��X�|8k[*-��'6�7���B��i�_d�E�Y�;v 8o��t�]i���A���]�6� -dzit��r��g�E�RM lg�쐗����=�sG� mO3�f�'��v���sS��xEG���[�'2\W���?�}��ou_\�G��"?��A����L�eFF������־�"�>�� �r�$��J:����s -endstream -endobj -35 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-15 -951 1252 782] -/FontName/VCNSUD+CMSY7 -/ItalicAngle -14.035 -/StemV 93 -/FontFile 34 0 R -/Flags 68 ->> -endobj -34 0 obj -<< -/Filter[/FlateDecode] -/Length1 772 -/Length2 621 -/Length3 533 -/Length 1184 ->> -stream -x�SU�uL�OJu��+�5�3�Rp� �4W0�3�RUu.JM,���sI,I�R0��4Tp,MW04U00�22�25��RUp�/�,�L�(Q�p��2Wp�M-�LN�S�M,�H���������ZR��������R��Z�ZT�����eh����\������ǥr�g^Z��9D8���&U�ZTt��Н� -@W����T*���q���mK��dgaq��n�99~�� �A�!����S U��[PZ�Z�����Z���4<�6�Ԕ��\tYϒĜ�dǼ��T]C=cS�Df�[fEjJ@fIr�BZbNq*X<5/�)��;D?��/8�E�ɀ�̼��ʂT�j0��RQf�B�����!P!�X�h���%�d�+��)$%Vr��225U�6T��KI�PH���X_//��E4� -i�E\�X5�P�/(�:(̅�'���j]`�ӵ45T0425R0�0�EU��YX���`j```ahM.-*J�+�`��i��pMM�HM�=G4�1^GV�kW��w�8ws�,��M��~�&�6��M�=w��3�ܓ�izan�5gα6���w.��"?�l��Q�I�;����iaz˰8��=ٗc���/��8�Xs������ý���Z��G�Kl8n.�zAmjQY0�����n7;��s`�)�#_q��.����V�g��`#��s��?��gi��;��{L;�L���jdBK�a�S;w,���?�m�c�:�|��^���G8WW6��7�?��8C��_��J"�:5�pO3��Ttq���¡K+7e��Q���x���+c_��Ի!�b��ws�vل���۾B��ղ7A|�������/ؽHe�������S�n�.�d~k�~�+3���߽~0A��?��rRN2mݯ?���˖�Q�i:[�GyM�����tg�����V_MӜ�)���=�2��擾��NR���� ն� 6�Ϝ -�&���<�skyw-��]m�Є1YyO���u�#Z�.�_zu���4cC��os�g����z}6����S[K?���u�ig=+�3��e��8n5ߓ1��k�p�6�+ۧ�r�3k�S�~s�W� -��W&�l���m�b�uKdx<�Bvc\]U������ٲ�rB���×�i�5� è���9kdJ���[eeoO4�p�0,H�IM,*��M,�����Չ� -endstream -endobj -44 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-19 -192 944 683] -/FontName/DPHUEN+LASY10 -/ItalicAngle -14.035 -/StemV 40 -/FontFile 43 0 R -/Flags 68 ->> -endobj -43 0 obj -<< -/Filter[/FlateDecode] -/Length1 822 -/Length2 1123 -/Length3 533 -/Length 1717 ->> -stream -x��RkXg�VQ��կ�@�2$!�X�� �pIAdE:$I&1$!) Q6!X���U���*E�R��zYYD�� -,VTJ����鲿��������}�9�y�8}�s�$ ����A� B8��@*":9��X�J�M�a����a|9�*b�!&N�D�hʿIx&R`��xK":_�T-C���K�)�t��rĈ����I��LJE�'ᣈ\M�#�ș��� 2%"��(.%ID1�����P�s��� ܕ�lF �NE�L &R"�a���~����o^�Hą�x�9��`1*R���#1�[�9m���U����rX��9X�n�B�1� h�?�B���(�L����*p���]�f��p�����������wH����3N�D������0�D�b���� `�V��#H��� @T�dw -&��)@��g��DF���*p��~I�?���D���p+�e�����0t� ܄�� �5{�W�d&��!ܡ�b!�ۊ *�O��"B�߰[� /R�%�Z��~���c2���8���l��#^���䢸�K!�a�q�?{���-#����2K�o�L��荷��o fg:-��o��^��)�r[ѵ�e�c�[��=���6�z-m� �qx�WDŽli�˽؍�j�oUA��O뇹���W�6��O|u�6g�岉ZHV��إq��'��ԑ/�H�}��E_&.;ɻ�x�:F����6z�審��ۻ�X ����4qM�SZ�c�W��MfD7�jt�iK�����*��WZw%��,�6���n�Eŭ=�����W��P�����kGKf�G��0r��R稹}�Ugf��� �����[(����c&&��O��ya�gυ�� ck2�CIEӵ�c7��<3z�A�J�n9Qu�� -7�KE�������]���.�f 4��������[/��ޥObJ�T�h��ڲ��{�٦[���bi����Tm�*�SLwR�,��V��Biϙ�?z珊�������fY�<�2��葊\A�-��'< -|.�l�S5�;J�}U7�<o���2S��]��Z���(�?�f�;q�-�i��u����7/bf?��, �|��nD��M���cuD����e6=�� -��dM�?ԓV��T��:��:�./�Z/SDEݥ�Xk�{גˬ|wW�+���CS�]O,�k6T��'Eݹ�X�o���x9�`qО��OM|z�֛� -�ӯ*��s�;�_?=q��ѽ̕��>ng~��IoVϊU�Njw^�Ys}�몒���; 3"�/�����/�9�M��UG�G ����+�n�]I.y�q ����p�s~Q|�ޔ�[O�ᵢ#��.�'��:�m��`F�3��7�S�T��u�c�?���)K�"N��ݒǩ�>[��0 ���`seĤ8�ԓo��H{�����H�|M`�Q����`�+����^K�Y��{׆3�C����ެ����3��{X/�@�!ȁp�t�e�+�u����wOY������O��yN��C�����C ��W��B����淅4�d�zy��z��t"R~?�z��虽��F��\�Xx�����,��^�R�T�1�A��IS��-�w�t��jt�M�Uj�����g���4=fsO[XF] ���s/�]]ྜ�+���O��X&��aY2��#؞�� -endstream -endobj -47 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-27 -250 1268 750] -/FontName/OMLBYK+CMTI7 -/ItalicAngle -14.04 -/StemV 76 -/FontFile 46 0 R -/Flags 68 ->> -endobj -46 0 obj -<< -/Filter[/FlateDecode] -/Length1 842 -/Length2 1969 -/Length3 533 -/Length 2586 ->> -stream -x��y<��Ǒ�d�DH����0c͞lC�}ɘy��,�!{ �j8B�C"�$�MY�ٗJ�d���C��9�s�����}�����|�����~}~��ԩ�ʆX�hJ&Q�a*0m�u�\��@!���MœI&h*� ���`�a�7���0m��6L���~!���3�ߞ��� �A����Y&48M��Aj� -��������)A V���,C�@o< ���dN�oel���VH `qr,Ny�E�%�!��AT�ɬm ��?��7T?���h��vNk��xB�?�D�@*HPd,H!�8�~cC�X| �Ǯ9M�cI�P���@տ����`{ -O���84!�ܩ�$�$��v8TmPVFΖ����[�O�� ���;��feD��P(�d�߿�Xv��!c�$o��@h -�����$,��,bU��:����pd -d�R���U�viG�X;T�?% -���"Y]�_$P ��D����8����a�p @�`�������$� hn �P�&�S�R( �������qx��`0����Ƴ�U:�����wı��}��6--=vY�H^��9��;칩��gƚ�Ć����'�y�V<�pk�c�������Ǩ�j*3��Ϋs��z�������m�qIA'�_48P���_-+qK<?s���_�+ͳ���i������.z�R�I�����Ll� �X��LXr�O�(1t�%�02g?М�*%5RtA��o���H{j(����E{+�*�슕�Y -�}�� ���ʼ���ݩ_���o�fVU�>�D*�N���,�zY6��[�K������\F̢,h-�����]{��g�D���?�U���"%MϏ.x�����������I-s5�r��nlͭ�K ���HJV�����1�1�'�ވT��%JE���Y��������N�;uwܱ���xb_8J�6��ɮd7����Y����x�t� �$�7���0�kR�}Wj�&���H���� �M����O�RMq}D�N�|�;,h�����:A2�a���^C]�O��� z t���~����:*��`�f�#�xS����EUnꑍ�sM�B����$|��d�k6��K�� ��iUl:��Wl����5"�F��9��el�G�L{�9 -}��;XѨɤ��n�ٸ�����}���\ȝ�Oy�3O}l�W�=��af^��EL�^m}%,��v$�9@�Ԭ�Oj�n*���# ��&E��u��*v�M��ǬxU��#��b -<~u+;��� u�l�~{Xƴg�����> ��RvB�K����(�V3��~��%��!&r����װƩJք������%ߎ�q�ps/�p정��m��G�_�� �C�~��H��[ހt����bI�䅍!�sʱ���g` -�L .�p��o��P��>�T�k>4�Y�sh�!��k��X��ŻI���%v�=T8�P����$���G.j[�"��'�7/_Q�1 -��:�\"�W.��(�7bx�u<G�}Q�p���L|s�h0����MFrS����\�T�.mT:JOTue}���}�林7|�@�7�I�7\[»����9���,W 2��gKu�lzC�����b�G�G���v���[�QP�,}�6ހ���n�^'NJd}�4.�Ty�/E�`=Ϫ��J�ك��V��B�}�Mv�6�����[�P�_Y�v�8w��J���5J[j��h00T��]]u�eۛ3�{�S�iK&�����Q�s���z"lCi�B�_��_�{J�tL9!��S���>Wt*�����:M�҆�9�.�O��L�KC�������Uc�����oO+Ԅ<�Tͩ�m����y5����x�W�^X������z�F=������#�6���LN�Bz{�ӓ1����\n�<�el�4�J�g|�ioMmet�b���&��6��m8(���z�1x�~9Bo�������l�����,u���)�A�(�[�,�p�UГ��>�������Ǥ��8yr#\F�p��i3���W.�g�W����$��D���� C�F���L�_��̹���"WbK�?�-j����X͊Pz��v ��v��C�a>�'��gʼ~W�0vIL4Ά~r4����s��� WMڴ���zF��g��LQrFɵ�x.�G4�����V�ޢl�[5�S -����D�/ ��Έ#=�!�"u�wCꟷL�(Kﰟ+�o���,�Ue�&�C^�!/�D����Kw-8� -$���-聏|ݽ����;��N�����Lw��d��<ͮ@�>���c�<���9�e�C�m!�n �R6���ْ<3�g,z�h'-e���T&<�\2��5%��nQNq���S7�_��� b���~u��\#��+�ꤊndz�1��)�h �t�8I�hg��e+�P\m �� -7����{�����(���b��]ۆT �HI�.7� �2��Ey�����@(~#!<�SĄ�����a��C��\{�|���j�$�:�������������P�D4��VBA� -endstream -endobj -1 0 obj -<< -/Creator( TeX output 2003.12.13:1434) -/Producer(dvipdfm 0.13.2c, Copyright \251 1998, by Mark A. Wicks) -/CreationDate(D:20031213223538+00'00') ->> -endobj -5 0 obj -<< -/Type/Page -/Resources 6 0 R -/Contents[37 0 R 4 0 R 38 0 R 39 0 R] -/Parent 3 0 R ->> -endobj -41 0 obj -<< -/Type/Page -/Resources 42 0 R -/Contents[37 0 R 4 0 R 49 0 R 39 0 R] -/Parent 3 0 R ->> -endobj -3 0 obj -<< -/Type/Pages -/Count 2 -/Kids[5 0 R 41 0 R] -/MediaBox[0 0 595 842] ->> -endobj -37 0 obj -<< -/Length 1 ->> -stream - -endstream -endobj -39 0 obj -<< -/Length 1 ->> -stream - -endstream -endobj -4 0 obj -<< -/Length 33 ->> -stream -1.00028 0 0 1.00028 72 769.82 cm -endstream -endobj -51 0 obj -<< ->> -endobj -52 0 obj -null -endobj -53 0 obj -<< ->> -endobj -2 0 obj -<< -/Type/Catalog -/Pages 3 0 R -/Outlines 51 0 R -/Threads 52 0 R -/Names 53 0 R ->> -endobj -xref -0 54 -0000000000 65535 f -0000070029 00000 n -0000070729 00000 n -0000070397 00000 n -0000070582 00000 n -0000070193 00000 n -0000013056 00000 n -0000016387 00000 n -0000016201 00000 n -0000000009 00000 n -0000021384 00000 n -0000021189 00000 n -0000000988 00000 n -0000031323 00000 n -0000031137 00000 n -0000001952 00000 n -0000041622 00000 n -0000041428 00000 n -0000002936 00000 n -0000043878 00000 n -0000043685 00000 n -0000003865 00000 n -0000051672 00000 n -0000051477 00000 n -0000004834 00000 n -0000054699 00000 n -0000054511 00000 n -0000005768 00000 n -0000059734 00000 n -0000059547 00000 n -0000006669 00000 n -0000061848 00000 n -0000061655 00000 n -0000007659 00000 n -0000063814 00000 n -0000063620 00000 n -0000008641 00000 n -0000070482 00000 n -0000009634 00000 n -0000070532 00000 n -0000012924 00000 n -0000070294 00000 n -0000016139 00000 n -0000065305 00000 n -0000065111 00000 n -0000013117 00000 n -0000067329 00000 n -0000067136 00000 n -0000013644 00000 n -0000014632 00000 n -0000016016 00000 n -0000070664 00000 n -0000070686 00000 n -0000070707 00000 n -trailer -<< -/Size 54 -/Root 2 0 R -/Info 1 0 R ->> -startxref -70824 -%%EOF diff --git a/examples/DieHard/DieHarder.tla b/examples/DieHard/DieHarder.tla deleted file mode 100644 index 62b5771ea83b2baba251e2847a39be659a324a1d..0000000000000000000000000000000000000000 --- a/examples/DieHard/DieHarder.tla +++ /dev/null @@ -1,93 +0,0 @@ ------------------------------ MODULE DieHarder ------------------------------ -(***************************************************************************) -(* We now generalize the problem from Die Hard into one with an arbitrary *) -(* number of jugs, each holding some specified amount of water. *) -(***************************************************************************) -EXTENDS Naturals - -(***************************************************************************) -(* We now declare two constant parameters. *) -(***************************************************************************) - -CONSTANT Jug, \* The set of all jugs. - Capacity, \* A function, where Capacity[j] is the capacity of jug j. - Goal \* The quantity of water our heros must measure. -(***************************************************************************) -(* We make an assumption about these constants--namely, that Capacity is a *) -(* function from jugs to positive integers, and Goal is a natural number. *) -(***************************************************************************) -ASSUME /\ Capacity \in [Jug -> {n \in Nat : n > 0}] - /\ Goal \in Nat -(***************************************************************************) -(* We are going to need the Min operator again, so let's define it here. *) -(* (I prefer defining constant operators like this in the part of the *) -(* spec where constants are declared. *) -(***************************************************************************) -Min(m,n) == IF m < n THEN m ELSE n ------------------------------------------------------------------------------ -(***************************************************************************) -(* We declare the specification's single variable and define its type *) -(* invariant and initial predicate. *) -(***************************************************************************) -VARIABLE contents \* contents[j] is the amount of water in jug j - -TypeOK == contents \in [Jug -> Nat] - -Init == contents = [j \in Jug |-> 0] ------------------------------------------------------------------------------ -(***************************************************************************) -(* Now we define the actions that can be performed. They are the obvious *) -(* generalizations of the ones from the simple DieHard spec. First come *) -(* the actions of filling and emptying jug j, then the action of *) -(* pouring water from jug j to jug k. *) -(* *) -(* Note: The definitions use the TLA+ notation *) -(* *) -(* [f EXCEPT ![c]=e] *) -(* *) -(* which is the function g that is the same as f except g[c]=e. In the *) -(* expression e, the symbol @ stands for f[c]. This has the more general *) -(* form *) -(* *) -(* [f EXCEPT ![c1] = e1, ... , ![ck] = ek] *) -(* *) -(* that has the expected meaning. *) -(***************************************************************************) -FillJug(j) == contents' = [contents EXCEPT ![j] = Capacity[j]] - -EmptyJug(j) == contents' = [contents EXCEPT ![j] = 0] - -JugToJug(j, k) == - LET amountPoured == Min(contents[j], Capacity[k]-contents[k]) - IN contents' = [contents EXCEPT ![j] = @ - amountPoured, - ![k] = @ + amountPoured] - -(***************************************************************************) -(* As usual, the next-state relation Next is the disjunction of all *) -(* possible actions, where existential quantification is a general form of *) -(* disjunction. *) -(***************************************************************************) -Next == \E j \in Jug : \/ FillJug(j) - \/ EmptyJug(j) - \/ \E k \in Jug \ {j} : JugToJug(j, k) - -(***************************************************************************) -(* We define the formula Spec to be the complete specification, asserting *) -(* of a behavior that it begins in a state satisfying Init, and that every *) -(* step either satisfies Next or else leaves contents unchanged. *) -(***************************************************************************) -Spec == Init /\ [][Next]_contents ------------------------------------------------------------------------------ -(***************************************************************************) -(* We define NotSolved to be true of a state iff no jug contains Goal *) -(* gallons of water. *) -(***************************************************************************) -NotSolved == \A j \in Jug : contents[j] # Goal - -(***************************************************************************) -(* We find a solution by having TLC check if NotSolved is an invariant, *) -(* which will cause it to print out an "error trace" consisting of a *) -(* behavior ending in a states where NotSolved is false. Such a *) -(* behavior is the desired solution. *) -(***************************************************************************) -============================================================================= diff --git a/examples/DieHard/MCDieHarder.cfg b/examples/DieHard/MCDieHarder.cfg deleted file mode 100644 index a2b049287576d6aae25238d3e03b5aa4ae2e6371..0000000000000000000000000000000000000000 --- a/examples/DieHard/MCDieHarder.cfg +++ /dev/null @@ -1,7 +0,0 @@ -CONSTANTS Goal = 4 - Jug <- MCJug - Capacity <- MCCapacity - -SPECIFICATION Spec -INVARIANTS TypeOK NotSolved - diff --git a/examples/DieHard/MCDieHarder.pdf b/examples/DieHard/MCDieHarder.pdf deleted file mode 100644 index f0e65a7c22216c358a33f81e9a33e1139550d942..0000000000000000000000000000000000000000 --- a/examples/DieHard/MCDieHarder.pdf +++ /dev/null @@ -1,770 +0,0 @@ -%PDF-1.2 -9 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F1 -/FontDescriptor 8 0 R -/BaseFont/QDCREM+CMCSC10 -/FirstChar 33 -/LastChar 196 -/Widths[319.4 552.8 902.8 552.8 902.8 844.4 319.4 436.1 436.1 552.8 844.4 319.4 377.8 -319.4 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 552.8 319.4 319.4 -844.4 844.4 844.4 523.6 844.4 813.9 770.8 786.1 829.2 741.7 712.5 851.4 813.9 405.6 -566.7 843 683.3 988.9 813.9 844.4 741.7 844.4 800 611.1 786.1 813.9 813.9 1105.5 -813.9 813.9 669.4 319.4 552.8 319.4 552.8 319.4 319.4 613.3 580 591.1 624.4 557.8 -535.6 641.1 613.3 302.2 424.4 635.6 513.3 746.7 613.3 635.6 557.8 635.6 602.2 457.8 -591.1 613.3 613.3 835.6 613.3 613.3 502.2 552.8 1105.5 552.8 552.8 552.8 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 683.3 902.8 844.4 755.5 -727.8 813.9 786.1 844.4 786.1 844.4 0 0 786.1 552.8 552.8 319.4 319.4 523.6 302.2 -424.4 552.8 552.8 552.8 552.8 552.8 813.9 494.4 915.6 735.6 824.4 635.6 975 1091.7 -844.4 319.4 552.8] ->> -endobj -12 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F2 -/FontDescriptor 11 0 R -/BaseFont/TQYQBK+CMTI10 -/FirstChar 33 -/LastChar 196 -/Widths[306.7 514.4 817.8 769.1 817.8 766.7 306.7 408.9 408.9 511.1 766.7 306.7 357.8 -306.7 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 511.1 306.7 306.7 -306.7 766.7 511.1 511.1 766.7 743.3 703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 -525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 -743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7 -460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 -460 664.4 463.9 485.6 408.9 511.1 1022.2 511.1 511.1 511.1 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 627.2 817.8 766.7 692.2 664.4 743.3 715.6 -766.7 715.6 766.7 0 0 715.6 613.3 562.2 587.8 881.7 894.4 306.7 332.2 511.1 511.1 -511.1 511.1 511.1 831.3 460 536.7 715.6 715.6 511.1 882.8 985 766.7 255.6 511.1] ->> -endobj -15 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F3 -/FontDescriptor 14 0 R -/BaseFont/VXZVAW+CMR8 -/FirstChar 33 -/LastChar 196 -/Widths[295.1 531.3 885.4 531.3 885.4 826.4 295.1 413.2 413.2 531.3 826.4 295.1 354.2 -295.1 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 531.3 295.1 295.1 -295.1 826.4 501.7 501.7 826.4 795.8 752.1 767.4 811.1 722.6 693.1 833.5 795.8 382.6 -545.5 825.4 663.6 972.9 795.8 826.4 722.6 826.4 781.6 590.3 767.4 795.8 795.8 1091 -795.8 795.8 649.3 295.1 531.3 295.1 531.3 295.1 295.1 531.3 590.3 472.2 590.3 472.2 -324.7 531.3 590.3 295.1 324.7 560.8 295.1 885.4 590.3 531.3 590.3 560.8 414.1 419.1 -413.2 590.3 560.8 767.4 560.8 560.8 472.2 531.3 1062.5 531.3 531.3 531.3 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 663.6 885.4 826.4 736.8 -708.3 795.8 767.4 826.4 767.4 826.4 0 0 767.4 619.8 590.3 590.3 885.4 885.4 295.1 -324.7 531.3 531.3 531.3 531.3 531.3 795.8 472.2 531.3 767.4 826.4 531.3 958.7 1076.8 -826.4 295.1 531.3] ->> -endobj -18 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F4 -/FontDescriptor 17 0 R -/BaseFont/BPSGSR+CMTI8 -/FirstChar 33 -/LastChar 196 -/Widths[329.2 550 877.8 816 877.8 822.9 329.2 438.9 438.9 548.6 822.9 329.2 384 329.2 -548.6 548.6 548.6 548.6 548.6 548.6 548.6 548.6 548.6 548.6 548.6 329.2 329.2 329.2 -822.9 548.6 548.6 822.9 796.5 754.9 768.1 809.7 727.4 700 830 796.5 412.5 562.8 824 -672.6 961.1 796.5 822.9 727.4 822.9 782.3 603.5 768.1 796.5 796.5 1070.8 796.5 796.5 -658.3 329.2 550 329.2 548.6 329.2 329.2 548.6 493.8 493.8 548.6 493.8 329.2 493.8 -548.6 329.2 329.2 493.8 274.3 877.8 603.5 548.6 548.6 493.8 452.6 438.9 356.6 576 -493.8 713.2 494.8 521.2 438.9 548.6 1097.2 548.6 548.6 548.6 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 672.6 877.8 822.9 741.7 713.2 796.5 -768.1 822.9 768.1 822.9 0 0 768.1 658.3 603.5 630.9 946.4 960.1 329.2 356.6 548.6 -548.6 548.6 548.6 548.6 884.5 493.8 576 768.1 768.1 548.6 946.9 1056.6 822.9 274.3 -548.6] ->> -endobj -21 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F5 -/FontDescriptor 20 0 R -/BaseFont/XHRLRC+CMR5 -/FirstChar 33 -/LastChar 196 -/Widths[402.8 680.6 1097.2 680.6 1097.2 1027.8 402.8 541.7 541.7 680.6 1027.8 402.8 -472.2 402.8 680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6 680.6 402.8 -402.8 1027.8 1027.8 1027.8 645.8 1027.8 980.6 934.7 958.3 1004.2 900 865.3 1033.4 -980.6 494.5 691.7 1015.3 830.6 1188.9 980.6 1027.8 900 1027.8 969.5 750 958.3 980.6 -980.6 1327.8 980.6 980.6 819.5 402.8 680.6 402.8 680.6 402.8 402.8 680.6 750 611.1 -750 611.1 437.5 680.6 750 402.8 437.5 715.3 402.8 1097.2 750 680.6 750 715.3 541.7 -548.6 541.7 750 715.3 958.3 715.3 715.3 611.1 680.6 1361.1 680.6 680.6 680.6 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 830.6 1097.2 1027.8 -911.1 888.9 980.6 958.3 1027.8 958.3 1027.8 0 0 958.3 680.6 680.6 402.8 402.8 645.8 -402.8 437.5 680.6 680.6 680.6 680.6 680.6 980.6 611.1 680.6 958.3 1027.8 680.6 1177.8 -1316.7 1027.8 402.8 680.6] ->> -endobj -24 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F6 -/FontDescriptor 23 0 R -/BaseFont/VZCMNG+CMR10 -/FirstChar 33 -/LastChar 196 -/Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 -500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 -750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 -680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 -277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 -500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500 -500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3 -777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3 -277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 -277.8 500] ->> -endobj -27 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F7 -/FontDescriptor 26 0 R -/BaseFont/CBQPJT+CMSY10 -/FirstChar 33 -/LastChar 196 -/Widths[1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 -275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 -611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9 -820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 -666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 -500 500 611.1 500 277.8 833.3 750 833.3 416.7 666.7 666.7 777.8 777.8 444.4 444.4 -444.4 611.1 777.8 777.8 777.8 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 0 0 777.8 -777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 -777.8 777.8 1000 1000 777.8 777.8 1000 777.8] ->> -endobj -30 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F8 -/FontDescriptor 29 0 R -/BaseFont/JRNXYX+CMSS10 -/FirstChar 33 -/LastChar 196 -/Widths[319.4 500 833.3 500 833.3 758.3 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 -500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 319.4 777.8 472.2 472.2 666.7 -666.7 666.7 638.9 722.2 597.2 569.4 666.7 708.3 277.8 472.2 694.4 541.7 875 708.3 -736.1 638.9 736.1 645.8 555.6 680.6 687.5 666.7 944.4 666.7 666.7 611.1 288.9 500 -288.9 500 277.8 277.8 480.6 516.7 444.4 516.7 444.4 305.6 500 516.7 238.9 266.7 488.9 -238.9 794.4 516.7 500 516.7 516.7 341.7 383.3 361.1 516.7 461.1 683.3 461.1 461.1 -434.7 500 1000 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 541.7 833.3 777.8 611.1 666.7 708.3 722.2 777.8 722.2 777.8 0 0 722.2 -583.3 536.1 536.1 813.9 813.9 238.9 266.7 500 500 500 500 500 666.7 444.4 480.6 722.2 -777.8 500 861.1 972.2 777.8 238.9 500] ->> -endobj -33 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F9 -/FontDescriptor 32 0 R -/BaseFont/FGMOSR+CMMI10 -/FirstChar 33 -/LastChar 196 -/Widths[622.5 466.3 591.4 828.1 517 362.8 654.2 1000 1000 1000 1000 277.8 277.8 500 -500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8 500 530.9 -750 758.5 714.7 827.9 738.2 643.1 786.2 831.3 439.6 554.5 849.3 680.6 970.1 803.5 -762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9 -388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6 -298.4 878 600.2 484.7 503.1 446.4 451.2 468.8 361.1 572.5 484.7 715.9 571.5 490.3 -465 322.5 384 636.5 500 277.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 615.3 833.3 762.8 694.4 742.4 831.3 779.9 583.3 666.7 612.2 0 0 772.4 -639.7 565.6 517.7 444.4 405.9 437.5 496.5 469.4 353.9 576.2 583.3 602.5 494 437.5 -570 517 571.4 437.2 540.3 595.8 625.7 651.4 277.8] ->> -endobj -36 0 obj -<< -/Type/Font -/Subtype/Type1 -/Name/F10 -/FontDescriptor 35 0 R -/BaseFont/BAVMLZ+LASY10 -/FirstChar 33 -/LastChar 195 -/Widths[0 0 0 0 0 0 0 333.3 333.3 500 500 0 0 0 0 722.2 722.2 747.2 791.7 0 0 0 0 -0 0 666.7 1000 777.8 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 777.8 777.8 777.8 -777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] ->> -endobj -38 0 obj -<< -/Filter[/FlateDecode] -/Length 1237 ->> -stream -x��WKs�6��W(9ig�������I&mO�[���+���J=��� HI+ՙ�3����� %,I�c�~��7}8~��%��(Z���1҆ mӔi��i�Ҩ�n&&ET��V���)2�zˣ�ei�������`FG�7�ss�b�i���[1���i%���7e�>o7�LJ�E��ם?\d)Sz<] uy:q!��ɐq,�T2���(f�ŷ���JI�L�|BE���{����܂j��M��lN3�d���{<ף�3{ft�����řb\8�6���f+��O�F���F&��L5 -J���߯iy�ܧ��Ц>Ж9�l�5�ЗM}S%�Ǎ���q����4닪"�����)���m����6D��wMK���)�����F��y����h�&�㕋ۭ��CDfL�Ό��!߃��w u`�3M��]�Wl�U���7�EV|��@�%b�#�0�B��릧A^U� �@SDw@��-{O� �z��oG���䷇��:X�.SbAY�}(�?�h�o�C�ㆴ���� �U�M()��������љ,�N��t"�Pz��KT��,��H�b4�WB6�ѝ)n���p![c�s�R<P58�2C \�fCԠ9ߗ*(�2�9]�T_&PR�^����x�������B��lܾ>w}��j7PT�g���M3�b�d1�u�'��MY�1H���*��q]��l��/���N� �1���ܑ�4������y�o�чSd�I~���y��������ʞ�)��J�Z��>�e}���͂�y�y;GE���a���d,T�<,��*��� =��n%NGW�Wl n6���ޝ��fM���w��)�o��`�!�Cb��r��E)t����{�T\]���o�0e�J5���P����B}�n��X�yE���Hd(�>*��sU���Ǟv�b�Jr��1˸Ցb�u�hqYctS����N[�8��#�/�`��Z2aC �E;��x�oKn��KZ�&a�t�>~^ -�,�&a�ru�a���M�63�c|q,��B����V< ���?;��R1���K ��������$� ��Ξ<b��y�z�=]I�K[ fk2w��>{$͜:����/�;�ZAZz�� ��b ���B�=��P�I�M����p�O��A�@P����^S���'+�r�l���q�q$̷|^����x�83�E -��?m0� -endstream -endobj -40 0 obj -<< -/F1 9 0 R -/F2 12 0 R -/F3 15 0 R -/F4 18 0 R -/F5 21 0 R -/F6 24 0 R -/F7 27 0 R -/F8 30 0 R -/F9 33 0 R -/F10 36 0 R ->> -endobj -6 0 obj -<< -/ProcSet[/PDF/Text/ImageC] -/Font 40 0 R ->> -endobj -8 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[14 -250 1077 750] -/FontName/QDCREM+CMCSC10 -/ItalicAngle 0 -/StemV 72 -/FontFile 7 0 R -/Flags 4 ->> -endobj -7 0 obj -<< -/Filter[/FlateDecode] -/Length1 931 -/Length2 2919 -/Length3 533 -/Length 3567 ->> -stream -x��y<�m��#��}�z��>�m�;M"KEB�̅ǎ1K�܄$e�&��R��R���5��"�%�-y�z����y�y?��置��q������q^2�l앍�DwМH�(�U�ڀ���� �U`2����S4��ZZp�(��#�������"�I�d���3�����|A2�&�Vh���(�A�{"R�U���쾥�v�?H�*`q -�z��7W(������Z -��_�ç<�p�%����@����@�����������x�5��[���������K -��d���Ʉ_��wV ���*����0FO<�~�p��8*���Q0^��~���&��njkjbgf���X,۠qʩ`ҿ -�g���hG��T`08C�x��r�e;3���<���&���� b�: -p,H@*�3T�@�0R�F[.�D2��L�����~������0����p� -��H��� ��#��P�O��%������'������a*�oD0JQ��v�ؘH ���uƱa����:�¿�Np~ �P�� -��(&�L �1Ŀ��9RA$3K�t^IB��Zc�a������V--}��l��� -.����T�>H��������3�|��Ђ�]`�u�M�,FL��m��E�U�@mU�W� 5�]W��^/�+���Lj���9 B ���i�mY��.�{��2M�)Ѓg��a�q�P�����Ħ-z�TI�=�$!�5���B�<1x������NJs�^��u8������!��5�O��.���D=^�y���Ί˭��)#��-?3�H�G2�h*��Jw<�C����ޱ[��#~���-�9N�7O��a�뵳���ϭMWu���4�fE�sH����z)��.��8j1����M����59��BB�n�)o�8^���R?�FwLj��I6�k_�*l����a�T[|k�,����(m�Y�m�C -�D�>��� Α�OuX���,$��YӦ夢���\>@��9��c�9���w�r��`���-�7�?z���%[�s��%���z`M`�F�+[�̛5i������iX-�uP��ay�B��x -_��&Gm=G�p�";��{�~8%��v癛ɝM.�,!�n� �UKV�Z�ڭ��W��2WO%6���2�f?�s���G"�P��������ӵw9��U7s�ޏg�5�� rߓ�U/�y�a�T(� 2>�db�M川�����MW³��+^�����;Y����?�L1m[�#�D�|�i&D�L�#V��v� -�}�mg<� ��/@|�˴�ʛ�;�ee!ŅPa?�i��}l���m��� �cLŞ<�~��-�U<h؍�FB���$4�Ĭ��r�ި��Xx�v�}�+T=] qRJ˺d1O�!\��������eO��:f /�Q��SݿH�JJ��ҽ|SW�V�r��`ˍ� �}ʛU��#ʊ�)ɏ�I�M�n>��Ŕ��� v_\[�usd�u��w���꒐��07k�ń��KR1@B�ّ�4;Yh���œ -���aU���W������&7yO���T�Y�Yu\�|�i���*��)�DR����Ւ4��Xu�ɟߎZ>��r6AP{��eh��)-ߨŭ�PQ����� KOX)n�2��X�5_����=v[��Q&�=m乱o�����m>��5sdm+K���)�����QY�u��aBѦ��[����/�������9�~OP��.�J�\�/0���m�'�إ*?�~GbC�8獈��Ӫ<Z��Б�pt3';A�Mv�"#�w������ W>x��w��|}֦A��+c�˹�\�rIa���ܞ�R���y�[Q�5wO'��[��E�T��н���'qE��:��WK�#1%c2ji����� -�H�5�(3 -�7��7n�&�DA�� ]�jrY ��o/��!bKl�S������O�;}/'мk����ăo����j`19�� ���8/�O�C��H��Mz�}�o���?s�� �_���0���x˩��vu���2*�m�n:�T����d��S�4x��Ϧ��&p� -��������㯃��Z�,�����G��8�S��z��S�X�]_��DҐe�+1�7�tYɻwq�|�q�C� -�B��{�תsu�1�ź�Q-D���$t����f��; �҇�|i����nzML�rM"O�豈R�7�`"�A�HG��Џ�j����˄7日?X$��<�8�nڏP��jj���̮e��N�y(�$UF�jރ�먲���[|K��+��O�ӳ�Lv�����e��H�8>{8H�̵4�w�R�pH�D���':_8�X#3���Ir�t�' �Y�f�H��l2��ˏ���a���P4�tˈ�SȽ �nfL���6� -�N�،F$&H���3�4��:a��,v�A1��:ER �eǙ�u@4�jLkW�}���8��YU�C��;%2i� -�F�O�Xj,?���PW\ mA! �XI�������Ȃ�O �w���IVI�W||cc���}�R��V�=�?�o�*����M6��Ȋ�����r��XU��h�e��J��*�U&�����vR�!�IĺU���� LIeu'ܿ���Ւ��waۜ��97�q�y·�����(�����-l�T��\��,���UK���W�k���u�Oc� ��{�O��nw8{!r'�7RD�Ғ_/.Kf�F�=40�ۧa���I�1��:�t?�ߐ��I澽��G���S�͠�qf���Ɔ�.;�+�rt�� �*a1�A�p7��=��q�@|�x�$&>d����.�z�$��/i�%2��/����5ܗ��9��F|��d1����B�^�9�A�_(`r�]��~��l�eX�˄C"�L�PlU�s��Zet�Q�D�����_�Z��e̥Wݐ���%D������.o_��Sl7��L�Y��X�Q���p���L�Y-��J-��ۇ�cB!�g�K^8�y(p�h������+A�����ٱ����FEX��̊h��Ć%;�h����_*����ۋ[Ωx�vV���M���R����*�b��,�c����>�� �u]p�(�K�X��/vI�خ����eV�E*Pb��σ�Ʈt�������^�ע)j�hy��K��U�����_O\�%�Aϻ/��qUc��#����!����!^;u�0�DŽ�riԚ�$0n%����oX���7�iN}}]g���Y�Az��:y^�|�����Q�)0����_齲��vQͪ^`��2�K���U ����+`��Kۑ������|�����7�XXX�����9o˴�4>�9y`����HӒ��vP49� u���Es5��]6���ٔ�9�M�&Z�3�RWBhV��T�)�^�8�-%��J^�sZw�<�>��tD<MXi�1s�E�J�z���P�"}(:�խٱ���q�$HP� ���6.H���@�����<�&S��h��6� -endstream -endobj -11 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-163 -250 1146 969] -/FontName/TQYQBK+CMTI10 -/ItalicAngle -14.04 -/StemV 68 -/FontFile 10 0 R -/Flags 68 ->> -endobj -10 0 obj -<< -/Filter[/FlateDecode] -/Length1 1009 -/Length2 4906 -/Length3 533 -/Length 5608 ->> -stream -x��g8�k�ǵ� ��A�2��L��^%3a03��IB��� Z�.:D�%:!� J�嵳������|9��v��<χ����^��Z�~x8 MD�`h{8�����4 ���b�qQ11uJ �E�Q�P,\ .''���/��<HZ^\�����v�� ���~ ��U2�5$�p���(� ��,��u��p��(���� -0�}����x�a���������;"P���mi��2�a�n�Jy�1������ -�.}��(W_������<~��l�����`OWW}(����y(���O�扅c�4�A�]j��Cx"����B]j(GW8@D\JTL�8�����X'�C���W�����e�~����7R���t��B(��� �����ɗ]� |�Vb�m�^��Z���4-��@9$@��(����H���(�����E���[��� <Dc(�����{���5�M2���?I -����.�A�M�B�$9����$.&������ �/( �:�A� �/( �:��◎�����0�K1�/xi��O��<�������>�"�Ғ� ��r�r��Ui�B�{µ5 111Y �_QO����S.�¿�!�����>p� #�:�$��m/��� 1/ΟK1Q�^]ȏ?O�e� �������l�6$I��p~7�H�Dر�h=�~�ibq��܂�ݐޢ-�x8mb�v��3��b��7��]4Xx��&��Z�]����}���.���Y�}�=Y{ -��9�ݬ�!o����j�lf�bm>[x!c�8��6��/��z}�p -}����#��L��F�ܷ��)y�2LI��Z��L�^�R�Fw��x�37�� ���|��Q�E��̘�I˺���lD��NH�4�2�I�����O+R��f�}7"Gj�ɮ�����^ȓ��5��5�M8�+��j@I����q��b�Ȯ��`�c��w5�# �2w`Ӈ���!�tա�}k�p�j�� -=��m�\��[8��C�g}rlpm�`î:�\�~d�A�;�/�~J(l'c�y2�A5�s��]*�P{"K2�����7J"�6>�iZ�tS���ȖF��94D7[� B��bu�ٜ1">_b�h1����&K|{首?��s��ky���`�� &r�ϖ<W���E����a��ρ�{旅� l�;_,�R˚�D/<��z�bW�b�Z�e0�y�d^�ݧՃs4��<R���?�V��l�eb�]9��@`�D� 4��H#��O��2�ƤA㾤�bVCz�گ���2����#���h�P��]��6�YRf�g�]D�yQykw�^���.�����*�ZX��V�"��W��8,���~�HA�Ӟ:�uy���P)ˮ��P����p��o����ҋ��ۓ�4�O�z� \�l�%���hb��f��1@�e�̒�e�3�y7���[oU�2�^&V�G��g�*0�:t����O�'��.�q|�=RD@k �0��N�3q�M�|Ao�����$[%�'b��g�|��76R���Yxp���t�j�uSDj�)Ο�^�*�=��%� �/y*qO���2��P⧒�O?��̍ 3S"O/\��]��} ����g�%M��QA�_�S�}$���2r�z���3��3�WU��Cc�$�����{锞p��Ȧ�y=>��-ׄ�6 -����aI��r�[.��|�����~(���l~�2�O��MA{�N��[�ī�ת��3�2�8T}�^w�H��/4�fw#��ê$V��J����?�����4 � M¾���B�� o@����뭳�����4��d���T���u��b��!3�f��3r�w��pW)� -����F�5)�^%�B~�~DP;W�P+ ������ϐ>�5��M���Ooc d'�{����r���z�0��0%Q��n���K'�Ny�|t���:�P�n��@����VM���X�5c�i�7�S�������O5����-��J���u�"��a�B�����G��3ð�������^F��B��j3���H>P"��5�T�p��ju�wz\ ,��0ۼ��wG�Q��}Eh[���r��0T8W�HAB���n��<%�>F+q��� �+�t�:�q>�u��/>0��-S��z����g�ڻ�K��4Ӓ+]e�IF��-�&��<���>w��4�q�!�n!��!��7�����E�ܟ�n��e+�9��>�������e�p[��%b�[u�+F?��S�d���4������{6G��*���F��)�D=ȟ5�[G��L���<:���iW����>oyeVy2�'�� r�i�����ׇ�!������P�C�܁t;o�rY�(�b�n1�-U�]�n�r -ܰ�7�e0a��^ y�� -\���l7�k��"�<�f -K����劊l��1W��lR�\c�f=������"C��j-n�7v�O����Ts� -,RX��ED�)�Kx�MR��6��8�D�o�(�ռ3 �%''��J� ��y�vl(�1ܓ��'|�+��=5���#yM���/̘&�%Y�:�6�ZXő�.�֊O���aXw�M�]�J%콧D�0��ęH�$����Ꞗ���WK��&���%jF���H�zne{}�ӄ��O��|}�A�xs�F~'�fۍ���2��/��jC�a� "��#�oQ&�vT �����7�;ߕ`�X�?.�\�}z}����I���z�TC�@�UP:�}��D:Φ%�{���,�����t.�Ǟg���r���0��+�`W�,U��R�É�[�`�-�C����a�|� �j�X?|����O$�x�Qy�0A5]�"?�=KC��6���+2��)h���n�:ïI�,�e�z�"D���v�W� ?������vY���"jB�]�r,������p�6l���g7I�T�D���{ -�Y�dc�q^���wҰKX��d`� ��ȮU�j^��R ��j��w��y}� -S��}�V�99fa�_������}`:�m������rӔ{�w�.}]���0G�����' -��iK�e�6�j�=mf۸xW�*��g�A��Hr?+��^�|��ϼ��B� ����g��F٣���:��Osfc�����8���o_���^��Q�[�Az��r��m�$E�7X�/���`Z�%���F&�`���i)��%����z��w�z�VJ[��S�]�Qe���s�a;�ȵ�u��c�E��x|U��٨P8� R`� lq$�M�q���B�(v飣����ExK��+%��C]����� F,�jB�C=���5�/��<���ٞ�+�m���(%�&�\�Cz�TNzam����f����v -�e�ɖ>�=YsT�+i�K�K -�1�%�� o�� ������W��=�g���� ;_��ꇣ�n�~Z�9jf���;�Ht H�*L�0+c��X���g�;ƘK<�����y�L)���͏��S#M����*��j����?�UG�IV�!Äb�|�E�g8����� ->��X�&A��𦊍"323n��V]���L6��gdaH��Pע�C|(S��l�}��K�K����F�=���� 1!��V ���:��p�[^�� ޯ��\�mdB�N��� ���Y��)�m��C����&Ӫf§ژ�e}�~_�.t��PS5c��篭�!��9<t -�%N�%O�r��w���e��}T������G���Kh�����@�1�����٫�D�Cwc� ��B:��0�Ci�G˅/���!�^̼ܣ8�<�P��mL�y{�v��-h2�01�}&Qq�"&��\%QP�T�f����\-P���u.�P}�y�$_£L���0an�t�����ǧBM�W�����[f~d�d܊y9B䭛M�QO<�r.\f��;j�(c�ߎ�! �����[��L�Zy��e�����l�Z��f��-O_VLY�ȶ 搲�kt�\�Gv�`�à�+S(�\{ƙ����R�6��Ywŷ����d�T����#CV�"�;:A^d*lYq������t<���6��Vq�ފy��^�:d��b�L�/ʈ&&�����G#l&�*[�?l�,t1���<�t���3}�������+a�����=����t� -c��1E�g'��w���>PbB�K��n\��|��ȇIL=��=�iNJ�I�ɸH���V�`������]��� 0poۂ��N�����L�P^���-��ξ�9V����0�ԑ�wT�s�GU�0��l&�)S��~OW��K��R�o�T��ۿ���3�ʢ����+��57M����ha�s��kk�ͣ��4���ЋvYE6�p*Y-�}גl��]U�Tk.����+��s����G -���g9�T���:��{-o���r�+���y�R�]%�<AF?�z� E3=ҤSp�=��`�1=pE�����6%<Æ���{L�ڻ(�˒*�1��V��5+R;���\���'����ʒ��W�v�>Rb=� )��"}{/50�r��; DN��cRF~%z��u|,~�&��ϰb�>��J�o�(t;��+ۦ�&A�b���] -�'�fH���ڙ0z&5��㣳W��O-U��]�o��T�*Y���[�/\��}��)� ���?%L�Ul/~�œQg(%�|�fӕ�#.��Y��q=�F��>y�]e@�~�;=�I��"��O�6�lY������>h�-����lj]�{����!���,T���^�xR+z�l�p����F9iw\��fD��P���Ru��Q�*���7Rl¸��"c�����D=��7W���ei�8���5G���i�2yk�V�G�S���U��B�CS�d�}uRA��r���89_�~�q�K���{}�Mc��d�d�d��g��L�ė�+�dm-6��,��[L}Lk7|o�^�����Ɛ�(���h$Xa��� -L9���2ۋ\�;� -Ju峳H?^I��Ť�\����������S�-#��j:�$�N�I4%��Z[���:�u<�e�6k��"s�����fpm�����8�h���|�ߢ��o�+��E��nV,4��Gdѓ٤q�'����ѧi#�3Ow~^�ӎB�}�����s�ȧq����0+".�0:��}����(I�K�S���6B�"S�s�Ou�DZ�^��}o#���$�]��^� +¬7�uI�y��<w�[Ʒ�97`�O:I�C^\��t��s@�������P�E(��:��W���Q��B?��{RL��d^�i��1h�R9���KOc��Д?��� v���~I�;ʴ�ND�ɺ{�:��ߙ���^���jՔ��u�m�=� ����̂υ�%m9� L©*�����f��ķo�?�e*��k�|�S��Tc���,�d�bM�"�1�E��>U��QnQȎK��nae��E�m7�L��;[��e����)7<�G�}( \��\�8u����F��eO �Gt5wr�$��D~���_>��_��DW8�E#�J��KX?; -endstream -endobj -14 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-36 -250 1070 750] -/FontName/VXZVAW+CMR8 -/ItalicAngle 0 -/StemV 76 -/FontFile 13 0 R -/Flags 4 ->> -endobj -13 0 obj -<< -/Filter[/FlateDecode] -/Length1 1302 -/Length2 6657 -/Length3 533 -/Length 7476 ->> -stream -x��e\��ۨ��Fj�����E��f�AJB�.�c����H�tKJ# J R����ֳ����η�;3_��Z�}=k��������� D������/�����llrk��E���e��` �#qA1q!0���su���:8"�r����!P[k��5�G%����\m��/(�u�\� ԅxB<�A����~~����8@]��?�T\�]�"�����3����r�<9�(K;W�/�b�i���AP.��Z��'W��4���Gm����Ca��=� -w�B@<��v�O5������z��=����Ame\` ���S��ӆ"l���0O�_q��ݿ%P�������@Ɛ���{L����u�'럓�b�_������&����e��Z -.��vPTK?Z{xX�P��"a�??�b�B|P� >Wj �'@{W����/"�C���B` ������#~E��;��i��l]�p�_T6G_7G�˯�#�Zԡ���z$��"Q H�A�R�E@��/B�S��D� �_����P��e%��`��P��?u�v�!�>�7D ������!���o��z�o��p� Q������( ������4�~CT]��U��7D�8�7Dix��(�g�!J���, ���������u���|��y�`��08������Q� -��`��{����K��)���?lE�k����I E��a�>�:�0���ydV�Vp�*|�C56���o�)<�Y�t���vL��tDU�����ݾ��K����[M����bwx'��L0@_!1M��5�9������v9���̴�W3���v�&���5�Q[-h�3 -�j �Y��8.�rv&�4���𗂡�OO��> ��Uv4�ί���Gw������,)1f���� ���ԭ(�4�N�������O�3<1���L£̶+>��H�H�� -T�W�9Q8x�kV��j�>�t�o��n���P�,���c'� �}��mr=ɁSojn���ܯ�nWM$�9�!�Tms�b���^�m���5�{u�b���5��� -rg�ԥɝgk,�[�1���A,�ć�F�F�E��h*�X��������|i㥘���h���_�������,�)s��4�CsX$���� p�czM�B�Ѫ�y����Vxs�T��XصJ%wx�]�k����[>P &�*��P�bY3�t2wz�Sq��:�`���ʄ�'�q� =O�}�o�ޭ%��'$�d��% �#�)t#_�6x/����hަV3��ц�����+�����KV��ث����j��w\���=��<���~�)F}�K�k�3�1��|ZC:9V5�/��9�6�cJN]B��9?���)gN�yc=yeO=�j�cd�����%�,�A-�V՚�A�KæW�nf����ӯ3 �5�1?�ۣ�yދ��c�c�.��DXƊ� ��2�\�Q -�J���-�^�U� -�%'c�-�lz���f_�K�>�:�7�6��b�f�9�8J���:�튣w�8��A�+� -=��'�AE�U�4~J9n�.pX�f�V8�\���S{���z�2.[_��.�ngE+a�VCo.�<ߚ-���3��zzP+p|�Z�:��m�-w �SF��Eם -�[�B#�}�I8A�� c� �����u��mj=������Xi�y/姁ď��7W戀��SJrSn9r8�=k��S�3�t�T���}�~��X���=C�F��e�U���Dm�v���{�;r.���`�����<�^m���5ގl��0L�E�<����گ�$O��t�D�a���|����E�{�|C�l.5��Y��T��gWE"݄ ѧ��]�"�«tt~�x�� ��K�Z�ܨ�4%��f�; �Av�g�7�^J�<�!�j֭�~���#!�_�Ũ:� 11�e�F��U�:�����x5x�Ӊ�c����/���>��~��\�T�R�e@��/���)��Ԉ���2ȧ X���Sw��� �X��n�>�w�&�)��W��3d�b�a��2[0�.���@�J�ez�uSJ��X��!H �UO���JN�a4��A؟}��?���̕`k^u�Yc�h�j��wp�{v�E�m��.FM��K���b�����"��i�6�} �d���<��>��c����r'\|}f��I��d�ݎ������3��N��-C�T{}�h��݊��br/-���`��|6�������: 7Ǫ�sҜ0<��U��������R�C��A���ԄBd*��X#�d���-o��<WOb��,�[t�ҟCsfݢqd<�'�����0���sW���`�*mL�2�_ͫ�w�0C;&��[�^�d��A.��x�K�uC�s��>��\x�B��VUŜ�*�����d��9O�� --M�O2[T�y��k��+�� -����nV�OT&��\��mr��y o:�<�q��>��%��.Qc��O}{�w���j&�^�����mg�[��4X�qؓє��H�.*S��>&�{� -�/��`���k��a�5����FC9��Mq0;~Fv�ݪ�N�e��&ě��s_�tHw�6��@��&�l.t���xW|��'M5�� -����Á��q]�C -NrM�I0�m�d����iV^�9��OEA��XnR�F����n&��N�0 �#��"�����3J�1u��5$}�$3��P�>�g.��ͶW�1_��x4�BLd��s�B��d�e�"- }N�v�*��yD]� -ʮu�i2$�̧�KqI�";�u�}�����q?��@��brnMB���rƁ�F�#s����J2Kl�A�]��o��I%(���F"�C�v�lGr3�:���-����J� t`���Դ��i���ve�y�kG�-=|���~7���$X���D�yC�C��A�1K�ws��b�+�8A19Ư��7 -�s?�{�Sf��Bv�/#��o 9i(+O����б���������BV�$��̈A�R}u/J=�r�P���-r����~�{<�r��iŤb"��߮�������K*̾� }�T��,s([��>m��<�g��4�^+7��Ȫ�߰�|A��f��+��F����h��)�U'#F�����P</{�rTg����O���G�ܬsx �2�2'G4�U���}T6��(�[�|���f�Ӷ��4˂�� 3�DF���{�'����3f�n��7ofJl3�W_,�U��b #�WV����ZB�����pf=f�V�zg��ܞ�`�|j���U��OF�����hYI���S�)G ��ugG!����&NR�fJ�s�`���q�)Ȋ�����w�ا���sڼn���q����f��7uW�BD�x ʭ��3���f=a#���Š�L��� �����.�����0ׅ$s�ش�n���r�m�N{tds�sǎ��!����1�v�3SW����r�YKKk�ǻ�i�u]��&�*DsOHi�HFȲ>�qE�ܴ--bd����p$@�����`���Fu��I�0�@��g�<+���e�m�,ofe���?�s�R�]%��6�%�eϤso�2�N��&Yy3z�LĝC�i�Җ�V�=R����y�51Y�T�8�5[7�(�����x>*�}�Σ�n�;=t�jO@�[���n�����+~�g -8�wne�/^�4P2�H�-h��+F�;���������њ$� �< _�"/�q�8���3��d����a2;��*8��I���~ґ�#i�H-�.����pK��g���xI�~x��ȯ�IQ����dn��`#���!��!uLR`��s��M-���o��Qm�w*/��q% ��ݣ�����欌��s�d��֟ӵ�c:Kz�H�M��{����/�� k>����#�����e�Π}S��<D�j��{�����aKBm���b*OX���$A� ����!R:�-����������-ѹ��pU�R��o*8���uA���E��:��l�P�c^�J�����Z��~��4I��%��O>k���`�^�*G !]r ��b+a�\��?\> �P�v��+��_~�3`�����OGq��@��zˇx;��۴-N�#�Ukc����R�6��b���D�g�Ӑ6�Χ��;�D���'��)�W -�8Yɳ�=%�_ hrU�2����e[K�(�_�5<� -��������p'�NNkˬ�on��5:���/�x�Ɔ����`�,�A~|j�H#�w;"rZ�"��c�9,JE?�a�L�F������ ��Vd���|tuC��S�n8��K6e{��~���f]!X����|թ�t�F�.�k-�#����$1���{7[�Ǿlk��<�i����kh}�;��,e��BV�_�H��9�\z���BaK�V\��@����O��g���wG�J�aS�;8W�y_�4?��7��o15�!�r6�R�4\�tn0>�xf~�7�p4�K�V��'?���q�!V׆S�,h0�n%1:4�+k>q��9m�������O1k-=�;0d?+&�.��X�� TH�/�O��V���d��Z[���ٵ�ō�pGiάfXg^q�x��f[�`|P�)d�Ẇ��{�XY{�$�l��O�=pa�-�)>5�e�5�)Y��%�vG�Hݐ�E*��� -&p6�\�z/�dONUp!�����ng�P���tX" dǹZ �}~�Q��'�x)���ˍ;�A�%(�$7�d�.��2��"'Zr>/V�!��lz��j9�3���Ef#� �,���,#�GA�}a���F���.�Ho�MZa��~��L�f< ��� -u�/Y/z�qIJ阞�у�^P��!�K���1�L�-Z$��&兙�,��I�W��L�[��m�W��g��K���mk�"?k�> ^:.1J��vk6x>�!-Y& 灋oCe��,U�=�1LR��J<�"ϥ�:P�-����ǞV��=Q�C� �(�ȥ^:c�"�(-�Ƶ� B!�����=Cb�Ҷf�҈5��)a�#�����a��4��ko�E�Ԧ��c,����ܤY�x�1��{M%����A���s&�B⺤��_�*.���{��� ��C���[E��{��g�,q��'���Ku�S�ΧgP��H��%�t��ɭ4�X�{���G���73�~K!o�<I@oڜғ0��S�9x��:�@��h����c�������)<�0�>ȩ|GS��{+Ț�\՞/D���S��p�Pdx)(@��qD��{�|�CO3��c�J\��r��Y�c��\�E���':���s ����}�*�����=�i -s_�놋�'7��V=e�\��p��KuU|*����tuZq�[z�^:V>�')Y�=���\��@�az�S σ�'�b<Y� x�q�w��t�7��]W���E�T!�:��] ��5�{�i��6����b�Ն��@��H�d�W��|��i~��ʡ�n̸P���l,�n\+���4 �Lw>�$��T�ý��d$V��h��cW�X�<:����0N�c����6���5u�m��A�}�ͮ��?�a�|Xʅ����Oӝ���������wΎ;�IDU���-g"�/�#/�dZ�a?� �evm�4@�[���uGg�a��+���؝}��6ۯF����U�:ݪ���Q�h�����V� �� ��f��������O��fx��Nn,��bl2�$�@Ԁ�A��5b"�3F��1rٌ��� _�,5�1f�o���.3ޮ=k1���L�`�����ܢ �99X���##�x2�57��E�[���"��K�S��8�H�g�U��$$��MF�&����6NL��+���Uee�Ң�P�F�E/��hO�K bb�����]��#�˜�{�����oI�;kD�jg-5i%���_L^�Ev��y -�g�����X�G xω�_ -�Z���T�f�R>;�>B����u��'ß y\�Y�?�Ia��P�� -�T����ȇ��_�ݬ����Łp��t���o��O�x���R�/c��gŹ�j���ܔ�~����߁��6�jǻ��@���$��2r���r�G�B\Q�8�9�E�b�R�E���ۊCY��&�L���y�� �����Pq�,լ��M`�@�82��Bf�8;;=㺠ԠS��_U�űS�(ݓ/O��e��O~`h@�7��2��Y�C��&��B�=:H%#uB��C����.k�^b_{�����5m#�d��gT�e��x�2CcoP�"7Cy����+�\���ҭ����������$�Y��v �>k�e�ZJ�L����#�lf�S�p����~N}�Q�u3B-\�<P g���G��k��E�F)u������oY�h���E�'�'/��2ep}B�t�Μ�/���1I��VY��o����_U�|���ͭ�%s(�E�Nt뼼��ƾ�<�\j��+}o��5$����۲U'��d�ܨ��k{�d�a�w|v��I�=��.�ڈ1�<���'m�z�]Z^L`��� t���K�������z\yL>�WѵW/���%�m3���\>�d�J��:h���U��ܛ�Ah�B�J�BcvW��>* ��0[�ʣ�ew�y�T���JЛt�]w�vC�D��P�g��!�N�'�^%�\E[���Z���G����f��W������ =��}֕�G�ʖ#f�+~R�L�Jtcjтf&��/�'�qTa �s~ݲ��W��1�q���ϵ�$:��{P�5e�����"U�oQ�h�,p�����#ȤG��9��Y�+�y�x�|d�)]���*�`���A�=W*���Dz7�B!L� �X�]�����B7^�2 �Cᛄ��6�s �~Ʈ/�S`�*�ai�s=Z-kJYXT(]�c�4�*�>�|[�"O��Т�jOI�0�x5-�s�r]��^#Y����ȸoǑ����|���]�RҷdAf�iح��|��_f��$���O)�~ވ���sq�9�����<vRU��`��3vK�g��kŰ!��G-�O=3�^c�^K(�<^�I�+�!T��)JO1��Z*T�Λz���b�M L�E5���I�L|���F03���ˣ_� �I�SYZ����2�Fv&�v�+ne��<rX�1v���@��MW���1c��,����������x$��2�/�g���X�f�j����P���ˆ��1�/?le�NH�a��;h}D�p2$/�>� ϭ���'�|�ݐ�侽ʩ�=������$E���H����2��Yjwڙ�D��� -��i��[�ʁ�qܡX5�������'�"�-b�p�[{8��>�ɚ -endstream -endobj -17 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-35 -250 1190 750] -/FontName/BPSGSR+CMTI8 -/ItalicAngle -14.04 -/StemV 73 -/FontFile 16 0 R -/Flags 68 ->> -endobj -16 0 obj -<< -/Filter[/FlateDecode] -/Length1 1014 -/Length2 4491 -/Length3 533 -/Length 5195 ->> -stream -x��gXSk�� EzMڦw��K��" M�@����. � ��w)ҋJA@,��* -���w<s��3���k���ﵞw��Z��B|�RZH/g���O -& StL����4�JHH�B���p�?� -�SV�Z�n�L ���@U�d����/o������R)ZX��&?w���Xz��Q~i���`�K����P�(|� -)ME�H����rC� �<�\���?�H��Px�3_��O1��%��!�H�+��������������1S�W�_s��4���S�����C�/$ -������7��g���A�h��0(@ -&' ��3���C���h?w���E�G��tr6�?|@��-/Z^��s�&�h���@��`�o>�8@��Pؙ������4��s�B�qn������*�Y)yy �qHT� -:s��y���&sp��S�Z��"���������_�(@���1�M -���7�U1���ΔV���!�ߤ@\�" -@�C�A� e���P��#�̞���+�oxf��ox���7ʜ5"����:mm��)Yy@JF�l�0e(�(��_��8��?�@��B�J2 -D]��x��?��Z��]�g7 � -B�P=�fA��IrK�;�u��۴�^��x@YY$B^F�[x]Ԑ�c�0c�V�BG) ��f�y�E͋t���crŚ[��̥�� -#�Ā���@9�`�#ʵlL�ī��� �HqՈ � a5��|������J�m�V�}�+�'ƪ"CO�jR��G� ��ReZo��["��i�r���HD��[Y/�@�g[�w��ccƸ�y����n�=2��t�_�Ȕ;��!$����S��<��h+Mɤ��� $?Z��Gls}˺b��7�B&�x�",�"�%�2t��8�$0���!�(�*�y<�Ũ60?.��w�8��5��֨/��(�irs4â�n0wyĐ��:�E�Q�o�)���(ѻ�U�x�)61��;v�)��VYv�A��_�`Ҙ�����S��~G�� -��!�6� -� sMh�+�8=���� ���F-���m#���B -7�-�/��]����S��=u�gJ^��x}�YM�rHf��y�,�g����S���oyҔt�M�-��^��q��es�ԁ��;-��ye�v]�\�v����QUű���T��Nﭲn�E��R��m'�+N�%��r�tO�6[_N��8�W�=9a�Ub���{Qy��8�k�#D "�����s��# EXΜ��4�k��iV�A�/�--<���pJW��yxyj:Tx�]���#�k�:}�?��3Rv�=�J��A<y�ݶ�6eQjٜ*L���a/���NM���k��R;ќK��i+��XBV���y�� �"m3���^!��A�����6h��V�Р0yrKy�����r���A���M�� ��#��cc殷��OY9 ���Bn�S�,��҇��ť1G:+.^���d]�#���Zd~-J2��Q|� �l��H�xgC�J|�X_�����\����7�}�j����P/t%T�.;]�V�vwk/���[�n��ǻM�uh6��?�R=�t{�2��瀄 �7E�%Ge�wo@v&J%w,��\%2,'�({#����[S������4m�q̃}?���> L��_#�n&:2�>�� -��{,?�:ty���a{�m~�9ĝM>�M���Jx2@]�8�p�Fy�8� -��/� U��h:O9����&x���@�4���f(>lʐRy �ݍ� -n �B�K�z��4���\�|�],�I;)���C �ڔ�09M�~�`4 -+�>;g|����.>��*��]C�YeyѥYo�zF�m����|����`�%,|�l���;m���a�fӰ��s���Wdw�w�/Wɲ���8�z� : �N�H}��;w�$T��r�V=/XV���V���R~K,Yqu��j����<WQ}i0Q8(��![C��E�Ig�j���� �S��%l��ՌNJv˖��<�6X�}�+.m�w"�i�&UPES��}%�|�Dha"�����U�n���&�i/��RMu�aw?���~M�ɔ��C�[o��^6̉�5ˉ�Iա {�`$t�Ʌe�#}��YJ�9J�l�hT��CFܕ�9��eW:L r�����{w�����s1��9������H�x\��ѝ�X�-������[W+V�����#�Z��{I�����K��$���1�ܺZ͘�w4�b���+Y����<���va�+r����Է4mX)�Ь�!�=<&j�X`�$a�y�m`{�I��b���,�ЮS>vώ��&bTvcC����msF{K�737��ƽW���tts(�0�?>����Ln\{�S��5J�4˙���y��"�9QFw�A�ft|���ΦBk�je�O���e�����s|��>��>� 7zY!��n|*N����m�����H��ۉ����i��0�ԝ��2�Q0��R�7�v�)Ⱦ�+^�}�;�)Y;�E��*��������9�s�|�,� -�Wl���2�5[(���5�]k���<����&��*�4bW�(�;�h����1?ٚ�;�.��ʘ� �Ƴ�,�Bٯ7:H�:���|�M�����r�/�h*���M?��q���}}(?U���n������n>��`:�`���r%d��ޘA�����fK�+���4�z���ω@nj��(~�F����k��a�'��T拥������x���x���e�iq�w����Sv>����h��%�Yi��M~�vpԡs�D���ޠҵwb��h��ٗ#�O��9j�؟ȼG��N�u����ѭ��$���yy��vӍsM����X��>8�`��;7� �5��n�l�'�7�1�M5U6ͣ�>s��x���eTs�iC�%�ù%L�*�����#��xv��}m7��{�����է���ټi憃���%�<4���?Zl3r�?�6��3�Ntc+2�S�oX@>f]kK�h�7��sG���l!>�t��F����w�,�]�~�q����',�d���x�����ȇ��k�&�7����-}������n��S�I�t�I�R������,��� (�J; �GCl�Ջ-�04�3�[�ͼ�d�*kU���+�pV��IX�X�^'q�y�?0a>N6��Pڧ4z�s{��C�f -��0S�k[�7�,){��*3�F��g��0������� -�������Z��ŧ�(����F�콂��n>���_�.F��@v���xߤ���U࿑�xG0[�t -�d`� ��K4�b�[1��$�K�xmr�\���26@#�d�K�>�7v6�-�W�6�v���@J�.��;8�t_C��Z�V�����o�d<�?Ya��������❦��/+�*;�f=|�dm�y��a��> �N]���Ͳ�:�5�O)P����n=�Λ�G�.��H�>�^�̘T�O9P�z\�T��AG��س)�ՇDF��u2�%�������O�zC���+���W�q�,|p���|h����F��l_�8Y�MƏ��$��jK�d�v����t]�\OQ]^��Q0���@�&�/�n�5�ӖF�̒��wYC�ÉW^߬�a(`fyx+��>�D.v�I��U� �(#�MRJ�Y�.G7��&�86w�q�I��c�X��bB Z�����rD��~]� ��u7�r���=���w�LN%��,��_gN/��u:�+cO�k�� -��;� -�}�?H�t3m�'G�e��3�ҝӝ�mك���ǐ_�f}%;�I�����~�c����{3o�2�}��1O-/l�op\4��Q��Xo�sXB�8A2ۉe�~D�R�C�"(N�VY�� �y�Iɫ&�D�,s"��M���m��/�ڢ�Mb5�ܿ�g#*�pSt�b�G+��I)�ђqi'/���4&�n��5�$�^���Z��Cz���%������d�9�]�p��bC���s0hD �jtĘ͂�Dw�x��xZ7�[�ݪ9V��0�\%n>�94 ��!���TڍW�ې� ��ų����>�7���p2�]kq��H���il�_��T��|��i�ty�LW�{h�h(f\d�)]翿� $�K�:�d�����gw�f�x�݉�w��g=pǍ��'S�.�y8Ƃ�f��#B�(�K�0'ʖZ�p���zXTv�r�C�<���� -����}܅G�u����������aI9&Zv~��%�\s:[��Ol�$Y�fy�F�R���_:�4ɨ�2��<��G�B� -Y�̇��y�J�ھ3]n����xtkW�^B��I����Fw��K��o��s�U��o�վ��K"@g��:2rL�#�%tT�E��DF(�`a"�t�z��'��?�M��j2M˚9�|�rv���iみJ��N��1�B�R�{K��� ���q��]K��c�R���=���e^�k����۲P����=Ӱ����ս4�8ڼf��mw<�W�#: _���aѝt��hu�ٿ��]`�3P��u��"�v�[�v÷G��VL��K�O�h#�FH�ժ,YԺ�����#��ۗ�ʻl3S�͖�k��X�G=�b����I�U�zZ��I��v��pc}Ԋ�����ol�X�j Y�I�d )�$��k�0�J�8�iGØ&������.Ղ'�]��e�AyjѸ�F�%�5���c]kR.���D�~�Q{����K0������<�&&_�L$?�o�34M&0�z�ˀ�����u?�����0Cg�:�TL�#����ϼ7��_�� -C�ШZ�Ƨ��|c�z�Aw*p5�����աFuCE�L ~��$8���m*�`�hnN�ʌK��` z�õH�?�����^>�Ӣ.'��Kq�ܡh�dz��`���[q��?ϽMD����`����ܕ��y]!��{�{�8��7����}�+��i\7E�de��Y�\��t��M�4�dY���s����K���a�N�&��î�����W� �I�6�2���*����W�<�H.��4^:����HӺ�ȅXio�ȫ(e��l�&�BӜyW�Pl�n*�ú|P�����p�#�ˋv�|�F��4���ऌ�UQEO�)�^���J�dyw�ZU��J���G�y�O��ˇ����(��A!�~^Xޓ��?��8G� -endstream -endobj -20 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-341 -250 1304 965] -/FontName/XHRLRC+CMR5 -/ItalicAngle 0 -/StemV 89 -/FontFile 19 0 R -/Flags 4 ->> -endobj -19 0 obj -<< -/Filter[/FlateDecode] -/Length1 769 -/Length2 1230 -/Length3 533 -/Length 1807 ->> -stream -x��yTS��ԎA�,adQH�E�AX";Ae �@�|$/� y_I�0,�Ea��Pψ�tPP\p�)�(-�Z��@:d��S������y��q������K2 �����v���4&���hd*Ջ@"yc(�Q�� &@sv�ۡx|��L�I�$�M�bpB����Z�r<s@�E����| ���HJ�O>Y\"B !�퇸d�F�0G�C 0B�,B�!<p���S>��C��,�H�����"|)��xJ ���4�5��Z.�]����Eyܪ_UA̗�RG)b�(���G����˫~"�s<�>P?�`�vXq�a'��|!����rܸ%J�oȮo��K�XaD&M���b�RL�W���� ���K���i�l/��ra$�3��@)��K� �������T�/pO2����@(,�/�_����������[:W�������܍��Đ`P�TG'��,G�a"Zz;�I�b�[ -A�C� -eX��|h@5�k��<t_U��}�e��{��â���Oo�2{�}�%��NR1t[�&g�,|����d{��n���)�����L����ױo�)�WUi�t�?\�s���b�?P�h)#26��r+�l�y˼� sb������ڳ�1/�/nw����wF���?��%��睎i��h�5'� W�����gVwثO��T�b3 - -)Q���=��G���w��� -�b���:3]�7V4��F�g���d�N��!k��ߗ�JY�`[(���e#�F*���P���n���u��_�B��T�}����(7^����5�qz&nRV��ߘ���?��U�]�R�մP�gC�Xs+Ύ>��}nD���S��_"K>l|ekl�6vF��� �'�j�,�y�I�uFZ�ѳI�Nj�Տ#��͏��^�E����J�Ul�� -�o6� 9�|�צ5������"9c~��]��|���ӎ��i�����C���9R�������Qc?�&�Kw�շw�3������7]����G��"i/��@�<6+�Bl�� �<7h/�"��9�������.Ok=�G��w�<"Թ -� ��i�9������v|�V�.k�)RL<��)�ӆ��$S-�� ����Ju�4�W��.��='�o0n�@Y�1-�spǥ�o?���yW��wP[g��]���h5�k��n�����N&WĘ/��?�%��h�XԐJ�,"4ꈃu�<ql��Ys���5�����}�!���6��z�{/��j��w1O ���D4e�i'�&e�ļP���m0�0�Ֆ��yiw��;tD�zvu絠�ѿ_��Q�8�C^�6�]����_�+ ��X4m�ζ՟jͯr?%�D�6n���1w�*&�ZC~�E���L�u��z=��ڵm˞>�0�F��5���ֆ|���P���T&���Uf����Px�8!�{�u��N�)Ta������������ߧ�d���p%W�ݎ"Ak�˦=eq�������W�o��bZQqߥʗ]��ķ�Na�WR7�: O�3��$��?q���Z��� �z��+L�r�$O_�a:v�u� -Y;�r��9b��9��������=�_^8h�����^��"������J�eO$1���g�F#1ͩܪ�I߭SOd�ul�ɡ؛�f��6s�? ��Ȭ��X�$���^���&`l���]����P�g�7ݧֽT�f�G���5i[l�Ԧ�x?�&�P\�����:�zs�s#��?~���/8|�D��Ē ��E�� -endstream -endobj -23 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-251 -250 1009 969] -/FontName/VZCMNG+CMR10 -/ItalicAngle 0 -/StemV 69 -/FontFile 22 0 R -/Flags 4 ->> -endobj -22 0 obj -<< -/Filter[/FlateDecode] -/Length1 871 -/Length2 3283 -/Length3 533 -/Length 3924 ->> -stream -x��Ry8���&[��e���oaƒ=�Ȗ]����,���D���l٣$e��%B�P�VBٵ���:������s��߹����{}���?�s_�� -^���A��C�(���A�̬`PL -�����8���É���*1ܩꧦ���$�B�pW�(O/"DBO�K���(1���UGC�q@��@t�h�կ+�@��~�R�� H�q<QX��/W�XD��$]�+�� T_��N%!T�H�A 9s�@u�?6������! �6�c~���տ��:�?8�U�C�pH���;����@�H��g��p4 -���D�E0D��%�� �o�"�n�ڹ������/H���%8 -K� ��O�_��1�_1�=xrJ�/�J�����V����!QXO���9����D�� A0 -���Lu,'���W Ԧ\�x��_UT����/�w������B r(����D�_�*q��>� x��+������+]]9HF�Z�����BU!��T��W�-�K��!JP(T�*�E��x�K����A�{��c�2��]��4�X�; =�Z$&>��$:,\�V���9vg�&u*�L�{��x�(XtO���u~�x��'���LxzO��5�E㱆����5;fm��e���{Y��n�ھ�WZ�q�r��[��Q���-�*$��[��/ k���n>)EX�� -Et5W��njw���3�#�ɦ>?U��F ����i ��!���P�� �G�=&��]�Qb宬`>j�>Y�\t��0�!����8���1qgĉk}�X�S)��ɼiۨ,ۊYX_h}쬌lP��.�j�v�m�㋉�����)݁�Y�}+�Jn�A��O��{<�(��P'�tk,��S�h坦;��.�˩�v�F���-�3�嘚w�_J��HZM���^��X���<K77sn�`G�}Z����9���ǭC��{6�C�����%Rz��� �`��i�U>��]n+���>���Ks�cS�#J��B�l��@��,�?.��=M&��#������!e�F��^ȣ|A:tc�,�b�U���|�֦��S��N8��/������-@��O�*��_ThӦ���c1�E�f�O8��6�o<��+i�{��Cw]�QH� �m��n�ث=�M�wx����ؾ���+�erPJ��������G����͙H�e=���Vj�T�H�̖��������X��~��ZXh�[��^�U�?�YI����9�*;��q|�;R�dtBm�U+�t[�6��t�M^�I�Ő�G����t{v:�8�N�;B�"�4�iJ��Z�i{��+��ү?\������ˮ4�qo�>ϓ�F=E� _�X3�cC-{�gW!,�68| -�w��~��7�1�Z�o��Z�WL�9{w�v��t�e��9��P <H��`ʍ}�����I�ʩˆ��5BҮ��7���ߛ��E�i�?�ɐX�B��`�d��w얞"��Ӭ�B�{�gV18߷7¯Bl��i)�N���Z�g-��������ϊ���%V6u,�^���T�־���9B^4�����$�S����r�]Յ��D�GbB\Ő'��A) ~f(E\"��d�;M�/�+�Q���m[�=�z�K�P���Zk�ۄ�n�f����ˇ�隷�8�Bj�eϲ�����gc&6w�r�ȍ�Q\G��z�L�o���Z%ݢ!��<}�fc�i���nb�����h�*W�����+�g2�%<aU�X�xZ���X��qt�ɲ,��k���F�6��8��������_�m%�DnX��%Gg���9��<�3�oP���/|��n -�n@��J0'�L7 -�|����y��R��ЍB >v����Lt�4�0d�6,S -�3ţ7����m������i�W���ɆM�ts�������K�n�N�o�L��]}�FvZ�{��Ssť��ܱ썼��x��C+�"���}�C�8��lpl�E�0[w�D����Zr��eg�>��v���ʖ̈ -��\ -�7�R�t�n,�b���R,'������0��[ZK �"��k��1�yc��5Ҋ����ľ�:t��8us��2�����vs;��Z�R��Z�e�?�>���p��V��+����!��q�����#�;1��+��^K�3Sy��eҭ,�������=�q�e���/cx��e~an��C����&\B.�|SGeiO��:9�&����}�b[�'�)i)�ƣ�;Cd(���9��K���ؑ�y��,�����Q��.�Tw�Nb��]�D�y\�Z��Jg�Yw��W�#�ګb�vG���Z7�'�".e��ڵ�pJ}�3��VX( ->��*�o28�i�x3�;�H5�'���ޘx��/�J��=7ݝ4�f�`@wDp��W�1��W�]�:�������Bah�;�ۊ��/��f�u�v���\�����~�Aؕ�v��z}���fy��<�z���fD�|�>���g(�I�4���}�p�X�v�75��{�{�M�>�? �T�fS�cl�v����+�S�c�d����ct&��S�����7���v -T'^�g���m�3�c"��������Z]jC2��G�1"S��UQ�]Nٟ��8��4.�>��FX��J�xC�Y��-�Zh/�nx�.��?��#�?$8��5�e�W-x)3yܳ�'����8�\��'iM!2�~�ckq� �2�O��tk��/呋f�k�� L���c�U�G� l��r���]��Y��+whט�Uޟ�P3������[�?4<w%S��כ���4R(�S��Z�U�W�q�b0S�W�����}��{���``�~�\O��PWӽ��#w���{j��>��P-S�=W��C����^פ����#-�� ��c �G��5�ք��3W.˚�˩��L(}A��~�L���cpy����|)Ҍ���k��H�X����ɞ{��YϏ%�NP/��;o�2b�E/Z���+�n�c�l���h�˖�.�V���������V�����_S��e�G���3\of�l�I��a���� -�<�ŖY�@���+�Ǜ����ٖ�HU=\��n�O��u���t���Zi�8��6]�j&���^rX�N ��~0���'k����M�ݮ��I,ς��m-�(ś�L���n�� @�;J8)k%�C�c,+���^���~�qO�̴ɂ�l���ogdJ#��G��7�9�GS��N�s|&�S��SZR� FL������;*g��9�Z����G -�?/h̚W�9�sQ*�q7O��roݎg!�ߞ��]=N,�!��_���y�%��@�oیk"��wt��6�����9�1kjoT��Ty��?E];�@���90:�K��e�;�$�'��:�����1Z���p��������^�E~�L�L�"�%����5�"-QK�['��Y.���S����b��OdushW�RB J���gt& ���xh��8O���u�f�3E��kRr ��-��^嫔����K(�w.���"�-]�d(muΛ7NgOD�Jl�b���"q��[Ҏ�?�5@�r�S�[�Zu.����Kٺ�Xd�"Ts�B�k�����վ̘Y*��{5Z���<l��cr��Y��YJ��Uό��-���܌���p�G��fd -�'�*��W�;W�kRɡ�V~q�c���Ec�4�t�k��7=��estf�?�N�E�����¥V���&e�V|KeU -?��Э���%Q�S�^�w��4���}�'�$�#ѼA��s��?���R%أꟿ"3\ ����Jg�E�zVpޭV���������&�e�}�uQc������� ��8���v�� -endstream -endobj -26 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-29 -960 1116 775] -/FontName/CBQPJT+CMSY10 -/ItalicAngle -14.035 -/StemV 85 -/FontFile 25 0 R -/Flags 68 ->> -endobj -25 0 obj -<< -/Filter[/FlateDecode] -/Length1 866 -/Length2 1253 -/Length3 533 -/Length 1877 ->> -stream -x��{8T��]ri�>t=%�T(��Y��v{\*��~K3�X��5��`��$���.�]�"�C�m��ƭ��(�5[6m$9j/�i��s���y�Z����~���|ߥ���fDc�A�v�'4����ur���"� ::��"(ώ!�-�dn�� S@�Z�-L���E�ba��ۭs.*�qaa2x��!���&��P&�D�hp�;"������a�@� �B�B��4��FuAf���Z�0&����s+�)Y(�#,8�@���m0��_c���÷�8:�;7~>�?�\�#��@�|�ƀʂ1�b�����wq�A�� L�́�dB$SL�`; ��!338x^�y��(x|� $[gGw���]�:3��]̇��}��>�xL ���d2����E���(᱁��``CL��"�2�@x,8��82��C���g�Q�0�W -��Sh����lJ$�sa��4S@�2�!�/ "R�`��`��d�G���?fdc�FF�#s3����j��F&��p"2�K�̘"���N<�Ou0���#a&!��JD6�p��d�Dͣ�^��M%�z�נ�қ�9�� J����$10?��#���aڒg��s�ܪ{Ϧ�b��r�/S�� �OGo�N��9�&1���|'Υx�-U����*��J�q�/{M���KݾE7wS ���W����Ɩ��ߗIIR��Aݢ���(�ܦ��ccyF����x�c��ݶF������%�"�����#W���#��U�WEJ�ch�n�i�������?���u)<�����[�+S�d�M��_ϓ-��7Ɍ{n�cE��;�mԲ\� ���)v�;'A^���)2�w���f�V J����թ����qR·?�C��G{S^[�?�B���FM��I��K�i{^�:�{��X_Mrc\�t��_~xbݯ�@��m�C%�wД��&�M������(��'���70O�RӔh����̼3�0�7Q�S�BN�c8rK���*gF+/'��r�\����=PJX���ֱ�6������W�25�l*����OG+�k��N���ɭ} i����V��v�d��lg�3=��I֯�,��+��h�J6:U{J�2���O -Zm��������8���&#��r�����n�'�S!�ib�Qo�Ն�����W���r�O�`�@�کk��sh�OQ�;~��TSZ�02�Rf[6)�ΰ4[{a�V��7��F?�E�Z�M��.�i����EJWv<4��"��V̦Z��<�R�$����cue���A��f���;� /��+t�w���"���Y�&C9�;ҷJ�SQ���|Yef|i���ꭇW7R�ʷ�d��u�_s��Iz�����_��ԯ/� �_�(unP�V�yZ�� �nN���{�H�<�����6��G����谊����g�wD�ZEIV�X��=�sk��~'S#}��i;f�_��O����o;��G�ٻ�;��}��Ǹ����Q��#��B�%�ۭ%��+�Psn$�1ŊPo`���>���DO�;� - ��+*5�n}�i2֘֍�*�iSݤ�v¥}J��4r*֠�_�%Ϙ2�TL� ��:j[���E�ߣ�l��� -�<KD��庵��/mi�O�ճ���e���V��������ڋZ���3�}kԛ�ƻ�z���!����C�oh�|]� -~=%��A�U˜�٥�ʥ�$2^݉z?�~l]�� �SsѨ�ZtM����k��7<���%&�"yDï��2*6�募L�����4.�>L��i���r��ե�r(5�VhŅ֒ق7��ˬ��Jjؼ�o2�/J��C��/�|��?1�Ɂ��2�P�7's�� -endstream -endobj -29 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-61 -250 999 759] -/FontName/JRNXYX+CMSS10 -/ItalicAngle 0 -/StemV 78 -/FontFile 28 0 R -/Flags 4 ->> -endobj -28 0 obj -<< -/Filter[/FlateDecode] -/Length1 848 -/Length2 1487 -/Length3 533 -/Length 2099 ->> -stream -x��Tk8T��h�Ԏ�KI�ULd̘CB34��v�t3�Y̬�X��K���¦ݖ�j�*Ů\��%�uR��K)�>�v����s���<g�?����{�����Y�5lg�5�m%RH3����L!��3D ���AA3�B�S�k�@�x3CC3C#0�@��㣀.c�L� `-E�� -1.G�8#\D�$������`� E! ���Q(�⢀��8�Sv�/�| -�ā��P��t1���%�R����!X7����7����8���A���!���D(FA���@�m�;�ɜȃ��oY;�#��ְ��ȟBP�-$yl��_� ���0�[��f-�;m��� ���O,����4���L�,�|�D��&��d -�����v|���"<�fpD"����h@8�`(@ fـ#(V`S��""��F ��� 1��<��ua�,cD��id�� E�`:�k����ZH!����ٴ ���)��� ��t��F��y�0$�XK2ٔl8�E"FgO��g�aA ���S����_I�=Vղֽ�^+W�?�E{���P;�P�Hj���k�~r����Nw�e��H�CUowޔJ�t���֗{����KyNlR��K���0�\�˻��Kߩ��5��E+_�^�qy��&���W�E��k/�MzV&g�m� �r��������2i!Ue�0�p���+��އ�,�w0��L���O�'j�H�4tYe>>iQ���P� �1���l9˻j����8M��,+v����f2mo����r.�c����oA��\[#T��������7~�g�,�;*cry�ft!���Y���p� -�� - -���vVs{�4�?2TA��O�q �㒈��au_�U���}'-w��y�u��<ޣu���f1Vvi�����ob�hq>4�N~�r������(/��pj�m�U������W������s�H(����5�����F6%�1�i���o��ڃ��Q"�8ke��@=�������G��^��T�Ҟ(~��MSҮ�1m�?�]l�;�|����d�/b�� ���K�-Z>��6wn�֧�|:N/v��HT�c�Di_����i��o�'��¤���U�����%Y�>�Y�Y�pƤ�e>_a�-�l�v�ܠ �[L{���_XwPG�}My���������*�_�/���R+���Ac�����n�Ku-��xdI�]顦Z��r©������z��e�~\��;ce��G�l�_wDLxM�g���e�fk��j���B�>DD�F�W�!����z��?��zF!�PV��%:Sv>�Q�x����>�4c���������0�Q�>RGВsu��ҕ����i��cSY�������WՁ�y��%���[�h?;3sF��y�6����:��r4�i������S�L�s:?�9N$�E��\Y��1�Ϧ~�*��e.���V�hn>٨��k���G7��0osk��a��]�㮬 �����MZP����������p��78ߣw��ޥW��&v���ԭKUt���wݡ�D�.�-���T��S�!گ�;DZ<EgKk���ǚ�$Q�kmtR��MD���Mih&6z�9�qYZ�Pa]�����cnoijG�T�v�1]l����D�͒v��&���D����g����y�ou4X8�'B��Xim�V.\S��U"F�}O��g�#p��nM�磟����$Jr�!��]�4�@Ş��To-�o�CМ{ ����3���%C�ai�1���J�V�0W��dd�T�l.@ml�h�2��oH�=^���0�9q5Q@��m�1a�~k�]��T��w��͍#���I��F���z}G�2�"���:<�jt��E�S�*B;�$r"1�??Ffw��=�@�u/�7�*+H��&�u�rN�;���f���OGy�Hɇt��:��б7����i�ޕ��ֳfg��8*�-�,3���rS�*�ND�v�?6R���`,�[��{C�x�f����K�/���'��#B!G�����` -endstream -endobj -32 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-32 -250 1048 750] -/FontName/FGMOSR+CMMI10 -/ItalicAngle -14.04 -/StemV 72 -/FontFile 31 0 R -/Flags 68 ->> -endobj -31 0 obj -<< -/Filter[/FlateDecode] -/Length1 778 -/Length2 1116 -/Length3 533 -/Length 1701 ->> -stream -x��kTSW���B#A�J��"� -ri�P D��!G��49I��K@W�Z���T�U�X.B��� -� ����(VAZR����:fͿYsΟ�}���w�%q|J�D!�\�Q�T:���D�i�_�hD/�pb��b��lv��id��h,��ǟE$z�p�R�BR�X�bZ��r�B�B�1)��&b��bbz*��2�0�E 6@5Ti��J$��@��1 ��J��ƊBS���-�(ߎ�P�ƹ�����(P�H` -�7V��q����p�6�jd�X�|�~&�?ͅrD��]��+5T�����R|%�F>{� e�8M�A@�3�4�>��":(�C0��ej8Ӈ�d6 ���/wm�:���o��4N��X�^ ��LM���SR!:��F���߮��:�cT�� h*`���J%�� ��A: �����ȾTT��[�MHQ������b�\.�n��!aa -]:ŏ(ܗ�,Zƿ -P�S �����@�_��LW�Q� ���BxHo��B3���Jv� �r�D��/Vm�!�k��:E�GJ�`�J~Z(��)��>�2���۷n�A��$-���E��/;Y��:���P�;ǜ���w;���"<�侴���6�wj�|���370��_LY�o�����6���Xo�,���e��O��\g��u䖁�N��t߬��H�-��/?r,��h���W��x=�M���̏c����(L���9_U<����(�jܷ���%�\ݩFS���6�d$u����I�" -�em1�����Q��J�S6�� q(�Wܥ��ҭ_�n8laZU������8���ư����][.�dM͵�j�;��l���Y�6[gy<�U��1�y@}��n",��x�I-����p8��PQ;��v�q��.���~��`[W|���%)��N�`�g����"C�2x�P��3�}��L��U^����w���je�w��j��Du����Œ�v�m~�kL|¿�D��Y[4^��|,��|���k���ם$yM��*�+�2~w8!�)���a-� >�����K�AMj=��Y����>�q}��]�F7e��܂%��Ħ��zx���rk��6;B�V�&c��O��%��M�s�;\J������}�)�k�q�X�=?��2ߵ�]�z�,�{ۏ�7'Ϝ�1� 鞉&������SH�yw���e����w��ܺ�3j���-M�λ.�2�Z��^0z�Xk�`>��\2F'�r�'͟/:�_R��Fta�/�~���Ь54�^����ߤ="��R�+(�^��/�/=>u�W���v�Z1�9��6V�X�S�cP����V` �����L�S�zK*�W;�����J�pq��8<)*���{~�R<�^$3���~i�a�y����F��;�X1ni��m��!ۦ8��JV�p�bc)>S�]��ޚ��u D�ؿ��Ҙ7w����yec�~p�]|?�T_�����/���r�kr����*����ʭm"�mqȭ]=���8�)��͙��|���d&�����4k�m,ϵ��`�=��d3r���P�`YW�;MW����볾�Br�������N�L�%O������u����蜪1cߙ]���w�RId���r�S���ܒ������!����@,�B��U;���yg -endstream -endobj -35 0 obj -<< -/Type/FontDescriptor -/CapHeight 850 -/Ascent 850 -/Descent -200 -/FontBBox[-19 -192 944 683] -/FontName/BAVMLZ+LASY10 -/ItalicAngle -14.035 -/StemV 40 -/FontFile 34 0 R -/Flags 68 ->> -endobj -34 0 obj -<< -/Filter[/FlateDecode] -/Length1 822 -/Length2 1123 -/Length3 533 -/Length 1718 ->> -stream -x��R{XS��VQ��Z���HBI��(�5\R�H� INbHBR@�,!X��ũUq��@�:*r�����"(��*�s���v>�k�o��y������~��~���?��s��$@�)�!*��\�V� *������@��ǰ�������Obs N�BTh�?I�x&Vb��|K":?�L#G���G�)�r��r%���I��'�ŀ/��BC�+������ r"���(.%ID1���A�H -Xs�B�� <T�|F �NE�LB)&��!"�a����C��FJ��K�.s�'�T�yC�?Ab�1� s��!��̃��p�D1�!�Fg�AД�T�#P� �`q -2 ��5f=�U��ˍ�]�f����hd�������wH���oh3N�D����/��1�T�b����`����#&H��� 5@Ըd*&U�)@�Td��TN���L���~I�?���T���q+�e3����_�6c�N%�1^ -����@)�#�bv�p�~�E(n+��QˏC�iQ5�H͗F�,6��K�Y�d�8n���f���!��x'>����.��_H8��������߶��/�,龙30����7ށ���t^|��x��liS����k������ $��=!��6�z/m� �qx�7��lY��؍�j�oUA�O�y�pV�6��O|}�6w����FDQ��إu��'���Q.�H�}���P&);ɿ�|�:F����1y��ϩ�ۻ��x ���2sK�CZ�c�W��OfD7��j��iK� ���T��+m��y�RZ�x7˪�֞]G4���E[h��z�轣%��#u�9cz�w��>�3�����~��]A -��fkŘ�����$Ӱca^���s�9� �XƚL�0r�t���� +ς�yP��_NT���]�ZѸ=�u��y}$�K�I -�7�;�����O铘�!�&ڼ���D���u�t�bý},}��WԪ W%���N�%�*3?�#�9K�G��^�T\~�ު��"���U�=R�+l�e���g��e�m~��xG������ �S6�s��ot_�M̂��m�~g�S�F�_��)b�"V��ʨ����F�X�5H{�6�A�h8jZf�CZ�X}&{h��l�9�<���ǹ���uyy�z�r��Tk���Z�`�����}�\�E~X -��usM^�Ύ�����;�����Ԙn!,����o��z3r���{�U�{n}ko����'s1�������u�Gʟ�f��X)�u��5��n��*9�n��x0#����GY���c۴�^ut�y���Jߴ2�Fݕ䒗�r -@� �:����M ��2^+>�m�b�J��s�6] f�? ��?�C�:p\O8F�����v(�F��<N���2}�e�m�X�"'%��^�U&��k���E��k������]1���_������K6�1`�&S7���fMn���9���~ �������+�Kߧ���xn����[x�z_�n~*�s�}�o����'(\Z�ݾ�=�,o��-��$k�۫6��g���y��X�F���7�l���ǢK� ��g٭�^�ҧ&��K�� �]O��o������P�Km�R7�(�<;p���(�w��jp���j��8�����i��C����1�R ,O&��� -endstream -endobj -1 0 obj -<< -/Creator( TeX output 2003.12.13:1435) -/Producer(dvipdfm 0.13.2c, Copyright \251 1998, by Mark A. Wicks) -/CreationDate(D:20031213223544+00'00') ->> -endobj -5 0 obj -<< -/Type/Page -/Resources 6 0 R -/Contents[37 0 R 4 0 R 38 0 R 39 0 R] -/Parent 3 0 R ->> -endobj -3 0 obj -<< -/Type/Pages -/Count 1 -/Kids[5 0 R] -/MediaBox[0 0 595 842] ->> -endobj -37 0 obj -<< -/Length 1 ->> -stream - -endstream -endobj -39 0 obj -<< -/Length 1 ->> -stream - -endstream -endobj -4 0 obj -<< -/Length 33 ->> -stream -1.00028 0 0 1.00028 72 769.82 cm -endstream -endobj -41 0 obj -<< ->> -endobj -42 0 obj -null -endobj -43 0 obj -<< ->> -endobj -2 0 obj -<< -/Type/Catalog -/Pages 3 0 R -/Outlines 41 0 R -/Threads 42 0 R -/Names 43 0 R ->> -endobj -xref -0 44 -0000000000 65535 f -0000048633 00000 n -0000049223 00000 n -0000048898 00000 n -0000049076 00000 n -0000048797 00000 n -0000010553 00000 n -0000010800 00000 n -0000010614 00000 n -0000000009 00000 n -0000014675 00000 n -0000014480 00000 n -0000000988 00000 n -0000020584 00000 n -0000020398 00000 n -0000001952 00000 n -0000028368 00000 n -0000028175 00000 n -0000002936 00000 n -0000033865 00000 n -0000033678 00000 n -0000003905 00000 n -0000035974 00000 n -0000035786 00000 n -0000004895 00000 n -0000040207 00000 n -0000040012 00000 n -0000005796 00000 n -0000042385 00000 n -0000042198 00000 n -0000006730 00000 n -0000044792 00000 n -0000044598 00000 n -0000007654 00000 n -0000046801 00000 n -0000046607 00000 n -0000008583 00000 n -0000048976 00000 n -0000009110 00000 n -0000049026 00000 n -0000010421 00000 n -0000049158 00000 n -0000049180 00000 n -0000049201 00000 n -trailer -<< -/Size 44 -/Root 2 0 R -/Info 1 0 R ->> -startxref -49318 -%%EOF diff --git a/examples/DieHard/MCDieHarder.tla b/examples/DieHard/MCDieHarder.tla deleted file mode 100644 index a4b83157f22f1012b090f53ac80472286199dd3c..0000000000000000000000000000000000000000 --- a/examples/DieHard/MCDieHarder.tla +++ /dev/null @@ -1,20 +0,0 @@ ----------------------------- MODULE MCDieHarder ----------------------------- -EXTENDS DieHarder - -(***************************************************************************) -(* To have TLC find a solution, we must tell it what values to use for the *) -(* constant parameters Jug, Capacity, and Goal. However, TLC does not *) -(* allow one to write write function-valued expressions in a configuration *) -(* file. So, we use this module, which extends module DieHarder, to *) -(* define a function MCCapacity and have the configuration file TLC to *) -(* substitute MCCapacity for Capacity. Since we need to know the value of *) -(* Jug to define Capacity (which is a function having Jug as its domain), *) -(* we also define MCJug and tell TLC to substitute it for Jug. *) -(***************************************************************************) - -\* The following definitions duplicate the original Die Hard problem. -MCJug == {"j1", "j2"} -MCCapacity == - [j \in MCJug |-> CASE j = "j1" -> 3 - [] j = "j2" -> 5 ] -============================================================================= diff --git a/examples/DieHard/README b/examples/DieHard/README deleted file mode 100644 index 6c158e6c7619e3086211ce4d49015e1f25f08252..0000000000000000000000000000000000000000 --- a/examples/DieHard/README +++ /dev/null @@ -1,14 +0,0 @@ -There are two specifications: - -DieHard - A very elementary example taken from a movie that introduces - TLA+ and the use of the TLC model checker. It solves a of - obtaining 4 gallons of water using two buckets of capacity - 3 and 5 gallons. - -DieHarder - A generalization of DieHard in which the amount of water - to produce and the number of buckets and their capacities - are parameters. It introduces the TLA+ operators for - handling functions (known to programmers as arrays). - \ No newline at end of file diff --git a/examples/N-Queens/Queens.tla b/examples/N-Queens/Queens.tla deleted file mode 100644 index 6b06b88c0f625a0f4b30c124387389da979b78f6..0000000000000000000000000000000000000000 --- a/examples/N-Queens/Queens.tla +++ /dev/null @@ -1,85 +0,0 @@ -------------------------------- MODULE Queens ------------------------------- -EXTENDS Naturals, Sequences -(***************************************************************************) -(* Formulation of the N-queens problem and an iterative algorithm to solve *) -(* the problem in TLA+. Since there must be exactly one queen in every row *) -(* we represent placements of queens as functions of the form *) -(* queens \in [ 1..N -> 1..N ] *) -(* where queens[i] gives the column of the queen in row i. Note that such *) -(* a function is just a sequence of length N. *) -(* We will also consider partial solutions, also represented as sequences *) -(* of length \leq N. *) -(***************************************************************************) - -CONSTANT N \** number of queens and size of the board -ASSUME N \in Nat \ {0} - -(* The following predicate determines if queens i and j attack each other - in a placement of queens (represented by a sequence as above). *) -Attacks(queens,i,j) == - \/ queens[i] = queens[j] \** same column - \/ queens[i] - queens[j] = i - j \** first diagonal - \/ queens[j] - queens[i] = i - j \** second diagonal - -(* A placement represents a (partial) solution if no two different queens - attack each other in it. *) -IsSolution(queens) == - \A i \in 1 .. Len(queens)-1 : \A j \in i+1 .. Len(queens) : - ~ Attacks(queens,i,j) - -(* Compute the set of solutions of the N-queens problem. *) -Solutions == { queens \in [1..N -> 1..N] : IsSolution(queens) } - -(***************************************************************************) -(* We now describe an algorithm that iteratively computes the set of *) -(* solutions of the N-queens problem by successively placing queens. *) -(* The current state of the algorithm is given by two variables: *) -(* - todo contains a set of partial solutions, *) -(* - sols contains the set of full solutions found so far. *) -(* At every step, the algorithm picks some partial solution and computes *) -(* all possible extensions by the next queen. If N queens have been placed *) -(* these extensions are in fact full solutions, otherwise they are added *) -(* to the set todo. *) -(***************************************************************************) - -VARIABLES todo, sols - -Init == /\ todo = { << >> } \** << >> is a partial (but not full) solution - /\ sols = {} \** no full solution found so far - -PlaceQueen == \E queens \in todo : - \** extend some partial solution by placing the next queen - LET nxtQ == Len(queens) + 1 \** number of queen to place - cols == \** set of columns on which queen can be placed without any - \** conflict with some queen already placed - { c \in 1..N : ~ \E i \in 1 .. Len(queens) : - Attacks( Append(queens, c), i, nxtQ ) } - exts == { Append(queens, c) : c \in cols } \** possible extensions - IN IF nxtQ = N \** completed solution - THEN /\ todo' = todo \ {queens} - /\ sols' = sols \union exts - ELSE /\ todo' = (todo \ {queens}) \union exts - /\ sols' = sols - -vars == <<todo,sols>> -Spec == Init /\ [][PlaceQueen]_vars /\ WF_vars(PlaceQueen) - -TypeInvariant == - /\ todo \in SUBSET Seq(1 .. N) /\ \A s \in todo : Len(s) < N - /\ sols \in SUBSET Seq(1 .. N) /\ \A s \in sols : Len(s) = N - -(* The set of sols contains only solutions, and contains all solutions - when todo is empty. *) -Invariant == - /\ sols \subseteq Solutions - /\ todo = {} => Solutions \subseteq sols - -Termination == <>(todo = {}) - -(* Assert that no solutions are ever computed so that TLC displays one *) -NoSolutions == sols = {} - -============================================================================= -\* Modification History -\* Last modified Sat Dec 11 09:58:48 CET 2010 by merz -\* Created Sat Dec 11 08:50:24 CET 2010 by merz diff --git a/examples/N-Queens/Queens.toolbox/.settings/org.lamport.tla.toolbox.prefs b/examples/N-Queens/Queens.toolbox/.settings/org.lamport.tla.toolbox.prefs deleted file mode 100644 index 03fed1ecbd56dbcfc10d91c03902a27663e41990..0000000000000000000000000000000000000000 --- a/examples/N-Queens/Queens.toolbox/.settings/org.lamport.tla.toolbox.prefs +++ /dev/null @@ -1,4 +0,0 @@ -#Sat Dec 18 18:52:57 CET 2010 -ProjectRootFile=/Users/merz/projects/tla/Queens.tla -ProjectToolboxDirSize=0 -eclipse.preferences.version=1 diff --git a/examples/N-Queens/Queens.toolbox/FourQueens/MC.cfg b/examples/N-Queens/Queens.toolbox/FourQueens/MC.cfg deleted file mode 100644 index 2e54e09850141e39bff6daa9355b3705688ce18e..0000000000000000000000000000000000000000 --- a/examples/N-Queens/Queens.toolbox/FourQueens/MC.cfg +++ /dev/null @@ -1,11 +0,0 @@ -\* CONSTANT definitions -CONSTANT -N <- const_129269484697916000 -\* SPECIFICATION definition -SPECIFICATION -spec_129269484699017000 -\* INVARIANT definition -INVARIANT -inv_129269484700018000 -inv_129269484701019000 -\* Generated at Sat Dec 18 18:54:07 CET 2010 \ No newline at end of file diff --git a/examples/N-Queens/Queens.toolbox/FourQueens/MC.out b/examples/N-Queens/Queens.toolbox/FourQueens/MC.out deleted file mode 100644 index 94d0812d781e3d346ced296861591d20b6b81e56..0000000000000000000000000000000000000000 --- a/examples/N-Queens/Queens.toolbox/FourQueens/MC.out +++ /dev/null @@ -1,71 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.03 of 26 May 2010 -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running in Model-Checking mode. -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file MC.tla -Parsing file Queens.tla -Parsing file /Applications/TLA+ toolbox/plugins/org.lamport.tla.toolbox_1.0.0/StandardModules/TLC.tla -Parsing file /Applications/TLA+ toolbox/plugins/org.lamport.tla.toolbox_1.0.0/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ toolbox/plugins/org.lamport.tla.toolbox_1.0.0/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Sequences -Semantic processing of module Queens -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2010-12-18 18:54:08) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(11) at 2010-12-18 18:54:11: 2162 states generated, 627 distinct states found, 118 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2193:0 @!@!@ -Model checking completed. No error has been found. - Estimates of the probability that TLC did not check all reachable states - because two distinct states had the same fingerprint: - calculated (optimistic): val = 9.3E-14 - based on the actual fingerprints: val = 1.3E-14 -@!@!@ENDMSG 2193 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2010-12-18 18:54:11 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 59, col 15 to line 59, col 37 of module Queens: 840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 60, col 15 to line 60, col 38 of module Queens: 840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 61, col 15 to line 61, col 51 of module Queens: 2129 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 62, col 15 to line 62, col 26 of module Queens: 2129 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(16) at 2010-12-18 18:54:11: 2970 states generated, 785 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -2970 states generated, 785 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2194:0 @!@!@ -The depth of the complete state graph search is 16. -@!@!@ENDMSG 2194 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished. (2010-12-18 18:54:11) -@!@!@ENDMSG 2186 @!@!@ diff --git a/examples/N-Queens/Queens.toolbox/FourQueens/MC.tla b/examples/N-Queens/Queens.toolbox/FourQueens/MC.tla deleted file mode 100644 index 56f9b10f034069df7663f620bf325fbc5fa45295..0000000000000000000000000000000000000000 --- a/examples/N-Queens/Queens.toolbox/FourQueens/MC.tla +++ /dev/null @@ -1,23 +0,0 @@ ----- MODULE MC ---- -EXTENDS Queens, TLC - -\* CONSTANT definitions @modelParameterConstants:0N -const_129269484697916000 == -4 ----- - -\* SPECIFICATION definition @modelBehaviorSpec:0 -spec_129269484699017000 == -Spec ----- -\* INVARIANT definition @modelCorrectnessInvariants:0 -inv_129269484700018000 == -TypeInvariant ----- -\* INVARIANT definition @modelCorrectnessInvariants:1 -inv_129269484701019000 == -Invariant ----- -============================================================================= -\* Modification History -\* Created Sat Dec 18 18:54:07 CET 2010 by merz diff --git a/examples/N-Queens/Queens.toolbox/FourQueens/MC_TE.out b/examples/N-Queens/Queens.toolbox/FourQueens/MC_TE.out deleted file mode 100644 index 94d0812d781e3d346ced296861591d20b6b81e56..0000000000000000000000000000000000000000 --- a/examples/N-Queens/Queens.toolbox/FourQueens/MC_TE.out +++ /dev/null @@ -1,71 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.03 of 26 May 2010 -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running in Model-Checking mode. -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file MC.tla -Parsing file Queens.tla -Parsing file /Applications/TLA+ toolbox/plugins/org.lamport.tla.toolbox_1.0.0/StandardModules/TLC.tla -Parsing file /Applications/TLA+ toolbox/plugins/org.lamport.tla.toolbox_1.0.0/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ toolbox/plugins/org.lamport.tla.toolbox_1.0.0/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Sequences -Semantic processing of module Queens -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2010-12-18 18:54:08) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(11) at 2010-12-18 18:54:11: 2162 states generated, 627 distinct states found, 118 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2193:0 @!@!@ -Model checking completed. No error has been found. - Estimates of the probability that TLC did not check all reachable states - because two distinct states had the same fingerprint: - calculated (optimistic): val = 9.3E-14 - based on the actual fingerprints: val = 1.3E-14 -@!@!@ENDMSG 2193 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2010-12-18 18:54:11 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 59, col 15 to line 59, col 37 of module Queens: 840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 60, col 15 to line 60, col 38 of module Queens: 840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 61, col 15 to line 61, col 51 of module Queens: 2129 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 62, col 15 to line 62, col 26 of module Queens: 2129 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(16) at 2010-12-18 18:54:11: 2970 states generated, 785 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -2970 states generated, 785 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2194:0 @!@!@ -The depth of the complete state graph search is 16. -@!@!@ENDMSG 2194 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished. (2010-12-18 18:54:11) -@!@!@ENDMSG 2186 @!@!@ diff --git a/examples/N-Queens/Queens.toolbox/FourQueens/Queens.tla b/examples/N-Queens/Queens.toolbox/FourQueens/Queens.tla deleted file mode 100644 index 6b06b88c0f625a0f4b30c124387389da979b78f6..0000000000000000000000000000000000000000 --- a/examples/N-Queens/Queens.toolbox/FourQueens/Queens.tla +++ /dev/null @@ -1,85 +0,0 @@ -------------------------------- MODULE Queens ------------------------------- -EXTENDS Naturals, Sequences -(***************************************************************************) -(* Formulation of the N-queens problem and an iterative algorithm to solve *) -(* the problem in TLA+. Since there must be exactly one queen in every row *) -(* we represent placements of queens as functions of the form *) -(* queens \in [ 1..N -> 1..N ] *) -(* where queens[i] gives the column of the queen in row i. Note that such *) -(* a function is just a sequence of length N. *) -(* We will also consider partial solutions, also represented as sequences *) -(* of length \leq N. *) -(***************************************************************************) - -CONSTANT N \** number of queens and size of the board -ASSUME N \in Nat \ {0} - -(* The following predicate determines if queens i and j attack each other - in a placement of queens (represented by a sequence as above). *) -Attacks(queens,i,j) == - \/ queens[i] = queens[j] \** same column - \/ queens[i] - queens[j] = i - j \** first diagonal - \/ queens[j] - queens[i] = i - j \** second diagonal - -(* A placement represents a (partial) solution if no two different queens - attack each other in it. *) -IsSolution(queens) == - \A i \in 1 .. Len(queens)-1 : \A j \in i+1 .. Len(queens) : - ~ Attacks(queens,i,j) - -(* Compute the set of solutions of the N-queens problem. *) -Solutions == { queens \in [1..N -> 1..N] : IsSolution(queens) } - -(***************************************************************************) -(* We now describe an algorithm that iteratively computes the set of *) -(* solutions of the N-queens problem by successively placing queens. *) -(* The current state of the algorithm is given by two variables: *) -(* - todo contains a set of partial solutions, *) -(* - sols contains the set of full solutions found so far. *) -(* At every step, the algorithm picks some partial solution and computes *) -(* all possible extensions by the next queen. If N queens have been placed *) -(* these extensions are in fact full solutions, otherwise they are added *) -(* to the set todo. *) -(***************************************************************************) - -VARIABLES todo, sols - -Init == /\ todo = { << >> } \** << >> is a partial (but not full) solution - /\ sols = {} \** no full solution found so far - -PlaceQueen == \E queens \in todo : - \** extend some partial solution by placing the next queen - LET nxtQ == Len(queens) + 1 \** number of queen to place - cols == \** set of columns on which queen can be placed without any - \** conflict with some queen already placed - { c \in 1..N : ~ \E i \in 1 .. Len(queens) : - Attacks( Append(queens, c), i, nxtQ ) } - exts == { Append(queens, c) : c \in cols } \** possible extensions - IN IF nxtQ = N \** completed solution - THEN /\ todo' = todo \ {queens} - /\ sols' = sols \union exts - ELSE /\ todo' = (todo \ {queens}) \union exts - /\ sols' = sols - -vars == <<todo,sols>> -Spec == Init /\ [][PlaceQueen]_vars /\ WF_vars(PlaceQueen) - -TypeInvariant == - /\ todo \in SUBSET Seq(1 .. N) /\ \A s \in todo : Len(s) < N - /\ sols \in SUBSET Seq(1 .. N) /\ \A s \in sols : Len(s) = N - -(* The set of sols contains only solutions, and contains all solutions - when todo is empty. *) -Invariant == - /\ sols \subseteq Solutions - /\ todo = {} => Solutions \subseteq sols - -Termination == <>(todo = {}) - -(* Assert that no solutions are ever computed so that TLC displays one *) -NoSolutions == sols = {} - -============================================================================= -\* Modification History -\* Last modified Sat Dec 11 09:58:48 CET 2010 by merz -\* Created Sat Dec 11 08:50:24 CET 2010 by merz diff --git a/examples/N-Queens/Queens.toolbox/Queens___FourQueens.launch b/examples/N-Queens/Queens.toolbox/Queens___FourQueens.launch deleted file mode 100644 index a1c0009822af912c0850c3ee1789e936cc3ad5cf..0000000000000000000000000000000000000000 --- a/examples/N-Queens/Queens.toolbox/Queens___FourQueens.launch +++ /dev/null @@ -1,40 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<launchConfiguration type="org.lamport.tla.toolbox.tool.tlc.modelCheck"> -<intAttribute key="autoLockTime" value="15"/> -<stringAttribute key="configurationName" value="FourQueens"/> -<intAttribute key="dfidDepth" value="100"/> -<booleanAttribute key="dfidMode" value="false"/> -<intAttribute key="maxHeapSize" value="500"/> -<booleanAttribute key="mcMode" value="true"/> -<stringAttribute key="modelBehaviorInit" value=""/> -<stringAttribute key="modelBehaviorNext" value=""/> -<stringAttribute key="modelBehaviorSpec" value="Spec"/> -<intAttribute key="modelBehaviorSpecType" value="1"/> -<stringAttribute key="modelBehaviorVars" value="todo, sols"/> -<booleanAttribute key="modelCorrectnessCheckDeadlock" value="false"/> -<listAttribute key="modelCorrectnessInvariants"> -<listEntry value="1TypeInvariant"/> -<listEntry value="1Invariant"/> -<listEntry value="0NoSolutions"/> -</listAttribute> -<listAttribute key="modelCorrectnessProperties"> -<listEntry value="0Termination"/> -</listAttribute> -<stringAttribute key="modelExpressionEval" value=""/> -<stringAttribute key="modelParameterActionConstraint" value=""/> -<listAttribute key="modelParameterConstants"> -<listEntry value="N;;4;0;0"/> -</listAttribute> -<stringAttribute key="modelParameterContraint" value=""/> -<listAttribute key="modelParameterDefinitions"/> -<stringAttribute key="modelParameterModelValues" value="{}"/> -<stringAttribute key="modelParameterNewDefinitions" value=""/> -<stringAttribute key="modelPropertiesExpand" value=""/> -<intAttribute key="numberOfWorkers" value="1"/> -<booleanAttribute key="recover" value="false"/> -<intAttribute key="simuAril" value="-1"/> -<intAttribute key="simuDepth" value="100"/> -<intAttribute key="simuSeed" value="-1"/> -<stringAttribute key="specName" value="Queens"/> -<stringAttribute key="view" value=""/> -</launchConfiguration> diff --git a/examples/N-Queens/QueensPluscal.tla b/examples/N-Queens/QueensPluscal.tla deleted file mode 100644 index bc1d9cc946187a01615f40d55acee0408ae0f807..0000000000000000000000000000000000000000 --- a/examples/N-Queens/QueensPluscal.tla +++ /dev/null @@ -1,124 +0,0 @@ --------------------------- MODULE QueensPlusCal ----------------------------- -EXTENDS Naturals, Sequences -(***************************************************************************) -(* Formulation of the N-queens problem and an iterative algorithm to solve *) -(* the problem in TLA+. Since there must be exactly one queen in every row *) -(* we represent placements of queens as functions of the form *) -(* queens \in [ 1..N -> 1..N ] *) -(* where queens[i] gives the column of the queen in row i. Note that such *) -(* a function is just a sequence of length N. *) -(* We will also consider partial solutions, also represented as sequences *) -(* of length \leq N. *) -(***************************************************************************) - -CONSTANT N \** number of queens and size of the board -ASSUME N \in Nat \ {0} - -(* The following predicate determines if queens i and j attack each other - in a placement of queens (represented by a sequence as above). *) -Attacks(queens,i,j) == - \/ queens[i] = queens[j] \** same column - \/ queens[i] - queens[j] = i - j \** first diagonal - \/ queens[j] - queens[i] = i - j \** second diagonal - -(* A placement represents a (partial) solution if no two different queens - attack each other in it. *) -IsSolution(queens) == - \A i \in 1 .. Len(queens)-1 : \A j \in i+1 .. Len(queens) : - ~ Attacks(queens,i,j) - -(* Compute the set of solutions of the N-queens problem. *) -Solutions == { queens \in [1..N -> 1..N] : IsSolution(queens) } - -(***************************************************************************) -(* We now describe an algorithm that iteratively computes the set of *) -(* solutions of the N-queens problem by successively placing queens. *) -(* The current state of the algorithm is given by two variables: *) -(* - todo contains a set of partial solutions, *) -(* - sols contains the set of full solutions found so far. *) -(* At every step, the algorithm picks some partial solution and computes *) -(* all possible extensions by the next queen. If N queens have been placed *) -(* these extensions are in fact full solutions, otherwise they are added *) -(* to the set todo. *) -(***************************************************************************) - -(* --algorithm Queens - variables - todo = { << >> }; - sols = {}; - - begin -nxtQ: while todo # {} - do - with queens \in todo, - nxtQ = Len(queens) + 1, - cols = { c \in 1..N : ~ \E i \in 1 .. Len(queens) : - Attacks( Append(queens, c), i, nxtQ ) }, - exts = { Append(queens,c) : c \in cols } - do - if (nxtQ = N) - then todo := todo \ {queens}; sols := sols \union exts; - else todo := (todo \ {queens}) \union exts; - end if; - end with; - end while; - end algorithm -*) - -\** BEGIN TRANSLATION -VARIABLES todo, sols, pc - -vars == << todo, sols, pc >> - -Init == (* Global variables *) - /\ todo = { << >> } - /\ sols = {} - /\ pc = "nxtQ" - -nxtQ == /\ pc = "nxtQ" - /\ IF todo # {} - THEN /\ \E queens \in todo: - LET nxtQ == Len(queens) + 1 IN - LET cols == { c \in 1..N : ~ \E i \in 1 .. Len(queens) : - Attacks( Append(queens, c), i, nxtQ ) } IN - LET exts == { Append(queens,c) : c \in cols } IN - IF (nxtQ = N) - THEN /\ todo' = todo \ {queens} - /\ sols' = (sols \union exts) - ELSE /\ todo' = ((todo \ {queens}) \union exts) - /\ UNCHANGED sols - /\ pc' = "nxtQ" - ELSE /\ pc' = "Done" - /\ UNCHANGED << todo, sols >> - -Next == nxtQ - \/ (* Disjunct to prevent deadlock on termination *) - (pc = "Done" /\ UNCHANGED vars) - -Spec == Init /\ [][Next]_vars - -Termination == <>(pc = "Done") - -\** END TRANSLATION - -TypeInvariant == - /\ todo \in SUBSET Seq(1 .. N) /\ \A s \in todo : Len(s) < N - /\ sols \in SUBSET Seq(1 .. N) /\ \A s \in sols : Len(s) = N - -(* The set of sols contains only solutions, and contains all solutions - when todo is empty. *) -Invariant == - /\ sols \subseteq Solutions - /\ todo = {} => Solutions \subseteq sols - -(* Assert that no solutions are ever computed so that TLC displays one *) -NoSolutions == sols = {} - -(* Add a fairness condition to ensure progress as long as todo is nonempty *) -Liveness == WF_vars(nxtQ) -LiveSpec == Spec /\ Liveness - -============================================================================= -\* Modification History -\* Last modified Sat Dec 18 18:57:03 CET 2010 by merz -\* Created Sat Dec 11 08:50:24 CET 2010 by merz diff --git a/examples/N-Queens/QueensPluscal.toolbox/.project b/examples/N-Queens/QueensPluscal.toolbox/.project deleted file mode 100644 index 645f7f475241dac7a04b067c6528eb54cb706abd..0000000000000000000000000000000000000000 --- a/examples/N-Queens/QueensPluscal.toolbox/.project +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>QueensPluscal</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>toolbox.builder.TLAParserBuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>toolbox.builder.PCalAlgorithmSearchingBuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>toolbox.natures.TLANature</nature> - </natures> - <linkedResources> - <link> - <name>QueensPluscal.tla</name> - <type>1</type> - <location>/Users/merz/projects/tla/QueensPluscal.tla</location> - </link> - </linkedResources> -</projectDescription> diff --git a/examples/N-Queens/QueensPluscal.toolbox/.settings/org.lamport.tla.toolbox.prefs b/examples/N-Queens/QueensPluscal.toolbox/.settings/org.lamport.tla.toolbox.prefs deleted file mode 100644 index 997ef5df37b87bc0108676d909b2c25b84c94b83..0000000000000000000000000000000000000000 --- a/examples/N-Queens/QueensPluscal.toolbox/.settings/org.lamport.tla.toolbox.prefs +++ /dev/null @@ -1,4 +0,0 @@ -#Sat Dec 18 18:54:38 CET 2010 -ProjectRootFile=/Users/merz/projects/tla/QueensPluscal.tla -ProjectToolboxDirSize=0 -eclipse.preferences.version=1 diff --git a/examples/N-Queens/QueensPluscal.toolbox/FourQueens/MC.cfg b/examples/N-Queens/QueensPluscal.toolbox/FourQueens/MC.cfg deleted file mode 100644 index d8e4aeae30c5958141e8744b990a8e7b9b0a3fb0..0000000000000000000000000000000000000000 --- a/examples/N-Queens/QueensPluscal.toolbox/FourQueens/MC.cfg +++ /dev/null @@ -1,14 +0,0 @@ -\* CONSTANT definitions -CONSTANT -N <- const_129269506133433000 -\* SPECIFICATION definition -SPECIFICATION -spec_129269506134534000 -\* INVARIANT definition -INVARIANT -inv_129269506135535000 -inv_129269506136536000 -\* PROPERTY definition -PROPERTY -prop_129269506137537000 -\* Generated at Sat Dec 18 18:57:41 CET 2010 \ No newline at end of file diff --git a/examples/N-Queens/QueensPluscal.toolbox/FourQueens/MC.out b/examples/N-Queens/QueensPluscal.toolbox/FourQueens/MC.out deleted file mode 100644 index 36dd972bf5cbecbc6a16a8cf5eb3046d7e7b78ce..0000000000000000000000000000000000000000 --- a/examples/N-Queens/QueensPluscal.toolbox/FourQueens/MC.out +++ /dev/null @@ -1,95 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.03 of 26 May 2010 -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running in Model-Checking mode. -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file MC.tla -Parsing file QueensPluscal.tla -Parsing file /Applications/TLA+ toolbox/plugins/org.lamport.tla.toolbox_1.0.0/StandardModules/TLC.tla -Parsing file /Applications/TLA+ toolbox/plugins/org.lamport.tla.toolbox_1.0.0/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ toolbox/plugins/org.lamport.tla.toolbox_1.0.0/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Sequences -Semantic processing of module QueensPluscal -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2010-12-18 18:57:42) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2212:0 @!@!@ -Implied-temporal checking--satisfiability problem has 1 branches. -@!@!@ENDMSG 2212 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2192:0 @!@!@ -Checking temporal properties for the complete state space... -@!@!@ENDMSG 2192 @!@!@ -@!@!@STARTMSG 2193:0 @!@!@ -Model checking completed. No error has been found. - Estimates of the probability that TLC did not check all reachable states - because two distinct states had the same fingerprint: - calculated (optimistic): val = 9.3E-14 - based on the actual fingerprints: val = 2.9E-14 -@!@!@ENDMSG 2193 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2010-12-18 18:57:44 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 71, col 12 to line 71, col 15 of module QueensPlusCal: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 71, col 18 to line 71, col 21 of module QueensPlusCal: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 71, col 24 to line 71, col 25 of module QueensPlusCal: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 86, col 42 to line 86, col 64 of module QueensPlusCal: 840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 87, col 42 to line 87, col 67 of module QueensPlusCal: 840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 88, col 42 to line 88, col 80 of module QueensPlusCal: 2129 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 89, col 52 to line 89, col 55 of module QueensPlusCal: 2129 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 90, col 23 to line 90, col 34 of module QueensPlusCal: 2969 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 91, col 23 to line 91, col 34 of module QueensPlusCal: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 92, col 36 to line 92, col 39 of module QueensPlusCal: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 92, col 42 to line 92, col 45 of module QueensPlusCal: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(17) at 2010-12-18 18:57:44: 2972 states generated, 786 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -2972 states generated, 786 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2194:0 @!@!@ -The depth of the complete state graph search is 17. -@!@!@ENDMSG 2194 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished. (2010-12-18 18:57:44) -@!@!@ENDMSG 2186 @!@!@ diff --git a/examples/N-Queens/QueensPluscal.toolbox/FourQueens/MC.tla b/examples/N-Queens/QueensPluscal.toolbox/FourQueens/MC.tla deleted file mode 100644 index d39d333285d8cae16acf4af91796d9f81beca3c0..0000000000000000000000000000000000000000 --- a/examples/N-Queens/QueensPluscal.toolbox/FourQueens/MC.tla +++ /dev/null @@ -1,27 +0,0 @@ ----- MODULE MC ---- -EXTENDS QueensPluscal, TLC - -\* CONSTANT definitions @modelParameterConstants:0N -const_129269506133433000 == -4 ----- - -\* SPECIFICATION definition @modelBehaviorSpec:0 -spec_129269506134534000 == -LiveSpec ----- -\* INVARIANT definition @modelCorrectnessInvariants:0 -inv_129269506135535000 == -TypeInvariant ----- -\* INVARIANT definition @modelCorrectnessInvariants:1 -inv_129269506136536000 == -Invariant ----- -\* PROPERTY definition @modelCorrectnessProperties:0 -prop_129269506137537000 == -Termination ----- -============================================================================= -\* Modification History -\* Created Sat Dec 18 18:57:41 CET 2010 by merz diff --git a/examples/N-Queens/QueensPluscal.toolbox/FourQueens/MC_TE.out b/examples/N-Queens/QueensPluscal.toolbox/FourQueens/MC_TE.out deleted file mode 100644 index 36dd972bf5cbecbc6a16a8cf5eb3046d7e7b78ce..0000000000000000000000000000000000000000 --- a/examples/N-Queens/QueensPluscal.toolbox/FourQueens/MC_TE.out +++ /dev/null @@ -1,95 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.03 of 26 May 2010 -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running in Model-Checking mode. -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file MC.tla -Parsing file QueensPluscal.tla -Parsing file /Applications/TLA+ toolbox/plugins/org.lamport.tla.toolbox_1.0.0/StandardModules/TLC.tla -Parsing file /Applications/TLA+ toolbox/plugins/org.lamport.tla.toolbox_1.0.0/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ toolbox/plugins/org.lamport.tla.toolbox_1.0.0/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Sequences -Semantic processing of module QueensPluscal -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2010-12-18 18:57:42) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2212:0 @!@!@ -Implied-temporal checking--satisfiability problem has 1 branches. -@!@!@ENDMSG 2212 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2192:0 @!@!@ -Checking temporal properties for the complete state space... -@!@!@ENDMSG 2192 @!@!@ -@!@!@STARTMSG 2193:0 @!@!@ -Model checking completed. No error has been found. - Estimates of the probability that TLC did not check all reachable states - because two distinct states had the same fingerprint: - calculated (optimistic): val = 9.3E-14 - based on the actual fingerprints: val = 2.9E-14 -@!@!@ENDMSG 2193 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2010-12-18 18:57:44 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 71, col 12 to line 71, col 15 of module QueensPlusCal: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 71, col 18 to line 71, col 21 of module QueensPlusCal: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 71, col 24 to line 71, col 25 of module QueensPlusCal: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 86, col 42 to line 86, col 64 of module QueensPlusCal: 840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 87, col 42 to line 87, col 67 of module QueensPlusCal: 840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 88, col 42 to line 88, col 80 of module QueensPlusCal: 2129 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 89, col 52 to line 89, col 55 of module QueensPlusCal: 2129 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 90, col 23 to line 90, col 34 of module QueensPlusCal: 2969 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 91, col 23 to line 91, col 34 of module QueensPlusCal: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 92, col 36 to line 92, col 39 of module QueensPlusCal: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 92, col 42 to line 92, col 45 of module QueensPlusCal: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(17) at 2010-12-18 18:57:44: 2972 states generated, 786 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -2972 states generated, 786 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2194:0 @!@!@ -The depth of the complete state graph search is 17. -@!@!@ENDMSG 2194 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished. (2010-12-18 18:57:44) -@!@!@ENDMSG 2186 @!@!@ diff --git a/examples/N-Queens/QueensPluscal.toolbox/FourQueens/QueensPluscal.tla b/examples/N-Queens/QueensPluscal.toolbox/FourQueens/QueensPluscal.tla deleted file mode 100644 index bc1d9cc946187a01615f40d55acee0408ae0f807..0000000000000000000000000000000000000000 --- a/examples/N-Queens/QueensPluscal.toolbox/FourQueens/QueensPluscal.tla +++ /dev/null @@ -1,124 +0,0 @@ --------------------------- MODULE QueensPlusCal ----------------------------- -EXTENDS Naturals, Sequences -(***************************************************************************) -(* Formulation of the N-queens problem and an iterative algorithm to solve *) -(* the problem in TLA+. Since there must be exactly one queen in every row *) -(* we represent placements of queens as functions of the form *) -(* queens \in [ 1..N -> 1..N ] *) -(* where queens[i] gives the column of the queen in row i. Note that such *) -(* a function is just a sequence of length N. *) -(* We will also consider partial solutions, also represented as sequences *) -(* of length \leq N. *) -(***************************************************************************) - -CONSTANT N \** number of queens and size of the board -ASSUME N \in Nat \ {0} - -(* The following predicate determines if queens i and j attack each other - in a placement of queens (represented by a sequence as above). *) -Attacks(queens,i,j) == - \/ queens[i] = queens[j] \** same column - \/ queens[i] - queens[j] = i - j \** first diagonal - \/ queens[j] - queens[i] = i - j \** second diagonal - -(* A placement represents a (partial) solution if no two different queens - attack each other in it. *) -IsSolution(queens) == - \A i \in 1 .. Len(queens)-1 : \A j \in i+1 .. Len(queens) : - ~ Attacks(queens,i,j) - -(* Compute the set of solutions of the N-queens problem. *) -Solutions == { queens \in [1..N -> 1..N] : IsSolution(queens) } - -(***************************************************************************) -(* We now describe an algorithm that iteratively computes the set of *) -(* solutions of the N-queens problem by successively placing queens. *) -(* The current state of the algorithm is given by two variables: *) -(* - todo contains a set of partial solutions, *) -(* - sols contains the set of full solutions found so far. *) -(* At every step, the algorithm picks some partial solution and computes *) -(* all possible extensions by the next queen. If N queens have been placed *) -(* these extensions are in fact full solutions, otherwise they are added *) -(* to the set todo. *) -(***************************************************************************) - -(* --algorithm Queens - variables - todo = { << >> }; - sols = {}; - - begin -nxtQ: while todo # {} - do - with queens \in todo, - nxtQ = Len(queens) + 1, - cols = { c \in 1..N : ~ \E i \in 1 .. Len(queens) : - Attacks( Append(queens, c), i, nxtQ ) }, - exts = { Append(queens,c) : c \in cols } - do - if (nxtQ = N) - then todo := todo \ {queens}; sols := sols \union exts; - else todo := (todo \ {queens}) \union exts; - end if; - end with; - end while; - end algorithm -*) - -\** BEGIN TRANSLATION -VARIABLES todo, sols, pc - -vars == << todo, sols, pc >> - -Init == (* Global variables *) - /\ todo = { << >> } - /\ sols = {} - /\ pc = "nxtQ" - -nxtQ == /\ pc = "nxtQ" - /\ IF todo # {} - THEN /\ \E queens \in todo: - LET nxtQ == Len(queens) + 1 IN - LET cols == { c \in 1..N : ~ \E i \in 1 .. Len(queens) : - Attacks( Append(queens, c), i, nxtQ ) } IN - LET exts == { Append(queens,c) : c \in cols } IN - IF (nxtQ = N) - THEN /\ todo' = todo \ {queens} - /\ sols' = (sols \union exts) - ELSE /\ todo' = ((todo \ {queens}) \union exts) - /\ UNCHANGED sols - /\ pc' = "nxtQ" - ELSE /\ pc' = "Done" - /\ UNCHANGED << todo, sols >> - -Next == nxtQ - \/ (* Disjunct to prevent deadlock on termination *) - (pc = "Done" /\ UNCHANGED vars) - -Spec == Init /\ [][Next]_vars - -Termination == <>(pc = "Done") - -\** END TRANSLATION - -TypeInvariant == - /\ todo \in SUBSET Seq(1 .. N) /\ \A s \in todo : Len(s) < N - /\ sols \in SUBSET Seq(1 .. N) /\ \A s \in sols : Len(s) = N - -(* The set of sols contains only solutions, and contains all solutions - when todo is empty. *) -Invariant == - /\ sols \subseteq Solutions - /\ todo = {} => Solutions \subseteq sols - -(* Assert that no solutions are ever computed so that TLC displays one *) -NoSolutions == sols = {} - -(* Add a fairness condition to ensure progress as long as todo is nonempty *) -Liveness == WF_vars(nxtQ) -LiveSpec == Spec /\ Liveness - -============================================================================= -\* Modification History -\* Last modified Sat Dec 18 18:57:03 CET 2010 by merz -\* Created Sat Dec 11 08:50:24 CET 2010 by merz diff --git a/examples/N-Queens/QueensPluscal.toolbox/QueensPluscal___FourQueens.launch b/examples/N-Queens/QueensPluscal.toolbox/QueensPluscal___FourQueens.launch deleted file mode 100644 index 620117ca5005e0f004491f4998ac79271d4a5e77..0000000000000000000000000000000000000000 --- a/examples/N-Queens/QueensPluscal.toolbox/QueensPluscal___FourQueens.launch +++ /dev/null @@ -1,40 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<launchConfiguration type="org.lamport.tla.toolbox.tool.tlc.modelCheck"> -<intAttribute key="autoLockTime" value="15"/> -<stringAttribute key="configurationName" value="FourQueens"/> -<intAttribute key="dfidDepth" value="100"/> -<booleanAttribute key="dfidMode" value="false"/> -<intAttribute key="maxHeapSize" value="500"/> -<booleanAttribute key="mcMode" value="true"/> -<stringAttribute key="modelBehaviorInit" value=""/> -<stringAttribute key="modelBehaviorNext" value=""/> -<stringAttribute key="modelBehaviorSpec" value="LiveSpec"/> -<intAttribute key="modelBehaviorSpecType" value="1"/> -<stringAttribute key="modelBehaviorVars" value="todo, sols, pc"/> -<booleanAttribute key="modelCorrectnessCheckDeadlock" value="false"/> -<listAttribute key="modelCorrectnessInvariants"> -<listEntry value="1TypeInvariant"/> -<listEntry value="1Invariant"/> -<listEntry value="0NoSolutions"/> -</listAttribute> -<listAttribute key="modelCorrectnessProperties"> -<listEntry value="1Termination"/> -</listAttribute> -<stringAttribute key="modelExpressionEval" value=""/> -<stringAttribute key="modelParameterActionConstraint" value=""/> -<listAttribute key="modelParameterConstants"> -<listEntry value="N;;4;0;0"/> -</listAttribute> -<stringAttribute key="modelParameterContraint" value=""/> -<listAttribute key="modelParameterDefinitions"/> -<stringAttribute key="modelParameterModelValues" value="{}"/> -<stringAttribute key="modelParameterNewDefinitions" value=""/> -<stringAttribute key="modelPropertiesExpand" value=""/> -<intAttribute key="numberOfWorkers" value="1"/> -<booleanAttribute key="recover" value="false"/> -<intAttribute key="simuAril" value="-1"/> -<intAttribute key="simuDepth" value="100"/> -<intAttribute key="simuSeed" value="-1"/> -<stringAttribute key="specName" value="QueensPluscal"/> -<stringAttribute key="view" value=""/> -</launchConfiguration> diff --git a/examples/N-Queens/README b/examples/N-Queens/README deleted file mode 100644 index a676eb43781eb0a9fccb0cc7c70e7b4a59de890a..0000000000000000000000000000000000000000 --- a/examples/N-Queens/README +++ /dev/null @@ -1,12 +0,0 @@ -These two specification were received from Stephan Merz on 17 December -2010, along with the following email: - -A colleague asked me how I'd write a solution to the N-queens problem -in TLA+. The result is attached. The idea is straightforward, and I -assume that you may already have written something similar at some -point, but I'm still sending it to you in case you think it's useful. -(Maybe we could put up some such examples on the TLA+ web site and/or -encourage people to contribute their models, though that would require -some validation?) TLC can execute the algorithm in no time for 4 -queens, but I killed it after an hour for N=5 -- however, it could -still evaluate the definition of Solutions for N=5 in no time. diff --git a/examples/Paxos/Consensus.tla b/examples/Paxos/Consensus.tla deleted file mode 100644 index 622f289ed4e0408e848b54712d6ca61eaf42f07f..0000000000000000000000000000000000000000 --- a/examples/Paxos/Consensus.tla +++ /dev/null @@ -1,55 +0,0 @@ ------------------------------ MODULE Consensus ------------------------------ -EXTENDS Naturals, FiniteSets - -CONSTANT Value - (*************************************************************************) - (* The set of all values that can be chosen. *) - (*************************************************************************) - -VARIABLE chosen - (*************************************************************************) - (* The set of all values that have been chosen. *) - (*************************************************************************) - -(***************************************************************************) -(* The type-correctness invariant. *) -(***************************************************************************) -TypeOK == /\ chosen \subseteq Value - /\ IsFiniteSet(chosen) - -(***************************************************************************) -(* The initial predicate and next-state relation. *) -(***************************************************************************) -Init == chosen = {} - -Next == /\ chosen = {} - /\ \E v \in Value : chosen' = {v} - -(***************************************************************************) -(* The complete spec. *) -(***************************************************************************) -Spec == Init /\ [][Next]_chosen ------------------------------------------------------------------------------ -(***************************************************************************) -(* Safety: At most one value is chosen. *) -(***************************************************************************) -Inv == /\ TypeOK - /\ Cardinality(chosen) \leq 1 - -THEOREM Invariance == Spec => []Inv -<1>1. Init => Inv -<1>2. Inv /\ [Next]_chosen => Inv' -<1>3. QED - <2>1. Inv /\ [][Next]_chosen => []Inv - BY <1>2 \* and a TLA proof rule - <2>2. QED - BY <1>1, <2>1 \* and simple logic ------------------------------------------------------------------------------ -(***************************************************************************) -(* Liveness: A value is eventually chosen. *) -(***************************************************************************) -Success == <>(chosen # {}) -LiveSpec == Spec /\ WF_chosen(Next) - -THEOREM LivenessTheorem == LiveSpec => Success -============================================================================= diff --git a/examples/Paxos/MCConsensus.cfg b/examples/Paxos/MCConsensus.cfg deleted file mode 100644 index b90fee0577303d235cc23e55f04d599ad059e3dd..0000000000000000000000000000000000000000 --- a/examples/Paxos/MCConsensus.cfg +++ /dev/null @@ -1,3 +0,0 @@ -CONSTANTS Value = {"a", "b", "c"} -SPECIFICATION ISpec -INVARIANT Inv diff --git a/examples/Paxos/MCConsensus.tla b/examples/Paxos/MCConsensus.tla deleted file mode 100644 index 78c495ee8e030daa2a71a05c62f332f4e6e0e270..0000000000000000000000000000000000000000 --- a/examples/Paxos/MCConsensus.tla +++ /dev/null @@ -1,23 +0,0 @@ ----------------------------- MODULE MCConsensus ----------------------------- -EXTENDS Consensus - -(***************************************************************************) -(* Checking *) -(* *) -(* Inv /\ [Next]_chosen => Inv' *) -(* *) -(* which is equivalent to checking *) -(* *) -(* Inv /\ [][Next]_chosen => []Inv *) -(* *) -(* which asserts that Inv is an invariant of the spec *) -(* *) -(* Inv /\ [][Next]_chosen *) -(***************************************************************************) -ITypeOK == chosen \in SUBSET Value - -IInv == /\ ITypeOK - /\ Cardinality(chosen) \leq 1 - -ISpec == IInv /\ [][Next]_chosen -============================================================================= diff --git a/examples/Paxos/MCPaxos.cfg b/examples/Paxos/MCPaxos.cfg deleted file mode 100644 index 27ee88962e9cb3a12e7440cbb51412be4f37f2b7..0000000000000000000000000000000000000000 --- a/examples/Paxos/MCPaxos.cfg +++ /dev/null @@ -1,13 +0,0 @@ -SPECIFICATION Spec \* MCISpec MCLSpec -CONSTANTS - a1=a1 a2=a2 a3=a3 v1=v1 v2=v2 - Acceptor <- MCAcceptor - Value <- MCValue - Quorum <- MCQuorum - Ballot <- MCBallot - None = None - Ballot <-[Voting] MCBallot - -INVARIANT Inv1 Inv2 Inv3 Inv4 \* Inv MCInv TypeOK -PROPERTY VotingSpecBar \* MCLiveness MCIProp -SYMMETRY MCSymmetry diff --git a/examples/Paxos/MCPaxos.tla b/examples/Paxos/MCPaxos.tla deleted file mode 100644 index a8c51d645d2c486061d95283988cfadac7186959..0000000000000000000000000000000000000000 --- a/examples/Paxos/MCPaxos.tla +++ /dev/null @@ -1,74 +0,0 @@ --------------------------------- MODULE MCPaxos ------------------------------- -EXTENDS Paxos, TLC ------------------------------------------------------------------------------ -CONSTANTS a1, a2, a3 \* acceptors -CONSTANTS v1, v2 \* Values - -MCAcceptor == {a1} \* {a1, a2, a3} -MCValue == {v1} \* {v1, v2} -MCQuorum == {{a1}} \* {{a1, a2}, {a1, a3}, {a2, a3}} -MCMaxBallot == 1 -MCBallot == 0..MCMaxBallot -MCSymmetry == Permutations(MCAcceptor) \cup Permutations(MCValue) - -VotingSpecBar == V!Spec ------------------------------------------------------------------------------ -(***************************************************************************) -(* For checking liveness. *) -(***************************************************************************) -MCLSpec == /\ Spec - /\ WF_vars(Phase1a(MCMaxBallot)) - /\ \A v \in Value : WF_vars(Phase2a(MCMaxBallot,v)) - /\ \A a \in {a1, a2} : WF_vars(Phase1b(a) \/ Phase2b(a)) -MCLiveness == <>(V!chosen # {}) ------------------------------------------------------------------------------ -(***************************************************************************) -(* For checking the inductive invariant. *) -(***************************************************************************) - -(***************************************************************************) -(* In an initial predicate, a variable x must appear for the first time in *) -(* a conjunct of the form `x = exp' or `x \in exp'. We must therefore *) -(* rewrite the inductive invariant Inv for use as an initial predicate to *) -(* replace the conjunct `msgs \subseteq Message' with the equivalent *) -(* formula `msgs \in SUBSET Message'. *) -(***************************************************************************) -ITypeOK == /\ maxBal \in [Acceptor -> Ballot \cup {-1}] - /\ maxVBal \in [Acceptor -> Ballot \cup {-1}] - /\ maxVal \in [Acceptor -> Value \cup {None}] - /\ msgs \in SUBSET Message - -IInv == /\ ITypeOK - /\ Inv!2 \* Inv!2 is the second conjunct of the definition of Inv. - /\ Inv!3 - /\ Inv!4 - - -(***************************************************************************) -(* Inv is an inductive invariant of Spec iff it is an invariant of the *) -(* following specification. *) -(***************************************************************************) -MCISpec == IInv /\ [][Next]_vars - -(***************************************************************************) -(* TLC only tells you if an invariant is violated, not what part is *) -(* violated. To help locate an error, it's useful to give TLC the *) -(* conjuncts of an invariant as separate invariants to check. *) -(***************************************************************************) -Inv1 == Inv!1 -Inv2 == Inv!2 -Inv3 == Inv!3 -Inv4 == Inv!4 - -(***************************************************************************) -(* To prove that Spec implements the specification Spec of module Voting *) -(* under the refinement mapping we have defined, we must prove *) -(* *) -(* Inv /\ [Next]_vars => [V!Next]_<<votes, maxBal>> *) -(* *) -(* For an inductive invariant Inv, this is true iff the following *) -(* property is implied by specification MCISpec. *) -(***************************************************************************) -MCIProp == [][V!Next]_<<votes, maxBal>> -============================================================================= - diff --git a/examples/Paxos/MCVoting.cfg b/examples/Paxos/MCVoting.cfg deleted file mode 100644 index 61554c487c754a39fbe903a86e8e05ba17062ed4..0000000000000000000000000000000000000000 --- a/examples/Paxos/MCVoting.cfg +++ /dev/null @@ -1,10 +0,0 @@ -CONSTANTS - a1=a1 a2=a2 a3=a3 v1=v1 v2=v2 - Acceptor <- MCAcceptor - Value <- MCValue - Quorum <- MCQuorum - Ballot <- MCBallot -SPECIFICATION Spec \* MCSpec -INVARIANT Inv \* MCInv -PROPERTY ConsensusSpecBar -SYMMETRY MCSymmetry diff --git a/examples/Paxos/MCVoting.tla b/examples/Paxos/MCVoting.tla deleted file mode 100644 index 33ec0c502166aa0759bdbaf76f3cbcb1401975d0..0000000000000000000000000000000000000000 --- a/examples/Paxos/MCVoting.tla +++ /dev/null @@ -1,55 +0,0 @@ ------------------------------- MODULE MCVoting ------------------------------ -EXTENDS Voting, TLC - -CONSTANTS a1, a2, a3 \* acceptors -CONSTANTS v1, v2 \* Values - -MCAcceptor == {a1, a2, a3} -MCValue == {v1, v2} -MCQuorum == {{a1, a2}, {a1, a3}, {a2, a3}} -MCBallot == 0..1 -MCSymmetry == Permutations(MCAcceptor) \cup Permutations(MCValue) - -(***************************************************************************) -(* The various formulas given to TLC through the configuration file must *) -(* consist of single identifiers. Thus, to get TLC to check that the *) -(* specification satisfies (implements) C!Spec, we cannot put *) -(* *) -(* PROPERTY C!Spec *) -(* *) -(* in the configuration file. We therefore define ConsensusSpecBar to *) -(* equal it and put *) -(* *) -(* PROPERTY ConsensusSpecBar *) -(* *) -(* in the configuration file. *) -(***************************************************************************) -ConsensusSpecBar == C!Spec - -(***************************************************************************) -(* The following assumption checks theorem QuorumNonEmpty *) -(***************************************************************************) -ASSUME QuorumNonEmpty!: - -MCInit == TypeOK - -(***************************************************************************) -(* Checking that MCInv is an invariant of MCSpec checks the correctness of *) -(* theorems AllSafeAtZero through ShowsSafety. *) -(***************************************************************************) -MCSpec == TypeOK /\ [][FALSE]_<<votes, maxBal>> -MCInv == /\ AllSafeAtZero!: - /\ ChoosableThm!: - /\ OneValuePerBallot => OneVote - /\ VotesSafeImpliesConsistency!: - /\ ShowsSafety!: - -(***************************************************************************) -(* Checking that Inv is an invariant of MCSpecI checks that Inv is *) -(* an inductive invariant--that is, it checks *) -(* *) -(* THEOREM Inv /\ [Next]_<<votes, maxBal>> => Inv' *) -(***************************************************************************) -MCSpecI == Inv /\ [][Next]_<<votes, maxBal>> - -============================================================================= diff --git a/examples/Paxos/Paxos.tla b/examples/Paxos/Paxos.tla deleted file mode 100644 index 63908a27c4e6f0fe251ba6fd8cf4a83c8cbdb09c..0000000000000000000000000000000000000000 --- a/examples/Paxos/Paxos.tla +++ /dev/null @@ -1,217 +0,0 @@ --------------------------------- MODULE Paxos ------------------------------- -(***************************************************************************) -(* This is a specification of the Paxos algorithm without explicit leaders *) -(* or learners. It refines the spec in Voting *) -(***************************************************************************) -EXTENDS Integers ------------------------------------------------------------------------------ -(***************************************************************************) -(* The constant parameters and the set Ballots are the same as in Voting. *) -(***************************************************************************) -CONSTANT Value, Acceptor, Quorum - -ASSUME QuorumAssumption == /\ \A Q \in Quorum : Q \subseteq Acceptor - /\ \A Q1, Q2 \in Quorum : Q1 \cap Q2 # {} - -Ballot == Nat - -None == CHOOSE v : v \notin Ballot - (*************************************************************************) - (* An unspecified value that is not a ballot number. *) - (*************************************************************************) - -(***************************************************************************) -(* This is a message-passing algorithm, so we begin by defining the set *) -(* Message of all possible messages. The messages are explained below *) -(* with the actions that send them. *) -(***************************************************************************) -Message == [type : {"1a"}, bal : Ballot] - \cup [type : {"1b"}, acc : Acceptor, bal : Ballot, - mbal : Ballot \cup {-1}, mval : Value \cup {None}] - \cup [type : {"2a"}, bal : Ballot, val : Value] - \cup [type : {"2b"}, acc : Acceptor, bal : Ballot, val : Value] ------------------------------------------------------------------------------ -VARIABLE maxBal, - maxVBal, \* <<maxVBal[a], maxVal[a]>> is the vote with the largest - maxVal, \* ballot number cast by a; it equals <<-1, None>> if - \* a has not cast any vote. - msgs \* The set of all messages that have been sent. - -(***************************************************************************) -(* NOTE: *) -(* The algorithm is easier to understand in terms of the set msgs of all *) -(* messages that have ever been sent. A more accurate model would use *) -(* one or more variables to represent the messages actually in transit, *) -(* and it would include actions representing message loss and duplication *) -(* as well as message receipt. *) -(* *) -(* In the current spec, there is no need to model message loss because we *) -(* are mainly concerned with the algorithm's safety property. The safety *) -(* part of the spec says only what messages may be received and does not *) -(* assert that any message actually is received. Thus, there is no *) -(* difference between a lost message and one that is never received. The *) -(* liveness property of the spec that we check makes it clear what what *) -(* messages must be received (and hence either not lost or successfully *) -(* retransmitted if lost) to guarantee progress. *) -(***************************************************************************) - -vars == <<maxBal, maxVBal, maxVal, msgs>> - (*************************************************************************) - (* It is convenient to define some identifier to be the tuple of all *) - (* variables. I like to use the identifier `vars'. *) - (*************************************************************************) - -(***************************************************************************) -(* The type invariant and initial predicate. *) -(***************************************************************************) -TypeOK == /\ maxBal \in [Acceptor -> Ballot \cup {-1}] - /\ maxVBal \in [Acceptor -> Ballot \cup {-1}] - /\ maxVal \in [Acceptor -> Value \cup {None}] - /\ msgs \subseteq Message - - -Init == /\ maxBal = [a \in Acceptor |-> -1] - /\ maxVBal = [a \in Acceptor |-> -1] - /\ maxVal = [a \in Acceptor |-> None] - /\ msgs = {} - -(***************************************************************************) -(* The actions. We begin with the subaction (an action that will be used *) -(* to define the actions that make up the next-state action. *) -(***************************************************************************) -Send(m) == msgs' = msgs \cup {m} - - -(***************************************************************************) -(* In an implementation, there will be a leader process that orchestrates *) -(* a ballot. The ballot b leader performs actions Phase1a(b) and *) -(* Phase2a(b). The Phase1a(b) action sends a phase 1a message (a message *) -(* m with m.type = "1a") that begins ballot b. *) -(***************************************************************************) -Phase1a(b) == /\ Send([type |-> "1a", bal |-> b]) - /\ UNCHANGED <<maxBal, maxVBal, maxVal>> - -(***************************************************************************) -(* Upon receipt of a ballot b phase 1a message, acceptor a can perform a *) -(* Phase1b(a) action only if b > maxBal[a]. The action sets maxBal[a] to *) -(* b and sends a phase 1b message to the leader containing the values of *) -(* maxVBal[a] and maxVal[a]. *) -(***************************************************************************) -Phase1b(a) == /\ \E m \in msgs : - /\ m.type = "1a" - /\ m.bal > maxBal[a] - /\ maxBal' = [maxBal EXCEPT ![a] = m.bal] - /\ Send([type |-> "1b", acc |-> a, bal |-> m.bal, - mbal |-> maxVBal[a], mval |-> maxVal[a]]) - /\ UNCHANGED <<maxVBal, maxVal>> - -(***************************************************************************) -(* The Phase2a(b, v) action can be performed by the ballot b leader if two *) -(* conditions are satisfied: (i) it has not already performed a phase 2a *) -(* action for ballot b and (ii) it has received ballot b phase 1b messages *) -(* from some quorum Q from which it can deduce that the value v is safe at *) -(* ballot b. These enabling conditions are the first two conjuncts in the *) -(* definition of Phase2a(b, v). This second conjunct, expressing *) -(* condition (ii), is the heart of the algorithm. To understand it, *) -(* observe that the existence of a phase 1b message m in msgs implies that *) -(* m.mbal is the highest ballot number less than m.bal in which acceptor *) -(* m.acc has or ever will cast a vote, and that m.mval is the value it *) -(* voted for in that ballot if m.mbal # -1. It is not hard to deduce from *) -(* this that the second conjunct implies that there exists a quorum Q such *) -(* that ShowsSafeAt(Q, b, v) (where ShowsSafeAt is defined in module *) -(* Voting). *) -(* *) -(* The action sends a phase 2a message that tells any acceptor a that it *) -(* can vote for v in ballot b, unless it has already set maxBal[a] *) -(* greater than b (thereby promising not to vote in ballot b). *) -(***************************************************************************) -Phase2a(b, v) == - /\ ~ \E m \in msgs : m.type = "2a" /\ m.bal = b - /\ \E Q \in Quorum : - LET Q1b == {m \in msgs : /\ m.type = "1b" - /\ m.acc \in Q - /\ m.bal = b} - Q1bv == {m \in Q1b : m.mbal \geq 0} - IN /\ \A a \in Q : \E m \in Q1b : m.acc = a - /\ \/ Q1bv = {} - \/ \E m \in Q1bv : - /\ m.mval = v - /\ \A mm \in Q1bv : m.mbal \geq mm.mbal - /\ Send([type |-> "2a", bal |-> b, val |-> v]) - /\ UNCHANGED <<maxBal, maxVBal, maxVal>> - -(***************************************************************************) -(* The Phase2b(a) action is performed by acceptor a upon receipt of a *) -(* phase 2a message. Acceptor a can perform this action only if the *) -(* message is for a ballot number greater than or equal to maxBal[a]. In *) -(* that case, the acceptor votes as directed by the phase 2a message, *) -(* setting maxBVal[a] and maxVal[a] to record that vote and sending a *) -(* phase 2b message announcing its vote. It also sets maxBal[a] to the *) -(* message's. ballot number *) -(***************************************************************************) -Phase2b(a) == \E m \in msgs : /\ m.type = "2a" - /\ m.bal \geq maxBal[a] - /\ maxBal' = [maxBal EXCEPT ![a] = m.bal] - /\ maxVBal' = [maxVBal EXCEPT ![a] = m.bal] - /\ maxVal' = [maxVal EXCEPT ![a] = m.val] - /\ Send([type |-> "2b", acc |-> a, - bal |-> m.bal, val |-> m.val]) - -(***************************************************************************) -(* In an implementation, there will be learner processes that learn from *) -(* the phase 2b messages if a value has been chosen. The learners are *) -(* omitted from this abstract specification of the algorithm. *) -(***************************************************************************) - -(***************************************************************************) -(* Below are defined the next-state action and the complete spec. *) -(***************************************************************************) -Next == \/ \E b \in Ballot : \/ Phase1a(b) - \/ \E v \in Value : Phase2a(b, v) - \/ \E a \in Acceptor : Phase1b(a) \/ Phase2b(a) - -Spec == Init /\ [][Next]_vars ----------------------------------------------------------------------------- -(***************************************************************************) -(* We now define the refinement mapping under which this algorithm *) -(* implements the specification in module Voting. *) -(***************************************************************************) - -(***************************************************************************) -(* As we observed, votes are registered by sending phase 2b messages. So *) -(* the array `votes' describing the votes cast by the acceptors is defined *) -(* as follows. *) -(***************************************************************************) -votes == [a \in Acceptor |-> - {<<m.bal, m.val>> : m \in {mm \in msgs: /\ mm.type = "2b" - /\ mm.acc = a }}] -(***************************************************************************) -(* We now instantiate module Voting, substituting the constants Value, *) -(* Acceptor, and Quorum declared in this module for the corresponding *) -(* constants of that module Voting, and substituting the variable maxBal *) -(* and the defined state function `votes' for the correspondingly-named *) -(* variables of module Voting. *) -(***************************************************************************) -V == INSTANCE Voting - -THEOREM Spec => V!Spec ------------------------------------------------------------------------------ -(***************************************************************************) -(* Here is a first attempt at an inductive invariant used to prove this *) -(* theorem. *) -(***************************************************************************) -Inv == /\ TypeOK - /\ \A a \in Acceptor : IF maxVBal[a] = -1 - THEN maxVal[a] = None - ELSE <<maxVBal[a], maxVal[a]>> \in votes[a] - /\ \A m \in msgs : - /\ (m.type = "1b") => /\ maxBal[m.acc] \geq m.bal - /\ (m.mbal \geq 0) => - <<m.mbal, m.mval>> \in votes[m.acc] - /\ (m.type = "2a") => /\ \E Q \in Quorum : - V!ShowsSafeAt(Q, m.bal, m.val) - /\ \A mm \in msgs : /\ mm.type = "2a" - /\ mm.bal = m.bal - => mm.val = m.val - /\ V!Inv -============================================================================ diff --git a/examples/Paxos/README b/examples/Paxos/README deleted file mode 100644 index c6022b6f551f966eecb9c6b083663d040ab5f68a..0000000000000000000000000000000000000000 --- a/examples/Paxos/README +++ /dev/null @@ -1,32 +0,0 @@ -This file contains three specifications: - -Consensus - A specification of the consensus problem. - -Voting - A specification of a very abstract consensus algorithm - with a high level (unchecked) TLA+ proof that it implements - the Consensus spec. I believe that this proof has been - expanded and checked with the TLAPS proof system by - Jean-Baptiste Tristan. - -Paxos - A specification of a high-level version of the Paxos - algorithm, a distributed message-passing algorithm that - implements the Voting spec--and hence implements consensus. - It contains a "first attempt" at an inductive invariant - for the proof of implementation. Tristan, who wrote most - of a formal TLA+ proof of implementation, found that, - while the invariant is indeed an invariant, it is not - strong enough to be inductive. (Note: because when he - began the proof TLAPS did not handle records, Tristan - rewrote the algorithm in terms of tuples for his proof.) - -MCConsensus -MCVoting -MCPaxos - Specifications that are used to model-check the corresponding - three specifications above. The Toolbox makes it unnecessary - for the user to write such specs, essentially producing them - itself from the models defined by the user. - \ No newline at end of file diff --git a/examples/Paxos/Voting.tla b/examples/Paxos/Voting.tla deleted file mode 100644 index 5caddd873c2841abbd88cd1bf0b5433bace387c6..0000000000000000000000000000000000000000 --- a/examples/Paxos/Voting.tla +++ /dev/null @@ -1,200 +0,0 @@ -------------------------------- MODULE Voting ------------------------------- -(***************************************************************************) -(* This is a high-level algorithm in which a set of processes *) -(* cooperatively choose a value. *) -(***************************************************************************) -EXTENDS Integers ------------------------------------------------------------------------------ -CONSTANT Value, \* The set of choosable values. - Acceptor, \* A set of processes that will choose a value. - Quorum \* The set of "quorums", where a quorum" is a - \* "large enough" set of acceptors - -(***************************************************************************) -(* Here are the assumptions we make about quorums. *) -(***************************************************************************) -ASSUME QuorumAssumption == /\ \A Q \in Quorum : Q \subseteq Acceptor - /\ \A Q1, Q2 \in Quorum : Q1 \cap Q2 # {} - -THEOREM QuorumNonEmpty == \A Q \in Quorum : Q # {} ------------------------------------------------------------------------------ -(***************************************************************************) -(* Ballot is a set of "ballot numbers". For simplicity, we let it be the *) -(* set of natural numbers. However, we write Ballot for that set to *) -(* distinguish ballots from natural numbers used for other purposes. *) -(***************************************************************************) -Ballot == Nat ------------------------------------------------------------------------------ -(***************************************************************************) -(* In the algorithm, each acceptor can cast one or more votes, where each *) -(* vote cast by an acceptor has the form <<b, v>> indicating that the *) -(* acceptor has voted for value v in ballot b. A value is chosen if a *) -(* quorum of acceptors have voted for it in the same ballot. *) -(***************************************************************************) - - -(***************************************************************************) -(* The algorithm's variables. *) -(***************************************************************************) -VARIABLE votes, \* votes[a] is the set of votes cast by acceptor a - maxBal \* maxBal[a] is a ballot number. Acceptor a will cast - \* further votes only in ballots numbered \geq maxBal[a] - -(***************************************************************************) -(* The type-correctness invariant. *) -(***************************************************************************) -TypeOK == /\ votes \in [Acceptor -> SUBSET (Ballot \X Value)] - /\ maxBal \in [Acceptor -> Ballot \cup {-1}] ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now make a series of definitions an assert some simple theorems *) -(* about those definitions that lead to the algorithm. *) -(***************************************************************************) -VotedFor(a, b, v) == <<b, v>> \in votes[a] - (*************************************************************************) - (* True iff acceptor a has voted for v in ballot b. *) - (*************************************************************************) - -ChosenAt(b, v) == \E Q \in Quorum : - \A a \in Q : VotedFor(a, b, v) - (*************************************************************************) - (* True iff a quorum of acceptors have all voted for v in ballot b. *) - (*************************************************************************) - -chosen == {v \in Value : \E b \in Ballot : ChosenAt(b, v)} - (*************************************************************************) - (* The set of values that have been chosen. *) - (*************************************************************************) - -DidNotVoteAt(a, b) == \A v \in Value : ~ VotedFor(a, b, v) - -CannotVoteAt(a, b) == /\ maxBal[a] > b - /\ DidNotVoteAt(a, b) - (*************************************************************************) - (* Because acceptor a will not cast any more votes in a ballot numbered *) - (* < maxBal[a], this implies that a has not and will never cast a vote *) - (* in ballot b. *) - (*************************************************************************) - -NoneOtherChoosableAt(b, v) == - \E Q \in Quorum : - \A a \in Q : VotedFor(a, b, v) \/ CannotVoteAt(a, b) - (*************************************************************************) - (* If this is true, then ChosenAt(b, w) is not and can never become true *) - (* for any w # v. *) - (*************************************************************************) - -SafeAt(b, v) == \A c \in 0..(b-1) : NoneOtherChoosableAt(c, v) - (*************************************************************************) - (* If this is true, then no value other than v has been or can ever be *) - (* chosen in any ballot numbered less than b. *) - (*************************************************************************) ------------------------------------------------------------------------------ -THEOREM AllSafeAtZero == \A v \in Value : SafeAt(0, v) ------------------------------------------------------------------------------ -THEOREM ChoosableThm == - \A b \in Ballot, v \in Value : - ChosenAt(b, v) => NoneOtherChoosableAt(b, v) ------------------------------------------------------------------------------ -VotesSafe == \A a \in Acceptor, b \in Ballot, v \in Value : - VotedFor(a, b, v) => SafeAt(b, v) - -OneVote == \A a \in Acceptor, b \in Ballot, v, w \in Value : - VotedFor(a, b, v) /\ VotedFor(a, b, w) => (v = w) -OneValuePerBallot == - \A a1, a2 \in Acceptor, b \in Ballot, v1, v2 \in Value : - VotedFor(a1, b, v1) /\ VotedFor(a2, b, v2) => (v1 = v2) ------------------------------------------------------------------------------ -THEOREM OneValuePerBallot => OneVote ------------------------------------------------------------------------------ -THEOREM VotesSafeImpliesConsistency == - /\ TypeOK - /\ VotesSafe - /\ OneVote - => \/ chosen = {} - \/ \E v \in Value : chosen = {v} ------------------------------------------------------------------------------ -ShowsSafeAt(Q, b, v) == - /\ \A a \in Q : maxBal[a] \geq b - /\ \E c \in -1..(b-1) : - /\ (c # -1) => \E a \in Q : VotedFor(a, c, v) - /\ \A d \in (c+1)..(b-1), a \in Q : DidNotVoteAt(a, d) ------------------------------------------------------------------------------ -THEOREM ShowsSafety == - TypeOK /\ VotesSafe /\ OneValuePerBallot => - \A Q \in Quorum, b \in Ballot, v \in Value : - ShowsSafeAt(Q, b, v) => SafeAt(b, v) - ------------------------------------------------------------------------------ -(***************************************************************************) -(* We now write the specification. The initial condition is *) -(* straightforward. *) -(***************************************************************************) -Init == /\ votes = [a \in Acceptor |-> {}] - /\ maxBal = [a \in Acceptor |-> -1] - - -(***************************************************************************) -(* Next are the actions that make up the next-state action. *) -(* *) -(* An acceptor a is allowed to increase maxBal[a] to a ballot number b at *) -(* any time. *) -(***************************************************************************) -IncreaseMaxBal(a, b) == - /\ b > maxBal[a] - /\ maxBal' = [maxBal EXCEPT ![a] = b] - /\ UNCHANGED votes - -(***************************************************************************) -(* Next is the action in which acceptor a votes for v in ballot b. The *) -(* first four conjuncts re enabling conditions. The first maintains the *) -(* requirement that the acceptor cannot cast a vote in a ballot less than *) -(* maxBal[a]. The next two conjuncts maintain the invariance of *) -(* OneValuePerBallot. The fourth conjunct maintains the invariance of *) -(* VotesSafe. *) -(***************************************************************************) -VoteFor(a, b, v) == - /\ maxBal[a] \leq b - /\ \A vt \in votes[a] : vt[1] # b - /\ \A c \in Acceptor \ {a} : - \A vt \in votes[c] : (vt[1] = b) => (vt[2] = v) - /\ \E Q \in Quorum : ShowsSafeAt(Q, b, v) - /\ votes' = [votes EXCEPT ![a] = @ \cup {<<b, v>>}] - /\ maxBal' = [maxBal EXCEPT ![a] = b] - - -(***************************************************************************) -(* The next-state action and the invariant. *) -(***************************************************************************) -Next == \E a \in Acceptor, b \in Ballot : - \/ IncreaseMaxBal(a, b) - \/ \E v \in Value : VoteFor(a, b, v) - -Spec == Init /\ [][Next]_<<votes, maxBal>> - -Inv == TypeOK /\ VotesSafe /\ OneValuePerBallot ------------------------------------------------------------------------------ -THEOREM Invariance == Spec => []Inv ------------------------------------------------------------------------------ -(***************************************************************************) -(* The following statement instantiates module Consensus with the constant *) -(* Value of this module substituted for the constant Value of module *) -(* Consensus, and the state function `chosen' defined in this module *) -(* substituted for the variable `chosen' of module Value. More precisely, *) -(* for each defined identifier id of module Value, this statement defines *) -(* C!id to equal the value of id under these substitutions. *) -(***************************************************************************) -C == INSTANCE Consensus - -THEOREM Spec => C!Spec -<1>1. Inv /\ Init => C!Init -<1>2. Inv /\ [Next]_<<votes, maxBal>> => [C!Next]_chosen -<1>3. QED - <2>1. []Inv /\ [][Next]_<<votes, maxBal>> => [][C!Next]_chosen - BY <1>2 \* and temporal reasoning - <2>2. []Inv /\ Spec => C!Spec - BY <2>1, <1>1 - <2>3. QED - BY <2>2, Invariance -============================================================================= - diff --git a/examples/Prisoners/MCPrisoners.tla b/examples/Prisoners/MCPrisoners.tla deleted file mode 100644 index dd3c1fc28f8dce9ab96b3af506cdd95949f6d963..0000000000000000000000000000000000000000 --- a/examples/Prisoners/MCPrisoners.tla +++ /dev/null @@ -1,27 +0,0 @@ ------------------------------ MODULE MCPrisoners ---------------------------- -(***************************************************************************) -(* This module checks that the invariant CountInvariant of module *) -(* Prisoners is actually an inductive invariant of specification Spec. *) -(* More precisely, its conjunction with TypeOK is an inductive invariant *) -(* of the next-state action Next, meaning that it satisfies *) -(* *) -(* (TypeOK /\ CountInvariant) /\ Next => (TypeOK /\ CountInvariant)' *) -(* *) -(* Because Init implies TypeOK, it's easy to see that this implies that *) -(* TypeOK /\ CountInvariant is also an invariant of Spec. *) -(***************************************************************************) -EXTENDS Prisoners - -InductiveInvariant == TypeOK /\ CountInvariant - -InvTestSpec == InductiveInvariant /\ [][Next]_vars - (*************************************************************************) - (* InductiveInvariant is an invariant of this specification iff it is an *) - (* inductive invariant of Next. *) - (* *) - (* Specification Spec is unusual because the number of states satisfying *) - (* the type invariant is not much greater than the number of reachable *) - (* states, so TLC can compute all reachable states for InvTestSpec *) - (* almost as quickly as it can for Spec. *) - (*************************************************************************) -============================================================================= diff --git a/examples/Prisoners/Prisoners.cfg b/examples/Prisoners/Prisoners.cfg deleted file mode 100644 index c2b42077a095f0df03700495fd9ce5b9db973117..0000000000000000000000000000000000000000 --- a/examples/Prisoners/Prisoners.cfg +++ /dev/null @@ -1,5 +0,0 @@ -CONSTANT Prisoner = {p1, p2, p3, p4} - Counter = p1 -SPECIFICATION Spec -INVARIANT TypeOK CountInvariant -PROPERTIES Safety Liveness diff --git a/examples/Prisoners/Prisoners.tla b/examples/Prisoners/Prisoners.tla deleted file mode 100644 index d40da79b57b05e0ede7f9ad757c63174b34a1633..0000000000000000000000000000000000000000 --- a/examples/Prisoners/Prisoners.tla +++ /dev/null @@ -1,206 +0,0 @@ ------------------------------- MODULE Prisoners ----------------------------- -(***************************************************************************) -(* This module specifies the solution to the following puzzle, given on *) -(* the Car Guys NPR radio show: *) -(* *) -(* The warden of a prison gives his prisoners the following problem. *) -(* There is a room in the prison with two switches, labeled A and B. *) -(* Each switch can be either up or down. Every so often, the warden *) -(* will select a prisoner at random and take him into the room, where *) -(* he must flip (change the position of) exactly one of the switches. *) -(* The only guarantee he makes is that every prisoner will eventually *) -(* be brought into the room multiple times. (More precisely, there *) -(* will never be a time after which some prisoner is never again *) -(* brought into the room.) *) -(* *) -(* At any time, any prisoner may declare that all the prisoners have *) -(* been in the room at least once. If that prisoner is right, then *) -(* all the prisoners go free. If he is wrong, all the prisoners are *) -(* immediately executed. *) -(* *) -(* The prisoners are allowed to decide upon a strategy, after which *) -(* they will not be allowed to communicate with one another. And, of *) -(* course, they cannot see the room or who is being brought into it. *) -(* What do they do? *) -(* *) -(* The solution presented by the Car Guys is specified below. *) -(***************************************************************************) -EXTENDS Naturals, FiniteSets - -CONSTANTS - Prisoner, - (***********************************************************************) - (* The set of all prisoners. *) - (***********************************************************************) - - Counter - (***********************************************************************) - (* This is an arbitrarily chosen prisoner, who will do the necessary *) - (* counting. *) - (***********************************************************************) - -ASSUME - (*************************************************************************) - (* We assume that the counter is a prisoner. We also assume that there *) - (* is more than one prisoner. (The problem is trivial if there is a *) - (* single prisoner.) *) - (*************************************************************************) - /\ Counter \in Prisoner - /\ Cardinality(Prisoner) > 1 - -OtherPrisoner == Prisoner \ {Counter} - (*************************************************************************) - (* The set of all prisoners other than the counter. *) - (*************************************************************************) - -VARIABLES - switchAUp, switchBUp, - (***********************************************************************) - (* The states of the two switches, represented by boolean-valued *) - (* variables. *) - (***********************************************************************) - - timesSwitched, - (***********************************************************************) - (* For ever prisoner except the counter, timesSwitched[p] is the *) - (* number of times prisoner p has moved switch A up. It is initially *) - (* 0 and will equal at most 2. *) - (***********************************************************************) - - count - (***********************************************************************) - (* The number of times the Counter has switched switch A down. *) - (***********************************************************************) - -vars == <<switchAUp, switchBUp, timesSwitched, count>> - (*************************************************************************) - (* The tuple of all variables. *) - (*************************************************************************) ------------------------------------------------------------------------------ -(***************************************************************************) -(* We first define three state predicates. *) -(***************************************************************************) -TypeOK == - (*************************************************************************) - (* The type-correctness invariant. This is not actually part of the *) - (* specification. It is added to help the reader understand the *) - (* specification and also because letting TLC (the model checker) check *) - (* that it is an invariant is a good way to debug the specification. *) - (* *) - (* Note the bound on the value of count. *) - (*************************************************************************) - /\ switchAUp \in BOOLEAN - /\ switchBUp \in BOOLEAN - /\ timesSwitched \in [OtherPrisoner -> 0..2] - /\ count \in 0 .. (2 * Cardinality(Prisoner) - 1) - -Init == - (*************************************************************************) - (* The initial predicate. *) - (*************************************************************************) - /\ switchAUp \in BOOLEAN - /\ switchBUp \in BOOLEAN - /\ timesSwitched = [i \in OtherPrisoner |-> 0] - /\ count = 0 - -Done == - (*************************************************************************) - (* This is the condition that tells the counter that every other *) - (* prisoner has been in the room at least once. (He will trivially know *) - (* that he's already been in the room when this condition is true.) *) - (*************************************************************************) - count = 2 * (Cardinality(Prisoner) - 1) ------------------------------------------------------------------------------ -(***************************************************************************) -(* Next come the actions performed by each prisoner when he (or she) is *) -(* brought into the room with the switches. *) -(***************************************************************************) -NonCounterStep(i) == - (*************************************************************************) - (* A prisoner other than the counter moves switch A up if it is down and *) - (* if (s)he has not already moved it up two times. Otherwise, (s)he *) - (* flips switch B. *) - (*************************************************************************) - /\ IF (~switchAUp) /\ (timesSwitched[i] < 2) - THEN /\ switchAUp' = TRUE - /\ timesSwitched' = [timesSwitched EXCEPT ![i] = @+1] - /\ UNCHANGED switchBUp - ELSE /\ switchBUp' = ~switchBUp - /\ UNCHANGED <<switchAUp, timesSwitched>> - /\ UNCHANGED count - -CounterStep == - (*************************************************************************) - (* If switch A is up, the counter moves it down and increments his (or *) - (* her) count. Otherwise, (s)he flips switch B. *) - (*************************************************************************) - /\ IF switchAUp - THEN /\ switchAUp' = FALSE - /\ UNCHANGED switchBUp - /\ count' = count + 1 - ELSE /\ switchBUp' = ~switchBUp - /\ UNCHANGED <<switchAUp, count>> - /\ UNCHANGED timesSwitched - -Next == - (*************************************************************************) - (* The next-state relation *) - (*************************************************************************) - \/ CounterStep - \/ \E i \in OtherPrisoner : NonCounterStep(i) - -Fairness == - (*************************************************************************) - (* This asserts that every prisoner is brought into the room infinitely *) - (* often. *) - (*************************************************************************) - /\ WF_vars(CounterStep) - /\ \A i \in OtherPrisoner : WF_vars(NonCounterStep(i)) - -Spec == Init /\ [][Next]_vars /\ Fairness ------------------------------------------------------------------------------ -Safety == - (*************************************************************************) - (* This formula asserts that safety condition: that Done true implies *) - (* that every prisoner other than the counter has flipped switch A at *) - (* least once--and hence has been in the room at least once. Since the *) - (* counter increments the count only when in the room, and Done implies *) - (* count > 0, it also implies that the counter has been in the room. *) - (*************************************************************************) - [](Done => (\A i \in Prisoner \ {Counter} : timesSwitched[i] > 0)) - -Liveness == <>Done - (*************************************************************************) - (* This asserts that Done is eventually true, so the prisoners are *) - (* eventually released. *) - (*************************************************************************) - -THEOREM Spec => Safety /\ Liveness - (*************************************************************************) - (* This theorem asserts that the specification satisfies properties *) - (* Safety and Liveness. TLC verifies this in a few seconds for the case *) - (* of a half dozen prisoners. It also quickly provides a counterexample *) - (* if Done is changed to assert a smaller value of count. *) - (*************************************************************************) - -CountInvariant == - (*************************************************************************) - (* This is an invariant of Spec. From its invariance, one can easily *) - (* prove that Spec satisfies its safety property. *) - (*************************************************************************) - LET totalSwitched == - (*******************************************************************) - (* A recursive definition of the sum, over all p in OtherPrisoner, *) - (* of timesSwitched[p]. *) - (*******************************************************************) - LET sum[S \in SUBSET OtherPrisoner] == - IF S = {} THEN 0 - ELSE LET p == CHOOSE pr \in S : TRUE - IN timesSwitched[p] + sum[S \ {p}] - IN sum[OtherPrisoner] - oneIfUp == IF switchAUp THEN 1 ELSE 0 - (*******************************************************************) - (* Equals 1 if switch A is up, 0 otherwise. *) - (*******************************************************************) - IN count \in {totalSwitched - oneIfUp, totalSwitched - oneIfUp + 1} -============================================================================= diff --git a/examples/README b/examples/README index 80190401742be86ccac11ef6411e5c7ef2ac0692..a123e42b5f553caa6b8de6bb34d9f342a10b1ede 100644 --- a/examples/README +++ b/examples/README @@ -1,59 +1,2 @@ -This is a directory of examples, containing the following -subdirectories. - - -allocator - Specification of a resource allocator, written by Stephan - Merz. - -CarTalkPuzzle - A TLA+ specification of the solution to a nice puzzle. - -DieHard - A very elementary example based on a puzzle from a movie. - It provides a good first introduction to TLA+. - -dijkstra-mutex - A PlusCal version of the first published mutual exclusion - algorithm, written by Edsger Dijkstra. - -N-Queens - TLA+ and PlusCal descriptions of a solution to the N queens - problem. Written by Stephan Merz. - -Paxos - A high-level specification of the Paxos consensus algorithm, - consisting of a specification of consensus, a very high - level spec of the algorithm (with no messages) that - implements consensus and is implemented by the Paxos - algorithm. - -Prisoners - A simple specification that solves a puzzle that was - presented on an American radio program. The solution - is rather subtle, and hence it's not so easy to understand - why the solution is correct. - -SpecifyingSystems - Examples to accompany the book Specifying Systems. - -Stones - Another specification that solves the same proble as - CarTalkPuzzle. - -TwoPhase - A specification of a very simple hardware protocol and of - the problem it solves. This is a nice example of the use - of instantiation to describe a refinement mapping, and - of the use of constant operator parameters to describe - unspecified actions. There is also a TLA+ proof of - correctness that has been checked by the TLAPS proof system. - -TransitiveClosure - Someone once posted on TLAPlus.net a question asking how the - transitive closure of a relation can be defined in TLA+. - This answers the question by giving several equivalent - definitions. Reading them might help you when you have - to define some mathematical operation that requires - a recursive definition. - \ No newline at end of file +All examples have been moved into a dedicated "Examples" repository. At the time of writing, +this repository is located at https://github.com/tlaplus/Examples. diff --git a/examples/SpecifyingSystems/AdvancedExamples/BNFGrammars.tla b/examples/SpecifyingSystems/AdvancedExamples/BNFGrammars.tla deleted file mode 100644 index 626942a76f43be3bc328221a1029e9e1d96dce0c..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AdvancedExamples/BNFGrammars.tla +++ /dev/null @@ -1,31 +0,0 @@ ----------------------------- MODULE BNFGrammars ----------------------------- -LOCAL INSTANCE Naturals -LOCAL INSTANCE Sequences ------------------------------------------------------------------------------ -OneOf(s) == {<<s[i]>> : i \in DOMAIN s} -tok(s) == {<<s>>} -Tok(S) == {<<s>> : s \in S} ------------------------------------------------------------------------------ -Nil == {<< >>} - -L & M == {s \o t : s \in L, t \in M} - -L | M == L \cup M - -L^+ == - LET LL[n \in Nat] == IF n = 0 THEN L - ELSE LL[n-1] | (LL[n-1] & L) - - IN UNION {LL[n] : n \in Nat} - -L^* == Nil | L^+ ------------------------------------------------------------------------------ -L ::= M == L = M - -Grammar == [STRING -> SUBSET Seq(STRING)] - -LeastGrammar(P(_)) == - CHOOSE G \in Grammar : /\ P(G) - /\ \A H \in Grammar : - P(H) => \A s \in STRING : G[s] \subseteq H[s] -============================================================================= \ No newline at end of file diff --git a/examples/SpecifyingSystems/AdvancedExamples/DifferentialEquations.tla b/examples/SpecifyingSystems/AdvancedExamples/DifferentialEquations.tla deleted file mode 100644 index b66b54c761023a6c31aa403e6ae5c096ffc8e732..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AdvancedExamples/DifferentialEquations.tla +++ /dev/null @@ -1,36 +0,0 @@ ------------------------ MODULE DifferentialEquations ------------------------ -LOCAL INSTANCE Reals -LOCAL INSTANCE Sequences -LOCAL PosReal == {r \in Real : r > 0} -LOCAL OpenInterval(a, b) == {s \in Real : a < s /\ s < b} -LOCAL Nbhd(r,e) == OpenInterval(r-e, r+e) -LOCAL IsFirstDeriv(df, f) == - /\ df \in [DOMAIN f -> Real] - /\ \A r \in DOMAIN f : - \A e \in PosReal : - \E d \in PosReal : - \A s \in Nbhd(r,d) \ {r} : - (f[s] - f[r])/(s - r) \in Nbhd(df[r], e) - -LOCAL IsDeriv(n, df, f) == - LET IsD[k \in 0..n, g \in [DOMAIN f -> Real]] == - IF k = 0 - THEN g = f - ELSE \E gg \in [DOMAIN f -> Real] : /\ IsFirstDeriv(g, gg) - /\ IsD[k-1, gg] - IN IsD[n, df] - -Integrate(D, a, b, InitVals) == - LET n == Len(InitVals) - gg == CHOOSE g : - \E e \in PosReal : - /\ g \in [0..n -> [OpenInterval(a-e, b+e) -> Real]] - /\ \A i \in 1..n : /\ IsDeriv(i, g[i], g[0]) - /\ g[i-1][a] = InitVals[i] - /\ \A r \in OpenInterval(a-e, b+e) : - D[ <<r>> \o [i \in 1..(n+1) |-> g[i-1][r]] ] = 0 - IN [i \in 1..n |-> gg[i-1][b]] -============================================================================= - - - diff --git a/examples/SpecifyingSystems/AdvancedExamples/Graphs.tla b/examples/SpecifyingSystems/AdvancedExamples/Graphs.tla deleted file mode 100644 index 88af69c76e08b826b4649d1d4278044603a5fbe1..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AdvancedExamples/Graphs.tla +++ /dev/null @@ -1,34 +0,0 @@ -------------------------------- MODULE Graphs ------------------------------- -LOCAL INSTANCE Naturals -LOCAL INSTANCE Sequences - -IsDirectedGraph(G) == - /\ G = [node |-> G.node, edge |-> G.edge] - /\ G.edge \subseteq (G.node \X G.node) - -DirectedSubgraph(G) == - {H \in [node : SUBSET G.node, edge : SUBSET (G.node \X G.node)] : - IsDirectedGraph(H) /\ H.edge \subseteq G.edge} ------------------------------------------------------------------------------ -IsUndirectedGraph(G) == - /\ IsDirectedGraph(G) - /\ \A e \in G.edge : <<e[2], e[1]>> \in G.edge - -UndirectedSubgraph(G) == {H \in DirectedSubgraph(G) : IsUndirectedGraph(H)} ------------------------------------------------------------------------------ -Path(G) == {p \in Seq(G.node) : - /\ p # << >> - /\ \A i \in 1..(Len(p)-1) : <<p[i], p[i+1]>> \in G.edge} - -AreConnectedIn(m, n, G) == - \E p \in Path(G) : (p[1] = m) /\ (p[Len(p)] = n) - -IsStronglyConnected(G) == - \A m, n \in G.node : AreConnectedIn(m, n, G) ------------------------------------------------------------------------------ -IsTreeWithRoot(G, r) == - /\ IsDirectedGraph(G) - /\ \A e \in G.edge : /\ e[1] # r - /\ \A f \in G.edge : (e[1] = f[1]) => (e = f) - /\ \A n \in G.node : AreConnectedIn(n, r, G) -============================================================================= diff --git a/examples/SpecifyingSystems/AdvancedExamples/InnerSequential.tla b/examples/SpecifyingSystems/AdvancedExamples/InnerSequential.tla deleted file mode 100644 index 827e1f909b19e763324c5a1aa7a7c3c3f649da4d..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AdvancedExamples/InnerSequential.tla +++ /dev/null @@ -1,75 +0,0 @@ ------------------------- MODULE InnerSequential ----------------------------- -EXTENDS RegisterInterface, Naturals, Sequences, FiniteSets -VARIABLE opQ, mem ------------------------------------------------------------------------------ -Done == CHOOSE v : v \notin Reg ------------------------------------------------------------------------------ -DataInvariant == - /\ RegFileTypeInvariant - /\ opQ \in [Proc -> Seq([req : Request, reg : Reg \cup {Done}])] - /\ mem \in [Adr -> Val] - /\ \A p \in Proc : \A r \in Reg : - Cardinality ({i \in DOMAIN opQ[p] : opQ[p][i].reg = r}) - = IF regFile[p][r].op = "Free" THEN 0 ELSE 1 - -Init == /\ regFile \in [Proc -> [Reg -> FreeRegValue]] - /\ opQ = [p \in Proc |-> << >>] - /\ mem \in [Adr -> Val] ------------------------------------------------------------------------------ -IssueRequest(proc, req, reg) == - /\ regFile[proc][reg].op = "Free" - /\ regFile' = [regFile EXCEPT ![proc][reg] = req] - /\ opQ' = [opQ EXCEPT ![proc] = Append(@, [req |-> req, reg |-> reg])] - /\ UNCHANGED mem - -RespondToRd(proc, reg) == - /\ regFile[proc][reg].op = "Rd" - /\ \E val \in Val : - /\ regFile' = [regFile EXCEPT ![proc][reg].val = val, - ![proc][reg].op = "Free"] - /\ opQ' = LET idx == CHOOSE i \in DOMAIN opQ[proc] : - opQ[proc][i].reg = reg - IN [opQ EXCEPT ![proc][idx].req.val = val, - ![proc][idx].reg = Done ] - /\ UNCHANGED mem - -RespondToWr(proc, reg) == - /\ regFile[proc][reg].op = "Wr" - /\ regFile' = [regFile EXCEPT ![proc][reg].op = "Free"] - /\ LET idx == CHOOSE i \in DOMAIN opQ[proc] : opQ[proc][i].reg = reg - IN opQ' = [opQ EXCEPT ![proc][idx].reg = Done] - /\ UNCHANGED mem - -RemoveOp(proc) == - /\ opQ[proc] # << >> - /\ Head(opQ[proc]).reg = Done - /\ mem' = IF Head(opQ[proc]).req.op = "Rd" - THEN mem - ELSE [mem EXCEPT ![Head(opQ[proc]).req.adr] = - Head(opQ[proc]).req.val] - /\ opQ' = [opQ EXCEPT ![proc] = Tail(@)] - /\ UNCHANGED regFile - -Internal(proc) == - /\ RemoveOp(proc) - /\ (Head(opQ[proc]).req.op = "Rd") => - (mem[Head(opQ[proc]).req.adr] = Head(opQ[proc]).req.val) - -Next == \E proc \in Proc: - \/ \E reg \in Reg : - \/ \E req \in Request : IssueRequest(proc, req, reg) - \/ RespondToRd(proc, reg) - \/ RespondToWr(proc, reg) - \/ Internal(proc) ------------------------------------------------------------------------------ -Spec == - /\ Init - /\ [][Next]_<<regFile, opQ, mem>> - /\ \A proc \in Proc, reg \in Reg : - WF_<<regFile, opQ, mem>>(RespondToRd(proc, reg) - \/ RespondToWr(proc, reg)) - /\ \A proc \in Proc : WF_<<regFile, opQ, mem>>(RemoveOp(proc)) - ------------------------------------------------------------------------------ -THEOREM Spec => []DataInvariant -============================================================================= diff --git a/examples/SpecifyingSystems/AdvancedExamples/InnerSerial.tla b/examples/SpecifyingSystems/AdvancedExamples/InnerSerial.tla deleted file mode 100644 index 4bc24b433eefdce2dddd3b97a5a6c6afa5eb3490..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AdvancedExamples/InnerSerial.tla +++ /dev/null @@ -1,122 +0,0 @@ --------------------------- MODULE InnerSerial ------------------------------- -EXTENDS RegisterInterface, Naturals, Sequences, FiniteSets, TLC -CONSTANT InitMem -VARIABLE opQ, opOrder ------------------------------------------------------------------------------ -opId == UNION { [proc : {p}, idx : DOMAIN opQ[p]] : p \in Proc } -opIdQ(oi) == opQ[oi.proc][oi.idx] - -InitWr == CHOOSE v : v \notin [proc : Proc, idx : Nat] - -Done == CHOOSE v : v \notin Reg - -opVal == [req : Request, reg : Reg] - \cup [req : WrRequest, reg : {Done}] - \cup [req : RdRequest, reg : {Done}, source : opId \cup {InitWr}] - -goodSource(oi) == - {InitWr} \cup {o \in opId : /\ opIdQ(o).req.op = "Wr" - /\ opIdQ(o).req.adr = opIdQ(oi).req.adr} ------------------------------------------------------------------------------ -DataInvariant == - /\ RegFileTypeInvariant - - /\ opQ \in [Proc -> Seq(opVal)] - - /\ opOrder \subseteq (opId \X opId) - - /\ \A oi \in opId : - /\ ("source" \in DOMAIN opIdQ(oi)) => - /\ opIdQ(oi).source \in goodSource(oi) - /\ opIdQ(oi).req.val = - IF opIdQ(oi).source = InitWr - THEN InitMem[opIdQ(oi).req.adr] - ELSE opIdQ(opIdQ(oi).source).req.val - /\ (opIdQ(oi).reg # Done) => - (opIdQ(oi).req = regFile[oi.proc][opIdQ(oi).reg]) - - /\ \A p \in Proc : \A r \in Reg : - Cardinality ({i \in DOMAIN opQ[p] : opQ[p][i].reg = r}) - = IF regFile[p][r].op = "Free" THEN 0 ELSE 1 - -Init == /\ regFile \in [Proc -> [Reg -> FreeRegValue]] - /\ opQ = [p \in Proc |-> << >>] - /\ opOrder = {} - -totalOpOrder == - {R \in SUBSET (opId \X opId) : - /\ \A oi, oj \in opId : - (oi = oj) \/ (<<oi, oj>> \in R) \/ (<<oj, oi>> \in R) - /\ \A oi, oj, ok \in opId : - (<<oi, oj>> \in R) /\ (<<oj, ok>> \in R) => (<<oi, ok>> \in R) - /\ \A oi \in opId : <<oi, oi>> \notin R } - -Serializable == - \E R \in totalOpOrder : - /\ opOrder \subseteq R - /\ \A oi, oj \in opId : - (oi.proc = oj.proc) /\ (oi.idx < oj.idx) => (<<oi, oj>> \in R) - /\ \A oi \in opId : - ("source" \in DOMAIN opIdQ(oi)) => - ~ ( \E oj \in goodSource(oi) : - /\ <<oj, oi>> \in R - /\ (opIdQ(oi).source # InitWr) => - (<<opIdQ(oi).source, oj>> \in R) ) ------------------------------------------------------------------------------ -UpdateOpOrder == - /\ opOrder' \in SUBSET(opId' \X opId') - /\ opOrder \subseteq opOrder' - /\ Serializable' - -IssueRequest(proc, req, reg) == - /\ regFile[proc][reg].op = "Free" - /\ regFile' = [regFile EXCEPT ![proc][reg] = req] - /\ opQ' = [opQ EXCEPT ![proc] = Append(@, [req |-> req, reg |-> reg])] - /\ UpdateOpOrder - -RespondToWr(proc, reg) == - /\ regFile[proc][reg].op = "Wr" - /\ regFile' = [regFile EXCEPT ![proc][reg].op = "Free"] - /\ LET idx == CHOOSE i \in DOMAIN opQ[proc] : opQ[proc][i].reg = reg - IN opQ' = [opQ EXCEPT ![proc][idx].reg = Done] - /\ UpdateOpOrder - -RespondToRd(proc, reg) == - LET req == regFile[proc][reg] - idx == CHOOSE i \in DOMAIN opQ[proc] : opQ[proc][i].reg = reg - IN /\ req.op = "Rd" - /\ \E src \in goodSource([proc |-> proc, idx |-> idx]) : - LET val == IF src = InitWr THEN InitMem[req.adr] - ELSE opIdQ(src).req.val - IN /\ regFile' = [regFile EXCEPT ![proc][reg].val = val, - ![proc][reg].op = "Free"] - /\ opQ' = [opQ EXCEPT ![proc][idx] = - [req |-> [req EXCEPT !.val = val], - reg |-> Done, - source |-> src ]] - /\ UpdateOpOrder - -Internal == - /\ UNCHANGED <<regFile, opQ>> - /\ UpdateOpOrder - -Next == \/ \E proc \in Proc, reg \in Reg : - \/ \E req \in Request : IssueRequest(proc, req, reg) - \/ RespondToRd(proc, reg) - \/ RespondToWr(proc, reg) - \/ Internal ------------------------------------------------------------------------------ -Spec == - /\ Init - /\ [][Next]_<<regFile, opQ, opOrder>> - /\ \A proc \in Proc, reg \in Reg : - WF_<<regFile, opQ, opOrder>>(RespondToWr(proc, reg) - \/ RespondToRd(proc, reg) ) - /\ \A oi, oj \in [proc : Proc, idx : Nat] : - (oi # oj) => - WF_<<regFile, opQ, opOrder>>( - /\ (oi \in opId) /\ (oj \in opId) - /\ Internal - /\ (<<oi, oj>> \in opOrder') \/ (<<oj, oi>> \in opOrder')) - -============================================================================= diff --git a/examples/SpecifyingSystems/AdvancedExamples/MCInnerSequential.cfg b/examples/SpecifyingSystems/AdvancedExamples/MCInnerSequential.cfg deleted file mode 100644 index e148854f4d1992d77133c3094d43dc0914456e9b..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AdvancedExamples/MCInnerSequential.cfg +++ /dev/null @@ -1,32 +0,0 @@ -CONSTANTS - (*************************************************************************) - (* We tell TLC what values to use for the constant parameters Reg, Adr, *) - (* Val, Proc, and InitMem of the spec. *) - (*************************************************************************) - Reg = {r1} - Adr = {a1} - Val = {v1, v2} - Proc = {p1, p2} - - (*************************************************************************) - (* We tell TLC to use model values in place of the constant Done, whose *) - (* definition it can't handle. *) - (*************************************************************************) - Done = Done - - (*************************************************************************) - (* We set the value of MaxQLen, used by the constraint. *) - (*************************************************************************) - MaxQLen = 2 - - -SPECIFICATION Spec - -PROPERTY AlwaysResponds - -CONSTRAINT Constraint - -INVARIANT DataInvariant - (*************************************************************************) - (* We have TLC check DataInvariant. *) - (*************************************************************************) diff --git a/examples/SpecifyingSystems/AdvancedExamples/MCInnerSequential.tla b/examples/SpecifyingSystems/AdvancedExamples/MCInnerSequential.tla deleted file mode 100644 index f656ddebe0610c9cca42654b6838da38fae542e0..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AdvancedExamples/MCInnerSequential.tla +++ /dev/null @@ -1,15 +0,0 @@ ---------------------- MODULE MCInnerSequential ----------------------- -EXTENDS InnerSequential - -CONSTANT MaxQLen -Constraint == \A p \in Proc : Len(opQ[p]) \leq MaxQLen - -AlwaysResponds == - (*************************************************************************) - (* A simple liveness property, implied by the fact that every request *) - (* eventually generates a response. *) - (*************************************************************************) - \A p \in Proc, r \in Reg : - (regFile[p][r].op # "Free") ~> (regFile[p][r].op = "Free") -============================================================================= - diff --git a/examples/SpecifyingSystems/AdvancedExamples/MCInnerSerial.cfg b/examples/SpecifyingSystems/AdvancedExamples/MCInnerSerial.cfg deleted file mode 100644 index 3d7c7ccbe798a8b8bae99aeb6d5d6715970d680c..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AdvancedExamples/MCInnerSerial.cfg +++ /dev/null @@ -1,40 +0,0 @@ -CONSTANTS - (*************************************************************************) - (* We tell TLC what values to use for the constant parameters Reg, Adr, *) - (* Val, Proc, and InitMem of the spec. *) - (*************************************************************************) - Reg = {r1} - Adr = {a1} - Val = {v1, v2} - Proc = {p1, p2} - InitMem <- MCInitMem - - (*************************************************************************) - (* We tell TLC to use model values in place of the constants InitWr and *) - (* Done, whose definitions it can't handle. *) - (*************************************************************************) - InitWr = InitWr - Done = Done - - (*************************************************************************) - (* We set the value of MaxQLen, used by the constraint. *) - (*************************************************************************) - MaxQLen = 1 - - (*************************************************************************) - (* We tell TLC to substitute MCNat for Nat. *) - (*************************************************************************) - Nat <- MCNat - -SPECIFICATION Spec - -PROPERTY AlwaysResponds - -CONSTRAINT Constraint - -INVARIANT DataInvariant - (*************************************************************************) - (* We have TLC check DataInvariant. *) - (*************************************************************************) - - diff --git a/examples/SpecifyingSystems/AdvancedExamples/MCInnerSerial.cfg.alt b/examples/SpecifyingSystems/AdvancedExamples/MCInnerSerial.cfg.alt deleted file mode 100644 index a8df1f5b721413e0e5da5c40988b9765571053b3..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AdvancedExamples/MCInnerSerial.cfg.alt +++ /dev/null @@ -1,47 +0,0 @@ -CONSTANTS - (*************************************************************************) - (* We tell TLC what values to use for the constant parameters Reg, Adr, *) - (* Val, Proc, and InitMem of the spec. *) - (*************************************************************************) - Reg = {r1} - Adr = {a1} - Val = {v1, v2} - Proc = {p1} - InitMem <- MCInitMem - - (*************************************************************************) - (* We tell TLC to use model values in place of the constants InitWr and *) - (* Done, whose definitions it can't handle. *) - (*************************************************************************) - InitWr = InitWr - Done = Done - MaxQLen = 1 - Nat <- MCNat - -SPECIFICATION Spec - -CONSTRAINT Constraint - -INVARIANT DataInvariant -\* DataInvariant1 -\* DataInvariant2 -\* DataInvariant3 -\* DataInvariant4 -\* DataInvariant5 -\* Serializable - - - - - - - (*************************************************************************) - (* We set the value of MaxQLen, used by the constraint. *) - (*************************************************************************) - - - - (*************************************************************************) - (* We tell TLC to substitute MCNat for Nat. *) - (*************************************************************************) - diff --git a/examples/SpecifyingSystems/AdvancedExamples/MCInnerSerial.tla b/examples/SpecifyingSystems/AdvancedExamples/MCInnerSerial.tla deleted file mode 100644 index a0f91135d6bba117cb9a85066863f2434b68ac8d..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AdvancedExamples/MCInnerSerial.tla +++ /dev/null @@ -1,45 +0,0 @@ ---------------------------- MODULE MCInnerSerial ---------------------------- -(***************************************************************************) -(* This is a module to test the InnerSerial specification. *) -(***************************************************************************) - -EXTENDS InnerSerial \* , TLC - -CONSTANT MaxQLen - (***********************************************************************) - (* To bound the state space, we constrain the length of opQ[p] to be *) - (* at most MaxQLen, for all p. *) - (***********************************************************************) - -MCNat == 0 .. MaxQLen - (*************************************************************************) - (* The liveness condition contains quantification over the set *) - (* *) - (* [proc : Proc, idx : Nat] *) - (* *) - (* However, it suffices that the quantification be over all possible *) - (* elements of opId, and hence for idx at most MaxQLen. We therefore *) - (* have TLC substitute MCNat for Nat. *) - (*************************************************************************) - -MCInitMem == [adr \in Adr |-> CHOOSE v \in Val : TRUE] - (*************************************************************************) - (* We have to tell TLC what value to use for the constant parameter *) - (* InitMem. We let it use MCInitMem, an arbitrary choice. *) - (*************************************************************************) - -Constraint == \A p \in Proc : Len(opQ[p]) \leq MaxQLen - (*************************************************************************) - (* The constraint used to bound the size of the state space. *) - (*************************************************************************) - -AlwaysResponds == - (*************************************************************************) - (* Some simple liveness properties, implied by the fact that every *) - (* request eventually generates a response. *) - (*************************************************************************) - /\ \A p \in Proc, r \in Reg : - (regFile[p][r].op # "Free") ~> (regFile[p][r].op = "Free") - /\ \A oi \in [proc : Proc, idx : Nat] : - (oi \in opId) ~> (opIdQ(oi).reg = Done) -============================================================================= diff --git a/examples/SpecifyingSystems/AdvancedExamples/README b/examples/SpecifyingSystems/AdvancedExamples/README deleted file mode 100644 index bc165cec54738727849354c664e4567f341047cf..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AdvancedExamples/README +++ /dev/null @@ -1,27 +0,0 @@ -This folder contains material to accompany the chapter "Advanced -Examples". It has the following files: - -BNFGrammars.tla -DifferentialEquations.tla -Graphs.tla -InnerSerial.tla -RegisterInterface.tla -SerialMemory.tla - The modules from the book. - -MCInnerSerial.tla -MCInnerSerial.cfg - Files to run TLC on the InnerSerial specification. - -MCInnerSequential.tla -MCInnerSequential.cfg - Files to run TLC on the InnerSequential specification. - - - -Exercises: -1. With the definitions from the Graphs module, under what conditions - is <<p>> an element of Path(G)? - ------- -Last modified on Tue Aug 7 10:16:29 PDT 2001 by lamport diff --git a/examples/SpecifyingSystems/AdvancedExamples/RegisterInterface.tla b/examples/SpecifyingSystems/AdvancedExamples/RegisterInterface.tla deleted file mode 100644 index a5e2654474233ab3c00ac02a5c051419c7d02700..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AdvancedExamples/RegisterInterface.tla +++ /dev/null @@ -1,12 +0,0 @@ ------------------------ MODULE RegisterInterface --------------------------- -CONSTANT Adr, Val, Proc, Reg -VARIABLE regFile ------------------------------------------------------------------------------ -RdRequest == [adr : Adr, val : Val, op : {"Rd"}] -WrRequest == [adr : Adr, val : Val, op : {"Wr"}] -FreeRegValue == [adr : Adr, val : Val, op : {"Free"}] -Request == RdRequest \cup WrRequest -RegValue == Request \cup FreeRegValue - -RegFileTypeInvariant == regFile \in [Proc -> [Reg -> RegValue]] -============================================================================= diff --git a/examples/SpecifyingSystems/AdvancedExamples/SerialMemory.tla b/examples/SpecifyingSystems/AdvancedExamples/SerialMemory.tla deleted file mode 100644 index fe991dbf215b610977af2bede001fbb881221051..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AdvancedExamples/SerialMemory.tla +++ /dev/null @@ -1,8 +0,0 @@ --------------------------- MODULE SerialMemory -------------------------- -EXTENDS RegisterInterface - -Inner(InitMem, opQ, opOrder) == INSTANCE InnerSerial - -Spec == \E InitMem \in [Adr -> Val] : - \EE opQ, opOrder : Inner(InitMem, opQ, opOrder)!Spec -============================================================================= \ No newline at end of file diff --git a/examples/SpecifyingSystems/AdvancedExamples/testout1 b/examples/SpecifyingSystems/AdvancedExamples/testout1 deleted file mode 100644 index dbe123243c45754e8ea0ab0665a869770c95cced..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AdvancedExamples/testout1 +++ /dev/null @@ -1,59 +0,0 @@ -TLC Version 1.57 of Jul 31, 2001 -Model-checking -Finished computing initial states: 4 distinct states generated. -Progress(4): 772 states generated, 160 distinct states found, 79 states left on queue. -Progress(5): 886 states generated, 163 distinct states found, 79 states left on queue. -Progress(5): 1000 states generated, 163 distinct states found, 76 states left on queue. -Progress(5): 1090 states generated, 165 distinct states found, 76 states left on queue. -Progress(5): 1207 states generated, 167 distinct states found, 76 states left on queue. -Progress(5): 1318 states generated, 167 distinct states found, 73 states left on queue. --- Checkpointing of run states/01-08-03-18-14-01 completed. -Progress(5): 1458 states generated, 170 distinct states found, 72 states left on queue. -Progress(5): 1571 states generated, 173 distinct states found, 72 states left on queue. -Progress(5): 1689 states generated, 173 distinct states found, 69 states left on queue. -Progress(5): 1803 states generated, 173 distinct states found, 66 states left on queue. -Progress(5): 1920 states generated, 173 distinct states found, 63 states left on queue. -Progress(5): 2016 states generated, 173 distinct states found, 61 states left on queue. --- Checkpointing of run states/01-08-03-18-14-01 completed. -Progress(5): 2178 states generated, 178 distinct states found, 61 states left on queue. -Progress(5): 2295 states generated, 178 distinct states found, 58 states left on queue. -Progress(5): 2410 states generated, 181 distinct states found, 58 states left on queue. -Progress(5): 2524 states generated, 184 distinct states found, 58 states left on queue. -Progress(5): 2631 states generated, 184 distinct states found, 55 states left on queue. -Progress(5): 2737 states generated, 184 distinct states found, 52 states left on queue. --- Checkpointing of run states/01-08-03-18-14-01 completed. -Progress(5): 2919 states generated, 184 distinct states found, 48 states left on queue. -Progress(5): 3034 states generated, 189 distinct states found, 50 states left on queue. -Progress(5): 3151 states generated, 189 distinct states found, 47 states left on queue. -Progress(5): 3266 states generated, 192 distinct states found, 47 states left on queue. -Progress(5): 3380 states generated, 195 distinct states found, 47 states left on queue. -Progress(5): 3495 states generated, 195 distinct states found, 44 states left on queue. --- Checkpointing of run states/01-08-03-18-14-01 completed. -Progress(5): 3619 states generated, 195 distinct states found, 40 states left on queue. -Progress(5): 3733 states generated, 195 distinct states found, 37 states left on queue. -Progress(5): 3844 states generated, 195 distinct states found, 34 states left on queue. -Progress(5): 3959 states generated, 195 distinct states found, 33 states left on queue. -Progress(5): 4033 states generated, 195 distinct states found, 31 states left on queue. -Progress(5): 4115 states generated, 195 distinct states found, 30 states left on queue. --- Checkpointing of run states/01-08-03-18-14-01 completed. -Progress(5): 4238 states generated, 195 distinct states found, 28 states left on queue. -Progress(5): 4343 states generated, 195 distinct states found, 27 states left on queue. -Progress(5): 4443 states generated, 195 distinct states found, 25 states left on queue. -Progress(5): 4544 states generated, 195 distinct states found, 24 states left on queue. -Progress(5): 4644 states generated, 195 distinct states found, 22 states left on queue. -Progress(5): 4737 states generated, 195 distinct states found, 21 states left on queue. --- Checkpointing of run states/01-08-03-18-14-01 completed. -Progress(5): 4882 states generated, 195 distinct states found, 18 states left on queue. -Progress(5): 4950 states generated, 195 distinct states found, 18 states left on queue. -Progress(5): 5053 states generated, 195 distinct states found, 16 states left on queue. -Progress(5): 5172 states generated, 195 distinct states found, 15 states left on queue. -Progress(5): 5266 states generated, 195 distinct states found, 13 states left on queue. -Progress(5): 5390 states generated, 195 distinct states found, 11 states left on queue. --- Checkpointing of run states/01-08-03-18-14-01 completed. -Progress(5): 5554 states generated, 195 distinct states found, 9 states left on queue. -Progress(5): 5625 states generated, 195 distinct states found, 8 states left on queue. -Progress(5): 5700 states generated, 195 distinct states found, 7 states left on queue. -Progress(5): 5803 states generated, 195 distinct states found, 5 states left on queue. -Progress(5): 5927 states generated, 195 distinct states found, 3 states left on queue. -Progress(5): 6032 states generated, 195 distinct states found, 2 states left on queue. -14716.946u 9.314s 17:05:41.71 23.9% 0+627k 29+52io 0pf+0w diff --git a/examples/SpecifyingSystems/AdvancedExamples/testout2 b/examples/SpecifyingSystems/AdvancedExamples/testout2 deleted file mode 100644 index da944289849a59dc042b3f03c4fc986b0d59881f..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AdvancedExamples/testout2 +++ /dev/null @@ -1,267 +0,0 @@ -TLC Version 1.57 of Jul 31, 2001 -Model-checking -Finished computing initial states: 4 distinct states generated. -Progress(4): 478 states generated, 134 distinct states found, 81 states left on queue. -Progress(4): 788 states generated, 160 distinct states found, 79 states left on queue. -Progress(4): 820 states generated, 160 distinct states found, 79 states left on queue. -Progress(5): 848 states generated, 163 distinct states found, 81 states left on queue. -Progress(5): 868 states generated, 163 distinct states found, 80 states left on queue. -Progress(5): 880 states generated, 163 distinct states found, 80 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 956 states generated, 163 distinct states found, 78 states left on queue. -Progress(5): 974 states generated, 163 distinct states found, 78 states left on queue. -Progress(5): 990 states generated, 163 distinct states found, 77 states left on queue. -Progress(5): 1000 states generated, 163 distinct states found, 76 states left on queue. -Progress(5): 1024 states generated, 163 distinct states found, 76 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 1052 states generated, 165 distinct states found, 77 states left on queue. -Progress(5): 1070 states generated, 165 distinct states found, 77 states left on queue. -Progress(5): 1090 states generated, 165 distinct states found, 76 states left on queue. -Progress(5): 1102 states generated, 165 distinct states found, 76 states left on queue. -Progress(5): 1130 states generated, 167 distinct states found, 77 states left on queue. -Progress(5): 1148 states generated, 167 distinct states found, 77 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 1226 states generated, 167 distinct states found, 75 states left on queue. -Progress(5): 1239 states generated, 167 distinct states found, 75 states left on queue. -Progress(5): 1257 states generated, 167 distinct states found, 74 states left on queue. -Progress(5): 1270 states generated, 167 distinct states found, 73 states left on queue. -Progress(5): 1302 states generated, 167 distinct states found, 73 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 1340 states generated, 170 distinct states found, 75 states left on queue. -Progress(5): 1358 states generated, 170 distinct states found, 75 states left on queue. -Progress(5): 1374 states generated, 170 distinct states found, 74 states left on queue. -Progress(5): 1389 states generated, 170 distinct states found, 73 states left on queue. -Progress(5): 1421 states generated, 170 distinct states found, 73 states left on queue. -Progress(5): 1437 states generated, 170 distinct states found, 73 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 1475 states generated, 170 distinct states found, 71 states left on queue. -Progress(5): 1494 states generated, 170 distinct states found, 71 states left on queue. -Progress(5): 1517 states generated, 170 distinct states found, 70 states left on queue. -Progress(5): 1533 states generated, 170 distinct states found, 70 states left on queue. -Progress(5): 1571 states generated, 173 distinct states found, 72 states left on queue. -Progress(5): 1589 states generated, 173 distinct states found, 72 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 1615 states generated, 173 distinct states found, 70 states left on queue. -Progress(5): 1636 states generated, 173 distinct states found, 70 states left on queue. -Progress(5): 1668 states generated, 173 distinct states found, 70 states left on queue. -Progress(5): 1693 states generated, 173 distinct states found, 69 states left on queue. -Progress(5): 1707 states generated, 173 distinct states found, 68 states left on queue. -Progress(5): 1725 states generated, 173 distinct states found, 68 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 1802 states generated, 173 distinct states found, 66 states left on queue. -Progress(5): 1815 states generated, 173 distinct states found, 66 states left on queue. -Progress(5): 1833 states generated, 173 distinct states found, 65 states left on queue. -Progress(5): 1851 states generated, 173 distinct states found, 64 states left on queue. -Progress(5): 1883 states generated, 173 distinct states found, 64 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 1918 states generated, 173 distinct states found, 63 states left on queue. -Progress(5): 1932 states generated, 173 distinct states found, 63 states left on queue. -Progress(5): 1950 states generated, 173 distinct states found, 62 states left on queue. -Progress(5): 1968 states generated, 173 distinct states found, 61 states left on queue. -Progress(5): 2000 states generated, 173 distinct states found, 61 states left on queue. -Progress(5): 2016 states generated, 173 distinct states found, 61 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 2054 states generated, 173 distinct states found, 59 states left on queue. -Progress(5): 2073 states generated, 173 distinct states found, 59 states left on queue. -Progress(5): 2096 states generated, 173 distinct states found, 58 states left on queue. -Progress(5): 2112 states generated, 173 distinct states found, 58 states left on queue. -Progress(5): 2152 states generated, 178 distinct states found, 62 states left on queue. -Progress(5): 2170 states generated, 178 distinct states found, 62 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 2197 states generated, 178 distinct states found, 60 states left on queue. -Progress(5): 2213 states generated, 178 distinct states found, 60 states left on queue. -Progress(5): 2245 states generated, 178 distinct states found, 60 states left on queue. -Progress(5): 2275 states generated, 178 distinct states found, 59 states left on queue. -Progress(5): 2295 states generated, 178 distinct states found, 58 states left on queue. -Progress(5): 2307 states generated, 178 distinct states found, 58 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 2384 states generated, 181 distinct states found, 59 states left on queue. -Progress(5): 2402 states generated, 181 distinct states found, 59 states left on queue. -Progress(5): 2418 states generated, 181 distinct states found, 58 states left on queue. -Progress(5): 2428 states generated, 181 distinct states found, 57 states left on queue. -Progress(5): 2460 states generated, 181 distinct states found, 57 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 2498 states generated, 184 distinct states found, 59 states left on queue. -Progress(5): 2516 states generated, 184 distinct states found, 59 states left on queue. -Progress(5): 2532 states generated, 184 distinct states found, 58 states left on queue. -Progress(5): 2545 states generated, 184 distinct states found, 57 states left on queue. -Progress(5): 2577 states generated, 184 distinct states found, 57 states left on queue. -Progress(5): 2593 states generated, 184 distinct states found, 57 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 2630 states generated, 184 distinct states found, 55 states left on queue. -Progress(5): 2649 states generated, 184 distinct states found, 55 states left on queue. -Progress(5): 2670 states generated, 184 distinct states found, 54 states left on queue. -Progress(5): 2682 states generated, 184 distinct states found, 54 states left on queue. -Progress(5): 2709 states generated, 184 distinct states found, 53 states left on queue. -Progress(5): 2727 states generated, 184 distinct states found, 53 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 2804 states generated, 184 distinct states found, 51 states left on queue. -Progress(5): 2817 states generated, 184 distinct states found, 51 states left on queue. -Progress(5): 2835 states generated, 184 distinct states found, 50 states left on queue. -Progress(5): 2851 states generated, 184 distinct states found, 49 states left on queue. -Progress(5): 2883 states generated, 184 distinct states found, 49 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 2918 states generated, 184 distinct states found, 48 states left on queue. -Progress(5): 2931 states generated, 184 distinct states found, 48 states left on queue. -Progress(5): 2949 states generated, 184 distinct states found, 47 states left on queue. -Progress(5): 2962 states generated, 184 distinct states found, 46 states left on queue. -Progress(5): 2994 states generated, 184 distinct states found, 46 states left on queue. -Progress(5): 3010 states generated, 184 distinct states found, 46 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 3060 states generated, 189 distinct states found, 49 states left on queue. -Progress(5): 3072 states generated, 189 distinct states found, 49 states left on queue. -Progress(5): 3095 states generated, 189 distinct states found, 48 states left on queue. -Progress(5): 3111 states generated, 189 distinct states found, 48 states left on queue. -Progress(5): 3151 states generated, 189 distinct states found, 47 states left on queue. -Progress(5): 3169 states generated, 189 distinct states found, 47 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 3196 states generated, 189 distinct states found, 45 states left on queue. -Progress(5): 3212 states generated, 189 distinct states found, 45 states left on queue. -Progress(5): 3244 states generated, 189 distinct states found, 45 states left on queue. -Progress(5): 3272 states generated, 192 distinct states found, 47 states left on queue. -Progress(5): 3292 states generated, 192 distinct states found, 46 states left on queue. -Progress(5): 3304 states generated, 192 distinct states found, 46 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 3380 states generated, 195 distinct states found, 47 states left on queue. -Progress(5): 3398 states generated, 195 distinct states found, 47 states left on queue. -Progress(5): 3414 states generated, 195 distinct states found, 46 states left on queue. -Progress(5): 3427 states generated, 195 distinct states found, 45 states left on queue. -Progress(5): 3459 states generated, 195 distinct states found, 45 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 3494 states generated, 195 distinct states found, 44 states left on queue. -Progress(5): 3507 states generated, 195 distinct states found, 44 states left on queue. -Progress(5): 3525 states generated, 195 distinct states found, 43 states left on queue. -Progress(5): 3540 states generated, 195 distinct states found, 42 states left on queue. -Progress(5): 3564 states generated, 195 distinct states found, 42 states left on queue. -Progress(5): 3576 states generated, 195 distinct states found, 42 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 3616 states generated, 195 distinct states found, 40 states left on queue. -Progress(5): 3635 states generated, 195 distinct states found, 40 states left on queue. -Progress(5): 3667 states generated, 195 distinct states found, 40 states left on queue. -Progress(5): 3691 states generated, 195 distinct states found, 39 states left on queue. -Progress(5): 3705 states generated, 195 distinct states found, 38 states left on queue. -Progress(5): 3723 states generated, 195 distinct states found, 38 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 3800 states generated, 195 distinct states found, 36 states left on queue. -Progress(5): 3813 states generated, 195 distinct states found, 36 states left on queue. -Progress(5): 3831 states generated, 195 distinct states found, 35 states left on queue. -Progress(5): 3844 states generated, 195 distinct states found, 34 states left on queue. -Progress(5): 3876 states generated, 195 distinct states found, 34 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 3959 states generated, 195 distinct states found, 33 states left on queue. -Progress(5): 3975 states generated, 195 distinct states found, 33 states left on queue. -Progress(5): 3987 states generated, 195 distinct states found, 33 states left on queue. -Progress(5): 4000 states generated, 195 distinct states found, 32 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 4033 states generated, 195 distinct states found, 31 states left on queue. -Progress(5): 4045 states generated, 195 distinct states found, 31 states left on queue. -Progress(5): 4069 states generated, 195 distinct states found, 31 states left on queue. -Progress(5): 4081 states generated, 195 distinct states found, 31 states left on queue. -Progress(5): 4097 states generated, 195 distinct states found, 31 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 4115 states generated, 195 distinct states found, 30 states left on queue. -Progress(5): 4133 states generated, 195 distinct states found, 30 states left on queue. -Progress(5): 4147 states generated, 195 distinct states found, 30 states left on queue. -Progress(5): 4156 states generated, 195 distinct states found, 29 states left on queue. -Progress(5): 4180 states generated, 195 distinct states found, 29 states left on queue. -Progress(5): 4192 states generated, 195 distinct states found, 29 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 4238 states generated, 195 distinct states found, 28 states left on queue. -Progress(5): 4256 states generated, 195 distinct states found, 28 states left on queue. -Progress(5): 4270 states generated, 195 distinct states found, 28 states left on queue. -Progress(5): 4279 states generated, 195 distinct states found, 27 states left on queue. -Progress(5): 4311 states generated, 195 distinct states found, 27 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 4402 states generated, 195 distinct states found, 26 states left on queue. -Progress(5): 4420 states generated, 195 distinct states found, 26 states left on queue. -Progress(5): 4434 states generated, 195 distinct states found, 26 states left on queue. -Progress(5): 4447 states generated, 195 distinct states found, 25 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 4480 states generated, 195 distinct states found, 24 states left on queue. -Progress(5): 4496 states generated, 195 distinct states found, 24 states left on queue. -Progress(5): 4528 states generated, 195 distinct states found, 24 states left on queue. -Progress(5): 4544 states generated, 195 distinct states found, 24 states left on queue. -Progress(5): 4576 states generated, 195 distinct states found, 24 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 4603 states generated, 195 distinct states found, 23 states left on queue. -Progress(5): 4621 states generated, 195 distinct states found, 23 states left on queue. -Progress(5): 4635 states generated, 195 distinct states found, 23 states left on queue. -Progress(5): 4648 states generated, 195 distinct states found, 22 states left on queue. -Progress(5): 4660 states generated, 195 distinct states found, 22 states left on queue. -Progress(5): 4676 states generated, 195 distinct states found, 22 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 4804 states generated, 195 distinct states found, 20 states left on queue. -Progress(5): 4820 states generated, 195 distinct states found, 20 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 4841 states generated, 195 distinct states found, 19 states left on queue. -Progress(5): 4853 states generated, 195 distinct states found, 19 states left on queue. -Progress(5): 4869 states generated, 195 distinct states found, 19 states left on queue. -Progress(5): 4882 states generated, 195 distinct states found, 18 states left on queue. -Progress(5): 4898 states generated, 195 distinct states found, 18 states left on queue. -Progress(5): 4906 states generated, 195 distinct states found, 18 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 4964 states generated, 195 distinct states found, 17 states left on queue. -Progress(5): 4976 states generated, 195 distinct states found, 17 states left on queue. -Progress(5): 4992 states generated, 195 distinct states found, 17 states left on queue. -Progress(5): 5005 states generated, 195 distinct states found, 16 states left on queue. -Progress(5): 5037 states generated, 195 distinct states found, 16 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 5136 states generated, 195 distinct states found, 15 states left on queue. -Progress(5): 5154 states generated, 195 distinct states found, 15 states left on queue. -Progress(5): 5168 states generated, 195 distinct states found, 15 states left on queue. -Progress(5): 5181 states generated, 195 distinct states found, 14 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 5218 states generated, 195 distinct states found, 13 states left on queue. -Progress(5): 5234 states generated, 195 distinct states found, 13 states left on queue. -Progress(5): 5266 states generated, 195 distinct states found, 13 states left on queue. -Progress(5): 5282 states generated, 195 distinct states found, 13 states left on queue. -Progress(5): 5314 states generated, 195 distinct states found, 13 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 5349 states generated, 195 distinct states found, 12 states left on queue. -Progress(5): 5367 states generated, 195 distinct states found, 12 states left on queue. -Progress(5): 5381 states generated, 195 distinct states found, 12 states left on queue. -Progress(5): 5394 states generated, 195 distinct states found, 11 states left on queue. -Progress(5): 5406 states generated, 195 distinct states found, 11 states left on queue. -Progress(5): 5424 states generated, 195 distinct states found, 11 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 5554 states generated, 195 distinct states found, 9 states left on queue. -Progress(5): 5570 states generated, 195 distinct states found, 9 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 5591 states generated, 195 distinct states found, 8 states left on queue. -Progress(5): 5603 states generated, 195 distinct states found, 8 states left on queue. -Progress(5): 5619 states generated, 195 distinct states found, 8 states left on queue. -Progress(5): 5632 states generated, 195 distinct states found, 7 states left on queue. -Progress(5): 5648 states generated, 195 distinct states found, 7 states left on queue. -Progress(5): 5656 states generated, 195 distinct states found, 7 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 5714 states generated, 195 distinct states found, 6 states left on queue. -Progress(5): 5726 states generated, 195 distinct states found, 6 states left on queue. -Progress(5): 5742 states generated, 195 distinct states found, 6 states left on queue. -Progress(5): 5755 states generated, 195 distinct states found, 5 states left on queue. -Progress(5): 5787 states generated, 195 distinct states found, 5 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 5886 states generated, 195 distinct states found, 4 states left on queue. -Progress(5): 5904 states generated, 195 distinct states found, 4 states left on queue. -Progress(5): 5918 states generated, 195 distinct states found, 4 states left on queue. -Progress(5): 5931 states generated, 195 distinct states found, 3 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 5968 states generated, 195 distinct states found, 2 states left on queue. -Progress(5): 5984 states generated, 195 distinct states found, 2 states left on queue. -Progress(5): 6016 states generated, 195 distinct states found, 2 states left on queue. -Progress(5): 6032 states generated, 195 distinct states found, 2 states left on queue. -Progress(5): 6064 states generated, 195 distinct states found, 2 states left on queue. --- Checkpointing of run states/01-08-04-11-21-31 completed. -Progress(5): 6099 states generated, 195 distinct states found, 1 states left on queue. -Progress(5): 6117 states generated, 195 distinct states found, 1 states left on queue. -Progress(5): 6131 states generated, 195 distinct states found, 1 states left on queue. -Progress(5): 6144 states generated, 195 distinct states found, 0 states left on queue. -Progress(5): 6156 states generated, 195 distinct states found, 0 states left on queue. -Progress(5): 6174 states generated, 195 distinct states found, 0 states left on queue. -Model checking completed. No error has been found. - Estimates of the probability that TLC did not check all reachable states - because two distinct states had the same fingerprint: - calculated (optimistic): 6.327783349385774E-14 - based on the actual fingerprints: 1.299569819004727E-15 -6181 states generated, 195 distinct states found, 0 states left on queue. -The state graph has diameter 5. -79310.647u 6.717s 22:02:34.24 -8.-2% 0+2004k 439+173io 113pf+0w diff --git a/examples/SpecifyingSystems/AsynchronousInterface/AsynchInterface.cfg b/examples/SpecifyingSystems/AsynchronousInterface/AsynchInterface.cfg deleted file mode 100644 index 23c906fe01189a269d8cc178b43c37f6935a7c33..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AsynchronousInterface/AsynchInterface.cfg +++ /dev/null @@ -1,22 +0,0 @@ -(***************************************************************************) -(* This is a configuration file for testing the specification Spec of *) -(* module AsynchInterface. It checks that TypeInvariant is an invariant *) -(* of Spec. *) -(***************************************************************************) - -SPECIFICATION Spec - \* This statement tells TLC that Spec is the specification to be - \* checked. - -INVARIANT TypeInvariant - \* This statement tells TLC to check that TypeInvariant is an - \* invariant of the specification. - -(***************************************************************************) -(* TLC requires that every declared constant in the specification be *) -(* assigned a value by a CONSTANT statement in the configuration file. *) -(***************************************************************************) -CONSTANT - Data = {d1, d2, d3} - \* This assigns to the declared constant Data the set consisting of - \* the three unspecified values d1, d2, d3. diff --git a/examples/SpecifyingSystems/AsynchronousInterface/AsynchInterface.tla b/examples/SpecifyingSystems/AsynchronousInterface/AsynchInterface.tla deleted file mode 100644 index 67be7285742f36e66dbc821a4f4a23e08ff79390..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AsynchronousInterface/AsynchInterface.tla +++ /dev/null @@ -1,28 +0,0 @@ ------------------- MODULE AsynchInterface --------------------- -EXTENDS Naturals -CONSTANT Data -VARIABLES val, rdy, ack - -TypeInvariant == /\ val \in Data - /\ rdy \in {0, 1} - /\ ack \in {0, 1} ---------------------------------------------------------------- -Init == /\ val \in Data - /\ rdy \in {0, 1} - /\ ack = rdy - -Send == /\ rdy = ack - /\ val' \in Data - /\ rdy' = 1 - rdy - /\ UNCHANGED ack - -Rcv == /\ rdy # ack - /\ ack' = 1 - ack - /\ UNCHANGED <<val, rdy>> - -Next == Send \/ Rcv - -Spec == Init /\ [][Next]_<<val, rdy, ack>> ---------------------------------------------------------------- -THEOREM Spec => []TypeInvariant -=============================================================== diff --git a/examples/SpecifyingSystems/AsynchronousInterface/Channel.cfg b/examples/SpecifyingSystems/AsynchronousInterface/Channel.cfg deleted file mode 100644 index 23c906fe01189a269d8cc178b43c37f6935a7c33..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AsynchronousInterface/Channel.cfg +++ /dev/null @@ -1,22 +0,0 @@ -(***************************************************************************) -(* This is a configuration file for testing the specification Spec of *) -(* module AsynchInterface. It checks that TypeInvariant is an invariant *) -(* of Spec. *) -(***************************************************************************) - -SPECIFICATION Spec - \* This statement tells TLC that Spec is the specification to be - \* checked. - -INVARIANT TypeInvariant - \* This statement tells TLC to check that TypeInvariant is an - \* invariant of the specification. - -(***************************************************************************) -(* TLC requires that every declared constant in the specification be *) -(* assigned a value by a CONSTANT statement in the configuration file. *) -(***************************************************************************) -CONSTANT - Data = {d1, d2, d3} - \* This assigns to the declared constant Data the set consisting of - \* the three unspecified values d1, d2, d3. diff --git a/examples/SpecifyingSystems/AsynchronousInterface/Channel.tla b/examples/SpecifyingSystems/AsynchronousInterface/Channel.tla deleted file mode 100644 index e2039c9cb5535894a63c99a4e9263ca96ca7d39a..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AsynchronousInterface/Channel.tla +++ /dev/null @@ -1,22 +0,0 @@ --------------------------- MODULE Channel ----------------------------- -EXTENDS Naturals -CONSTANT Data -VARIABLE chan - -TypeInvariant == chan \in [val : Data, rdy : {0, 1}, ack : {0, 1}] ------------------------------------------------------------------------ -Init == /\ TypeInvariant - /\ chan.ack = chan.rdy - -Send(d) == /\ chan.rdy = chan.ack - /\ chan' = [chan EXCEPT !.val = d, !.rdy = 1 - @] - -Rcv == /\ chan.rdy # chan.ack - /\ chan' = [chan EXCEPT !.ack = 1 - @] - -Next == (\E d \in Data : Send(d)) \/ Rcv - -Spec == Init /\ [][Next]_chan ------------------------------------------------------------------------ -THEOREM Spec => []TypeInvariant -======================================================================= diff --git a/examples/SpecifyingSystems/AsynchronousInterface/PrintValues.cfg b/examples/SpecifyingSystems/AsynchronousInterface/PrintValues.cfg deleted file mode 100644 index 26ea79b0ca42ba8c5e917e998c288e4fe95ca980..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AsynchronousInterface/PrintValues.cfg +++ /dev/null @@ -1,5 +0,0 @@ - -(***************************************************************************) -(* TLC needs a configuration file--even, as in this case, when there are *) -(* no fields in the file. *) -(***************************************************************************) diff --git a/examples/SpecifyingSystems/AsynchronousInterface/PrintValues.tla b/examples/SpecifyingSystems/AsynchronousInterface/PrintValues.tla deleted file mode 100644 index d1e02ff2f7985db71ab2b73cdeffe5a21a7872de..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AsynchronousInterface/PrintValues.tla +++ /dev/null @@ -1,55 +0,0 @@ ----------------------------- MODULE PrintValues ---------------------------- - -(***************************************************************************) -(* This module illustrates how to use TLC to calculate and print the *) -(* values of TLA+ expressions. It uses the fact that TLC checks *) -(* assumptions. (See the SimpleMath module in the SimpleMath folder for *) -(* other examples of using TLC's checking of assumptions.) *) -(* *) -(* We make use of operator Print defined in the standard module TLC. The *) -(* TLA+ definition of Print is simply *) -(* *) -(* Print(out, val) == val *) -(* *) -(* so the value of Print(e1, e2) is just the expression e2. However, *) -(* evaluating the expression Print(e1, e2) causes TLC to print the values *) -(* of e1 and e2. Thus, the statement *) -(* *) -(* ASSUME Print(exp, TRUE) *) -(* *) -(* is a true assumption, that causes TLC to print the value of exp when *) -(* it checks the assumption. *) -(***************************************************************************) - -EXTENDS Naturals, TLC - (*************************************************************************) - (* This statement imports into the current module the definitions of *) - (* arithmetic operators from the module Naturals and the definitions *) - (* from TLC, including that of Print. *) - (*************************************************************************) - - -(***************************************************************************) -(* Instead of having to type Print(exp, TRUE), we could just define *) -(* PrintVal(exp) to equal Print(exp, TRUE). However, when having TLC *) -(* print several values, it's convenient to print a string that identifies *) -(* the value being printed. So, we define PrintVal(id, exp) so it prints *) -(* the pair <<id, exp>>. *) -(***************************************************************************) -PrintVal(id, exp) == Print(<<id, exp>>, TRUE) - - -(***************************************************************************) -(* We now use an ASSUME to print some values. The order in which TLC *) -(* evaluates ASSUMEs is not specified. However, TLC evaluates the clauses *) -(* of a conjunction in order. So, we use a single ASSUME to the get *) -(* values printed in the desired order. *) -(***************************************************************************) -ASSUME - /\ PrintVal("Three more cats: ", - [cat |-> 1, dog |-> "d"].cat + 3) - /\ PrintVal("Here's a record: ", - [ [game |-> "baseball", player |-> "Marris", homers |-> 61] - EXCEPT !.player = "McGuire", - !.homers = @+9 ] ) -============================================================================= \ No newline at end of file diff --git a/examples/SpecifyingSystems/AsynchronousInterface/README b/examples/SpecifyingSystems/AsynchronousInterface/README deleted file mode 100644 index 702f0c5394e59762fa64c9bbd270f76f8d2aa9aa..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/AsynchronousInterface/README +++ /dev/null @@ -1,63 +0,0 @@ -This directory contains supporting material for the chapter "An -Asynchronous Interface". It contains the following files: - - -AsynchInterface.tla -AsynchInterface.cfg - The ASCII version of the AsynchInterface module and a configuration - file for checking it with TLC. - - -Channel.tla -Channel.cfg - The ASCII version of the Channel module and a configuration file - for checking it with TLC. - -PrintValues.tla -PrintValues.cfg - A module that shows how to use TLC to print the values of TLA+ - expressions, and its configuration file. - - -Exercise: -1. Find the following values, and use TLC to check your answers by - suitably modifying the file PrintValues.tla. - - - [field1 |-> 1, field2 |-> "abc"].field2 - - [ [field1 |-> 1, field2 |-> "abc"] EXCEPT !.field2 = 27 ].field1 - - [ [field1 |-> 1, field2 |-> "abc"] EXCEPT !.field2 = 27 ].field2 - - [ [field1 |-> 1, field2 |-> "abc"] EXCEPT !.field1 = @ + 7].field1 - - [ [field1 |-> 1, field2 |-> "abc"] EXCEPT !.field1 = @ + 7].field2 - - [ [ [field1 |-> 1, field2 |-> "abc"] EXCEPT !.field1 = 9, - !.field2 = "bcd" ] - EXCEPT !.field1 = 2 * @ ].field1 - - [ [ [field1 |-> 1, field2 |-> "abc"] EXCEPT !.field1 = 9, - !.field2 = "bcd" ] - EXCEPT !.field1 = 2 * @ ].field2 - - [a : {"a"}, b : {"b"}, c : {"c"}] - - [sign : {"+", "-"}, val : 1..3] - - [entry : {0, 2, 4}] - -2. Write a module HourClockChannel by modifying the Channel - module so it sends a sequence of hour-clock values over channel - chan. That is, it sends a sequence of consecutive hour values, - starting from any value in 1..12. For example, it might send - the sequence of values - - 9, 10, 11, 12, 1, 2, ... , 11, 12, 1 , ... - - - ------- -Last modified on Fri Jul 27 10:16:53 PDT 2001 by lamport - diff --git a/examples/SpecifyingSystems/CachingMemory/InternalMemory.tla b/examples/SpecifyingSystems/CachingMemory/InternalMemory.tla deleted file mode 100644 index 818c2dea3edc7225cfaa739f335ce87133212ccf..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/CachingMemory/InternalMemory.tla +++ /dev/null @@ -1,43 +0,0 @@ ------------------- MODULE InternalMemory --------------------- -EXTENDS MemoryInterface -VARIABLES mem, ctl, buf --------------------------------------------------------------- -IInit == /\ mem \in [Adr->Val] - /\ ctl = [p \in Proc |-> "rdy"] - /\ buf = [p \in Proc |-> NoVal] - /\ memInt \in InitMemInt - -TypeInvariant == - /\ mem \in [Adr->Val] - /\ ctl \in [Proc -> {"rdy", "busy","done"}] - /\ buf \in [Proc -> MReq \cup Val \cup {NoVal}] - -Req(p) == /\ ctl[p] = "rdy" - /\ \E req \in MReq : - /\ Send(p, req, memInt, memInt') - /\ buf' = [buf EXCEPT ![p] = req] - /\ ctl' = [ctl EXCEPT ![p] = "busy"] - /\ UNCHANGED mem - -Do(p) == - /\ ctl[p] = "busy" - /\ mem' = IF buf[p].op = "Wr" - THEN [mem EXCEPT ![buf[p].adr] = buf[p].val] - ELSE mem - /\ buf' = [buf EXCEPT ![p] = IF buf[p].op = "Wr" - THEN NoVal - ELSE mem[buf[p].adr]] - /\ ctl' = [ctl EXCEPT ![p] = "done"] - /\ UNCHANGED memInt - -Rsp(p) == /\ ctl[p] = "done" - /\ Reply(p, buf[p], memInt, memInt') - /\ ctl' = [ctl EXCEPT ![p]= "rdy"] - /\ UNCHANGED <<mem, buf>> - -INext == \E p \in Proc: Req(p) \/ Do(p) \/ Rsp(p) - -ISpec == IInit /\ [][INext]_<<memInt, mem, ctl, buf>> --------------------------------------------------------------- -THEOREM ISpec => []TypeInvariant -============================================================== diff --git a/examples/SpecifyingSystems/CachingMemory/MCInternalMemory.cfg b/examples/SpecifyingSystems/CachingMemory/MCInternalMemory.cfg deleted file mode 100644 index 28937aa5295513c40cce861ee0b8f3a8aae3a479..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/CachingMemory/MCInternalMemory.cfg +++ /dev/null @@ -1,33 +0,0 @@ -SPECIFICATION ISpec - -INVARIANT TypeInvariant - -CONSTANTS - Send <- MCSend - Reply <- MCReply - InitMemInt <- MCInitMemInt - \* These declarations tell TLC to substitute MCSend for Send, - \* MCReply for Reply, and MCInitMemInt for InitMemInt. - - Proc = {p1, p2} - \* This tells TLC to let Proc be a set consisting of the two - \* uninterpreted constants p1 and p2. - - Adr = {a1, a2, a3} - \* This tells TLC to let Adr be a set consisting of the three - \* uninterpreted constants a1, a2, and a3. - - Val = {v1, v2} - \* This tells TLC to let Val be a set consisting of the two - \* uninterpreted constants v1 and v2. - - NoVal = NoVal - \* TLC cannot handle the unbounded CHOOSE in the definition of - \* NoVal. This statement tells TLC to ignore that definition and to - \* treat NoVal as an uninterpreted constant. - -(***************************************************************************) -(* Note that "<-" tells TLC to replace a symbol with one defined in the *) -(* module, while "=" tells it to replace a symbol with one involving new, *) -(* uninterpreted constants. *) -(***************************************************************************) diff --git a/examples/SpecifyingSystems/CachingMemory/MCInternalMemory.tla b/examples/SpecifyingSystems/CachingMemory/MCInternalMemory.tla deleted file mode 100644 index adf53da7f7bf4426396427e4fa8d2f4c98a7dd3f..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/CachingMemory/MCInternalMemory.tla +++ /dev/null @@ -1,45 +0,0 @@ ------------------------- MODULE MCInternalMemory ---------------------------- - -(***************************************************************************) -(* This is a module used for running TLC to check the specification ISpec *) -(* of InternalMemory. We need to tell TLC the values of the constant *) -(* operators Send and Reply. We define operators MCSend and MCReply and *) -(* use the configuration file to tell TLC to substitute these operators *) -(* for Send and Reply. We also define MCInitMemInt, which is substituted *) -(* for InitMemInt. *) -(***************************************************************************) - -EXTENDS InternalMemory - -(***************************************************************************) -(* The operator Send is used in specifications in conjuncts of the form *) -(* *) -(* (+) Send(p, d, memInt, memInt') *) -(* *) -(* to specify the new value of memInt. For TLC to handle such a *) -(* conjunct, the definition of Send must make (+) equal something of the *) -(* form *) -(* *) -(* memInt' = ... *) -(* *) -(* (A similar observation holds for Reply.) We define Send so that (+) *) -(* equals *) -(* *) -(* memInt' = <<p, d>> *) -(* *) -(* If we were doing serious model checking, we might try to reduce *) -(* the state space by letting the value of memInt remain constant, *) -(* so we would define Send so that (+) equals *) -(* *) -(* memInt' = memInt. *) -(***************************************************************************) -MCSend(p, d, oldMemInt, newMemInt) == newMemInt = <<p, d>> -MCReply(p, d, oldMemInt, newMemInt) == newMemInt = <<p, d>> - -(***************************************************************************) -(* We define MCInitMemInt, the set of initial values of memInt, to contain *) -(* the single element <<p, NoVal>>, for an arbitrary processor p. *) -(***************************************************************************) -MCInitMemInt == {<<CHOOSE p \in Proc : TRUE, NoVal>>} -============================================================================= - diff --git a/examples/SpecifyingSystems/CachingMemory/MCWriteThroughCache.cfg b/examples/SpecifyingSystems/CachingMemory/MCWriteThroughCache.cfg deleted file mode 100644 index 8d3adcba69ff8665dac4cf4a330c4762efe4d854..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/CachingMemory/MCWriteThroughCache.cfg +++ /dev/null @@ -1,50 +0,0 @@ -SPECIFICATION Spec - -INVARIANTS TypeInvariant Coherence LM_Inner_TypeInvariant - \* This tells TLC to check the invariants TypeInvariant, Coherence, - \* and LM_Inner_TypeInvariant - -PROPERTY LM_Inner_ISpec - \* This tells TLC to check that the specification implies LM_Inner_ISpec, - \* the formula obtained from specification ISpec of module - \* InternalMemory by substituting the refinement mapping from the - \* section titled "Proving Implementation". - - -(***************************************************************************) -(* The values of the following constants are chosen to produce a very *) -(* small model that TLC can check very quickly. You should try enlarging *) -(* the model gradually to see how quickly the set of states "explodes". *) -(***************************************************************************) -CONSTANTS - Send <- MCSend - Reply <- MCReply - InitMemInt <- MCInitMemInt - \* These declarations tell TLC to substitute MCSend for Send, - \* MCReply for Reply, and MCInitMemInt for InitMemInt. - - Proc = {p1, p2} - \* This tells TLC to let Proc be a set consisting of the two - \* uninterpreted constants p1 and p2. - - Adr = {a1} - \* This tells TLC to let Adr be a set consisting of the single - \* uninterpreted constant a1. - - Val = {v1, v2} - \* This tells TLC to let Val be a set consisting of the two - \* uninterpreted constants v1 and v2. - - NoVal = NoVal - \* TLC cannot handle the unbounded CHOOSE in the definition of - \* NoVal. This statement tells TLC to ignore that definition and to - \* treat NoVal as an uninterpreted constant. - - QLen = 1 - \* This tells TLC to let QLen equal 1. - -(***************************************************************************) -(* Note that "<-" tells TLC to replace a symbol with one defined in the *) -(* module, while "=" tells it to replace a symbol with one involving new, *) -(* uninterpreted constants. *) -(***************************************************************************) diff --git a/examples/SpecifyingSystems/CachingMemory/MCWriteThroughCache.tla b/examples/SpecifyingSystems/CachingMemory/MCWriteThroughCache.tla deleted file mode 100644 index fcd292fd89474db9346f088b9d23dfdb576681c9..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/CachingMemory/MCWriteThroughCache.tla +++ /dev/null @@ -1,91 +0,0 @@ -------------------------- MODULE MCWriteThroughCache ------------------------ -(***************************************************************************) -(* This is a module used for running TLC to check the specification of the *) -(* write-through cache in module WriteThroughCache. Because TLC version 1 *) -(* can't handle instantiation, we use module WriteThroughCacheInstanced in *) -(* its stead. We check that the specification satisfies the type *) -(* invariant and the invariant Coherence. We also check that it *) -(* implements the InternalMemory specification under the refinement *) -(* mapping described in the section "Proving Implementation". *) -(***************************************************************************) - -EXTENDS WriteThroughCacheInstanced - -(***************************************************************************) -(* The following definitions are substituted for the constants Send, *) -(* Reply, and InitMemInt of the MemoryFace module. See *) -(* MCInternalMemory.tla for their explanations. *) -(***************************************************************************) -MCSend(p, d, oldMemInt, newMemInt) == newMemInt = <<p, d>> -MCReply(p, d, oldMemInt, newMemInt) == newMemInt = <<p, d>> -MCInitMemInt == {<<CHOOSE p \in Proc : TRUE, NoVal>>} - -(***************************************************************************) -(* As described in the section titled "Proving Implementation", the *) -(* write-through cache specifies Spec satisfies *) -(* *) -(* Spec => LM!Inner(omem, octl, obuf)!ISpec *) -(* *) -(* for the following choices of omem, octl, and obuf: *) -(***************************************************************************) - - omem == vmem - octl == [p \in Proc |-> IF ctl[p] = "waiting" THEN "busy" ELSE ctl[p]] - obuf == buf - -(***************************************************************************) -(* Formula LM!Inner(omem, octl, obuf)!ISpec consists of formula ISpec of *) -(* module InternalMemory with the substitutions *) -(* *) -(* (+) mem <- omem, ctl <- octl, buf <- obuf *) -(* *) -(* Because TLC Version 1 cannot handle instantiation, we now do the *) -(* instantiation "by hand". So, below is a copy of module InternalMemory *) -(* with the substitutions (+) made, and with the names of all defined *) -(* operators prefixed with "LM_Inner_". (Had we used the actual INSTANCE *) -(* statements, those names would actually be prefixed by *) -(* "LM!Inner(mem, ctl, buf)!", where mem, ctl, and buf would be parameters *) -(* of the definitions.) *) -(***************************************************************************) - -LM_Inner_IInit == /\ omem \in [Adr->Val] - /\ octl = [p \in Proc |-> "rdy"] - /\ obuf = [p \in Proc |-> NoVal] - /\ memInt \in InitMemInt - -LM_Inner_TypeInvariant == - /\ omem \in [Adr->Val] - /\ octl \in [Proc -> {"rdy", "busy","done"}] - /\ obuf \in [Proc -> MReq \cup Val \cup {NoVal}] - -LM_Inner_Req(p) == /\ octl[p] = "rdy" - /\ \E req \in MReq : - /\ Send(p, req, memInt, memInt') - /\ obuf' = [obuf EXCEPT ![p] = req] - /\ octl' = [octl EXCEPT ![p] = "busy"] - /\ UNCHANGED omem - -LM_Inner_Do(p) == - /\ octl[p] = "busy" - /\ omem' = IF obuf[p].op = "Wr" - THEN [omem EXCEPT ![obuf[p].adr] = obuf[p].val] - ELSE omem - /\ obuf' = [obuf EXCEPT ![p] = IF obuf[p].op = "Wr" - THEN NoVal - ELSE omem[obuf[p].adr]] - /\ octl' = [octl EXCEPT ![p] = "done"] - /\ UNCHANGED memInt - -LM_Inner_Rsp(p) == /\ octl[p] = "done" - /\ Reply(p, obuf[p], memInt, memInt') - /\ octl' = [octl EXCEPT ![p]= "rdy"] - /\ UNCHANGED <<omem, obuf>> - -LM_Inner_INext == - \E p \in Proc: LM_Inner_Req(p) \/ LM_Inner_Do(p) \/ LM_Inner_Rsp(p) - -LM_Inner_ISpec == - LM_Inner_IInit /\ [][LM_Inner_INext]_<<memInt, omem, octl, obuf>> ------------------------------------------------------------------------------ -THEOREM LM_Inner_ISpec => []LM_Inner_TypeInvariant -============================================================================= \ No newline at end of file diff --git a/examples/SpecifyingSystems/CachingMemory/Memory.tla b/examples/SpecifyingSystems/CachingMemory/Memory.tla deleted file mode 100644 index a0ab89089d0062a5dceac814bfc63d8d2aa615c0..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/CachingMemory/Memory.tla +++ /dev/null @@ -1,6 +0,0 @@ ------------------------ MODULE Memory ------------------------ -EXTENDS MemoryInterface -Inner(mem, ctl, buf) == INSTANCE InternalMemory -Spec == \EE mem, ctl, buf : Inner(mem, ctl, buf)!ISpec -============================================================== - diff --git a/examples/SpecifyingSystems/CachingMemory/MemoryInterface.tla b/examples/SpecifyingSystems/CachingMemory/MemoryInterface.tla deleted file mode 100644 index 4dbed39777baa271154a04d9378fa3d25c36d336..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/CachingMemory/MemoryInterface.tla +++ /dev/null @@ -1,23 +0,0 @@ --------------------------- MODULE MemoryInterface --------------------------- -VARIABLE memInt -CONSTANTS Send(_, _, _, _), - Reply(_, _, _, _), - InitMemInt, - Proc, - Adr, - Val - -(***************************************************************************) -(* We comment out the assumption because TLC cannot handle unbounded *) -(* quantifiers. *) -(***************************************************************************) -\* ASSUME \A p, d, miOld, miNew : -\* /\ Send(p,d,miOld,miNew) \in BOOLEAN -\* /\ Reply(p,d,miOld,miNew) \in BOOLEAN - ------------------------------------------------------------------------------ -MReq == [op : {"Rd"}, adr: Adr] - \cup [op : {"Wr"}, adr: Adr, val : Val] - -NoVal == CHOOSE v : v \notin Val -============================================================================= diff --git a/examples/SpecifyingSystems/CachingMemory/README b/examples/SpecifyingSystems/CachingMemory/README deleted file mode 100644 index 0166742f01456a2ae41a09d990627aa916259970..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/CachingMemory/README +++ /dev/null @@ -1,89 +0,0 @@ -This folder accompanies the chapter "A Caching Memory". It contains the -following files: - -MemoryInterface.tla -InternalMemory.tla -Memory.tla -WriteThroughCache.tla - The specifications from the book. - -MCInternalMemory.cfg -MCInternalMemory.tla - Files for checking the InternalMemory specification with TLC. - -WriteThroughCacheInstanced.tla - A version of the WriteThroughCache module with the INSTANCE - removed, for use with TLC. - -MCWriteThroughCache.cfg -MCWriteThroughCache.tla - Files for checking the algorithm described by WriteThroughCache - with TLC. Includes a check that it implements the InternalMemory - specification under the refinement mapping described in the section - "Proving Implementation". - -Exercises: - -1. Find the following values, and use TLC to check your answers. - (See the file PrintValues.tla in the folder AsynchronousMemory.) - - [i \in Nat |-> i^2][42] - - LET f == [i \in Nat |-> i^2] - IN [f EXCEPT ![42] = 24][42] - - LET f == [i \in Nat |-> i^2] - IN [f EXCEPT ![42] = @ - 24, ![24] = 42][42] - - LET f[i \in Nat] == IF i = 0 THEN 0 ELSE f[i-1] + i - IN f[42] - - [i \in {"a", "bc", "d"} |-> IF i = "a" THEN 17 - ELSE 42].a - - [i \in {"a", "bc", "d"} |-> IF i = "a" THEN 17 - ELSE 42].bc - - [a |-> 17, bc |-> 42, d |-> 42]["a"] - - [a |-> 17, bc |-> 42, d |-> 42]["bc"] - - DOMAIN [a |-> 17, bc |-> 42, d |-> 42] - - LET f(a) == [i \in Nat |-> a^i] - g == [j \in Nat |-> f(j)] - IN g[2][3] - - LET f(a) == [i \in Nat |-> a^i] - g == [j \in Nat |-> f(j)] - IN g[2][3] - - [i \in Nat, j \in 1..10 |-> i*j][3,4] - -2. Define an operator AF such that, if r is a record, then: - if r has a "count" field, then AF(r) is r with the count - field incremented by 1, otherwise AF(r) is obtained from - r by adding a "count" field with value 0. - -3. Define an operator Reverse, so if s is any sequence, then - Reverse(s) is sequence s in reverse order. (Hint: you - don't have to use recursion.) Test it with - TLC. (Don't forget to check that it works on the empty - sequence, << >> .) - -4. Define a function Sum whose domain is Seq(Nat) such - that Sum(s) is the sum of the elements of s. (Let - Sum(<< >>) equal 0.) - -5. Introduce an error into the write-through cache algorithm by - replacing `vmem' by `wmem' in the definition of MemQRd, and use TLC to - find a trace that demonstrates why it's an error. (Hint: how large - does QLen have to be to reveal the error?) - -6. Specify a version of the write-through cache algorithm in which - there is a FIFO queue rdQ on the data path from the memory to the - bus through which values read from memory pass before entering the - cache. Use TLC to check your specification. - - -Last modified on Fri Jul 27 10:15:33 PDT 2001 by lamport diff --git a/examples/SpecifyingSystems/CachingMemory/WriteThroughCache.tla b/examples/SpecifyingSystems/CachingMemory/WriteThroughCache.tla deleted file mode 100644 index aaa3f3a2be24ce20de4f1236110243acede242f2..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/CachingMemory/WriteThroughCache.tla +++ /dev/null @@ -1,93 +0,0 @@ ------------------- MODULE WriteThroughCache ------------------ -EXTENDS Naturals, Sequences, MemoryInterface -VARIABLES wmem, ctl, buf, cache, memQ -CONSTANT QLen -ASSUME (QLen \in Nat) /\ (QLen > 0) -M == INSTANCE InternalMemory WITH mem <- wmem --------------------------------------------------------------- -Init == /\ M!IInit - /\ cache = [p \in Proc |-> [a \in Adr |-> NoVal] ] - /\ memQ = << >> - -TypeInvariant == - /\ wmem \in [Adr -> Val] - /\ ctl \in [Proc -> {"rdy", "busy", "waiting", "done"}] - /\ buf \in [Proc -> MReq \cup Val \cup {NoVal}] - /\ cache \in [Proc -> [Adr -> Val \cup {NoVal}]] - /\ memQ \in Seq(Proc \X MReq) - -Coherence == \A p, q \in Proc, a \in Adr : - (NoVal \notin {cache[p][a], cache[q][a]}) - => (cache[p][a]=cache[q][a]) --------------------------------------------------------------- -Req(p) == M!Req(p) /\ UNCHANGED <<cache, memQ>> -Rsp(p) == M!Rsp(p) /\ UNCHANGED <<cache, memQ>> - -RdMiss(p) == /\ (ctl[p] = "busy") /\ (buf[p].op = "Rd") - /\ cache[p][buf[p].adr] = NoVal - /\ Len(memQ) < QLen - /\ memQ' = Append(memQ, <<p, buf[p]>>) - /\ ctl' = [ctl EXCEPT ![p] = "waiting"] - /\ UNCHANGED <<memInt, wmem, buf, cache>> - -DoRd(p) == - /\ ctl[p] \in {"busy","waiting"} - /\ buf[p].op = "Rd" - /\ cache[p][buf[p].adr] # NoVal - /\ buf' = [buf EXCEPT ![p] = cache[p][buf[p].adr]] - /\ ctl' = [ctl EXCEPT ![p] = "done"] - /\ UNCHANGED <<memInt, wmem, cache, memQ>> - -DoWr(p) == - LET r == buf[p] - IN /\ (ctl[p] = "busy") /\ (r.op = "Wr") - /\ Len(memQ) < QLen - /\ cache' = [q \in Proc |-> - IF (p=q) \/ (cache[q][r.adr]#NoVal) - THEN [cache[q] EXCEPT ![r.adr] = r.val] - ELSE cache[q] ] - /\ memQ' = Append(memQ, <<p, r>>) - /\ buf' = [buf EXCEPT ![p] = NoVal] - /\ ctl' = [ctl EXCEPT ![p] = "done"] - /\ UNCHANGED <<memInt, wmem>> - -vmem == - LET f[i \in 0 .. Len(memQ)] == - IF i=0 THEN wmem - ELSE IF memQ[i][2].op = "Rd" - THEN f[i-1] - ELSE [f[i-1] EXCEPT ![memQ[i][2].adr] = - memQ[i][2].val] - IN f[Len(memQ)] - -MemQWr == LET r == Head(memQ)[2] - IN /\ (memQ # << >>) /\ (r.op = "Wr") - /\ wmem' = [wmem EXCEPT ![r.adr] = r.val] - /\ memQ' = Tail(memQ) - /\ UNCHANGED <<memInt, buf, ctl, cache>> - -MemQRd == - LET p == Head(memQ)[1] - r == Head(memQ)[2] - IN /\ (memQ # << >> ) /\ (r.op = "Rd") - /\ memQ' = Tail(memQ) - /\ cache' = [cache EXCEPT ![p][r.adr] = vmem[r.adr]] - /\ UNCHANGED <<memInt, wmem, buf, ctl>> - -Evict(p,a) == /\ (ctl[p] = "waiting") => (buf[p].adr # a) - /\ cache' = [cache EXCEPT ![p][a] = NoVal] - /\ UNCHANGED <<memInt, wmem, buf, ctl, memQ>> - -Next == \/ \E p\in Proc : \/ Req(p) \/ Rsp(p) - \/ RdMiss(p) \/ DoRd(p) \/ DoWr(p) - \/ \E a \in Adr : Evict(p, a) - \/ MemQWr \/ MemQRd - -Spec == - Init /\ [][Next]_<<memInt, wmem, buf, ctl, cache, memQ>> --------------------------------------------------------------- -THEOREM Spec => [](TypeInvariant /\ Coherence) --------------------------------------------------------------- -LM == INSTANCE Memory -THEOREM Spec => LM!Spec -============================================================== diff --git a/examples/SpecifyingSystems/CachingMemory/WriteThroughCacheInstanced.tla b/examples/SpecifyingSystems/CachingMemory/WriteThroughCacheInstanced.tla deleted file mode 100644 index cfce09ec6a535bf63889df4a3df224f830c19af4..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/CachingMemory/WriteThroughCacheInstanced.tla +++ /dev/null @@ -1,163 +0,0 @@ --------------------- MODULE WriteThroughCacheInstanced ---------------------- -(***************************************************************************) -(* This module is a version of module WriteThroughCache with the INSTANCE *) -(* statements removed, because Version 1 of TLC cannot handle *) -(* instantiation. The one INSTANCE statement that we need to run TLC is *) -(* replaced by the equivalent definitions. Another INSTANCE statement, *) -(* not needed for running TLC, is just commented out. *) -(***************************************************************************) - -EXTENDS Naturals, Sequences, MemoryInterface -VARIABLES wmem, ctl, buf, cache, memQ -CONSTANT QLen -ASSUME (QLen \in Nat) /\ (QLen > 0) - -(***************************************************************************) -(* At this point, module WriteThroughCache contains the statement *) -(* *) -(* M == INSTANCE InternalMemory WITH mem <- wmem *) -(* *) -(* We perform the instantiations below "by hand". The text below is the *) -(* body of module InternalMemory (minus its EXTENDS and its declarations), *) -(* with wmem substituted everywhere for mem, and with the names of all *) -(* symbols it defines prefixed by "M_". (The actual INSTANCE statement *) -(* prefixes the names with "M!", but we use "_" instead of "!" because *) -(* TLA+ doesn't allow "!" to be used in a symbol name except when it is *) -(* added by instantiation.) *) -(***************************************************************************) -M_IInit == /\ wmem \in [Adr->Val] - /\ ctl = [p \in Proc |-> "rdy"] - /\ buf = [p \in Proc |-> NoVal] - /\ memInt \in InitMemInt - -M_TypeInvariant == - /\ wmem \in [Adr->Val] - /\ ctl \in [Proc -> {"rdy", "busy","done"}] - /\ buf \in [Proc -> MReq \cup Val \cup {NoVal}] - -M_Req(p) == /\ ctl[p] = "rdy" - /\ \E req \in MReq : - /\ Send(p, req, memInt, memInt') - /\ buf' = [buf EXCEPT ![p] = req] - /\ ctl' = [ctl EXCEPT ![p] = "busy"] - /\ UNCHANGED wmem - -M_Do(p) == - /\ ctl[p] = "busy" - /\ wmem' = IF buf[p].op = "Wr" - THEN [wmem EXCEPT ![buf[p].adr] = buf[p].val] - ELSE wmem - /\ buf' = [buf EXCEPT ![p] = IF buf[p].op = "Wr" - THEN NoVal - ELSE wmem[buf[p].adr]] - /\ ctl' = [ctl EXCEPT ![p] = "done"] - /\ UNCHANGED memInt - -M_Rsp(p) == /\ ctl[p] = "done" - /\ Reply(p, buf[p], memInt, memInt') - /\ ctl' = [ctl EXCEPT ![p]= "rdy"] - /\ UNCHANGED <<wmem, buf>> - -M_INext == \E p \in Proc: M_Req(p) \/ M_Do(p) \/ M_Rsp(p) - -M_ISpec == M_IInit /\ [][M_INext]_<<memInt, wmem, ctl, buf>> --------------------------------------------------------------- -(***************************************************************************) -(* Below is the rest of module WriteThroughCache, except with each "!" *) -(* replaced by "_". *) -(***************************************************************************) - -Init == /\ M_IInit - /\ cache = [p \in Proc |-> [a \in Adr |-> NoVal] ] - /\ memQ = << >> - -TypeInvariant == - /\ wmem \in [Adr -> Val] - /\ ctl \in [Proc -> {"rdy", "busy", "waiting", "done"}] - /\ buf \in [Proc -> MReq \cup Val \cup {NoVal}] - /\ cache \in [Proc -> [Adr -> Val \cup {NoVal}]] - /\ memQ \in Seq(Proc \X MReq) - -Coherence == \A p, q \in Proc, a \in Adr : - (NoVal \notin {cache[p][a], cache[q][a]}) - => (cache[p][a]=cache[q][a]) ------------------------------------------------------------------------------ -Req(p) == M_Req(p) /\ UNCHANGED <<cache, memQ>> -Rsp(p) == M_Rsp(p) /\ UNCHANGED <<cache, memQ>> - -RdMiss(p) == /\ (ctl[p] = "busy") /\ (buf[p].op = "Rd") - /\ cache[p][buf[p].adr] = NoVal - /\ Len(memQ) < QLen - /\ memQ' = Append(memQ, <<p, buf[p]>>) - /\ ctl' = [ctl EXCEPT ![p] = "waiting"] - /\ UNCHANGED <<memInt, wmem, buf, cache>> - -DoRd(p) == - /\ ctl[p] \in {"busy","waiting"} - /\ buf[p].op = "Rd" - /\ cache[p][buf[p].adr] # NoVal - /\ buf' = [buf EXCEPT ![p] = cache[p][buf[p].adr]] - /\ ctl' = [ctl EXCEPT ![p] = "done"] - /\ UNCHANGED <<memInt, wmem, cache, memQ>> - -DoWr(p) == - LET r == buf[p] - IN /\ (ctl[p] = "busy") /\ (r.op = "Wr") - /\ Len(memQ) < QLen - /\ cache' = [q \in Proc |-> - IF (p=q) \/ (cache[q][r.adr]#NoVal) - THEN [cache[q] EXCEPT ![r.adr] = r.val] - ELSE cache[q] ] - /\ memQ' = Append(memQ, <<p, r>>) - /\ buf' = [buf EXCEPT ![p] = NoVal] - /\ ctl' = [ctl EXCEPT ![p] = "done"] - /\ UNCHANGED <<memInt, wmem>> - -vmem == - LET f[i \in 0 .. Len(memQ)] == - IF i=0 THEN wmem - ELSE IF memQ[i][2].op = "Rd" - THEN f[i-1] - ELSE [f[i-1] EXCEPT ![memQ[i][2].adr] = - memQ[i][2].val] - IN f[Len(memQ)] - -MemQWr == LET r == Head(memQ)[2] - IN /\ (memQ # << >>) /\ (r.op = "Wr") - /\ wmem' = [wmem EXCEPT ![r.adr] = r.val] - /\ memQ' = Tail(memQ) - /\ UNCHANGED <<memInt, buf, ctl, cache>> - -MemQRd == - LET p == Head(memQ)[1] - r == Head(memQ)[2] - IN /\ (memQ # << >> ) /\ (r.op = "Rd") - /\ memQ' = Tail(memQ) - /\ cache' = [cache EXCEPT ![p][r.adr] = vmem[r.adr]] - /\ UNCHANGED <<memInt, wmem, buf, ctl>> - -Evict(p,a) == /\ (ctl[p] = "waiting") => (buf[p].adr # a) - /\ cache' = [cache EXCEPT ![p][a] = NoVal] - /\ UNCHANGED <<memInt, wmem, buf, ctl, memQ>> - -Next == \/ \E p\in Proc : \/ Req(p) \/ Rsp(p) - \/ RdMiss(p) \/ DoRd(p) \/ DoWr(p) - \/ \E a \in Adr : Evict(p, a) - \/ MemQWr \/ MemQRd - -Spec == - Init /\ [][Next]_<<memInt, wmem, buf, ctl, cache, memQ>> ------------------------------------------------------------------------------ -THEOREM Spec => [](TypeInvariant /\ Coherence) ------------------------------------------------------------------------------ - -(***************************************************************************) -(* We comment out the following instantiation and theorem, since TLC can't *) -(* do anything with them anyway. *) -(***************************************************************************) -\* LM == INSTANCE Memory -\* THEOREM Spec => LM_Spec -============================================================== - -THEOREM ISpec => []TypeInvariant -============================================================== diff --git a/examples/SpecifyingSystems/Composing/BinaryHourClock.tla b/examples/SpecifyingSystems/Composing/BinaryHourClock.tla deleted file mode 100644 index 841fe1b8707a5fc6a4d96b72d1953073055d417e..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Composing/BinaryHourClock.tla +++ /dev/null @@ -1,21 +0,0 @@ ---------------------------- MODULE BinaryHourClock -------------------------- -EXTENDS Naturals - -VARIABLE bits - -H(hr) == INSTANCE HourClock - -BitArrayVal(b) == - LET n == CHOOSE i \in Nat : DOMAIN b = 0..i - - val[i \in 0..n] == - IF i=0 THEN b[0] * 2^0 ELSE (b[i] * 2^i) + val[i-1] - IN val[n] - -HourVal(b) == IF b \in[(0.. 3) -> {0,1}] THEN BitArrayVal(b) - ELSE 99 - -IR(b, h) == [](h = HourVal(b)) - -BHC == \EE hr : IR(bits, hr) /\ H(hr)!HC -============================================================================= diff --git a/examples/SpecifyingSystems/Composing/Channel.tla b/examples/SpecifyingSystems/Composing/Channel.tla deleted file mode 100644 index e2039c9cb5535894a63c99a4e9263ca96ca7d39a..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Composing/Channel.tla +++ /dev/null @@ -1,22 +0,0 @@ --------------------------- MODULE Channel ----------------------------- -EXTENDS Naturals -CONSTANT Data -VARIABLE chan - -TypeInvariant == chan \in [val : Data, rdy : {0, 1}, ack : {0, 1}] ------------------------------------------------------------------------ -Init == /\ TypeInvariant - /\ chan.ack = chan.rdy - -Send(d) == /\ chan.rdy = chan.ack - /\ chan' = [chan EXCEPT !.val = d, !.rdy = 1 - @] - -Rcv == /\ chan.rdy # chan.ack - /\ chan' = [chan EXCEPT !.ack = 1 - @] - -Next == (\E d \in Data : Send(d)) \/ Rcv - -Spec == Init /\ [][Next]_chan ------------------------------------------------------------------------ -THEOREM Spec => []TypeInvariant -======================================================================= diff --git a/examples/SpecifyingSystems/Composing/ChannelRefinement.tla b/examples/SpecifyingSystems/Composing/ChannelRefinement.tla deleted file mode 100644 index 1def5754a6cfc7bfd4f73d96dccc3d8ae44eaebb..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Composing/ChannelRefinement.tla +++ /dev/null @@ -1,42 +0,0 @@ ---------------------------- MODULE ChannelRefinement ------------------------ -EXTENDS Naturals, Sequences -VARIABLES h, l - -ErrorVal == CHOOSE v : v \notin [val : 1..12, rdy : {0, 1}, ack : {0, 1}] - -BitSeqToNat[s \in Seq({0,1})] == - IF s = << >> THEN 0 ELSE Head(s) + 2 * BitSeqToNat[Tail(s)] - -H == INSTANCE Channel WITH chan <- h, Data <- 1..12 -L == INSTANCE Channel WITH chan <- l, Data <- {0,1} - ---------------------------- MODULE Inner --------------------------------- - VARIABLE bitsSent - - Init == /\ bitsSent = << >> - /\ IF L!Init THEN H!Init - ELSE h = ErrorVal - - SendBit == \E b \in {0, 1}: - /\ L!Send(b) - /\ IF Len(bitsSent) < 3 - THEN /\ bitsSent' = <<b>> \o bitsSent - /\ UNCHANGED h - ELSE /\ bitsSent'= <<>> - /\ H!Send(BitSeqToNat[<<b>> \o bitsSent]) - - RcvBit == /\ L!Rcv - /\ IF bitsSent = << >> THEN H!Rcv - ELSE UNCHANGED h - /\ UNCHANGED bitsSent - - Error == /\ l' # l - /\ ~((\E b \in {0,1} : L!Send(b)) \/ L!Rcv) - /\ h' = ErrorVal - - Next == SendBit \/ RcvBit \/ Error - - InnerIR == Init /\ [][Next]_<<l,h,bitsSent>> - =========================================================================== -I(bitsSent) == INSTANCE Inner -IR == \EE bitsSent : I(bitsSent)!InnerIR -============================================================================= \ No newline at end of file diff --git a/examples/SpecifyingSystems/Composing/CompositeFIFO.tla b/examples/SpecifyingSystems/Composing/CompositeFIFO.tla deleted file mode 100644 index eec17798f3baa0f0f5eb6aa16141c016850acc64..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Composing/CompositeFIFO.tla +++ /dev/null @@ -1,41 +0,0 @@ ---------------------------- MODULE CompositeFIFO ---------------------------- -EXTENDS Naturals, Sequences -CONSTANT Message -VARIABLES in, out ------------------------------------------------------------------------------ -InChan == INSTANCE Channel WITH Data <- Message, chan <- in -OutChan == INSTANCE Channel WITH Data <- Message, chan <- out ------------------------------------------------------------------------------ -SenderInit == (in.rdy \in BOOLEAN) /\ (in.val \in Message) -Sender == - SenderInit /\ [][\E msg \in Message : InChan!Send(msg)]_<<in.val, in.rdy>> ------------------------------------------------------------------------------ - ---------------------------- MODULE InnerBuf ------------------------------ - VARIABLE q - BufferInit == /\ in.ack \in BOOLEAN - /\ q = << >> - /\ (out.rdy \in BOOLEAN) /\ (out.val \in Message) - - BufRcv == /\ InChan!Rcv - /\ q' = Append(q, in.val) - /\ UNCHANGED <<out.val, out.rdy>> - - BufSend == /\ q # << >> - /\ OutChan!Send(Head(q)) - /\ q' = Tail(q) - /\ UNCHANGED in.ack - - InnerBuffer == - BufferInit /\ [][BufRcv \/ BufSend]_<<in.ack, q, out.val, out.rdy>> - =========================================================================== -Buf(q) == INSTANCE InnerBuf -Buffer == \EE q : Buf(q)!InnerBuffer ------------------------------------------------------------------------------ -ReceiverInit == out.ack \in BOOLEAN -Receiver == ReceiverInit /\ [][OutChan!Rcv]_<<in.val, in.rdy>> ------------------------------------------------------------------------------ -IsChannel(c) == c = [ack |-> c.ack, val |-> c.val, rdy |-> c.rdy] -Spec == /\ [](IsChannel(in) /\ IsChannel(out)) - /\ (in.ack = in.rdy) /\ (out.ack = out.rdy) - /\ Sender /\ Buffer /\ Receiver -============================================================================= diff --git a/examples/SpecifyingSystems/Composing/HourClock.tla b/examples/SpecifyingSystems/Composing/HourClock.tla deleted file mode 100644 index f2b7b242d1db6635ed0721a4a116e465d33c84a9..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Composing/HourClock.tla +++ /dev/null @@ -1,9 +0,0 @@ ----------------------- MODULE HourClock ---------------------- -EXTENDS Naturals -VARIABLE hr -HCini == hr \in (1 .. 12) -HCnxt == hr' = IF hr # 12 THEN hr + 1 ELSE 1 -HC == HCini /\ [][HCnxt]_hr --------------------------------------------------------------- -THEOREM HC => []HCini -============================================================== diff --git a/examples/SpecifyingSystems/Composing/InternalMemory.tla b/examples/SpecifyingSystems/Composing/InternalMemory.tla deleted file mode 100644 index 9dee3417c5a4f2f21f0ff9c0547a42549bc77bb0..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Composing/InternalMemory.tla +++ /dev/null @@ -1,43 +0,0 @@ ------------------- MODULE InternalMemory --------------------- -EXTENDS MemoryInterface -VARIABLES mem, ctl, buf --------------------------------------------------------------- -IInit == /\ mem \in [Adr->Val] - /\ ctl = [p \in Proc |-> "rdy"] - /\ buf = [p \in Proc |-> NoVal] - /\ memInt \in InitMemInt - -TypeInvariant == - /\ mem \in [Adr->Val] - /\ ctl \in [Proc -> {"rdy", "busy","done"}] - /\ buf \in [Proc -> MReq \cup Val \cup {NoVal}] - -Req(p) == /\ ctl[p] = "rdy" - /\ \E req \in MReq : - /\ Send(p, req, memInt, memInt') - /\ buf' = [buf EXCEPT ![p] = req] - /\ ctl' = [ctl EXCEPT ![p] = "busy"] - /\ UNCHANGED mem - -Do(p) == - /\ ctl[p] = "busy" - /\ mem' = IF buf[p].op = "Wr" - THEN [mem EXCEPT ![buf[p].adr] = buf[p].val] - ELSE mem - /\ buf' = [buf EXCEPT ![p] = IF buf[p].op = "Wr" - THEN NoVal - ELSE mem[buf[p].adr]] - /\ ctl' = [ctl EXCEPT ![p] = "done"] - /\ UNCHANGED memInt - -Rsp(p) == /\ ctl[p] = "done" - /\ Reply(p, buf[p], memInt, memInt') - /\ ctl' = [ctl EXCEPT ![p]= "rdy"] - /\ UNCHANGED <<mem, buf>> - -INext == \E p \in Proc: Req(p) \/ Do(p) \/ Rsp(p) - -ISpec == IInit /\ [][INext]_<<memInt, mem, ctl, buf>> --------------------------------------------------------------- -THEOREM ISpec => []TypeInvariant -============================================================== diff --git a/examples/SpecifyingSystems/Composing/JointActionMemory.tla b/examples/SpecifyingSystems/Composing/JointActionMemory.tla deleted file mode 100644 index d5dfb226003742566cfab996a3a95c924ccc499e..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Composing/JointActionMemory.tla +++ /dev/null @@ -1,40 +0,0 @@ ------------------------- MODULE JointActionMemory --------------------------- -EXTENDS MemoryInterface - - -------------------- MODULE InnerEnvironmentComponent -------------------- - VARIABLE rdy - IE == rdy = [p \in Proc |-> TRUE] - - Erqst(p) == /\ rdy[p] - /\ \E req \in MReq : Send(p, req, memInt, memInt') - /\ rdy' = [rdy EXCEPT ![p] = FALSE] - - ERsp(p) == /\ \E rsp \in Val \cup {NoVal} : - Reply(p, rsp, memInt, memInt') - /\ rdy' = [rdy EXCEPT ![p] = TRUE] - - NE == \E p \in Proc : Erqst(p) \/ ERsp(p) - - IESpec == IE /\ [][NE]_<<memInt, rdy>> - ========================================================================== - - ---------------------- MODULE InnerMemoryComponent ----------------------- - EXTENDS InternalMemory - MRqst(p) == /\ \E req \in MReq : - /\ Send(p, req, memInt, memInt') - /\ buf' = [buf EXCEPT ![p] = req] - /\ ctl' = [ctl EXCEPT ![p] = "busy"] - /\ UNCHANGED mem - - NM == \E p \in Proc : MRqst(p) \/ Do(p) \/ Rsp(p) - - IMSpec == IInit /\ [][NM]_<<memInt, mem, ctl, buf>> - ========================================================================== - -IEnv(rdy) == INSTANCE InnerEnvironmentComponent - -IMem(mem, ctl, buf) == INSTANCE InnerMemoryComponent - -Spec == /\ \EE rdy : IEnv(rdy)!IESpec - /\ \EE mem, ctl, buf : IMem(mem,ctl,buf)!IMSpec -============================================================================= diff --git a/examples/SpecifyingSystems/Composing/MemoryInterface.tla b/examples/SpecifyingSystems/Composing/MemoryInterface.tla deleted file mode 100644 index 4dbed39777baa271154a04d9378fa3d25c36d336..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Composing/MemoryInterface.tla +++ /dev/null @@ -1,23 +0,0 @@ --------------------------- MODULE MemoryInterface --------------------------- -VARIABLE memInt -CONSTANTS Send(_, _, _, _), - Reply(_, _, _, _), - InitMemInt, - Proc, - Adr, - Val - -(***************************************************************************) -(* We comment out the assumption because TLC cannot handle unbounded *) -(* quantifiers. *) -(***************************************************************************) -\* ASSUME \A p, d, miOld, miNew : -\* /\ Send(p,d,miOld,miNew) \in BOOLEAN -\* /\ Reply(p,d,miOld,miNew) \in BOOLEAN - ------------------------------------------------------------------------------ -MReq == [op : {"Rd"}, adr: Adr] - \cup [op : {"Wr"}, adr: Adr, val : Val] - -NoVal == CHOOSE v : v \notin Val -============================================================================= diff --git a/examples/SpecifyingSystems/Composing/README b/examples/SpecifyingSystems/Composing/README deleted file mode 100644 index 1db4c35a46a4bcf49c0da888d30213a6f8b37b9b..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Composing/README +++ /dev/null @@ -1,18 +0,0 @@ -This folder contains material to accompany the chapter "Composing -Specifications". It has the following files: - -CompositeFIFO.tla -JointActionMemory.tla -BinaryHourClock.tla -ChannelRefinement.tla - The specifications from the book. - -HourClock.tla - A copy of the file from the folder HourClock. -Channel.tla - A copy of the file from the folder AsynchronousInterface. - -InternalMemory.tla -MemoryInterface.tla - Copies of the files from folder CachingMemory - diff --git a/examples/SpecifyingSystems/FIFO/Channel.tla b/examples/SpecifyingSystems/FIFO/Channel.tla deleted file mode 100644 index e2039c9cb5535894a63c99a4e9263ca96ca7d39a..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/FIFO/Channel.tla +++ /dev/null @@ -1,22 +0,0 @@ --------------------------- MODULE Channel ----------------------------- -EXTENDS Naturals -CONSTANT Data -VARIABLE chan - -TypeInvariant == chan \in [val : Data, rdy : {0, 1}, ack : {0, 1}] ------------------------------------------------------------------------ -Init == /\ TypeInvariant - /\ chan.ack = chan.rdy - -Send(d) == /\ chan.rdy = chan.ack - /\ chan' = [chan EXCEPT !.val = d, !.rdy = 1 - @] - -Rcv == /\ chan.rdy # chan.ack - /\ chan' = [chan EXCEPT !.ack = 1 - @] - -Next == (\E d \in Data : Send(d)) \/ Rcv - -Spec == Init /\ [][Next]_chan ------------------------------------------------------------------------ -THEOREM Spec => []TypeInvariant -======================================================================= diff --git a/examples/SpecifyingSystems/FIFO/FIFO.tla b/examples/SpecifyingSystems/FIFO/FIFO.tla deleted file mode 100644 index 57d97ea864489d6a368f72f80c94b783cf7d2920..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/FIFO/FIFO.tla +++ /dev/null @@ -1,6 +0,0 @@ ------------------------- MODULE FIFO ------------------------- -CONSTANT Message -VARIABLES in, out -Inner(q) == INSTANCE InnerFIFO -Spec == \EE q : Inner(q)!Spec -============================================================== diff --git a/examples/SpecifyingSystems/FIFO/InnerFIFO.tla b/examples/SpecifyingSystems/FIFO/InnerFIFO.tla deleted file mode 100644 index 780e61d4a9c0962b14942fd0108811fb45e4bfd1..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/FIFO/InnerFIFO.tla +++ /dev/null @@ -1,40 +0,0 @@ ----------------------------- MODULE InnerFIFO ------------------------------- -EXTENDS Naturals, Sequences -CONSTANT Message -VARIABLES in, out, q -InChan == INSTANCE Channel WITH Data <- Message, chan <- in -OutChan == INSTANCE Channel WITH Data <- Message, chan <- out ------------------------------------------------------------------------------ -Init == /\ InChan!Init - /\ OutChan!Init - /\ q = << >> - -TypeInvariant == /\ InChan!TypeInvariant - /\ OutChan!TypeInvariant - /\ q \in Seq(Message) - -SSend(msg) == /\ InChan!Send(msg) \* Send msg on channel `in'. - /\ UNCHANGED <<out, q>> - -BufRcv == /\ InChan!Rcv \* Receive message from channel `in'. - /\ q' = Append(q, in.val) \* and append it to tail of q. - /\ UNCHANGED out - -BufSend == /\ q # << >> \* Enabled only if q is nonempty. - /\ OutChan!Send(Head(q)) \* Send Head(q) on channel `out' - /\ q' = Tail(q) \* and remove it from q. - /\ UNCHANGED in - -RRcv == /\ OutChan!Rcv \* Receive message from channel `out'. - /\ UNCHANGED <<in, q>> - -Next == \/ \E msg \in Message : SSend(msg) - \/ BufRcv - \/ BufSend - \/ RRcv - -Spec == Init /\ [][Next]_<<in, out, q>> ------------------------------------------------------------------------------ -THEOREM Spec => []TypeInvariant -============================================================================= - diff --git a/examples/SpecifyingSystems/FIFO/InnerFIFOInstanced.tla b/examples/SpecifyingSystems/FIFO/InnerFIFOInstanced.tla deleted file mode 100644 index 510bc998875e581edb3d06e9353b1794f9250b18..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/FIFO/InnerFIFOInstanced.tla +++ /dev/null @@ -1,104 +0,0 @@ ------------------------- MODULE InnerFIFOInstanced -------------------------- -(***************************************************************************) -(* The current version of TLC does not handle the INSTANCE statement. *) -(* (This omission will be rectified with TLC Version 2.) This module is a *) -(* version of module InnerFIFO for use with TLC. The INSTANCE statements *) -(* of module InnerFIFO have been removed and replaced by explicit *) -(* definitions of the operators originally defined through instantiation. *) -(***************************************************************************) - -EXTENDS Naturals, Sequences -CONSTANT Message -VARIABLES in, out, q ------------------------------------------------------------------------------ -(***************************************************************************) -(* At this point, module InnerFIFO contains the two statements: *) -(* *) -(* InChan == INSTANCE Channel WITH Data <- Message, chan <- in *) -(* OutChan == INSTANCE Channel WITH Data <- Message, chan <- out *) -(* *) -(* We perform the instantiations below "by hand". However, since "!" *) -(* can't appear in an identifier name, we use "_" in its place. For *) -(* example, instead of adding the definition of `InChan!Init' to the *) -(* current module, as does the first INSTANCE statement, we instead add *) -(* the definition of `InChan_Init'. *) -(***************************************************************************) ------------------------------------------------------------------------------ -(***************************************************************************) -(* Below are all the definitions from Channel, except with `in' *) -(* substituted for `chan', with `Message' substituted for `Data', and with *) -(* "InChan_" prepended to the names of all defined symbols. *) -(***************************************************************************) -InChan_TypeInvariant == in \in [val : Message, rdy : {0, 1}, ack : {0, 1}] - -InChan_Init == /\ InChan_TypeInvariant - /\ in.ack = in.rdy - -InChan_Send(d) == /\ in.rdy = in.ack - /\ in' = [in EXCEPT !.val = d, !.rdy = 1 - @] - -InChan_Rcv == /\ in.rdy # in.ack - /\ in' = [in EXCEPT !.ack = 1 - @] - -InChan_Next == (\E d \in Message : InChan_Send(d)) \/ InChan_Rcv - -InChan_Spec == InChan_Init /\ [][InChan_Next]_in ------------------------------------------------------------------------------ -(***************************************************************************) -(* Below are all the definitions from Channel, except with `out' *) -(* substituted for `chan', with `Message' substituted for `Data', and with *) -(* "OutChan_" prepended to the names of all defined symbols. *) -(***************************************************************************) -OutChan_TypeInvariant == out \in [val : Message, rdy : {0, 1}, ack : {0, 1}] - -OutChan_Init == /\ OutChan_TypeInvariant - /\ out.ack = out.rdy - -OutChan_Send(d) == /\ out.rdy = out.ack - /\ out' = [out EXCEPT !.val = d, !.rdy = 1 - @] - -OutChan_Rcv == /\ out.rdy # out.ack - /\ out' = [out EXCEPT !.ack = 1 - @] - -OutChan_Next == (\E d \in Message : OutChan_Send(d)) \/ OutChan_Rcv - -OutChan_Spec == OutChan_Init /\ [][OutChan_Next]_out ------------------------------------------------------------------------------ -(***************************************************************************) -(* The rest of the module is the same as module InnerFIFO, except that *) -(* each "!" is replaced by "_". *) -(***************************************************************************) -Init == /\ InChan_Init - /\ OutChan_Init - /\ q = << >> - -TypeInvariant == /\ InChan_TypeInvariant - /\ OutChan_TypeInvariant - /\ q \in Seq(Message) - -SSend(msg) == /\ InChan_Send(msg) \* Send msg on channel `in'. - /\ UNCHANGED <<out, q>> - -BufRcv == /\ InChan_Rcv \* Receive message from channel `in'. - /\ q' = Append(q, in.val) \* and append it to tail of q. - /\ UNCHANGED out - -BufSend == /\ q # << >> \* Enabled only if q is nonempty. - /\ OutChan_Send(Head(q)) \* Send Head(q) on channel `out' - /\ q' = Tail(q) \* and remove it from q. - /\ UNCHANGED in - -RRcv == /\ OutChan_Rcv \* Receive message from channel `out'. - /\ UNCHANGED <<in, q>> - -Next == \/ \E msg \in Message : SSend(msg) - \/ BufRcv - \/ BufSend - \/ RRcv - -Spec == Init /\ [][Next]_<<in, out, q>> ------------------------------------------------------------------------------ -THEOREM Spec => []TypeInvariant -============================================================================= - - diff --git a/examples/SpecifyingSystems/FIFO/MCInnerFIFO.cfg b/examples/SpecifyingSystems/FIFO/MCInnerFIFO.cfg deleted file mode 100644 index c2ca38c430d7a72b4282df07c6312ec5f7a724ab..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/FIFO/MCInnerFIFO.cfg +++ /dev/null @@ -1,31 +0,0 @@ -(***************************************************************************) -(* This is a configuration file for module MCInnerFIFOInstanced, which is *) -(* a module for checking the specification InnerFIFO. *) -(***************************************************************************) - -(***************************************************************************) -(* The values of every declared constant must be specified in a CONSTANT *) -(* (or CONSTANTS) statement. The CONSTANT and CONSTRAINT statements *) -(* together define the model for which TLC is checking the specifications. *) -(***************************************************************************) -CONSTANTS - Message = {m1, m2, m3} - \* We let Message be a set consisting of three distinct elements - \* m1, m2, and m3. - qLen = 3 - \* We let qLen be 3, so TLC does not explore successor states of - \* any state in which q has length greater than 3. - - -SPECIFICATION Spec - \* This statement tells TLC that the specification is formula Spec. - -CONSTRAINT qConstraint - \* This statement tells TLC to use the state predicate qConstraint as - \* a constraint, meaning that it will not explore successor states of - \* any state it generates that does not satisfy qConstraint. - -INVARIANT TypeInvariant - \* This statement tells TLC to check that TypeInvariant is an - \* invariant of the specification--that is, to check that Spec - \* implies []TypeInvariant. diff --git a/examples/SpecifyingSystems/FIFO/MCInnerFIFO.tla b/examples/SpecifyingSystems/FIFO/MCInnerFIFO.tla deleted file mode 100644 index 83cc4e10629ce4560f2d2bc6d098338c84d52187..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/FIFO/MCInnerFIFO.tla +++ /dev/null @@ -1,32 +0,0 @@ ---------------------------- MODULE MCInnerFIFO ----------------------------- - -(***************************************************************************) -(* To run TLC on module InnerFIFOInstanced, we need to define an *) -(* additional operator. We don't want to modify module InnerFIFOInstanced *) -(* for the benefit of TLC, so we put the definition in this module, which *) -(* EXTENDS module InnerFIFOInstanced. *) -(* *) -(* The specification Spec of module InnerFIFO has an unbounded number of *) -(* reachable states, since the queue q can become arbitrarily large. To *) -(* model-check the specification, we have to constrain the set of states *) -(* examined by TLC to be finite. We do this by telling TLC to look only *) -(* at states in which q has a fixed maximum length. We define qConstraint *) -(* to be a state predicate asserting this constraint, and tell TLC (with *) -(* the configuration file) to use qConstraint as a constraint. *) -(***************************************************************************) -EXTENDS InnerFIFOInstanced - -CONSTANT qLen - (*************************************************************************) - (* Instead of putting a fixed maximum length for q in the definition of *) - (* qConstraint, we let that maximum length be the constant qLen. We *) - (* assign a value to qLen in the configuration file. This allows us to *) - (* control the size of the model we check by changing only the *) - (* configuration file. *) - (*************************************************************************) - -qConstraint == Len(q) \leq qLen - (*************************************************************************) - (* This is the predicate constraining the length of q. *) - (*************************************************************************) -============================================================================= \ No newline at end of file diff --git a/examples/SpecifyingSystems/FIFO/README b/examples/SpecifyingSystems/FIFO/README deleted file mode 100644 index b8a12d979e62c2b23c53bd322ec94102b9e141f8..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/FIFO/README +++ /dev/null @@ -1,74 +0,0 @@ -This folder accompanies the chapter "A FIFO". It contains the -following files: - -FIFO.tla -InnerFIFO.tla - The specifications described in the book. - -InnerFIFOInstanced.tla - Module InnerFIFOInstanced, which is a version of InnerFIFO with the - INSTANCE statements removed for checking with TLC Version 1. - -MCInnerFIFO.tla -MCInnerFIFO.cfg - A module and configuration file for checking module - InnerFIFOInstanced (and hence module InnerFIFO) with TLC. - -Channel.tla - A copy of the file from the AsynchronousInterface folder. - - -Exercises: - -1. (a) Write a specification of an hour-clock that sends the time to - the environment over a channel chan. The specification should make - use of the definitions from the Channel and HourClock modules by - incorporating them with an EXTENDS statement. Write two versions - of the specification. - - Version 1: The clock can tick at any time. - - Version 2: The clock cannot tick between sending a value on chan - and the receipt of that value by the environment. - - Include type invariants and use TLC to check them. - - (b) Use TLC to check that the Version 1 specification implements - the Channel specification with Data replaced by 1..12. That is, - every behavior allowed by your specification satisfies the specification - Spec of module Channel, with Data replaced by the set 1..12. - Use TLC to check that Version 2 implements the specification - HourClockChannel that you wrote in Exercise 1 of folder - AsynchronousInterface. - - (c) Write specifications that hides the clock in the specifications - of part (a). Explain informally why the resulting specification - is equivalent to: - - - The Channel specification with Data replaced by 1..12, for - Version 1. - - - The HourClockChannel specification, for Version 2. - - -2. Write a specification of a resettable hour-clock that - communicates with a user over a channel chan. The user can send the - clock an hour value. When the clock receives the value v, it resets - hr to v. The clock can also advance hr as usual. The specification - should make use of the definitions from the Channel and HourClock - modules by incorporating them with an EXTENDS statement. Write two - versions of the specification. - - Version 1: The clock can tick at any time. - - Version 2: The clock cannot tick if the user has sent a - value that the clock has not yet received. - - -3. Write a specification that consists of the specification HC of - module HourClock with the variable hr hidden. Explain the meaning - of this specification. - ------- -Last modified on Sat Aug 4 14:47:06 PDT 2001 by lamport - diff --git a/examples/SpecifyingSystems/HourClock/HourClock.cfg b/examples/SpecifyingSystems/HourClock/HourClock.cfg deleted file mode 100644 index 5ccc6e07f7566fe6da8ad8b56d3d808cdf2d1a4a..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/HourClock/HourClock.cfg +++ /dev/null @@ -1,13 +0,0 @@ -(***************************************************************************) -(* This is a TLC configuration file for testing that HCini is an invariant *) -(* of the specification HC *) -(***************************************************************************) - -SPECIFICATION HC - \* This statement tells TLC that HC is the specification that it - \* should check. - -INVARIANT HCini - \* This statement tells TLC to check that formula HCini is an - \* invariant of the specification--in other words, that the - \* specification implies []HCini. diff --git a/examples/SpecifyingSystems/HourClock/HourClock.tla b/examples/SpecifyingSystems/HourClock/HourClock.tla deleted file mode 100644 index f2b7b242d1db6635ed0721a4a116e465d33c84a9..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/HourClock/HourClock.tla +++ /dev/null @@ -1,9 +0,0 @@ ----------------------- MODULE HourClock ---------------------- -EXTENDS Naturals -VARIABLE hr -HCini == hr \in (1 .. 12) -HCnxt == hr' = IF hr # 12 THEN hr + 1 ELSE 1 -HC == HCini /\ [][HCnxt]_hr --------------------------------------------------------------- -THEOREM HC => []HCini -============================================================== diff --git a/examples/SpecifyingSystems/HourClock/HourClock2.cfg b/examples/SpecifyingSystems/HourClock/HourClock2.cfg deleted file mode 100644 index 0560b4bf077cbf2fa7310386cdc66b56852efa7e..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/HourClock/HourClock2.cfg +++ /dev/null @@ -1,12 +0,0 @@ -(***************************************************************************) -(* This is a TLC configuration file for testing that HC2 implies HC. *) -(***************************************************************************) - -SPECIFICATION HC - \* This statement tells TLC that it is to take formula HC as - \* the specification it is checking. - -PROPERTY HC2 - \* This statement tells TLC to check that the specification - \* implies the property HC2. (In TLA, a specification is - \* also a property.) diff --git a/examples/SpecifyingSystems/HourClock/HourClock2.tla b/examples/SpecifyingSystems/HourClock/HourClock2.tla deleted file mode 100644 index 2942755993b3329d45928206e313bc09695f72fd..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/HourClock/HourClock2.tla +++ /dev/null @@ -1,26 +0,0 @@ ----------------------------- MODULE HourClock2 ------------------------------ -(***************************************************************************) -(* This module contains the definition of the specification HC2 from the *) -(* book. *) -(***************************************************************************) - -EXTENDS HourClock - (*************************************************************************) - (* This statement includes in the current module all the definitions and *) - (* declarations from module HourClock, including the definitions of + *) - (* and % from the Naturals module and the declaration of the variable *) - (* hr. *) - (*************************************************************************) - -HCnxt2 == hr' = (hr % 12) + 1 -HC2 == HCini /\ [][HCnxt2]_hr ------------------------------------------------------------------------------ -THEOREM HC <=> HC2 - (*************************************************************************) - (* This theorem asserts that formulas HC and HC2 are equivalent. The *) - (* symbol <=> , which can also be typed as \equiv , is typeset as an *) - (* equivalence symbole (a three-lined equals sign). *) - (*************************************************************************) -============================================================================= - - diff --git a/examples/SpecifyingSystems/HourClock/README b/examples/SpecifyingSystems/HourClock/README deleted file mode 100644 index 0264dc02fd7d1ace1fe9341f66bf020d1ebd1282..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/HourClock/README +++ /dev/null @@ -1,41 +0,0 @@ -This directory contains supporting material for the chapter -"Specifying a Simple Clock". It contains the following files: - -HourClock.tla - The ASCII version of the HourClock module. - -HourClock.cfg - A TLC configuration file for checking the HourClock specification. - -HourClock2.tla -HourClock2.cfg - A module that defines the alternative specification HC2 of the - hour clock, and a configuration file for checking it with - TLC. - - -Exercises: - -1. Run TLC on the HourClock specification. - - -2. Add an error into the specification by modifying HCini to be - - HCini == hr \in (1 .. 11) - - and find the error with TLC. - - -3. (a) Run TLC on the HourClock2 specification to test that specifications - HC and HC2 are equivalent. (Hint: The given configuration file - checks that HC2 implies HC. Two formulas are equivalent iff - each implies the other.) - - (b) Modify the definition of HC2 by changing the definition of HCnxt2 - to - HCnxt2 == hr' = (hr % 11) + 1 - - Use TLC to show that HC2 is then no longer equivalent to HC. - ------- -Last modified on Fri Jul 27 10:18:00 PDT 2001 by lamport diff --git a/examples/SpecifyingSystems/Liveness/InternalMemory.tla b/examples/SpecifyingSystems/Liveness/InternalMemory.tla deleted file mode 100644 index 9dee3417c5a4f2f21f0ff9c0547a42549bc77bb0..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Liveness/InternalMemory.tla +++ /dev/null @@ -1,43 +0,0 @@ ------------------- MODULE InternalMemory --------------------- -EXTENDS MemoryInterface -VARIABLES mem, ctl, buf --------------------------------------------------------------- -IInit == /\ mem \in [Adr->Val] - /\ ctl = [p \in Proc |-> "rdy"] - /\ buf = [p \in Proc |-> NoVal] - /\ memInt \in InitMemInt - -TypeInvariant == - /\ mem \in [Adr->Val] - /\ ctl \in [Proc -> {"rdy", "busy","done"}] - /\ buf \in [Proc -> MReq \cup Val \cup {NoVal}] - -Req(p) == /\ ctl[p] = "rdy" - /\ \E req \in MReq : - /\ Send(p, req, memInt, memInt') - /\ buf' = [buf EXCEPT ![p] = req] - /\ ctl' = [ctl EXCEPT ![p] = "busy"] - /\ UNCHANGED mem - -Do(p) == - /\ ctl[p] = "busy" - /\ mem' = IF buf[p].op = "Wr" - THEN [mem EXCEPT ![buf[p].adr] = buf[p].val] - ELSE mem - /\ buf' = [buf EXCEPT ![p] = IF buf[p].op = "Wr" - THEN NoVal - ELSE mem[buf[p].adr]] - /\ ctl' = [ctl EXCEPT ![p] = "done"] - /\ UNCHANGED memInt - -Rsp(p) == /\ ctl[p] = "done" - /\ Reply(p, buf[p], memInt, memInt') - /\ ctl' = [ctl EXCEPT ![p]= "rdy"] - /\ UNCHANGED <<mem, buf>> - -INext == \E p \in Proc: Req(p) \/ Do(p) \/ Rsp(p) - -ISpec == IInit /\ [][INext]_<<memInt, mem, ctl, buf>> --------------------------------------------------------------- -THEOREM ISpec => []TypeInvariant -============================================================== diff --git a/examples/SpecifyingSystems/Liveness/LiveHourClock.cfg b/examples/SpecifyingSystems/Liveness/LiveHourClock.cfg deleted file mode 100644 index fea17dabaace3ddb8f56d739c298be548ed38a11..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Liveness/LiveHourClock.cfg +++ /dev/null @@ -1,14 +0,0 @@ -(***************************************************************************) -(* This is a TLC configuration file for testing that the specification *) -(* LSpec implies the properties AlwaysTick, AllTimes, and TypeInvariance. *) -(***************************************************************************) - -SPECIFICATION LSpec - \* This statement tells TLC that LSpec is the specification that it - \* should check. - -PROPERTIES AlwaysTick AllTimes TypeInvariance - \* This statement tells TLC to check that the specification - \* implies each of the three properties AlwaysTick, AllTimes, - \* and TypeInvariance (and hence that it implies their conjunction). - \* The keywords PROPERTY and PROPERTIES can be used interchangeably. diff --git a/examples/SpecifyingSystems/Liveness/LiveHourClock.tla b/examples/SpecifyingSystems/Liveness/LiveHourClock.tla deleted file mode 100644 index d7c223dd915a789b241f304b7f57ba1a081626e0..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Liveness/LiveHourClock.tla +++ /dev/null @@ -1,37 +0,0 @@ ---------------------------- MODULE LiveHourClock ---------------------------- -(***************************************************************************) -(* This module adds the liveness condition to the hour clock specification *) -(* of module HourClock. *) -(***************************************************************************) - -EXTENDS HourClock - -LSpec == HC /\ WF_hr(HCnxt) - (*************************************************************************) - (* The specification with the liveness condition conjoined. *) - (*************************************************************************) - -(***************************************************************************) -(* We now define some properties that LSpec satisfies. *) -(***************************************************************************) -AlwaysTick == []<><<HCnxt>>_hr - (*************************************************************************) - (* Asserts that infinitely many <<HCnxt>>_hr steps occur. *) - (*************************************************************************) - -AllTimes == \A n \in 1..12 : []<>(hr = n) - (*************************************************************************) - (* Asserts that, for each time n in 1..12, hr infinitely often equals n. *) - (*************************************************************************) - -TypeInvariance == []HCini - (*************************************************************************) - (* The temporal formula asserting that HCini is always true. It is *) - (* stated in this way to show you another way of telling TLC to check an *) - (* invariant. *) - (*************************************************************************) - ------------------------------------------------------------------------------ -THEOREM LSpec => AlwaysTick /\ AllTimes /\ TypeInvariance -============================================================================= - diff --git a/examples/SpecifyingSystems/Liveness/LiveInternalMemory.tla b/examples/SpecifyingSystems/Liveness/LiveInternalMemory.tla deleted file mode 100644 index c1784156f5e58dca2022e0b6faa607a8ecaab06c..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Liveness/LiveInternalMemory.tla +++ /dev/null @@ -1,45 +0,0 @@ ------------------------- MODULE LiveInternalMemory -------------------------- - -(***************************************************************************) -(* This module defines LISpec to be specification ISpec of module *) -(* InternalMemory enhanced with the liveness condition described in the *) -(* subsection "The Liveness Requirement" of the section "The Memory *) -(* Specification". *) -(***************************************************************************) - -EXTENDS InternalMemory - -vars == <<memInt, mem, ctl, buf>> - (*************************************************************************) - (* The tuple of all variables. *) - (*************************************************************************) - -Liveness == \A p \in Proc : WF_vars(Do(p)) /\ WF_vars(Rsp(p)) -Liveness2 == \A p \in Proc : WF_vars(Do(p) \/ Rsp(p)) - (*************************************************************************) - (* The two versions of the liveness condition defined in the book. *) - (*************************************************************************) - -LISpec == ISpec /\ Liveness2 - (*************************************************************************) - (* The spec with liveness. *) - (*************************************************************************) - -(***************************************************************************) -(* The following property asserts that, whenever any processor p has *) -(* issued a request, so ctl[p] = "req", then a response eventually occurs, *) -(* setting ctl[p] to "rdy". *) -(***************************************************************************) - -LivenessProperty == - \A p \in Proc : (ctl[p] = "req") ~> (ctl[p] = "rdy") - ------------------------------------------------------------------------------ -(***************************************************************************) -(* The following theorem asserts that specification LISpec satisfies *) -(* property LivenessProperty. The accompanying configuration file has TLC *) -(* check this theorem. *) -(***************************************************************************) - -THEOREM LISpec => LivenessProperty -============================================================================= diff --git a/examples/SpecifyingSystems/Liveness/LiveWriteThroughCache.tla b/examples/SpecifyingSystems/Liveness/LiveWriteThroughCache.tla deleted file mode 100644 index 666ebc45fa6b4b834b4e89d6d7a16550c9a6a06d..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Liveness/LiveWriteThroughCache.tla +++ /dev/null @@ -1,28 +0,0 @@ ------------------------- MODULE LiveWriteThroughCache ----------------------- -(***************************************************************************) -(* This module adds the liveness condition described in the section "The *) -(* Write-Through Cache" to the specification Spec of module *) -(* WriteThroughCache. To allow us to check it with TLC, we actually use *) -(* the equivalent definition of Spec from module *) -(* WriteThroughCacheInstanced. *) -(***************************************************************************) - -EXTENDS WriteThroughCacheInstanced - -vars == <<memInt, wmem, buf, ctl, cache, memQ>> - -QCond == \/ Len(memQ) = QLen - \/ \E i \in 1 .. Len(memQ) : memQ[i][2].op = "Rd" - -Liveness == /\ \A p \in Proc : /\ WF_vars(Rsp(p) \/ DoRd(p)) - /\ SF_vars(RdMiss(p) \/ DoWr(p)) - /\ WF_vars((QCond /\ MemQWr) \/ MemQRd) - -LSpec == Spec /\ Liveness - -============================================================================= - -Liveness == /\ \A p \in Proc : /\ WF_vars(Rsp(p) \/ DoRd(p)) - /\ SF_vars(RdMiss(p) \/ DoWr(p)) - /\ WF_vars(MemQWr \/ MemQRd) - diff --git a/examples/SpecifyingSystems/Liveness/MCInternalMemory.tla b/examples/SpecifyingSystems/Liveness/MCInternalMemory.tla deleted file mode 100644 index adf53da7f7bf4426396427e4fa8d2f4c98a7dd3f..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Liveness/MCInternalMemory.tla +++ /dev/null @@ -1,45 +0,0 @@ ------------------------- MODULE MCInternalMemory ---------------------------- - -(***************************************************************************) -(* This is a module used for running TLC to check the specification ISpec *) -(* of InternalMemory. We need to tell TLC the values of the constant *) -(* operators Send and Reply. We define operators MCSend and MCReply and *) -(* use the configuration file to tell TLC to substitute these operators *) -(* for Send and Reply. We also define MCInitMemInt, which is substituted *) -(* for InitMemInt. *) -(***************************************************************************) - -EXTENDS InternalMemory - -(***************************************************************************) -(* The operator Send is used in specifications in conjuncts of the form *) -(* *) -(* (+) Send(p, d, memInt, memInt') *) -(* *) -(* to specify the new value of memInt. For TLC to handle such a *) -(* conjunct, the definition of Send must make (+) equal something of the *) -(* form *) -(* *) -(* memInt' = ... *) -(* *) -(* (A similar observation holds for Reply.) We define Send so that (+) *) -(* equals *) -(* *) -(* memInt' = <<p, d>> *) -(* *) -(* If we were doing serious model checking, we might try to reduce *) -(* the state space by letting the value of memInt remain constant, *) -(* so we would define Send so that (+) equals *) -(* *) -(* memInt' = memInt. *) -(***************************************************************************) -MCSend(p, d, oldMemInt, newMemInt) == newMemInt = <<p, d>> -MCReply(p, d, oldMemInt, newMemInt) == newMemInt = <<p, d>> - -(***************************************************************************) -(* We define MCInitMemInt, the set of initial values of memInt, to contain *) -(* the single element <<p, NoVal>>, for an arbitrary processor p. *) -(***************************************************************************) -MCInitMemInt == {<<CHOOSE p \in Proc : TRUE, NoVal>>} -============================================================================= - diff --git a/examples/SpecifyingSystems/Liveness/MCLiveInternalMemory.cfg b/examples/SpecifyingSystems/Liveness/MCLiveInternalMemory.cfg deleted file mode 100644 index f416fa29743a50380f8d6c2b8cdd160d04f8a515..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Liveness/MCLiveInternalMemory.cfg +++ /dev/null @@ -1,39 +0,0 @@ -SPECIFICATION LISpec - \* Tells TLC that LISpec is the specification to check. - -PROPERTY LivenessProperty - \* Tells TLC to check that specification implies LivenessProperty - -PROPERTY Liveness - \* Tells TLC to check that specification implies Liveness - - -CONSTANTS - Send <- MCSend - Reply <- MCReply - InitMemInt <- MCInitMemInt - \* These declarations tell TLC to substitute MCSend for Send, - \* MCReply for Reply, and MCInitMemInt for InitMemInt. - - Proc = {p1, p2} - \* This tells TLC to let Proc be a set consisting of the two - \* uninterpreted constants p1 and p2. - - Adr = {a1, a2, a3} - \* This tells TLC to let Adr be a set consisting of the three - \* uninterpreted constants a1, a2, and a3. - - Val = {v1, v2} - \* This tells TLC to let Val be a set consisting of the two - \* uninterpreted constants v1 and v2. - - NoVal = NoVal - \* TLC cannot handle the unbounded CHOOSE in the definition of - \* NoVal. This statement tells TLC to ignore that definition and to - \* treat NoVal as an uninterpreted constant. - -(***************************************************************************) -(* Note that "<-" tells TLC to replace a symbol with one defined in the *) -(* module, while "=" tells it to replace a symbol with one involving new, *) -(* uninterpreted constants. *) -(***************************************************************************) diff --git a/examples/SpecifyingSystems/Liveness/MCLiveInternalMemory.tla b/examples/SpecifyingSystems/Liveness/MCLiveInternalMemory.tla deleted file mode 100644 index ba90eab580494a207989ad02b234fb75b69f2a15..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Liveness/MCLiveInternalMemory.tla +++ /dev/null @@ -1,48 +0,0 @@ ----------------------- MODULE MCLiveInternalMemory ------------------------- -(***************************************************************************) -(* This is a module used for running TLC to check the specification LISpec *) -(* of LiveInternalMemory. We need to tell TLC the values of the constant *) -(* operators Send and Reply. We define operators MCSend and MCReply and *) -(* use the configuration file to tell TLC to substitute these operators *) -(* for Send and Reply. We also define MCInitMemInt, which is substituted *) -(* for InitMemInt. *) -(* *) -(* This module is identical to module MCInternalMemory *) -(* from folder CachingMemory, except it EXTENDS module LiveInternalMemory *) -(* instead of InternalMemory. *) -(***************************************************************************) - -EXTENDS LiveInternalMemory - -(***************************************************************************) -(* The operator Send is used in specifications in conjuncts of the form *) -(* *) -(* (+) Send(p, d, memInt, memInt') *) -(* *) -(* to specify the new value of memInt. For TLC to handle such a *) -(* conjunct, the definition of Send must make (+) equal something of the *) -(* form *) -(* *) -(* memInt' = ... *) -(* *) -(* (A similar observation holds for Reply.) We define Send so that (+) *) -(* equals *) -(* *) -(* memInt' = <<p, d>> *) -(* *) -(* If we were doing serious model checking, we might try to reduce *) -(* the state space by letting the value of memInt remain constant, *) -(* so we would define Send so that (+) equals *) -(* *) -(* memInt' = memInt. *) -(***************************************************************************) -MCSend(p, d, oldMemInt, newMemInt) == newMemInt = <<p, d>> -MCReply(p, d, oldMemInt, newMemInt) == newMemInt = <<p, d>> - -(***************************************************************************) -(* We define MCInitMemInt, the set of initial values of memInt, to contain *) -(* the single element <<p, NoVal>>, for an arbitrary processor p. *) -(***************************************************************************) -MCInitMemInt == {<<CHOOSE p \in Proc : TRUE, NoVal>>} -============================================================================= - diff --git a/examples/SpecifyingSystems/Liveness/MCLiveWriteThroughCache.cfg b/examples/SpecifyingSystems/Liveness/MCLiveWriteThroughCache.cfg deleted file mode 100644 index 86263545a857996b35909ef7943a18b66900219e..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Liveness/MCLiveWriteThroughCache.cfg +++ /dev/null @@ -1,57 +0,0 @@ -SPECIFICATION LSpec - - -PROPERTY LM_Inner_LISpec - \* This tells TLC to check that the specification implies LM_Inner_LISpec, - \* the formula obtained from specification LISpec of module - \* LiveInternalMemory by substituting the refinement mapping from the - \* section "Proving Implementation" of the chapter "A Caching Memory" - -PROPERTY LM_Inner_Liveness - - \* This tells TLC to check that the specification implies - \* LM_InnerLiveness. We've already checked that LISpec implies - \* Liveness, so LM_Inner_LISpec should imply LM_Inner_Liveness, so - \* this should hold if the preceding PROPERTY does. But, it's a - \* good idea to check even things that should be consequences of - \* things we've already checked, just in case we've made an error - \* somewhere along the line. - - -(***************************************************************************) -(* The values of the following constants are chosen to produce a very *) -(* small model that TLC can check very quickly. You should try enlarging *) -(* the model gradually to see how quickly the set of states "explodes". *) -(***************************************************************************) -CONSTANTS - Send <- MCSend - Reply <- MCReply - InitMemInt <- MCInitMemInt - \* These declarations tell TLC to substitute MCSend for Send, - \* MCReply for Reply, and MCInitMemInt for InitMemInt. - - Proc = {p1, p2} - \* This tells TLC to let Proc be a set consisting of the two - \* uninterpreted constants p1 and p2. - - Adr = {a1} - \* This tells TLC to let Adr be a set consisting of the single - \* uninterpreted constant a1. - - Val = {v1, v2} - \* This tells TLC to let Val be a set consisting of the two - \* uninterpreted constants v1 and v2. - - NoVal = NoVal - \* TLC cannot handle the unbounded CHOOSE in the definition of - \* NoVal. This statement tells TLC to ignore that definition and to - \* treat NoVal as an uninterpreted constant. - - QLen = 1 - \* This tells TLC to let QLen equal 1. - -(***************************************************************************) -(* Note that "<-" tells TLC to replace a symbol with one defined in the *) -(* module, while "=" tells it to replace a symbol with one involving new, *) -(* uninterpreted constants. *) -(***************************************************************************) diff --git a/examples/SpecifyingSystems/Liveness/MCLiveWriteThroughCache.tla b/examples/SpecifyingSystems/Liveness/MCLiveWriteThroughCache.tla deleted file mode 100644 index be77a893c329b6e392edfd003e3d1da2c7cf02f0..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Liveness/MCLiveWriteThroughCache.tla +++ /dev/null @@ -1,145 +0,0 @@ ------------------------ MODULE MCLiveWriteThroughCache ---------------------- -(***************************************************************************) -(* This is a module used for running TLC to check the specification of the *) -(* write-through cache in module LiveWriteThroughCache. We check that it *) -(* implements the LiveInternalMemory specification under the refinement *) -(* mapping described in the section "Proving Implementation" of chapter "A *) -(* Caching Memory". *) -(* *) -(* This module is the same as module MCWriteThroughCache of the folder *) -(* CachingMemory, except it also "instantiates" the definition of LISpec. *) -(***************************************************************************) - -EXTENDS LiveWriteThroughCache - -(***************************************************************************) -(* The following definitions are substituted for the constants Send, *) -(* Reply, and InitMemInt of the MemoryFace module. See *) -(* MCInternalMemory.tla for their explanations. *) -(***************************************************************************) -MCSend(p, d, oldMemInt, newMemInt) == newMemInt = <<p, d>> -MCReply(p, d, oldMemInt, newMemInt) == newMemInt = <<p, d>> -MCInitMemInt == {<<CHOOSE p \in Proc : TRUE, NoVal>>} - -(***************************************************************************) -(* As described in the section titled "Proving Implementation", the *) -(* write-through cache specifies Spec satisfies *) -(* *) -(* Spec => LM!Inner(omem, octl, obuf)!ISpec *) -(* *) -(* for the following choices of omem, octl, and obuf: *) -(***************************************************************************) - - omem == vmem - octl == [p \in Proc |-> IF ctl[p] = "waiting" THEN "busy" ELSE ctl[p]] - obuf == buf - -(***************************************************************************) -(* If we extended what we did in the chapter "A Caching Memory" to the *) -(* specifications with liveness, we would have a module LiveMemory that *) -(* hides the internal variables of LiveInnerMemory, and module *) -(* LiveWriteThroughCache would contain *) -(* *) -(* LM == INSTANCE LiveMemory *) -(* THEOREM LSpec => LM!LSpec *) -(* *) -(* we would prove this by proving *) -(* *) -(* (1) LSpec => LM!Inner(omem, octl, obuf)!LISpec *) -(* *) -(* where Formula LM!Inner(omem, octl, obuf)!LISpec is formula LISpec of *) -(* module LiveInternalMemory with the substitutions *) -(* *) -(* (2) mem <- omem, ctl <- octl, buf <- obuf *) -(* *) -(* We now use TLC to check (1). Because TLC Version 1 cannot handle *) -(* instantiation, we do the instantiation "by hand". So, below is a copy *) -(* of the definitions from module LiveInternalMemory with the *) -(* substitutions (2) made, and with the names of all defined operators *) -(* prefixed with "LM_Inner_". (Had we used the actual INSTANCE *) -(* statements, those names would actually be prefixed by "LM!Inner(mem, *) -(* ctl, buf)!", where mem, ctl, and buf would be parameters of the *) -(* definitions.) These definitions are all the same as in module *) -(* MCWriteThroughCache in the folder CachingMemory, except with the *) -(* additional definitions of LM_Inner_vars, LM_Inner_Liveness, *) -(* LM_Inner_Liveness2, and LM_Inner_LISpec. The definitions of *) -(* LM_Inner_Liveness and LM_Inner_Liveness2 are tricky. *) -(***************************************************************************) - -LM_Inner_IInit == /\ omem \in [Adr->Val] - /\ octl = [p \in Proc |-> "rdy"] - /\ obuf = [p \in Proc |-> NoVal] - /\ memInt \in InitMemInt - -LM_Inner_TypeInvariant == - /\ omem \in [Adr->Val] - /\ octl \in [Proc -> {"rdy", "busy","done"}] - /\ obuf \in [Proc -> MReq \cup Val \cup {NoVal}] - -LM_Inner_Req(p) == /\ octl[p] = "rdy" - /\ \E req \in MReq : - /\ Send(p, req, memInt, memInt') - /\ obuf' = [obuf EXCEPT ![p] = req] - /\ octl' = [octl EXCEPT ![p] = "busy"] - /\ UNCHANGED omem - -LM_Inner_Do(p) == - /\ octl[p] = "busy" - /\ omem' = IF obuf[p].op = "Wr" - THEN [omem EXCEPT ![obuf[p].adr] = obuf[p].val] - ELSE omem - /\ obuf' = [obuf EXCEPT ![p] = IF obuf[p].op = "Wr" - THEN NoVal - ELSE omem[obuf[p].adr]] - /\ octl' = [octl EXCEPT ![p] = "done"] - /\ UNCHANGED memInt - -LM_Inner_Rsp(p) == /\ octl[p] = "done" - /\ Reply(p, obuf[p], memInt, memInt') - /\ octl' = [octl EXCEPT ![p]= "rdy"] - /\ UNCHANGED <<omem, obuf>> - -LM_Inner_INext == - \E p \in Proc: LM_Inner_Req(p) \/ LM_Inner_Do(p) \/ LM_Inner_Rsp(p) - -LM_Inner_ISpec == - LM_Inner_IInit /\ [][LM_Inner_INext]_<<memInt, omem, octl, obuf>> - -LM_Inner_vars == <<memInt, omem, octl, obuf>> - - -LM_Inner_EnabledDo(p) == octl[p] = "busy" - (*************************************************************************) - (* The instantiation of ENABLED Do(p). See the section titled *) - (* "Refinement Mappings and Fairness". *) - (*************************************************************************) - -LM_Inner_EnabledRsp(p) == octl[p] = "done" - (*************************************************************************) - (* The instantiation of ENABLED Rsp(p). See the section titled *) - (* "Refinement Mappings and Fairness". *) - (*************************************************************************) - - -(***************************************************************************) -(* See the See the section titled "Refinement Mappings and Fairness". for *) -(* an explanation of why the following are the appropriate definitions of *) -(* LM_Inner_Liveness and LM_Inner_Liveness2. *) -(***************************************************************************) -LM_Inner_Liveness == - \A p \in Proc : - /\ []<>~LM_Inner_EnabledDo(p) \/ []<><<LM_Inner_Do(p)>>_LM_Inner_vars - /\ []<>~LM_Inner_EnabledRsp(p) \/ []<><<LM_Inner_Rsp(p)>>_LM_Inner_vars - -LM_Inner_Liveness2 == - \A p \in Proc : - \/ []<>~(LM_Inner_EnabledDo(p) \/ LM_Inner_EnabledRsp(p)) - \/ []<><<LM_Inner_Do(p) \/ LM_Inner_Rsp(p)>>_LM_Inner_vars - - -LM_Inner_LISpec == LM_Inner_ISpec /\ LM_Inner_Liveness2 - -LM_Inner_LivenessProperty == - \A p \in Proc : (octl[p] = "req") ~> (octl[p] = "rdy") - -============================================================================= \ No newline at end of file diff --git a/examples/SpecifyingSystems/Liveness/Memory.tla b/examples/SpecifyingSystems/Liveness/Memory.tla deleted file mode 100644 index a0ab89089d0062a5dceac814bfc63d8d2aa615c0..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Liveness/Memory.tla +++ /dev/null @@ -1,6 +0,0 @@ ------------------------ MODULE Memory ------------------------ -EXTENDS MemoryInterface -Inner(mem, ctl, buf) == INSTANCE InternalMemory -Spec == \EE mem, ctl, buf : Inner(mem, ctl, buf)!ISpec -============================================================== - diff --git a/examples/SpecifyingSystems/Liveness/MemoryInterface.tla b/examples/SpecifyingSystems/Liveness/MemoryInterface.tla deleted file mode 100644 index 4dbed39777baa271154a04d9378fa3d25c36d336..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Liveness/MemoryInterface.tla +++ /dev/null @@ -1,23 +0,0 @@ --------------------------- MODULE MemoryInterface --------------------------- -VARIABLE memInt -CONSTANTS Send(_, _, _, _), - Reply(_, _, _, _), - InitMemInt, - Proc, - Adr, - Val - -(***************************************************************************) -(* We comment out the assumption because TLC cannot handle unbounded *) -(* quantifiers. *) -(***************************************************************************) -\* ASSUME \A p, d, miOld, miNew : -\* /\ Send(p,d,miOld,miNew) \in BOOLEAN -\* /\ Reply(p,d,miOld,miNew) \in BOOLEAN - ------------------------------------------------------------------------------ -MReq == [op : {"Rd"}, adr: Adr] - \cup [op : {"Wr"}, adr: Adr, val : Val] - -NoVal == CHOOSE v : v \notin Val -============================================================================= diff --git a/examples/SpecifyingSystems/Liveness/README b/examples/SpecifyingSystems/Liveness/README deleted file mode 100644 index 61ee1b888c2caf4772f4136e998cc71e13a8af1d..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Liveness/README +++ /dev/null @@ -1,104 +0,0 @@ -This folder accompanies the chapter "Liveness and Fairness". It -contains the following files: - -HourClock.tla - A copy of the file from the HourClock folder. - -LiveHourClock.tla -LiveHourClock.cfg - A module containing the hour clock specification enhanced with - a liveness condition, some properties that it satisfies, and - a TLC configuration file for testing it. - -MemoryInterface.tla -InternalMemory.tla -Memory.tla -WriteThroughCache.tla -WriteThroughCacheInstanced.tla - Copies of files from the CachingMemory folder. - -LiveInternalMemory.tla - A module that defines the specification LISpec to be specification - ISpec of module InternalMemory enhanced with a liveness condition. - It also defines a liveness property satisfied by LISpec. - - -MCLiveInternalMemory.tla -MCLiveInternalMemory.cfg - A module and TLC configuration file for testing the specification - LiveInternalMemory. - - -Exercises: - -1. Run TLC to check the LiveHourClock and LiveInternalMemory specifications, - using the files above. Use TLC to find a counterexample to show - that the specification LISpec of LiveInternalMemory does not satisfy the - following property - - \A p \in Proc : (ctl[p] = "rdy") ~> (ctl[p] = "req") - -2. Determine which of the following formulas are temporal - tautologies. For each one that isn't, give a counterexample. - - (a) <>[]<>F <=> []<>F - - (b) []<>[]F <=> []<>F - - (c) ~[](F \/ G) => <>~F /\ <>~G - - (d) []([]F => G) => ([]F => []G) - - (e) [](F => []G) => ([]F => []G) - - (f) [][A /\ B]_v <=> [][A]_v /\ [][B]_v - - (g) []<><<A /\ B>>_v <=> []<><<A>>_v /\ []<><<B>>_v - - (h) [][A => B]_v <=> [][<<A>>_v => B]_v - - (i) WF_v(A) /\ WF_v(B) => WF_v(A \/ B) - - (j) SF_v(A) /\ SF_v(B) => SF_v(A \/ B) - - (k) ENABLED (A /\ B) => (ENABLED A) /\ (ENABLED B) - - -3. Check the correctness of rules 1-4 in the subsection title - "Refinement Mappings and Fairness", and explain in detail how those - rules are used to compute ENABLED (Do(p) \/ Rsp(p)) to get the - expressions given there. - -4. Use MCLiveWriteThroughCache to test the correctness of the liveness - conditions on the write-through cache. Use TLC to obtain a - counter-example if the SF conditions are replaced by WF. - Also check the weaker liveness condition involving the QCond - predicate, given in the section titled "The Write-Through Cache". - -5. The proof rule that by proving A_1, ... , A_n we can deduce - B is often written - - A_1 - ... - A_n - --- - B - - Determine which of the following proof rules are correct. - - (a) A => B - ------------------------- - (ENABLED A) => (ENABLED B) - - - (b) A => B - ------------------------- - WF_v(A) => WF_v(B) - - - (c) A => B - ------------------------- - SF_v(A) => SF_v(B) - - -Last modified on Tue Jul 31 17:15:45 PDT 2001 by lamport diff --git a/examples/SpecifyingSystems/Liveness/WriteThroughCacheInstanced.tla b/examples/SpecifyingSystems/Liveness/WriteThroughCacheInstanced.tla deleted file mode 100644 index cfce09ec6a535bf63889df4a3df224f830c19af4..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Liveness/WriteThroughCacheInstanced.tla +++ /dev/null @@ -1,163 +0,0 @@ --------------------- MODULE WriteThroughCacheInstanced ---------------------- -(***************************************************************************) -(* This module is a version of module WriteThroughCache with the INSTANCE *) -(* statements removed, because Version 1 of TLC cannot handle *) -(* instantiation. The one INSTANCE statement that we need to run TLC is *) -(* replaced by the equivalent definitions. Another INSTANCE statement, *) -(* not needed for running TLC, is just commented out. *) -(***************************************************************************) - -EXTENDS Naturals, Sequences, MemoryInterface -VARIABLES wmem, ctl, buf, cache, memQ -CONSTANT QLen -ASSUME (QLen \in Nat) /\ (QLen > 0) - -(***************************************************************************) -(* At this point, module WriteThroughCache contains the statement *) -(* *) -(* M == INSTANCE InternalMemory WITH mem <- wmem *) -(* *) -(* We perform the instantiations below "by hand". The text below is the *) -(* body of module InternalMemory (minus its EXTENDS and its declarations), *) -(* with wmem substituted everywhere for mem, and with the names of all *) -(* symbols it defines prefixed by "M_". (The actual INSTANCE statement *) -(* prefixes the names with "M!", but we use "_" instead of "!" because *) -(* TLA+ doesn't allow "!" to be used in a symbol name except when it is *) -(* added by instantiation.) *) -(***************************************************************************) -M_IInit == /\ wmem \in [Adr->Val] - /\ ctl = [p \in Proc |-> "rdy"] - /\ buf = [p \in Proc |-> NoVal] - /\ memInt \in InitMemInt - -M_TypeInvariant == - /\ wmem \in [Adr->Val] - /\ ctl \in [Proc -> {"rdy", "busy","done"}] - /\ buf \in [Proc -> MReq \cup Val \cup {NoVal}] - -M_Req(p) == /\ ctl[p] = "rdy" - /\ \E req \in MReq : - /\ Send(p, req, memInt, memInt') - /\ buf' = [buf EXCEPT ![p] = req] - /\ ctl' = [ctl EXCEPT ![p] = "busy"] - /\ UNCHANGED wmem - -M_Do(p) == - /\ ctl[p] = "busy" - /\ wmem' = IF buf[p].op = "Wr" - THEN [wmem EXCEPT ![buf[p].adr] = buf[p].val] - ELSE wmem - /\ buf' = [buf EXCEPT ![p] = IF buf[p].op = "Wr" - THEN NoVal - ELSE wmem[buf[p].adr]] - /\ ctl' = [ctl EXCEPT ![p] = "done"] - /\ UNCHANGED memInt - -M_Rsp(p) == /\ ctl[p] = "done" - /\ Reply(p, buf[p], memInt, memInt') - /\ ctl' = [ctl EXCEPT ![p]= "rdy"] - /\ UNCHANGED <<wmem, buf>> - -M_INext == \E p \in Proc: M_Req(p) \/ M_Do(p) \/ M_Rsp(p) - -M_ISpec == M_IInit /\ [][M_INext]_<<memInt, wmem, ctl, buf>> --------------------------------------------------------------- -(***************************************************************************) -(* Below is the rest of module WriteThroughCache, except with each "!" *) -(* replaced by "_". *) -(***************************************************************************) - -Init == /\ M_IInit - /\ cache = [p \in Proc |-> [a \in Adr |-> NoVal] ] - /\ memQ = << >> - -TypeInvariant == - /\ wmem \in [Adr -> Val] - /\ ctl \in [Proc -> {"rdy", "busy", "waiting", "done"}] - /\ buf \in [Proc -> MReq \cup Val \cup {NoVal}] - /\ cache \in [Proc -> [Adr -> Val \cup {NoVal}]] - /\ memQ \in Seq(Proc \X MReq) - -Coherence == \A p, q \in Proc, a \in Adr : - (NoVal \notin {cache[p][a], cache[q][a]}) - => (cache[p][a]=cache[q][a]) ------------------------------------------------------------------------------ -Req(p) == M_Req(p) /\ UNCHANGED <<cache, memQ>> -Rsp(p) == M_Rsp(p) /\ UNCHANGED <<cache, memQ>> - -RdMiss(p) == /\ (ctl[p] = "busy") /\ (buf[p].op = "Rd") - /\ cache[p][buf[p].adr] = NoVal - /\ Len(memQ) < QLen - /\ memQ' = Append(memQ, <<p, buf[p]>>) - /\ ctl' = [ctl EXCEPT ![p] = "waiting"] - /\ UNCHANGED <<memInt, wmem, buf, cache>> - -DoRd(p) == - /\ ctl[p] \in {"busy","waiting"} - /\ buf[p].op = "Rd" - /\ cache[p][buf[p].adr] # NoVal - /\ buf' = [buf EXCEPT ![p] = cache[p][buf[p].adr]] - /\ ctl' = [ctl EXCEPT ![p] = "done"] - /\ UNCHANGED <<memInt, wmem, cache, memQ>> - -DoWr(p) == - LET r == buf[p] - IN /\ (ctl[p] = "busy") /\ (r.op = "Wr") - /\ Len(memQ) < QLen - /\ cache' = [q \in Proc |-> - IF (p=q) \/ (cache[q][r.adr]#NoVal) - THEN [cache[q] EXCEPT ![r.adr] = r.val] - ELSE cache[q] ] - /\ memQ' = Append(memQ, <<p, r>>) - /\ buf' = [buf EXCEPT ![p] = NoVal] - /\ ctl' = [ctl EXCEPT ![p] = "done"] - /\ UNCHANGED <<memInt, wmem>> - -vmem == - LET f[i \in 0 .. Len(memQ)] == - IF i=0 THEN wmem - ELSE IF memQ[i][2].op = "Rd" - THEN f[i-1] - ELSE [f[i-1] EXCEPT ![memQ[i][2].adr] = - memQ[i][2].val] - IN f[Len(memQ)] - -MemQWr == LET r == Head(memQ)[2] - IN /\ (memQ # << >>) /\ (r.op = "Wr") - /\ wmem' = [wmem EXCEPT ![r.adr] = r.val] - /\ memQ' = Tail(memQ) - /\ UNCHANGED <<memInt, buf, ctl, cache>> - -MemQRd == - LET p == Head(memQ)[1] - r == Head(memQ)[2] - IN /\ (memQ # << >> ) /\ (r.op = "Rd") - /\ memQ' = Tail(memQ) - /\ cache' = [cache EXCEPT ![p][r.adr] = vmem[r.adr]] - /\ UNCHANGED <<memInt, wmem, buf, ctl>> - -Evict(p,a) == /\ (ctl[p] = "waiting") => (buf[p].adr # a) - /\ cache' = [cache EXCEPT ![p][a] = NoVal] - /\ UNCHANGED <<memInt, wmem, buf, ctl, memQ>> - -Next == \/ \E p\in Proc : \/ Req(p) \/ Rsp(p) - \/ RdMiss(p) \/ DoRd(p) \/ DoWr(p) - \/ \E a \in Adr : Evict(p, a) - \/ MemQWr \/ MemQRd - -Spec == - Init /\ [][Next]_<<memInt, wmem, buf, ctl, cache, memQ>> ------------------------------------------------------------------------------ -THEOREM Spec => [](TypeInvariant /\ Coherence) ------------------------------------------------------------------------------ - -(***************************************************************************) -(* We comment out the following instantiation and theorem, since TLC can't *) -(* do anything with them anyway. *) -(***************************************************************************) -\* LM == INSTANCE Memory -\* THEOREM Spec => LM_Spec -============================================================== - -THEOREM ISpec => []TypeInvariant -============================================================== diff --git a/examples/SpecifyingSystems/MoreMath/README b/examples/SpecifyingSystems/MoreMath/README deleted file mode 100644 index c7e5b0548a0932709f41c2edf9a6b6f8ac76b4cb..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/MoreMath/README +++ /dev/null @@ -1,71 +0,0 @@ -This folder accompanies the chapter "Some More Math". - -There are no files in this folder other than this one. - - -Exercise: - -1. Find the following values, and use TLC to check your answers. - (See the file PrintValues.tla in the folder AsynchronousMemory.) - - {i \in 1..10 : \E j \in 1..10 : i = j^2} - - {i \in 1..10 : \E j \in 1..10 : j = i^2} - - {i^2 : i \in 1..10} - - {i^2 + j : i, j \in 1..3} - - {<<i^2, j^2>> : i \in 1..2, j \in 2..3} - - UNION { {i^2} : i \in 1..10} - - UNION { {{i^2}} : i \in 1..10} - - UNION SUBSET S (for any S) - - SUBSET DOMAIN [a |-> 1, b |-> 2] - - SUBSET [a : {1}, b : {2}] - - CHOOSE n \in 1..100 : n^2 = 49 - - - -2. Define an operator Apply so that, if s is a non-empty sequence - <<s_1, s_2, ... , s_n>> and ** is any operator that takes - two arguments, then Apply(s, **) equals - - (...(s_1 ** s_2) ** ... ** s_n) - - Check your definition with TLC. - - Note: with Version 1 of TLC, you won't be able to use an infix - operator in the second argument of Apply, either in the - definition or in a use. So, if you want TLC to evaluate - Apply(<<1, 2, 3>>, +), you'll have to give it something like - - LET Plus(a, b) == a + b - IN Apply(<<1, 2, 3>>, Plus) - - -3. In each of the following: - (i) if possible, define a function f with the required - property and try to check your definition with TLC - (ii) if it isn't possible, explain why not. - - (a) If r is a record with an `abc' and a `def' field, then - f[r] is the record obtained from r by setting its `abc' - field to 0. - - (b) If R is any set of real numbers bounded from above, - then f[R] is the least upper bound of R. - - (c) For any natural number n : - - f[n] = IF n = 0 THEN 1 - ELSE n * f[n+1] - - ------- -Last modified on Fri Jul 27 10:18:25 PDT 2001 by lamport diff --git a/examples/SpecifyingSystems/README b/examples/SpecifyingSystems/README deleted file mode 100644 index 378426cefb93a3ddb562d3815f1f594fc52e9440..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/README +++ /dev/null @@ -1,43 +0,0 @@ -This is a directory of material to accompany the book "Specifying -Concurrent Systems" by Leslie Lamport. It contains the following -subdirectories: - -SimpleMath - Material to accompany the chapter "A Little Simple Math". - -HourClock - Material to accompany the chapter "Specifying a Simple Clock". - -AsynchronousInterface - Material to accompany the chapter "An Asynchronous Interface". - -FIFO - Material to accompany the chapter "A FIFO". - -CachingMemory - Material to accompany the chapter "A Caching Memory". - -MoreMath - Material to accompany the chapter "Some More Math". - -Liveness - Material to accompany the chapter "Liveness and Fairness" - -RealTime - Preliminary version of material to accompany the chapter "Real - Time". - -Composing - Material to accompany the chapter "Composing Specifications". - -AdvancedExamples - Material to accompany the chapter "Advanced Examples". - -TLC - Material to accompany the chapter "The TLC Model Checker" - -Syntax - Material to accompany the chapter "The Syntax of TLA+" - -Standard - Material to accompany the chapter "The Standard Modules" diff --git a/examples/SpecifyingSystems/RealTime/HourClock.tla b/examples/SpecifyingSystems/RealTime/HourClock.tla deleted file mode 100644 index f2b7b242d1db6635ed0721a4a116e465d33c84a9..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/RealTime/HourClock.tla +++ /dev/null @@ -1,9 +0,0 @@ ----------------------- MODULE HourClock ---------------------- -EXTENDS Naturals -VARIABLE hr -HCini == hr \in (1 .. 12) -HCnxt == hr' = IF hr # 12 THEN hr + 1 ELSE 1 -HC == HCini /\ [][HCnxt]_hr --------------------------------------------------------------- -THEOREM HC => []HCini -============================================================== diff --git a/examples/SpecifyingSystems/RealTime/InternalMemory.tla b/examples/SpecifyingSystems/RealTime/InternalMemory.tla deleted file mode 100644 index 9dee3417c5a4f2f21f0ff9c0547a42549bc77bb0..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/RealTime/InternalMemory.tla +++ /dev/null @@ -1,43 +0,0 @@ ------------------- MODULE InternalMemory --------------------- -EXTENDS MemoryInterface -VARIABLES mem, ctl, buf --------------------------------------------------------------- -IInit == /\ mem \in [Adr->Val] - /\ ctl = [p \in Proc |-> "rdy"] - /\ buf = [p \in Proc |-> NoVal] - /\ memInt \in InitMemInt - -TypeInvariant == - /\ mem \in [Adr->Val] - /\ ctl \in [Proc -> {"rdy", "busy","done"}] - /\ buf \in [Proc -> MReq \cup Val \cup {NoVal}] - -Req(p) == /\ ctl[p] = "rdy" - /\ \E req \in MReq : - /\ Send(p, req, memInt, memInt') - /\ buf' = [buf EXCEPT ![p] = req] - /\ ctl' = [ctl EXCEPT ![p] = "busy"] - /\ UNCHANGED mem - -Do(p) == - /\ ctl[p] = "busy" - /\ mem' = IF buf[p].op = "Wr" - THEN [mem EXCEPT ![buf[p].adr] = buf[p].val] - ELSE mem - /\ buf' = [buf EXCEPT ![p] = IF buf[p].op = "Wr" - THEN NoVal - ELSE mem[buf[p].adr]] - /\ ctl' = [ctl EXCEPT ![p] = "done"] - /\ UNCHANGED memInt - -Rsp(p) == /\ ctl[p] = "done" - /\ Reply(p, buf[p], memInt, memInt') - /\ ctl' = [ctl EXCEPT ![p]= "rdy"] - /\ UNCHANGED <<mem, buf>> - -INext == \E p \in Proc: Req(p) \/ Do(p) \/ Rsp(p) - -ISpec == IInit /\ [][INext]_<<memInt, mem, ctl, buf>> --------------------------------------------------------------- -THEOREM ISpec => []TypeInvariant -============================================================== diff --git a/examples/SpecifyingSystems/RealTime/MCRealTime.tla b/examples/SpecifyingSystems/RealTime/MCRealTime.tla deleted file mode 100644 index 2d2780013d65df98b7764a8da0f2a4dc9714886d..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/RealTime/MCRealTime.tla +++ /dev/null @@ -1,31 +0,0 @@ ------------------------------ MODULE MCRealTime ------------------------------- -EXTENDS Naturals - -CONSTANT MaxReal -Real == 0 .. MaxReal - -VARIABLE now - -RTini == now \in Real - -RTNext(v) == \/ /\ v' = v - /\ now' \in {r \in Real : r > now} - \/ /\ v' # v - /\ now' = now - - -TimerInit(t) == t = 0 -TimerNext(t, A, v, D, E) == - /\ t' = IF <<A>>_v \/ ~(ENABLED <<A>>_v)' \* [ ]_<<now, v, t>> removed - THEN 0 - ELSE t + (now'-now) - - /\ t' \leq E \* MaxTime constraint - - /\ A => t \geq D \* MinTime constraint ([ ]_v removed) - - -RTFairness(v) == \A r \in Real : WF_now((now' > (r\div 0)) /\ RTNext(v)) - - -============================================================================= diff --git a/examples/SpecifyingSystems/RealTime/MCRealTimeHourClock.cfg b/examples/SpecifyingSystems/RealTime/MCRealTimeHourClock.cfg deleted file mode 100644 index a8d0d5443f1baa04700ebc5ad4fe46dc49219f17..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/RealTime/MCRealTimeHourClock.cfg +++ /dev/null @@ -1,10 +0,0 @@ -CONSTANTS - Rho = 1 - MaxReal = 5 - SecondsPerHour = 2 - -INIT BigInit -NEXT BigNext -(* TEMPORAL Fairness *) -PROPERTY ErrorTemporal (* NonZeno ImpliedTemporal *) - diff --git a/examples/SpecifyingSystems/RealTime/Memory.tla b/examples/SpecifyingSystems/RealTime/Memory.tla deleted file mode 100644 index a0ab89089d0062a5dceac814bfc63d8d2aa615c0..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/RealTime/Memory.tla +++ /dev/null @@ -1,6 +0,0 @@ ------------------------ MODULE Memory ------------------------ -EXTENDS MemoryInterface -Inner(mem, ctl, buf) == INSTANCE InternalMemory -Spec == \EE mem, ctl, buf : Inner(mem, ctl, buf)!ISpec -============================================================== - diff --git a/examples/SpecifyingSystems/RealTime/MemoryInterface.tla b/examples/SpecifyingSystems/RealTime/MemoryInterface.tla deleted file mode 100644 index 4dbed39777baa271154a04d9378fa3d25c36d336..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/RealTime/MemoryInterface.tla +++ /dev/null @@ -1,23 +0,0 @@ --------------------------- MODULE MemoryInterface --------------------------- -VARIABLE memInt -CONSTANTS Send(_, _, _, _), - Reply(_, _, _, _), - InitMemInt, - Proc, - Adr, - Val - -(***************************************************************************) -(* We comment out the assumption because TLC cannot handle unbounded *) -(* quantifiers. *) -(***************************************************************************) -\* ASSUME \A p, d, miOld, miNew : -\* /\ Send(p,d,miOld,miNew) \in BOOLEAN -\* /\ Reply(p,d,miOld,miNew) \in BOOLEAN - ------------------------------------------------------------------------------ -MReq == [op : {"Rd"}, adr: Adr] - \cup [op : {"Wr"}, adr: Adr, val : Val] - -NoVal == CHOOSE v : v \notin Val -============================================================================= diff --git a/examples/SpecifyingSystems/RealTime/README b/examples/SpecifyingSystems/RealTime/README deleted file mode 100644 index 3416672206bf0e8619777d2cd81150f322bf7b9a..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/RealTime/README +++ /dev/null @@ -1,31 +0,0 @@ -This folder accompanies the chapter "Real Time". It -contains the following files: - -HourClock.tla - A copy of the file from the HourClock folder. - -InternalMemory.tla -Memory.tla -MemoryInterface.tla -WriteThroughCache.tla - Copies of the files from the CachingMemory folder. - -RealTime.tla -RealTimeHourClock.tla -RTMemory.tla - The modules given in the chapter. - -MCRealTime.tla -MCRealTimeHourClock.cfg -MCRealTimeHourClock.tla - Modules for testing the RealTime and RealTimeHourClock with TLC. - (Random junk right now.) - - - -Exercises: - -1. Check that the assumption of module RTWriteThroughCache relating - Delta, Epsilon, and Rho implies that the real-time write-through - cache algorithm responds to each request within Rho seconds. - What is the weakest relation you can find that works? diff --git a/examples/SpecifyingSystems/RealTime/RTMemory.tla b/examples/SpecifyingSystems/RealTime/RTMemory.tla deleted file mode 100644 index 5e4832aa352b72d63f90caf1c0750eca751da5f5..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/RealTime/RTMemory.tla +++ /dev/null @@ -1,16 +0,0 @@ ---------------------- MODULE RTMemory ---------------------- -EXTENDS MemoryInterface, RealTime -CONSTANT Rho -ASSUME (Rho \in Real) /\ (Rho > 0) - - ---------------- MODULE Inner ---------------------------------- - EXTENDS InternalMemory - Respond(p) == (ctl[p] # "rdy") /\ (ctl'[p] = "rdy") - RTISpec == /\ ISpec - /\ \A p \in Proc : RTBound(Respond(p), ctl, 0, Rho) - /\ RTnow(<<memInt, mem, ctl, buf>>) - ========================================================== - -Inner1(mem, ctl, buf) == INSTANCE Inner -RTSpec == \EE mem, ctl, buf : Inner1(mem, ctl, buf)!RTISpec -============================================================= diff --git a/examples/SpecifyingSystems/RealTime/RTWriteThroughCache.tla b/examples/SpecifyingSystems/RealTime/RTWriteThroughCache.tla deleted file mode 100644 index 41af4961785bcf6994894887b1f5cd1a36389e02..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/RealTime/RTWriteThroughCache.tla +++ /dev/null @@ -1,51 +0,0 @@ ------------------------ MODULE RTWriteThroughCache -------------------------- -EXTENDS WriteThroughCache, RealTime - -CONSTANT N -ASSUME (N \in Nat) /\ (Proc = 0 .. N-1) - -CONSTANTS Delta, Epsilon, Rho - -ASSUME /\ (Delta \in Real) /\ (Delta > 0) - /\ (Epsilon \in Real) /\ (Epsilon > 0) - /\ (Rho \in Real) /\ (Rho > 0) - /\ 2*(N+1)*Epsilon + (N+QLen)*Delta \leq Rho ------------------------------------------------------------------------------ -VARIABLE lastP - -RTInit == Init /\ (lastP \in Proc) - -position(p) == CHOOSE i \in 1 .. N : p = (lastP + i) % N - -canGoNext(p) == - \A q \in Proc : (position(q) < position(p)) - => ~ENABLED(RdMiss(q) \/ DoWr(q)) - -RTRdMiss(p) == /\ canGoNext(p) - /\ RdMiss(p) - /\ lastP' = p - -RTDoWr(p) == /\ canGoNext(p) - /\ DoWr(p) - /\ lastP' = p - -RTNext == - \/ \E p\in Proc : RTRdMiss(p) \/ RTDoWr(p) - \/ /\ \/ \E p\in Proc : \/ Req(p) \/ Rsp(p) \/ DoRd(p) - \/ \E a \in Adr : Evict(p, a) - \/ MemQWr \/ MemQRd - /\ UNCHANGED lastP - -vars == <<memInt, wmem, buf, ctl, cache, memQ, lastP>> - -RTSpec == /\ RTInit /\ [][RTNext]_vars - /\ RTBound(MemQWr \/ MemQRd, vars, 0, Delta) - /\ \A p \in Proc : - /\ RTBound(RTDoWr(p) \/ DoRd(p) \/ Rsp(p), - vars, 0, Epsilon) - /\ RTBound(RTRdMiss(p), vars, 0, Epsilon) - /\ RTnow(vars) ------------------------------------------------------------------------------ -RTM == INSTANCE RTMemory -THEOREM RTSpec => RTM!Spec -============================================================================= diff --git a/examples/SpecifyingSystems/RealTime/RealTime.tla b/examples/SpecifyingSystems/RealTime/RealTime.tla deleted file mode 100644 index 1026c66a4b853a896a3b6f3374b02292f0562753..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/RealTime/RealTime.tla +++ /dev/null @@ -1,22 +0,0 @@ ------------------------------ MODULE RealTime ------------------------------- -EXTENDS Reals -VARIABLE now - -RTBound(A, v, D, E) == - LET TNext(t) == t' = IF <<A>>_v \/ ~(ENABLED <<A>>_v)' - THEN 0 - ELSE t + (now'-now) - - Timer(t) == (t=0) /\ [][TNext(t)]_<<t, v, now>> - - MaxTime(t) == [](t \leq E) - - MinTime(t) == [][A => t \geq D]_v - IN \EE t : Timer(t) /\ MaxTime(t) /\ MinTime(t) ------------------------------------------------------------------------------ -RTnow(v) == LET NowNext == /\ now' \in {r \in Real : r > now} - /\ UNCHANGED v - IN /\ now \in Real - /\ [][NowNext]_now - /\ \A r \in Real : WF_now(NowNext /\ (now'>r)) -============================================================================= diff --git a/examples/SpecifyingSystems/RealTime/RealTimeHourClock.tla b/examples/SpecifyingSystems/RealTime/RealTimeHourClock.tla deleted file mode 100644 index 85f4dc5f4c310c651cbf7605270fcc707133cb3d..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/RealTime/RealTimeHourClock.tla +++ /dev/null @@ -1,29 +0,0 @@ - -------------------------- MODULE RealTimeHourClock -------------------------- -EXTENDS Reals, HourClock -VARIABLE now -CONSTANT Rho -ASSUME (Rho \in Real) /\ (Rho > 0) ------------------------------------------------------------------------------ - - -------------------------- MODULE Inner ---------------------------------- - VARIABLE t - TNext == t' = IF HCnxt THEN 0 ELSE t+(now'-now) - Timer == (t = 0) /\ [][TNext]_<<t,hr, now>> - MaxTime == [](t \leq 3600 + Rho) - MinTime == [][HCnxt => t \geq 3600 - Rho]_hr - HCTime == Timer /\ MaxTime /\ MinTime - ========================================================================== - -I(t) == INSTANCE Inner - -NowNext == /\ now' \in {r \in Real : r > now} - /\ UNCHANGED hr - -RTnow == /\ now \in Real - /\ [][NowNext]_now - /\ \A r \in Real : WF_now(NowNext /\ (now'>r)) - -RTHC == HC /\ RTnow /\ (\EE t : I(t)!HCTime) -============================================================================= - \ No newline at end of file diff --git a/examples/SpecifyingSystems/RealTime/WriteThroughCache.tla b/examples/SpecifyingSystems/RealTime/WriteThroughCache.tla deleted file mode 100644 index aaa3f3a2be24ce20de4f1236110243acede242f2..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/RealTime/WriteThroughCache.tla +++ /dev/null @@ -1,93 +0,0 @@ ------------------- MODULE WriteThroughCache ------------------ -EXTENDS Naturals, Sequences, MemoryInterface -VARIABLES wmem, ctl, buf, cache, memQ -CONSTANT QLen -ASSUME (QLen \in Nat) /\ (QLen > 0) -M == INSTANCE InternalMemory WITH mem <- wmem --------------------------------------------------------------- -Init == /\ M!IInit - /\ cache = [p \in Proc |-> [a \in Adr |-> NoVal] ] - /\ memQ = << >> - -TypeInvariant == - /\ wmem \in [Adr -> Val] - /\ ctl \in [Proc -> {"rdy", "busy", "waiting", "done"}] - /\ buf \in [Proc -> MReq \cup Val \cup {NoVal}] - /\ cache \in [Proc -> [Adr -> Val \cup {NoVal}]] - /\ memQ \in Seq(Proc \X MReq) - -Coherence == \A p, q \in Proc, a \in Adr : - (NoVal \notin {cache[p][a], cache[q][a]}) - => (cache[p][a]=cache[q][a]) --------------------------------------------------------------- -Req(p) == M!Req(p) /\ UNCHANGED <<cache, memQ>> -Rsp(p) == M!Rsp(p) /\ UNCHANGED <<cache, memQ>> - -RdMiss(p) == /\ (ctl[p] = "busy") /\ (buf[p].op = "Rd") - /\ cache[p][buf[p].adr] = NoVal - /\ Len(memQ) < QLen - /\ memQ' = Append(memQ, <<p, buf[p]>>) - /\ ctl' = [ctl EXCEPT ![p] = "waiting"] - /\ UNCHANGED <<memInt, wmem, buf, cache>> - -DoRd(p) == - /\ ctl[p] \in {"busy","waiting"} - /\ buf[p].op = "Rd" - /\ cache[p][buf[p].adr] # NoVal - /\ buf' = [buf EXCEPT ![p] = cache[p][buf[p].adr]] - /\ ctl' = [ctl EXCEPT ![p] = "done"] - /\ UNCHANGED <<memInt, wmem, cache, memQ>> - -DoWr(p) == - LET r == buf[p] - IN /\ (ctl[p] = "busy") /\ (r.op = "Wr") - /\ Len(memQ) < QLen - /\ cache' = [q \in Proc |-> - IF (p=q) \/ (cache[q][r.adr]#NoVal) - THEN [cache[q] EXCEPT ![r.adr] = r.val] - ELSE cache[q] ] - /\ memQ' = Append(memQ, <<p, r>>) - /\ buf' = [buf EXCEPT ![p] = NoVal] - /\ ctl' = [ctl EXCEPT ![p] = "done"] - /\ UNCHANGED <<memInt, wmem>> - -vmem == - LET f[i \in 0 .. Len(memQ)] == - IF i=0 THEN wmem - ELSE IF memQ[i][2].op = "Rd" - THEN f[i-1] - ELSE [f[i-1] EXCEPT ![memQ[i][2].adr] = - memQ[i][2].val] - IN f[Len(memQ)] - -MemQWr == LET r == Head(memQ)[2] - IN /\ (memQ # << >>) /\ (r.op = "Wr") - /\ wmem' = [wmem EXCEPT ![r.adr] = r.val] - /\ memQ' = Tail(memQ) - /\ UNCHANGED <<memInt, buf, ctl, cache>> - -MemQRd == - LET p == Head(memQ)[1] - r == Head(memQ)[2] - IN /\ (memQ # << >> ) /\ (r.op = "Rd") - /\ memQ' = Tail(memQ) - /\ cache' = [cache EXCEPT ![p][r.adr] = vmem[r.adr]] - /\ UNCHANGED <<memInt, wmem, buf, ctl>> - -Evict(p,a) == /\ (ctl[p] = "waiting") => (buf[p].adr # a) - /\ cache' = [cache EXCEPT ![p][a] = NoVal] - /\ UNCHANGED <<memInt, wmem, buf, ctl, memQ>> - -Next == \/ \E p\in Proc : \/ Req(p) \/ Rsp(p) - \/ RdMiss(p) \/ DoRd(p) \/ DoWr(p) - \/ \E a \in Adr : Evict(p, a) - \/ MemQWr \/ MemQRd - -Spec == - Init /\ [][Next]_<<memInt, wmem, buf, ctl, cache, memQ>> --------------------------------------------------------------- -THEOREM Spec => [](TypeInvariant /\ Coherence) --------------------------------------------------------------- -LM == INSTANCE Memory -THEOREM Spec => LM!Spec -============================================================== diff --git a/examples/SpecifyingSystems/SimpleMath/README b/examples/SpecifyingSystems/SimpleMath/README deleted file mode 100644 index bfc221db2137e6ffdb7bf5500364859b58f53b3a..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/SimpleMath/README +++ /dev/null @@ -1,59 +0,0 @@ -This folder accompanies the chapter "A Little Simple Math". -It contains the following files: - -SimpleMath.tla - A TLA+ module that uses the TLC model checker to verify some simple - formulas. It explains how you can modify the file to let TLC check - your own formulas. - -SimpleMath.cfg - A TLC configuration file needed to run TLC on the SimpleMath module. - - -Exercises: - -Where possible, check your answers to these exercises by modifying -SimpleMath.tla and using TLC. - -Note: These exercises use ASCII versions of symbols; Table 8 shows the -translation to their more familiar typeset versions. - -1. Determine which of the following formulas are tautologies. - - (F => G) /\ (G => F) <=> (F <=> G) - - (~F /\ ~G) <=> (~F) \/ (~G) - - F => (F => G) - - (F => G) <=> (~G => ~F) - - (F => (G => H)) => ((F => G) => H) - - (F <=> (G <=> H)) => ((F <=> G) <=> H) - - (\A x : F /\ G) <=> (\A x : F) /\ (\A x : G) - - (\E x : F /\ G) <=> (\E x : F) /\ (\E x : G) - - (\A x : F \/ G) <=> (\A x : F) \/ (\A x : G) - - (\E x : F \/ G) <=> (\E x : F) \/ (\E x : G) - - -2. Which of the following formulas are valid for all sets S, T, and U? - - (S \subseteq T) <=> (S \cup T = T) - - (S \subseteq T) <=> \A x \in S : x \in T - - (S = T) <=> (S \subseteq T) /\ (T \subseteq S) - - (S \subseteq T) <=> (S \ T = {}) - - (S \ T) \cup (T \ S) = (S \cup T) \ (S \cap T) - - (S \ (T \cap U)) = (S \ T) \cup (S \ U) - ------- -Last modified on Fri Jul 27 10:18:44 PDT 2001 by lamport diff --git a/examples/SpecifyingSystems/SimpleMath/SimpleMath.cfg b/examples/SpecifyingSystems/SimpleMath/SimpleMath.cfg deleted file mode 100644 index 576894220e5a6386792aa36ef7503cb2f0349a9b..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/SimpleMath/SimpleMath.cfg +++ /dev/null @@ -1,11 +0,0 @@ -\* This is a configuration file for running TLC. At this point, -\* you shouldn't worry about it. - -CONSTANTS - a = a - b = b - c = c - d = d - e = e - f = f - g = g diff --git a/examples/SpecifyingSystems/SimpleMath/SimpleMath.tla b/examples/SpecifyingSystems/SimpleMath/SimpleMath.tla deleted file mode 100644 index 4f303cddf334753413eb52927596ca83a65bea0a..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/SimpleMath/SimpleMath.tla +++ /dev/null @@ -1,91 +0,0 @@ ------------------------------ MODULE SimpleMath ----------------------------- - -(***************************************************************************) -(* This is a TLA+ module that asserts some simple mathematical formulas *) -(* to be true. Each formula is preceded by the TLA+ keyword ASSUME, *) -(* which means that it is to be taken as an assumption. TLC checks that *) -(* assumptions are valid, so it can be used to check the truth of *) -(* formulas. *) -(* *) -(* You can modify this file and run TLC to check your own formulas. *) -(* However, observe the following constraints: *) -(* *) -(* - Use only the built-in TLA operators, which are listed in Tables 1 *) -(* and 2 of the book. (To use others, you either have to add their *) -(* definitions or the TLA+ statements that import their definitions *) -(* from other modules.) *) -(* *) -(* - The only variables you should use are bound variables--for example, *) -(* the ones introduced by existential quantification. *) -(* *) -(* - In your formulas, you can use natural numbers (0, 1, 2, ... ), *) -(* strings like "abc", and the values a, b, c, d, e, f, and g, which *) -(* TLC will interpret as arbitrary values that are unequal to each *) -(* other and to any other value. *) -(* *) -(* - Use only bounded quantifiers; TLC cannot handle the unbounded *) -(* quantifiers. (It also cannot handle the unbounded CHOOSE operator). *) -(* *) -(* This file contains a number of ASSUME statements. They could be *) -(* replaced by a single ASSUME that assumes the conjunction of all the *) -(* formulas, but using separate ASSUMEs makes it easier to locate an *) -(* error. *) -(* *) -(* Note: Table 8 tells you how to type all the symbols that do not have *) -(* obvious ASCII equivalents. *) -(***************************************************************************) - -CONSTANTS a, b, c, d, e, f, g - (*************************************************************************) - (* This statement declares the values a, ... , g so they can be used in *) - (* formulas. *) - (*************************************************************************) - - -(***************************************************************************) -(* This example shows how you can check propositional logic tautologies. *) -(***************************************************************************) -ASSUME - \A F, G \in {TRUE, FALSE} : (F => G) <=> ~F \/ G - - -(***************************************************************************) -(* Here is an example showing how you can check that a formula is NOT a *) -(* tautology of propositional logic. *) -(***************************************************************************) -ASSUME - ~ \A F, G \in {TRUE, FALSE} : (F \/ G) => (F /\ G) - - -(***************************************************************************) -(* The following examples illustrate the operators of set theory. *) -(***************************************************************************) -ASSUME - {1, 2, 2, 3, 3, 3} = {3, 1, 1, 2} - -ASSUME - {1, 2} \cup {2, 3, 4} = {5, 4, 3, 2, 1} \cap {1, 2, 3, 4} - -ASSUME - {1, 3} \subseteq {3, 2, 1} - -ASSUME - {a, b, c} \ {c} = {a, b} - -ASSUME - {a, b} \in {{a, b}, c, {d, e}} - - -(***************************************************************************) -(* The following defines SomeSets to be the set of all subsets of the set *) -(* {a, b, c, d, e}. The ASSUME that follows shows how you can use this *) -(* set to have TLC check that a property of sets hold for all the sets in *) -(* SomeSets. (This doesn't imply that the property is valid for all sets, *) -(* but it's likely to discover if the property is not valid.) *) -(***************************************************************************) -SomeSets == SUBSET {a, b, c, d, e} - -ASSUME - \A S, T \in SomeSets : (S \subseteq T) <=> S = (S \cap T) - -============================================================================= diff --git a/examples/SpecifyingSystems/Standard/Bags.tla b/examples/SpecifyingSystems/Standard/Bags.tla deleted file mode 100644 index e05dccb010eecc8be3046969ef1053e4819bb0ee..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Standard/Bags.tla +++ /dev/null @@ -1,46 +0,0 @@ -------------------------------- MODULE Bags --------------------------------- -LOCAL INSTANCE Naturals - -IsABag(B) == B \in [DOMAIN B -> {n \in Nat : n > 0}] - -BagToSet(B) == DOMAIN B - -SetToBag(S) == [e \in S |-> 1] - -BagIn(e,B) == e \in BagToSet(B) - -EmptyBag == SetToBag({}) - -CopiesIn(e, B) == IF BagIn(e, B) THEN B[e] ELSE 0 - -B1 (+) B2 == - [e \in (DOMAIN B1) \cup (DOMAIN B2) |-> CopiesIn(e, B1) + CopiesIn(e, B2)] - -B1 (-) B2 == - LET B == [e \in DOMAIN B1 |-> CopiesIn(e, B1) - CopiesIn(e, B2)] - IN [e \in {d \in DOMAIN B : B[d] > 0} |-> B[e]] - -LOCAL Sum(f) == - LET DSum[S \in SUBSET DOMAIN f] == LET elt == CHOOSE e \in S : TRUE - IN IF S = {} - THEN 0 - ELSE f[elt] + DSum[S \ {elt}] - IN DSum[DOMAIN f] - -BagUnion(S) == - [e \in UNION {BagToSet(B) : B \in S} |-> Sum([B \in S |-> CopiesIn(e,B)])] - -B1 \sqsubseteq B2 == /\ (DOMAIN B1) \subseteq (DOMAIN B2) - /\ \A e \in DOMAIN B1 : B1[e] \leq B2[e] - -SubBag(B) == - LET AllBagsOfSubset == - UNION {[SB -> {n \in Nat : n > 0}] : SB \in SUBSET BagToSet(B)} - IN {SB \in AllBagsOfSubset : \A e \in DOMAIN SB : SB[e] \leq B[e]} - -BagOfAll(F(_), B) == - [e \in {F(d) : d \in BagToSet(B)} |-> - Sum( [d \in BagToSet(B) |-> IF F(d) = e THEN B[d] ELSE 0] ) ] - -BagCardinality(B) == Sum(B) -============================================================================= diff --git a/examples/SpecifyingSystems/Standard/FiniteSets.tla b/examples/SpecifyingSystems/Standard/FiniteSets.tla deleted file mode 100644 index 57ac40235075b64119e4ab2ddf92abeab9120a5a..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Standard/FiniteSets.tla +++ /dev/null @@ -1,23 +0,0 @@ ----------------------------- MODULE FiniteSets ----------------------------- -LOCAL INSTANCE Naturals -LOCAL INSTANCE Sequences - (*************************************************************************) - (* Imports the definitions from Naturals and Sequences, but doesn't *) - (* export them. *) - (*************************************************************************) - -IsFiniteSet(S) == - (*************************************************************************) - (* A set S is finite iff there is a finite sequence containing all its *) - (* elements. *) - (*************************************************************************) - \E seq \in Seq(S) : \A s \in S : \E n \in 1..Len(seq) : seq[n] = s - -Cardinality(S) == - (*************************************************************************) - (* Cardinality is defined only for finite sets. *) - (*************************************************************************) - LET CS[T \in SUBSET S] == IF T = {} THEN 0 - ELSE 1 + CS[T \ {CHOOSE x : x \in T}] - IN CS[S] -============================================================================= diff --git a/examples/SpecifyingSystems/Standard/Integers.tla b/examples/SpecifyingSystems/Standard/Integers.tla deleted file mode 100644 index a889516f3d7d334bd67f990a59d82489bd4f956c..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Standard/Integers.tla +++ /dev/null @@ -1,7 +0,0 @@ --------------------------------- MODULE Integers ---------------------------- -EXTENDS Naturals -LOCAL R == INSTANCE ProtoReals - -Int == R!Int --. a == 0 - a -============================================================================= diff --git a/examples/SpecifyingSystems/Standard/Naturals.tla b/examples/SpecifyingSystems/Standard/Naturals.tla deleted file mode 100644 index a0d0bc6c22d02bbe755a89c53ab705b53fa2d4f4..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Standard/Naturals.tla +++ /dev/null @@ -1,17 +0,0 @@ ------------------------------- MODULE Naturals ------------------------------ -LOCAL R == INSTANCE ProtoReals - -Nat == R!Nat - -a + b == a R!+ b -a - b == a R!- b -a * b == a R!* b -a ^ b == a R!^ b -a \leq b == a R!\leq b -a \geq b == b \leq a -a < b == (a \leq b) /\ (a # b) -a > b == b < a -a .. b == {i \in R!Int : (a \leq i) /\ (i \leq b)} -a \div b == CHOOSE n \in R!Int : \E r \in 0 .. (b-1) : a = b * n + r -a % b == a - b * (a \div b) -============================================================================= diff --git a/examples/SpecifyingSystems/Standard/Peano.tla b/examples/SpecifyingSystems/Standard/Peano.tla deleted file mode 100644 index bcf219d621f0eeb7627e8bf3b50bd7a0bfe615c3..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Standard/Peano.tla +++ /dev/null @@ -1,13 +0,0 @@ -------------------------------- MODULE Peano ------------------------------- -PeanoAxioms(N, Z, Sc) == - /\ Z \in N - /\ Sc \in [N -> N] - /\ \A n \in N : (\E m \in N : n = Sc[m]) <=> (n # Z) - /\ \A S \in SUBSET N : (Z \in S) /\ (\A n \in S : Sc[n] \in S) => (S = N) - -ASSUME \E N, Z, Sc : PeanoAxioms(N, Z, Sc) - -Succ == CHOOSE Sc : \E N, Z : PeanoAxioms(N, Z, Sc) -Nat == DOMAIN Succ -Zero == CHOOSE Z : PeanoAxioms(Nat, Z, Succ) -============================================================================= diff --git a/examples/SpecifyingSystems/Standard/ProtoReals.tla b/examples/SpecifyingSystems/Standard/ProtoReals.tla deleted file mode 100644 index c63e91bde68c52855b43969cdde5c46a132db2a5..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Standard/ProtoReals.tla +++ /dev/null @@ -1,77 +0,0 @@ ------------------------------ MODULE ProtoReals ----------------------------- -EXTENDS Peano - -IsModelOfReals(R, Plus, Times, Leq) == - LET IsAbelianGroup(G, Id, _+_) == - /\ Id \in G - /\ \A a, b \in G : a + b \in G - /\ \A a \in G : Id + a = a - /\ \A a, b, c \in G : (a + b) + c = a + (b + c) - /\ \A a \in G : \E minusa \in G : a + minusa = Id - /\ \A a, b \in G : a + b = b + a - (**********************************************************************) - (* Plus and Times are functions and Leq is a set, but it's more *) - (* convenient to turn them into the infix operators +, *, and \leq *) - (**********************************************************************) - a + b == Plus[a, b] - a * b == Times[a, b] - a \leq b == <<a, b>> \in Leq - IN /\ Nat \subseteq R - /\ \A n \in Nat : Succ[n] = n + Succ[Zero] - /\ IsAbelianGroup(R, Zero, +) - /\ IsAbelianGroup(R \ {Zero}, Succ[Zero], *) - /\ \A a, b, c \in R : a * (b + c) = (a * b) + (a * c) - /\ \A a, b \in R : /\ (a \leq b) \/ (b \leq a) - /\ (a \leq b) /\ (b \leq a) <=> (a = b) - /\ \A a, b, c \in R : /\ (a \leq b) /\ (b \leq c) => (a \leq c) - /\ (a \leq b) => - /\ (a + c) \leq (b + c) - /\ (Zero \leq c) => (a * c) \leq (b * c) - /\ \A S \in SUBSET R : - LET SBound(a) == \A s \in S : s \leq a - IN (\E a \in R : SBound(a)) => - (\E sup \in R : /\ SBound(sup) - /\ \A a \in R : SBound(a) => (sup\leq a)) - -THEOREM \E R, Plus, Times, Leq : IsModelOfReals(R, Plus, Times, Leq) ------------------------------------------------------------------------------ -RM == CHOOSE RM : IsModelOfReals(RM.R, RM.Plus, RM.Times, RM.Leq) - -Real == RM.R ------------------------------------------------------------------------------ -Infinity == CHOOSE x : x \notin Real -MinusInfinity == CHOOSE x : x \notin Real \cup {Infinity} - -a + b == RM.Plus[a, b] - -a * b == RM.Times[a, b] - -a \leq b == CASE (a \in Real) /\ (b \in Real) -> <<a, b>> \in RM.Leq - [] (a = Infinity) /\ (b \in Real \cup {MinusInfinity}) -> FALSE - [] (a \in Real \cup {MinusInfinity}) /\ (b = Infinity) -> TRUE - [] (a = b) -> TRUE - -a - b == CASE (a \in Real) /\ (b \in Real) -> CHOOSE c \in Real : c + b = a - [] (a \in Real) /\ (b = Infinity) -> MinusInfinity - [] (a \in Real) /\ (b = MinusInfinity) -> Infinity - -a / b == CHOOSE c \in Real : a = b * c - -Int == Nat \cup {Zero - n : n \in Nat} ------------------------------------------------------------------------------ -a ^ b == - LET RPos == {r \in Real \ {Zero} : Zero \leq r} - exp == CHOOSE f \in [(RPos \X Real) \cup (Real \X RPos) - \cup ((Real \ {Zero}) \X Int) -> Real] : - /\ \A r \in Real : - /\ f[r, Succ[Zero]] = r - /\ \A m, n \in Int : (r # Zero) => - (f[r, m+n] = f[r, m] * f[r, n]) - /\ \A r \in RPos : - /\ f[Zero, r] = Zero - /\ \A s, t \in Real : f[r, s*t] = f[f[r, s], t] - /\ \A s, t \in RPos : (s \leq t) => (f[r,s] \leq f[r,t]) - IN exp[a, b] -============================================================================= - - diff --git a/examples/SpecifyingSystems/Standard/README b/examples/SpecifyingSystems/Standard/README deleted file mode 100644 index 7bff472c7b163eacadf298309311d5a145f7b55f..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Standard/README +++ /dev/null @@ -1,17 +0,0 @@ -This folder contains material to accompany the chapter "The Standard -Modules". It has the following files: - -Bags.tla -FiniteSets.tla -Integers.tla -Naturals.tla -Peano.tla -ProtoReals.tla -Reals.tla -Sequences.tla - The files described in the book. - - ------- -Last modified on Sun Aug 12 16:58:05 PDT 2001 by lamport - diff --git a/examples/SpecifyingSystems/Standard/Reals.tla b/examples/SpecifyingSystems/Standard/Reals.tla deleted file mode 100644 index be943c3e17eef3f5d7ded9472b2f16ea4c32e01b..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Standard/Reals.tla +++ /dev/null @@ -1,8 +0,0 @@ --------------------------------- MODULE Reals ------------------------------- -EXTENDS Integers -LOCAL R == INSTANCE ProtoReals - -Real == R!Real -a / b == a R!/ b -Infinity == R!Infinity -============================================================================= \ No newline at end of file diff --git a/examples/SpecifyingSystems/Standard/Sequences.tla b/examples/SpecifyingSystems/Standard/Sequences.tla deleted file mode 100644 index 2d248483b6b6d28b14870547f1493b53fba9d495..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Standard/Sequences.tla +++ /dev/null @@ -1,59 +0,0 @@ ------------------------------- MODULE Sequences ----------------------------- -(***************************************************************************) -(* Defines operators on finite sequences, where a sequence of length n is *) -(* represented as a function whose domain is the set 1..n (the set *) -(* {1, 2, ... , n}). This is also how TLA+ defines an n-tuple, so *) -(* tuples are sequences. *) -(***************************************************************************) - -LOCAL INSTANCE Naturals - (*************************************************************************) - (* Imports the definitions from Naturals, but don't export them. *) - (*************************************************************************) - -Seq(S) == UNION {[1..n -> S] : n \in Nat} - (*************************************************************************) - (* The set of all sequences of elements in S. *) - (*************************************************************************) - -Len(s) == CHOOSE n \in Nat : DOMAIN s = 1..n - (*************************************************************************) - (* The length of sequence s. *) - (*************************************************************************) - -s \o t == [i \in 1..(Len(s) + Len(t)) |-> IF i \leq Len(s) THEN s[i] - ELSE t[i-Len(s)]] - (*************************************************************************) - (* The sequence obtained by concatenating sequences s and t. *) - (*************************************************************************) - -Append(s, e) == s \o <<e>> - (**************************************************************************) - (* The sequence obtained by appending element e to the end of sequence s. *) - (**************************************************************************) - -Head(s) == s[1] -Tail(s) == [i \in 1..(Len(s)-1) |-> s[i+1]] - (*************************************************************************) - (* The usual head (first) and tail (rest) operators. *) - (*************************************************************************) - -SubSeq(s, m, n) == [i \in 1..(1+n-m) |-> s[i+m-1]] - (*************************************************************************) - (* The sequence <<s[m], s[m+1], ... , s[n]>>. *) - (*************************************************************************) - -SelectSeq(s, Test(_)) == - (*************************************************************************) - (* The subsequence of s consisting of all elements s[i] such that *) - (* Test(s[i]) is true. *) - (*************************************************************************) - LET F[i \in 0..Len(s)] == - (*******************************************************************) - (* F[i] equals SelectSeq(SubSeq(s, 1, i), Test] *) - (*******************************************************************) - IF i = 0 THEN << >> - ELSE IF Test(s[i]) THEN Append(F[i-1], s[i]) - ELSE F[i-1] - IN F[Len(s)] -============================================================================= diff --git a/examples/SpecifyingSystems/Syntax/BNFGrammars.tla b/examples/SpecifyingSystems/Syntax/BNFGrammars.tla deleted file mode 100644 index 626942a76f43be3bc328221a1029e9e1d96dce0c..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Syntax/BNFGrammars.tla +++ /dev/null @@ -1,31 +0,0 @@ ----------------------------- MODULE BNFGrammars ----------------------------- -LOCAL INSTANCE Naturals -LOCAL INSTANCE Sequences ------------------------------------------------------------------------------ -OneOf(s) == {<<s[i]>> : i \in DOMAIN s} -tok(s) == {<<s>>} -Tok(S) == {<<s>> : s \in S} ------------------------------------------------------------------------------ -Nil == {<< >>} - -L & M == {s \o t : s \in L, t \in M} - -L | M == L \cup M - -L^+ == - LET LL[n \in Nat] == IF n = 0 THEN L - ELSE LL[n-1] | (LL[n-1] & L) - - IN UNION {LL[n] : n \in Nat} - -L^* == Nil | L^+ ------------------------------------------------------------------------------ -L ::= M == L = M - -Grammar == [STRING -> SUBSET Seq(STRING)] - -LeastGrammar(P(_)) == - CHOOSE G \in Grammar : /\ P(G) - /\ \A H \in Grammar : - P(H) => \A s \in STRING : G[s] \subseteq H[s] -============================================================================= \ No newline at end of file diff --git a/examples/SpecifyingSystems/Syntax/TLAPlusGrammar.tla b/examples/SpecifyingSystems/Syntax/TLAPlusGrammar.tla deleted file mode 100644 index d7e15c307ea9b4e0dc6437cdd2246ce1301897a9..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/Syntax/TLAPlusGrammar.tla +++ /dev/null @@ -1,255 +0,0 @@ ---------------------------- MODULE TLAPlusGrammar --------------------------- -EXTENDS Naturals, Sequences, BNFGrammars - -CommaList(L) == L & (tok(",") & L)^* -AtLeast4(s) == Tok({s \o s \o s} & {s}^+) - -ReservedWord == - { "ASSUME", "ELSE", "LOCAL", "UNION", - "ASSUMPTION", "ENABLED", "MODULE", "VARIABLE", - "AXIOM", "EXCEPT", "OTHER", "VARIABLES", - "CASE", "EXTENDS", "SF_", "WF_", - "CHOOSE", "IF", "SUBSET", "WITH", - "CONSTANT", "IN", "THEN", - "CONSTANTS" , "INSTANCE", "THEOREM", - "DOMAIN", "LET", "UNCHANGED" } - -Letter == OneOf("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") -Numeral == OneOf("0123456789") -NameChar == Letter \cup Numeral \cup {"_"} - -Name == Tok((NameChar^* & Letter & NameChar^*) - \ ({"WF_","SF_"} & NameChar^+)) - - -Identifier == Name \ Tok(ReservedWord) - -IdentifierOrTuple == - Identifier | tok("<<") & CommaList(Identifier) & tok(">>") - -NumberLexeme == - Numeral^+ - | (Numeral^* & {"."} & Numeral^+) - | {"\\b", "\\B"} & OneOf("01")^+ - | {"\\o", "\\O"} & OneOf("01234567")^+ - | {"\\h", "\\H"} & OneOf("0123456789abcdefABCDEF")^+ - -Number == Tok(NumberLexeme) - -String == Tok({"\""} & STRING & {"\""}) - -PrefixOp == Tok({ "-", "~", "\\lnot", "\\neg", "[]", "<>", "DOMAIN", - "ENABLED", "SUBSET", "UNCHANGED", "UNION"}) - -InfixOp == - Tok({ "!!", "#", "##", "$", "$$", "%", "%%", - "&", "&&", "(+)", "(-)", "(.)", "(/)", "(\\X)", - "*", "**", "+", "++", "-", "-+->", "--", - "-|", "..", "...", "/", "//", "/=", "/\\", - "::=", ":=", ":>", "<", "<:", "<=>", "=", - "=<", "=>", "=|", ">", ">=", "?", "??", - "@@", "\\", "\\/", "^", "^^", "|", "|-", - "|=", "||", "~>", ".", - "\\approx", "\\geq", "\\oslash", "\\sqsupseteq", - "\\asymp", "\\gg", "\\otimes", "\\star", - "\\bigcirc", "\\in", "\\prec", "\\subset", - "\\bullet", "\\intersect", "\\preceq", "\\subseteq", - "\\cap", "\\land", "\\propto", "\\succ", - "\\cdot", "\\leq", "\\sim", "\\succeq", - "\\circ", "\\ll", "\\simeq", "\\supset", - "\\cong", "\\lor", "\\sqcap", "\\supseteq", - "\\cup", "\\o", "\\sqcup", "\\union", - "\\div", "\\odot", "\\sqsubset", "\\uplus", - "\\doteq", "\\ominus", "\\sqsubseteq", "\\wr", - "\\equiv", "\\oplus", "\\sqsupset" }) - -PostfixOp == Tok({ "^+", "^*", "^#", "'" }) - -TLAPlusGrammar == - LET P(G) == - /\ G.Module ::= AtLeast4("-") & tok("MODULE") & Name & AtLeast4("-") - & (Nil | (tok("EXTENDS") & CommaList(Name))) - & (G.Unit)^* - & AtLeast4("=") - - /\ G.Unit ::= G.VariableDeclaration - | G.ConstantDeclaration - | (Nil | tok("LOCAL")) & G.OperatorDefinition - | (Nil | tok("LOCAL")) & G.FunctionDefinition - | (Nil | tok("LOCAL")) & G.Instance - | (Nil | tok("LOCAL")) & G.ModuleDefinition - | G.Assumption - | G.Theorem - | G.Module - | AtLeast4("-") - - /\ G.VariableDeclaration ::= - Tok({"VARIABLE", "VARIABLES"}) & CommaList(Identifier) - - /\ G.ConstantDeclaration ::= - Tok({"CONSTANT", "CONSTANTS"}) & CommaList(G.OpDecl) - - /\ G.OpDecl ::= Identifier - | Identifier & tok("(") & CommaList(tok("_")) & tok(")") - | PrefixOp & tok("_") - | tok("_") & InfixOp & tok("_") - | tok("_") & PostfixOp - - /\ G.OperatorDefinition ::= ( G.NonFixLHS - | PrefixOp & Identifier - | Identifier & InfixOp & Identifier - | Identifier & PostfixOp ) - & tok("==") - & G.Expression - - /\ G.NonFixLHS ::= - Identifier - & ( Nil - | tok("(") & CommaList(Identifier | G.OpDecl) & tok(")")) - - /\ G.FunctionDefinition ::= - Identifier - & tok("[") & CommaList(G.QuantifierBound) & tok("]") - & tok("==") - & G.Expression - - /\ G.QuantifierBound ::= (IdentifierOrTuple | CommaList(Identifier)) - & tok("\\in") - & G.Expression - - /\ G.Instance ::= tok("INSTANCE") - & Name - & (Nil | tok("WITH") & CommaList(G.Substitution)) - - /\ G.Substitution ::= (Identifier | PrefixOp | InfixOp | PostfixOp) - & tok("<-") - & G.Argument - - /\ G.Argument ::= G.Expression - | G.GeneralPrefixOp - | G.GeneralInfixOp - | G.GeneralPostfixOp - - /\ G.InstancePrefix ::= - ( Identifier - & ( Nil - | tok("(") & CommaList(G.Expression) & tok(")") ) - & tok("!") )^* - - /\ G.GeneralIdentifier ::= G.InstancePrefix & Identifier - /\ G.GeneralPrefixOp ::= G.InstancePrefix & PrefixOp - /\ G.GeneralInfixOp ::= G.InstancePrefix & InfixOp - /\ G.GeneralPostfixOp ::= G.InstancePrefix & PostfixOp - - /\ G.ModuleDefinition ::= G.NonFixLHS & tok("==") & G.Instance - - /\ G.Assumption ::= - Tok({"ASSUME", "ASSUMPTION", "AXIOM"}) & G.Expression - - /\ G.Theorem ::= tok("THEOREM") & G.Expression - - /\ G.Expression ::= - G.GeneralIdentifier - - | G.GeneralIdentifier & tok("(") - & CommaList(G.Argument) & tok(")") - - | G.GeneralPrefixOp & G.Expression - - | G.Expression & G.GeneralInfixOp & G.Expression - - | G.Expression & G.GeneralPostfixOp - - | tok("(") & G.Expression & tok(")") - - | Tok({"\\A", "\\E"}) & CommaList(G.QuantifierBound) - & tok(":") & G.Expression - - | Tok({"\\A", "\\E", "\\AA", "\\EE"}) & CommaList(Identifier) - & tok(":") & G.Expression - - | tok("CHOOSE") - & IdentifierOrTuple - & (Nil | tok("\\in") & G.Expression) - & tok(":") - & G.Expression - - | tok("{") & (Nil | CommaList(G.Expression)) & tok("}") - - | tok("{") - & IdentifierOrTuple & tok("\\in") & G.Expression - & tok(":") - & G.Expression - & tok("}") - - | tok("{") - & G.Expression - & tok(":") - & CommaList(G.QuantifierBound) - & tok("}") - - | G.Expression & tok("[") & CommaList(G.Expression) & tok("]") - - | tok("[") - & CommaList(G.QuantifierBound) - & tok("|->") - & G.Expression - & tok("]") - - | tok("[") & G.Expression & tok("->") & G.Expression & tok("]") - - | tok("[") & CommaList(Name & tok("|->") & G.Expression) - & tok("]") - - | tok("[") & CommaList(Name & tok(":") & G.Expression) - & tok("]") - - | tok("[") - & G.Expression - & tok("EXCEPT") - & CommaList( tok("!") - & ( tok(".") & Name - | tok("[") & CommaList(G.Expression) & tok("]"))^+ - & tok("=") & G.Expression ) - & tok("]") - - | tok("<<") & CommaList(G.Expression) & tok(">>") - - | G.Expression & (Tok({"\\X", "\\times"}) & G.Expression)^+ - - | tok("[") & G.Expression & tok("]_") & G.Expression - - | tok("<<") & G.Expression & tok(">>_") & G.Expression - - | Tok({"WF_", "SF_"}) & G.Expression - & tok("(") & G.Expression & tok(")") - - | tok("IF") & G.Expression & tok("THEN") - & G.Expression & tok("ELSE") & G.Expression - - | tok("CASE") - & ( LET CaseArm == - G.Expression & tok("->") & G.Expression - IN CaseArm & (tok("[]") & CaseArm)^* ) - & ( Nil - | (tok("[]") & tok("OTHER") & tok("->") & G.Expression)) - - | tok("LET") - & ( G.OperatorDefinition - | G.FunctionDefinition - | G.ModuleDefinition)^+ - & tok("IN") - & G.Expression - - | (tok("/\\") & G.Expression)^+ - - | (tok("\\/") & G.Expression)^+ - - | Number - - | String - - | tok("@") - -IN LeastGrammar(P) -============================================================================= \ No newline at end of file diff --git a/examples/SpecifyingSystems/TLC/ABCorrectness.cfg b/examples/SpecifyingSystems/TLC/ABCorrectness.cfg deleted file mode 100644 index 5b1adce9d53a95b023831a16b7366f2366257721..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/TLC/ABCorrectness.cfg +++ /dev/null @@ -1,7 +0,0 @@ - CONSTANT - Data = {d1, d2} - - SPECIFICATION ABCSpec - - INVARIANT TypeInv - diff --git a/examples/SpecifyingSystems/TLC/ABCorrectness.tla b/examples/SpecifyingSystems/TLC/ABCorrectness.tla deleted file mode 100644 index 15728f03f503acf380126b6565bd2dae1ae380bf..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/TLC/ABCorrectness.tla +++ /dev/null @@ -1,40 +0,0 @@ -------------------- MODULE ABCorrectness -------------------- -EXTENDS Naturals -CONSTANTS Data -VARIABLES sBit, sAck, rBit, sent, rcvd -------------------------------------------------------------- -ABCInit == /\ sBit \in {0, 1} - /\ sAck = sBit - /\ rBit = sBit - /\ sent \in Data - /\ rcvd \in Data - -CSndNewValue(d) == /\ sAck = sBit - /\ sent' = d - /\ sBit' = 1 - sBit - /\ UNCHANGED <<sAck, rBit, rcvd>> - -CRcvMsg == /\ rBit # sBit - /\ rBit' = sBit - /\ rcvd' = sent - /\ UNCHANGED <<sBit, sAck, sent>> - -CRcvAck == /\ rBit # sAck - /\ sAck' = rBit - /\ UNCHANGED <<sBit, rBit, sent, rcvd>> - -ABCNext == \/ \E d \in Data : CSndNewValue(d) - \/ CRcvMsg \/ CRcvAck -------------------------------------------------------------- -cvars == <<sBit, sAck, rBit, sent, rcvd>> - -TypeInv == /\ sBit \in {0, 1} - /\ sAck \in {0, 1} - /\ rBit \in {0, 1} - /\ sent \in Data - /\ rcvd \in Data - -ABCFairness == WF_cvars(CRcvMsg) /\ WF_cvars(CRcvAck) - -ABCSpec == ABCInit /\ [][ABCNext]_cvars /\ ABCFairness -============================================================== diff --git a/examples/SpecifyingSystems/TLC/AlternatingBit.tla b/examples/SpecifyingSystems/TLC/AlternatingBit.tla deleted file mode 100644 index bafcc3abfeea28abb7fee20ac38efa5692551d8e..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/TLC/AlternatingBit.tla +++ /dev/null @@ -1,78 +0,0 @@ ---------------------------- MODULE AlternatingBit --------------------------- -EXTENDS Naturals, Sequences -CONSTANTS Data -VARIABLES msgQ, - ackQ, - sBit, - sAck, - rBit, - sent, - rcvd ------------------------------------------------------------------------------ -ABInit == /\ msgQ = << >> - /\ ackQ = << >> - /\ sBit \in {0, 1} - /\ sAck = sBit - /\ rBit = sBit - /\ sent \in Data - /\ rcvd \in Data - -ABTypeInv == /\ msgQ \in Seq({0,1} \X Data) - /\ ackQ \in Seq({0,1}) - /\ sBit \in {0, 1} - /\ sAck \in {0, 1} - /\ rBit \in {0, 1} - /\ sent \in Data - /\ rcvd \in Data ------------------------------------------------------------------------------ -SndNewValue(d) == - /\ sAck = sBit - /\ sent' = d - /\ sBit' = 1 - sBit - /\ msgQ' = Append(msgQ, <<sBit', d>>) - /\ UNCHANGED <<ackQ, sAck, rBit, rcvd>> - -ReSndMsg == - /\ sAck # sBit - /\ msgQ' = Append(msgQ, <<sBit, sent>>) - /\ UNCHANGED <<ackQ, sBit, sAck, rBit, sent, rcvd>> - -RcvMsg == - /\ msgQ # <<>> - /\ msgQ' = Tail(msgQ) - /\ rBit' = Head(msgQ)[1] - /\ rcvd' = Head(msgQ)[2] - /\ UNCHANGED <<ackQ, sBit, sAck, sent>> - -SndAck == /\ ackQ' = Append(ackQ, rBit) - /\ UNCHANGED <<msgQ, sBit, sAck, rBit, sent, rcvd>> - -RcvAck == /\ ackQ # << >> - /\ ackQ' = Tail(ackQ) - /\ sAck' = Head(ackQ) - /\ UNCHANGED <<msgQ, sBit, rBit, sent, rcvd>> - -Lose(q) == - /\ q # << >> - /\ \E i \in 1..Len(q) : - q' = [j \in 1..(Len(q)-1) |-> IF j < i THEN q[j] - ELSE q[j+1] ] - /\ UNCHANGED <<sBit, sAck, rBit, sent, rcvd>> - -LoseMsg == Lose(msgQ) /\ UNCHANGED ackQ - -LoseAck == Lose(ackQ) /\ UNCHANGED msgQ - -ABNext == \/ \E d \in Data : SndNewValue(d) - \/ ReSndMsg \/ RcvMsg \/ SndAck \/ RcvAck - \/ LoseMsg \/ LoseAck ------------------------------------------------------------------------------ -abvars == << msgQ, ackQ, sBit, sAck, rBit, sent, rcvd>> - -ABFairness == /\ WF_abvars(ReSndMsg) /\ WF_abvars(SndAck) - /\ SF_abvars(RcvMsg) /\ SF_abvars(RcvAck) ------------------------------------------------------------------------------ -ABSpec == ABInit /\ [][ABNext]_abvars /\ ABFairness ------------------------------------------------------------------------------ -THEOREM ABSpec => []ABTypeInv -============================================================================= diff --git a/examples/SpecifyingSystems/TLC/BNFGrammars.tla b/examples/SpecifyingSystems/TLC/BNFGrammars.tla deleted file mode 100644 index 626942a76f43be3bc328221a1029e9e1d96dce0c..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/TLC/BNFGrammars.tla +++ /dev/null @@ -1,31 +0,0 @@ ----------------------------- MODULE BNFGrammars ----------------------------- -LOCAL INSTANCE Naturals -LOCAL INSTANCE Sequences ------------------------------------------------------------------------------ -OneOf(s) == {<<s[i]>> : i \in DOMAIN s} -tok(s) == {<<s>>} -Tok(S) == {<<s>> : s \in S} ------------------------------------------------------------------------------ -Nil == {<< >>} - -L & M == {s \o t : s \in L, t \in M} - -L | M == L \cup M - -L^+ == - LET LL[n \in Nat] == IF n = 0 THEN L - ELSE LL[n-1] | (LL[n-1] & L) - - IN UNION {LL[n] : n \in Nat} - -L^* == Nil | L^+ ------------------------------------------------------------------------------ -L ::= M == L = M - -Grammar == [STRING -> SUBSET Seq(STRING)] - -LeastGrammar(P(_)) == - CHOOSE G \in Grammar : /\ P(G) - /\ \A H \in Grammar : - P(H) => \A s \in STRING : G[s] \subseteq H[s] -============================================================================= \ No newline at end of file diff --git a/examples/SpecifyingSystems/TLC/ConfigFileGrammar.tla b/examples/SpecifyingSystems/TLC/ConfigFileGrammar.tla deleted file mode 100644 index 03b7ac1c32f862f77cebd39ff5a9509b771cf15e..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/TLC/ConfigFileGrammar.tla +++ /dev/null @@ -1,33 +0,0 @@ -------------------------- MODULE ConfigFileGrammar -------------------------- -EXTENDS BNFGrammars ------------------------------------------------------------------------------ -Letter == OneOf("abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ") -Num == OneOf("0123456789") -LetterOrNum == Letter \cup Num -AnyChar == LetterOrNum \cup OneOf("~!@#\\$%^&*-+=|(){}[],:;`'<>.?/") -SingularKW == {"SPECIFICATION", "INIT", "NEXT", "VIEW", "SYMMETRY"} -PluralKW == - {"CONSTRAINT", "CONSTRAINTS", "ACTION-CONSTRAINT", "ACTION-CONSTRAINTS", - "INVARIANT", "INVARIANTS", "PROPERTY", "PROPERTIES"} -Keyword == SingularKW \cup PluralKW \cup {"CONSTANT", "CONSTANTS"} -AnyIdent == LetterOrNum^* & Letter & LetterOrNum^* -Ident == AnyIdent \ Keyword ------------------------------------------------------------------------------ -ConfigGrammar == - LET P(G) == - /\ G.File ::= G.Statement^+ - /\ G.Statement ::= Tok(SingularKW) & Tok(Ident) - | Tok(PluralKW) & Tok(Ident)^* - | Tok({"CONSTANT", "CONSTANTS"}) - & (G.Replacement | G.Assignment)^* - /\ G.Replacement ::= Tok(Ident) & tok("<-") & Tok(AnyIdent) - /\ G.Assignment ::= Tok(Ident) & tok("=") & G.IdentValue - /\ G.IdentValue ::= - Tok(AnyIdent) | G.Number | G.String - | tok("{") - & (Nil | G.IdentValue & (tok(",") & G.IdentValue)^*) - & tok("}") - /\ G.Number ::= (Nil | tok("-")) & Tok(Num^+) - /\ G.String ::= tok("\"") & Tok(AnyChar^*) & tok("\"") - IN LeastGrammar(P) -============================================================================= diff --git a/examples/SpecifyingSystems/TLC/MCAlternatingBit.cfg b/examples/SpecifyingSystems/TLC/MCAlternatingBit.cfg deleted file mode 100644 index c593bdbb7f053979d4190bcf002a41f571412ba9..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/TLC/MCAlternatingBit.cfg +++ /dev/null @@ -1,20 +0,0 @@ - CONSTANT - Data = {d1, d2} - msgQLen = 2 - ackQLen = 2 - -SPECIFICATION ABSpec -INVARIANT ABTypeInv -CONSTRAINT SeqConstraint - -PROPERTIES ABCSpec SentLeadsToRcvd - -\* TEMPORAL ABFairness - -\* IMPLIED-TEMPORAL SentLeadsToRcvd - -\* IMPLIED-INIT ABCInit - -\* IMPLIED-ACTION ImpliedAction - -\* SYMMETRY DataPerm \ No newline at end of file diff --git a/examples/SpecifyingSystems/TLC/MCAlternatingBit.tla b/examples/SpecifyingSystems/TLC/MCAlternatingBit.tla deleted file mode 100644 index 0e3096f8b08303456fe8d5d3a2f24e3c88571c64..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/TLC/MCAlternatingBit.tla +++ /dev/null @@ -1,22 +0,0 @@ ---------------------------- MODULE MCAlternatingBit ------------------------- -EXTENDS AlternatingBit - -INSTANCE ABCorrectness - -CONSTANTS msgQLen, ackQLen - -SeqConstraint == /\ Len(msgQ) \leq msgQLen - /\ Len(ackQ) \leq ackQLen - -SentLeadsToRcvd == \A d \in Data : (sent = d) /\ (sBit # sAck) ~> (rcvd = d) -============================================================================= - -ImpliedAction == [ABCNext]_cvars - -TNext == WF_msgQ(~ABTypeInv') -TProp == \A d \in Data : (sent = d) => [](sent = d) - -CSpec == ABSpec /\ TNext - -\* DataPerm == Permutations(Data) -============================================================== diff --git a/examples/SpecifyingSystems/TLC/README b/examples/SpecifyingSystems/TLC/README deleted file mode 100644 index e77dcd27d5ff745e82674c13e7f3f0f082d4ecda..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/TLC/README +++ /dev/null @@ -1,35 +0,0 @@ -This folder contains material to accompany the chapter "The TLC Model -Checker". It has the following files: - -AlternatingBit.tla -ABCorrectness.tla -ABCorrectness.cfg -ConfigFileGrammar.tla -MCAlternatingBit.tla -MCAlternatingBit.cfg - The files described in the book. - - -BNFGrammars.tla - A copy of the module from folder AdvancedExamples -TLC.tla - A copy of the standard module. - - -Exercises: - -1. (a) Use TLC to print all Pythagorean triples <<i,j,k>> with - i^2 + j^2 = k^2 for natural numbers i,j,k \leq N. - Start with N=20. (Don't be clever and use the formula for - generating Pythagorean triples; have TLC to it in a straightforward - fashion.) - - (b) Next, get TLC to print only essentially Pythagorean triples--that - is, Pythagorean triples <<i, j, k>> such that i \leq j and i,j, and k - have no common factor. Try it with N = 50, 100, ... . Why does TLC - take longer to generate each example as N increases? - - ------- -Last modified on Wed Aug 8 11:52:08 PDT 2001 by lamport - diff --git a/examples/SpecifyingSystems/TLC/TLC.tla b/examples/SpecifyingSystems/TLC/TLC.tla deleted file mode 100644 index c87fcef6b8728f920b941149c5461495f1d7fca2..0000000000000000000000000000000000000000 --- a/examples/SpecifyingSystems/TLC/TLC.tla +++ /dev/null @@ -1,25 +0,0 @@ -------------------------------- MODULE TLC ---------------------------------- -LOCAL INSTANCE Naturals -LOCAL INSTANCE Sequences ------------------------------------------------------------------------------ -Print(out, val) == val -Assert(val, out) == IF val = TRUE THEN TRUE - ELSE CHOOSE v : TRUE -JavaTime == CHOOSE n : n \in Nat ------------------------------------------------------------------------------ -d :> e == [x \in {d} |-> e] -f @@ g == [x \in (DOMAIN f) \cup (DOMAIN g) |-> - IF x \in DOMAIN f THEN f[x] ELSE g[x]] -Permutations(S) == - {f \in [S -> S] : \A w \in S : \E v \in S : f[v]=w} ------------------------------------------------------------------------------ -(***************************************************************************) -(* In the following definition, we use Op as the formal parameter rather *) -(* than \prec because TLC Version 1 can't handle infix formal parameters. *) -(***************************************************************************) -SortSeq(s, Op(_, _)) == - LET Perm == CHOOSE p \in Permutations(1 .. Len(s)) : - \A i, j \in 1..Len(s) : - (i < j) => Op(s[p[i]], s[p[j]]) \/ (s[p[i]] = s[p[j]]) - IN [i \in 1..Len(s) |-> s[Perm[i]]] -============================================================================= diff --git a/examples/Stones/Stones.tla b/examples/Stones/Stones.tla deleted file mode 100644 index 2036c26b1672c9e737253c1b9f0c4f1addfe3d88..0000000000000000000000000000000000000000 --- a/examples/Stones/Stones.tla +++ /dev/null @@ -1,104 +0,0 @@ -------------------------------- MODULE Stones ------------------------------- -(***************************************************************************) -(* The following problem was posed on an American radio program called Car *) -(* Talk. Given a stone that weighs 40 pound and a balance scale, cut the *) -(* stone into 4 pieces so that one can weigh any stone with an integral *) -(* weight between 1 and 40 pounds. *) -(* *) -(* Since there are only 2^4 - 1 = 16 non-empty subsets of the 4 pieces, we *) -(* quickly deduce that we need to be able to put pieces on both sides of *) -(* the balance to do this. Putting a piece weighing w pounds on the same *) -(* side of the balance as the stone we are weighing is equivalent to *) -(* placing a stone weighing -w pounds on the opposite side, we quickly see *) -(* that the problem is to find natural numbers w1, ... , w4 such that for *) -(* every weight w in 1..40, there exist numbers x1, ... , x4 in {-1,0,1} *) -(* such that w = x1*w1 + ... + x4*w4. *) -(* *) -(* It's easy to have TLC find the solution by having it evaluate an *) -(* assumption that's a formula that quantifies the subformula *) -(* *) -(* IF \A w \in 1..40 : w = x1*w1 + ... + x4*w4 *) -(* THEN PrintT(<<w1, ... , w4>>) *) -(* ELSE FALSE *) -(* *) -(* over x1, ... , x4 and w1, ..., w4. As a more interesting problem, we *) -(* here do it replacing 40 and 4 by constants W and N. *) -(***************************************************************************) -EXTENDS Integers, Sequences, FiniteSets, TLC - -(***************************************************************************) -(* We will need to take sums of sequences of numbers, so we define SeqSum *) -(* to do that. *) -(***************************************************************************) -RECURSIVE SeqSum(_) -SeqSum(s) == IF Len(s) = 0 THEN 0 ELSE Head(s) + SeqSum(Tail(s)) - -CONSTANTS W, N -ASSUME W \in Nat /\ N \in 1..W - -(***************************************************************************) -(* Let a partition be a sequence N numbers that sum to W. To find a *) -(* solution, we let TLC examine all such partitions. For efficiency, we *) -(* don't have it check partitions that are the same except for the order *) -(* of the numbers. So, we have it check only ordered partitions, which *) -(* are non-decreasing sequences of natural numbers. *) -(* *) -(* We define the recursive operator Partitions so that for seq an ordered *) -(* sequence of numbers that sum to W - wt, Partitions(seq, wt) is the set *) -(* of all ordered partitions that end in the subsequence seq. Thus, *) -(* Partitions(<< >>, W) is the set of all ordered partitions. *) -(* *) -(* Since the first N - Len(seq) elements of a such an ordered partition *) -(* must all be at least 1 and at most Head(s), we see that Partitions(seq, *) -(* wt) is non-empty only if *) -(* *) -(* N - Len(seq) =< wt =< Head(seq) * (N - Len(seq)) *) -(* *) -(* This observation explains the local definition of S in the following *) -(* definition. *) -(***************************************************************************) -RECURSIVE Partitions(_ , _) -Partitions(seq, wt) == - IF Len(seq) = N - THEN {seq} - ELSE LET r == N - Len(seq) - max == IF Len(seq) = 0 THEN wt ELSE Head(seq) - S == {x \in 1..max : /\ (r-1) =< (wt - x) - /\ wt =< x*r } - IN UNION { Partitions(<<x>> \o seq, wt - x ) : x \in S } - -(***************************************************************************) -(* For convenience, we define Weighs(seq, wt) to be true if the elements *) -(* of the sequence seq sum to wt. *) -(***************************************************************************) -Weighs(seq, wt) == - \E coef \in [1..N -> -1..1] : - SeqSum([i \in 1..N |-> coef[i] * seq[i]]) = wt - -(***************************************************************************) -(* We now assert the following ASSUME, which TLC will evaluate by either *) -(* printing a solution to the problem or printing "No solution". We then *) -(* just create a model that assigns values to W and N and run TLC. *) -(***************************************************************************) -ASSUME \/ \E p \in Partitions(<< >>, W) : - IF \A wt \in 1..W : Weighs(p, wt) - THEN PrintT(p) - ELSE FALSE - \/ PrintT("No solution") - -(***************************************************************************) -(* It takes TLC just a few seconds to find the solution to the original *) -(* problem, with W = 40 and N = 4. That solution should allow you to *) -(* guess for what values of W and N there exists a solution and what the *) -(* solution is. Proving correctness of your guess is harder. *) -(* *) -(* TLC will check the assumption in less than a minute You can quickly *) -(* check your guess with values of W and N up to around 70 and 6, *) -(* respectively. However, it will probably run for centuries with W large *) -(* enough so there is no solution for N = 5. I doubt if there's any way *) -(* to do much better with a brute force solution. *) -(***************************************************************************) -============================================================================= -\* Modification History -\* Last modified Wed Feb 04 16:44:37 PST 2015 by lamport -\* Created Wed Feb 04 13:33:09 PST 2015 by lamport diff --git a/examples/TransitiveClosure/TransitiveClosure.pdf b/examples/TransitiveClosure/TransitiveClosure.pdf deleted file mode 100644 index 43319fc64517390325dce1fa946bd692f4bb007d..0000000000000000000000000000000000000000 Binary files a/examples/TransitiveClosure/TransitiveClosure.pdf and /dev/null differ diff --git a/examples/TransitiveClosure/TransitiveClosure.tla b/examples/TransitiveClosure/TransitiveClosure.tla deleted file mode 100644 index 442cd5829eb3cbfcc1f017f14f44581953f563e8..0000000000000000000000000000000000000000 --- a/examples/TransitiveClosure/TransitiveClosure.tla +++ /dev/null @@ -1,174 +0,0 @@ --------------------------- MODULE TransitiveClosure ------------------------- -(***************************************************************************) -(* Mathematicians define a relation R to be a set of ordered pairs, and *) -(* write `s R t' to mean `<<s, t>> \in R'. The transitive closure TC(R) *) -(* of the relation R is the smallest relation containg R such that, *) -(* `s TC(R) t' and `t TC(R) u' imply `s TC(R) u', for any s, t, and u. *) -(* This module shows several ways of defining the operator TC. *) -(* *) -(* It is sometimes more convenient to represent a relation as a *) -(* Boolean-valued function of two arguments, where `s R t' means R[s, t]. *) -(* It is a straightforward exercise to translate everything in this module *) -(* to that representation. *) -(* *) -(* Mathematicians say that R is a relation on a set S iff R is a subset of *) -(* S \X S. Let the `support' of a relation R be the set of all elements s *) -(* such that `s R t' or `t R s' for some t. Then any relation is a *) -(* relation on its support. Moreover, the support of R is the support of *) -(* TC(R). So, to define the transitive closure of R, there's no need to *) -(* say what set R is a relation on. *) -(* *) -(* Let's begin by importing some modules we'll need and defining the the *) -(* support of a relation. *) -(***************************************************************************) -EXTENDS Integers, Sequences, FiniteSets, TLC - -Support(R) == {r[1] : r \in R} \cup {r[2] : r \in R} - -(***************************************************************************) -(* A relation R defines a directed graph on its support, where there is an *) -(* edge from s to t iff `s R t'. We can define TC(R) to be the relation *) -(* such that `s R t' holds iff there is a path from s to t in this graph. *) -(* We represent a path by the sequence of nodes on the path, so the length *) -(* of the path (the number of edges) is one greater than the length of the *) -(* sequence. We then get the following definition of TC. *) -(***************************************************************************) -TC(R) == - LET S == Support(R) - IN {<<s, t>> \in S \X S : - \E p \in Seq(S) : /\ Len(p) > 1 - /\ p[1] = s - /\ p[Len(p)] = t - /\ \A i \in 1..(Len(p)-1) : <<p[i], p[i+1]>> \in R} - -(***************************************************************************) -(* This definition can't be evaluated by TLC because Seq(S) is an infinite *) -(* set. However, it's not hard to see that if R is a finite set, then it *) -(* suffices to consider paths whose length is at most Cardinality(S). *) -(* Modifying the definition of TC we get the following definition that *) -(* defines TC1(R) to be the transitive closure of R, if R is a finite set. *) -(* The LET expression defines BoundedSeq(S, n) to be the set of all *) -(* sequences in Seq(S) of length at most n. *) -(***************************************************************************) -TC1(R) == - LET BoundedSeq(S, n) == UNION {[1..i -> S] : i \in 0..n} - S == Support(R) - IN {<<s, t>> \in S \X S : - \E p \in BoundedSeq(S, Cardinality(S)+1) : - /\ Len(p) > 1 - /\ p[1] = s - /\ p[Len(p)] = t - /\ \A i \in 1..(Len(p)-1) : <<p[i], p[i+1]>> \in R} - -(***************************************************************************) -(* This naive method used by TLC to evaluate expressions makes this *) -(* definition rather inefficient. (As an exercise, find an upper bound on *) -(* its complexity.) To obtain a definition that TLC can evaluate more *) -(* efficiently, let's look at the closure operation more algebraically. *) -(* Let's define the composition of two relations R and T as follows. *) -(***************************************************************************) -R ** T == LET SR == Support(R) - ST == Support(T) - IN {<<r, t>> \in SR \X ST : - \E s \in SR \cap ST : (<<r, s>> \in R) /\ (<<s, t>> \in T)} - -(***************************************************************************) -(* We can then define the closure of R to equal *) -(* *) -(* R \cup (R ** R) \cup (R ** R ** R) \cup ... *) -(* *) -(* For R finite, this union converges to the transitive closure when the *) -(* number of terms equals the cardinality of the support of R. This leads *) -(* to the following definition. *) -(***************************************************************************) -TC2(R) == - LET C[n \in Nat] == IF n = 0 THEN R - ELSE C[n-1] \cup (C[n-1] ** R) - IN IF R = {} THEN {} ELSE C[Cardinality(Support(R)) - 1] - -(***************************************************************************) -(* These definitions of TC1 and TC2 are somewhat unsatisfactory because of *) -(* their use of Cardinality(S). For example, it would be easy to make a *) -(* mistake and use Cardinality(S) instead of Cardinality(S)+1 in the *) -(* definition of TC1(R). I find the following definition more elegant *) -(* than the preceding two. It is also more asymptotically more efficient *) -(* because it makes O(log Cardinality (S)) rather than O(Cardinality(S)) *) -(* recursive calls. *) -(***************************************************************************) -RECURSIVE TC3(_) -TC3(R) == LET RR == R ** R - IN IF RR \subseteq R THEN R ELSE TC3(R \cup RR) - -(***************************************************************************) -(* The preceding two definitions can be made slightly more efficient to *) -(* execute by expanding the definition of ** and making some simple *) -(* optimizations. But, this is unlikely to be worth complicating the *) -(* definitions for. *) -(* *) -(* The following definition is (asymptotically) the most efficient. It is *) -(* essentially the TLA+ representation of Warshall's algorithm. *) -(* (Warshall's algorithm is typically written as an iterative procedure *) -(* for the case of a relation on a set i..j of integers, when the relation *) -(* is represented as a Boolean-valued function.) *) -(***************************************************************************) -TC4(R) == - LET S == Support(R) - RECURSIVE TCR(_) - TCR(T) == IF T = {} - THEN R - ELSE LET r == CHOOSE s \in T : TRUE - RR == TCR(T \ {r}) - IN RR \cup {<<s, t>> \in S \X S : - <<s, r>> \in RR /\ <<r, t>> \in RR} - IN TCR(S) - -(***************************************************************************) -(* We now test that these four definitions are equivalent. Since it's *) -(* unlikely that all four are wrong in the same way, their equivalence *) -(* makes it highly probable that they're correct. *) -(***************************************************************************) -ASSUME \A N \in 0..3 : - \A R \in SUBSET ((1..N) \X (1..N)) : /\ TC1(R) = TC2(R) - /\ TC2(R) = TC3(R) - /\ TC3(R) = TC4(R) - -(***************************************************************************) -(* Sometimes we want to represent a relation as a Boolean-valued operator, *) -(* so we can write `s R t' as R(s, t). This representation is less *) -(* convenient for manipulating relations, since an operator is not an *) -(* ordinary value the way a function is. For example, since TLA+ does not *) -(* permit us to define operator-valued operators, we cannot define a *) -(* transitive closure operator TC so TC(R) is the operator that represents *) -(* the transitive closure. Moreover, an operator R by itself cannot *) -(* represent a relation; we also have to know what set it is an operator *) -(* on. (If R is a function, its domain tells us that.) *) -(* *) -(* However, there may be situations in which you want to represent *) -(* relations by operators. In that case, you can define an operator TC so *) -(* that, if R is an operator representing a relation on S, and TCR is the *) -(* operator representing it transitive closure, then *) -(* *) -(* TCR(s, t) = TC(R, S, s, t) *) -(* *) -(* for all s, t. Here is the definition. (This assumes that for an *) -(* operator R on a set S, R(s, t) equals FALSE for all s and t not in S.) *) -(***************************************************************************) -TC5(R(_,_), S, s, t) == - LET CR[n \in Nat, v \in S] == - IF n = 0 THEN R(s, v) - ELSE \/ CR[n-1, v] - \/ \E u \in S : CR[n-1, u] /\ R(u, v) - IN /\ s \in S - /\ t \in S - /\ CR[Cardinality(S)-1, t] - -(***************************************************************************) -(* Finally, the following assumption checks that our definition TC5 agrees *) -(* with our definition TC1. *) -(***************************************************************************) -ASSUME \A N \in 0..3 : \A R \in SUBSET ((1..N) \X (1..N)) : - LET RR(s, t) == <<s, t>> \in R - S == Support(R) - IN \A s, t \in S : - TC5(RR, S, s, t) <=> (<<s, t>> \in TC1(R)) -============================================================================= diff --git a/examples/TwoPhase/Alternate.tla b/examples/TwoPhase/Alternate.tla deleted file mode 100644 index 6c45ec755eafc3156cc35d58b380134719df550b..0000000000000000000000000000000000000000 --- a/examples/TwoPhase/Alternate.tla +++ /dev/null @@ -1,34 +0,0 @@ ------------------------------- MODULE Alternate ----------------------------- -(***************************************************************************) -(* This specifies a system that alternately performs two actions, which *) -(* for now I will call A_0 and A_1. It uses a variable v whose value *) -(* alternates between 0 and 1, performing an A_0 action when v changes *) -(* from 0 to 1, and an A_1 action when v changes from 1 to 0. *) -(* *) -(* We let the variable x to represent the part of the state that is *) -(* changed by the A_0 and A_1 actions. We introduce two constant *) -(* operators XInit and XAct, where XInit(x) is assumed to assert that x *) -(* has a correct initial value, and XAct(i, xInit, xNext) is assumed to *) -(* assert that changing the value of x from xInit to xNext represent an *) -(* A_i action, for i=0, 1. *) -(***************************************************************************) -EXTENDS Naturals -VARIABLE v, x -CONSTANT XInit(_), XAct(_, _, _) - -Init == v = 0 /\ XInit(x) -Next == v' = (v + 1) % 2 /\ XAct(v, x, x') - -Spec == Init /\ [][Next]_<<v,x>> - -(***************************************************************************) -(* A philosophically correct spec would actually be *) -(* *) -(* \EE v : Spec *) -(* *) -(* which is the specification Spec with v hidden. However, engineers are *) -(* interested in what works, not what is philosophically correct, so we *) -(* don't worry about this. *) -(***************************************************************************) -============================================================================ -\* Generated at Sat Oct 31 02:58:46 PDT 2009 diff --git a/examples/TwoPhase/README b/examples/TwoPhase/README deleted file mode 100644 index 1b3c7223125da3d4e1dd96d8897124e2aae96b65..0000000000000000000000000000000000000000 --- a/examples/TwoPhase/README +++ /dev/null @@ -1,13 +0,0 @@ -This directory contains two specifications: - -Alternate - A specification of a trivial alternation system. - The only non-trivial aspect of the spec is the way it uses - constant operator parameters to describe unspecified actions. - -TwoPhase - A specification of a very simple hardware protocol called - two-phase handshaking, and a theorem asserting that it - implements the Alternate spec under a refinement mapping. - It contains a TLA+ proof of this theorem, most of which that has been - checked by the TLAPS proof system. \ No newline at end of file diff --git a/examples/TwoPhase/TwoPhase.tla b/examples/TwoPhase/TwoPhase.tla deleted file mode 100644 index 03d1755bdbc35b499fa25a9679a6aec6acf19444..0000000000000000000000000000000000000000 --- a/examples/TwoPhase/TwoPhase.tla +++ /dev/null @@ -1,138 +0,0 @@ ----------------------- MODULE TwoPhase ----------------------- -(***************************************************************************) -(* This module specifies the two-phase handshake, which is a simple but *) -(* very important hardware protocol by which a Producer process and a *) -(* Consumer process alternately perform actions, with the Producer going *) -(* first. The system is pictured as follows: *) -(* *) -(* `. *) -(* ------------ p ------------ *) -(* | | -----------------> | | *) -(* | Producer | | Consumer | *) -(* | | <----------------- | | *) -(* ------------ c ------------ .' *) -(* *) -(* *) -(* In the spec, we represent the Producer and Consumer actions the way we *) -(* represented the actions A_0 and A_1 of the Alternate specification. We *) -(* then show that this specification implements the Alternate *) -(* specification under a suitable refinement mapping (substitution for the *) -(* variable v). *) -(***************************************************************************) -EXTENDS Naturals, TLAPS - -CONSTANT XInit(_), XAct(_, _, _) - -VARIABLE p, c, x - -Init == /\ p = 0 - /\ c = 0 - /\ XInit(x) - -ProducerStep == /\ p = c - /\ XAct(0, x, x') - /\ p' = (p + 1) % 2 - /\ c' = c - -ConsumerStep == /\ p # c - /\ XAct(1, x, x') - /\ c' = (c + 1) % 2 - /\ p' = p - -Next == ProducerStep \/ ConsumerStep - -Spec == Init /\ [][Next]_<<p, c, x>> - - -(***************************************************************************) -(* Inv is the invariant that is needed for the proof. *) -(***************************************************************************) -Inv == (p \in {0,1}) /\ (c \in {0,1}) - -(***************************************************************************) -(* We prove that specification Spec implement (implies) the specification *) -(* obtained by substiting a state function vBar for the variable v, where *) -(* vBar is defined as follows. *) -(***************************************************************************) -vBar == (p + c) % 2 - -(***************************************************************************) -(* The following statement imports, for every defined operator D of module *) -(* Alternate, a definition of A!D to equal the definition of D with vBar *) -(* substituted for v and with the parameters x, XInit, and XAct of this *) -(* module substituted for the parameters of the same name of module *) -(* Alternate. Thus, A!Spec is defined to be the formula Spec of module *) -(* Alternate with vBar substituted for v. *) -(***************************************************************************) -A == INSTANCE Alternate WITH v <- vBar - -(***************************************************************************) -(* Our proof requires the following simple fact about the modulus operator *) -(* % . It is proved using a decision procedure, as explained in the *) -(* comments in the TLAProofRules module. *) -(* *) -(* Often, a proof requires a simple mathematical fact that cannot be *) -(* deduced so easily by the Proof System. In fact, the Proof System may *) -(* not even know some basic mathematical facts needed to prove it. *) -(* Proving the needed fact is a fun exercise for those who enjoy that sort *) -(* of thing. It's painful for the rest of us. Eventually, we will have a *) -(* library with lots of useful facts that you can import. But such a *) -(* library is unlikely ever to contain all the simple mathematical *) -(* theoresm that you'll ever need. *) -(* *) -(* We are primarily interested in making the Proof System useful to people *) -(* who want to prove things about algorithms and systems, not for those *) -(* who want to prove theorems of mathematics. (We hope that the Proof *) -(* System will be good for doing those proofs too, but we are not doing *) -(* anything special to achieve this.) We expect that most users will *) -(* simply assume these mathematical facts. However, it's dangerous to *) -(* assume the truth of a theorem without checking it in some way. It's *) -(* easy to make a mistake and write a false theorem, and assuming a false *) -(* theorem could allow you to prove other false theorems. So, you should *) -(* use the TLC model checker to check any fact that you assume. In most *) -(* cases, TLC won't be able to check the actual theorem. But it should be *) -(* able to do a good enough job to catch errors. For example, TLC can't *) -(* check that a theorem is true for all integers. However, in practice we *) -(* expect that you will be able to check it for a large enough subset of *) -(* the integers to gain sufficient confidence that the theorem really is *) -(* true. In this case, TLC could check the actual theorem. *) -(***************************************************************************) -THEOREM Mod2 == \A i \in {0,1} : /\ (i + 1) % 2 = 1 - i - /\ (i + 0) % 2 = i -BY SimpleArithmetic - - -(***************************************************************************) -(* The following theorem is a standard proof that one specification *) -(* implements (the safety part of) another specification under a *) -(* refinement mapping. In fact, the temporal leaf proofs will be exactly *) -(* the same one-liners for every such proof. In realistic example, the *) -(* non-temporal leaf proofs will be replaced by fairly long structured *) -(* proofs--especially the two substeps numbered <2>2. *) -(***************************************************************************) -THEOREM Implementation == Spec => A!Spec -<1>1. Spec => []Inv - <2>1. Init => Inv - BY DEF Init, Inv - <2>2. Inv /\ [Next]_<<p, c, x>> => Inv' - BY Mod2 DEF Inv, Next, ProducerStep, ConsumerStep - <2>3. QED -\* <3>1. Inv /\ [][Next]_<<p, c, x>> => []Inv -\* BY <2>2, Inv1 -\* <3>2. QED -\* BY <3>1, <2>1 DEF Spec - PROOF OMITTED \* TLAPS does not yet do temporal-logic reasoning -<1>2. QED - <2>1. Init => A!Init - BY Mod2 DEF Init, A!Init, vBar - <2>2. Inv /\ [Next]_<<p, c, x>> => [A!Next]_<<vBar, x>> - BY Mod2 DEF Inv, Next, ProducerStep, ConsumerStep, A!Next, vBar - <2>3. []Inv /\ [][Next]_<<p, c, x>> => [][A!Next]_<<vBar, x>> -\* BY <2>2, StepSimulation - PROOF OMITTED \* TLAPS does not yet do temporal-logic reasoning - <2>4. QED -\* BY <2>1, <2>3, <1>1 DEF Spec, A!Spec - PROOF OMITTED \* TLAPS does not yet do temporal-logic reasoning - -============================================================== -\* Generated at Sat Oct 31 03:15:55 PDT 2009 diff --git a/examples/allocator/AllocatorImplementation.cfg b/examples/allocator/AllocatorImplementation.cfg deleted file mode 100644 index efc0569122e3bfbbd4ba9e6ba96a543e4d761f54..0000000000000000000000000000000000000000 --- a/examples/allocator/AllocatorImplementation.cfg +++ /dev/null @@ -1,15 +0,0 @@ -CONSTANT - Clients = {c1,c2,c3} - Resources = {r1,r2} - -SPECIFICATION - Specification - -INVARIANTS - TypeInvariant ResourceMutex - Invariant - -PROPERTIES -\* ClientsWillReturn InfOftenSatisfied -\* ClientsWillObtain - SchedAllocator \ No newline at end of file diff --git a/examples/allocator/AllocatorImplementation.tla b/examples/allocator/AllocatorImplementation.tla deleted file mode 100644 index 87283be402577451631256ab2015fcfac3ae4831..0000000000000000000000000000000000000000 --- a/examples/allocator/AllocatorImplementation.tla +++ /dev/null @@ -1,204 +0,0 @@ ----------------------- MODULE AllocatorImplementation ------------------- -(***********************************************************************) -(* Specification of an allocator managing a set of resources: *) -(* - Clients can request sets of resources whenever all their previous *) -(* requests have been satisfied. *) -(* - Requests can be partly fulfilled, and resources can be returned *) -(* even before the full request has been satisfied. However, clients *) -(* only have an obligation to return resources after they have *) -(* obtained all resources they requested. *) -(* This allocator operates by repeatedly choosing a schedule according *) -(* to which requests are satisfied. Resources can be allocated out of *) -(* order as long as no client earlier in the schedule asks for them. *) -(* This module adds communication between the allocator and the client *) -(* processes, which now hold some local state. *) -(***********************************************************************) - -EXTENDS FiniteSets, Sequences, Naturals - -CONSTANTS - Clients, \* set of all clients - Resources \* set of all resources - -ASSUME - IsFiniteSet(Resources) - -VARIABLES - (** variables held by the allocator **) - unsat, \* set of all outstanding requests per process - alloc, \* set of resources allocated to given process - sched, \* schedule represented as a sequence of clients - (** variables of the clients **) - requests, \* pending requests per client - holding, \* resources currently held by the client - (** communication network between clients and allocator **) - network \* set of messages in transit - -Sched == INSTANCE SchedulingAllocator - -------------------------------------------------------------------------- - -Messages == - [type : {"request", "allocate", "return"}, - clt : Clients, - rsrc : SUBSET Resources] - -TypeInvariant == - /\ Sched!TypeInvariant - /\ requests \in [Clients -> SUBSET Resources] - /\ holding \in [Clients -> SUBSET Resources] - /\ network \in SUBSET Messages - -------------------------------------------------------------------------- - -(* Initially, no resources have been requested or allocated. *) -Init == - /\ Sched!Init - /\ requests = [c \in Clients |-> {}] - /\ holding = [c \in Clients |-> {}] - /\ network = {} - -(* A client c may request a set of resources provided that it has *) -(* neither pending requests nor holds any resources. The request is *) -(* put into the network for delivery to the allocator. *) -Request(c,S) == - /\ requests[c] = {} /\ holding[c] = {} - /\ S # {} /\ requests' = [requests EXCEPT ![c] = S] - /\ network' = network \cup {[type |-> "request", clt |-> c, rsrc |-> S]} - /\ UNCHANGED <<unsat,alloc,sched,holding>> - -(* Reception of a request message from a client by the allocator. *) -(* The allocator updates its data structures and inserts the client *) -(* into the pool of clients with pending requests. *) -RReq(m) == - /\ m \in network /\ m.type = "request" - /\ alloc[m.clt] = {} \** don't handle request messages prematurely(!) - /\ unsat' = [unsat EXCEPT ![m.clt] = m.rsrc] - /\ network' = network \ {m} - /\ UNCHANGED <<alloc,sched,requests,holding>> - -(* Allocation of a set of available resources to a client that has *) -(* requested them (the entire request does not have to be filled). *) -(* The process must appear in the schedule, and no process earlier in *) -(* the schedule may have requested one of the resources. *) -Allocate(c,S) == - /\ Sched!Allocate(c,S) - /\ network' = network \cup {[type |-> "allocate", clt |-> c, rsrc |-> S]} - /\ UNCHANGED <<requests,holding>> - -(* Reception of an allocation message by a client. *) -RAlloc(m) == - /\ m \in network /\ m.type = "allocate" - /\ holding' = [holding EXCEPT ![m.clt] = @ \cup m.rsrc] - /\ requests' = [requests EXCEPT ![m.clt] = @ \ m.rsrc] - /\ network' = network \ {m} - /\ UNCHANGED <<unsat,alloc,sched>> - -(* Client c returns a set of resources that it holds. It may do so *) -(* even before its full request has been honored. *) -Return(c,S) == - /\ S # {} /\ S \subseteq holding[c] - /\ holding' = [holding EXCEPT ![c] = @ \ S] - /\ network' = network \cup {[type |-> "return", clt |-> c, rsrc |-> S]} - /\ UNCHANGED <<unsat,alloc,sched,requests>> - -(* Reception of a return message by the allocator. *) -RRet(m) == - /\ m \in network /\ m.type = "return" - /\ alloc' = [alloc EXCEPT ![m.clt] = @ \ m.rsrc] - /\ network' = network \ {m} - /\ UNCHANGED <<unsat,sched,requests,holding>> - -(* The allocator extends its schedule by adding the processes from *) -(* the pool (that have outstanding requests but that have not yet been *) -(* scheduled, in some unspecified order. *) -Schedule == - /\ Sched!Schedule - /\ UNCHANGED <<requests,holding,network>> - -(* The next-state relation per client and set of resources. *) -Next == - \/ \E c \in Clients, S \in SUBSET Resources : - Request(c,S) \/ Allocate(c,S) \/ Return(c,S) - \/ \E m \in network : - RReq(m) \/ RAlloc(m) \/ RRet(m) - \/ Schedule - -vars == <<unsat,alloc,sched,requests,holding,network>> - -------------------------------------------------------------------------- - -(***********************************************************************) -(* Liveness assumptions: *) -(* - Clients must return resources if their request has been satisfied.*) -(* - The allocator must eventually allocate resources when possible. *) -(* - The allocator must schedule the processes in the pool. *) -(* - Messages must eventually be received. *) -(***********************************************************************) - -Liveness == - /\ \A c \in Clients : WF_vars(requests[c]={} /\ Return(c,holding[c])) - /\ \A c \in Clients : WF_vars(\E S \in SUBSET Resources : Allocate(c, S)) - /\ WF_vars(Schedule) - /\ \A m \in Messages : - /\ WF_vars(RReq(m)) - /\ WF_vars(RAlloc(m)) - /\ WF_vars(RRet(m)) - -(* The specification of the entire system *) -Specification == Init /\ [][Next]_vars /\ Liveness - -------------------------------------------------------------------------- - -RequestsInTransit(c) == \** requests sent by c but not yet received - { msg.rsrc : msg \in {m \in network : m.type = "request" /\ m.clt = c} } - -AllocsInTransit(c) == \** allocations sent to c but not yet received - { msg.rsrc : msg \in {m \in network : m.type = "allocate" /\ m.clt = c} } - -ReturnsInTransit(c) == \** return messages sent by c but not yet received - { msg.rsrc : msg \in {m \in network : m.type = "return" /\ m.clt = c} } - -Invariant == \** a lower-level invariant - (** invariants for the allocator's data structures as before **) - /\ Sched!AllocatorInvariant - (** interplay between allocator and client variables **) - /\ \A c \in Clients : - /\ Cardinality(RequestsInTransit(c)) <= 1 - /\ requests[c] = unsat[c] - \cup UNION RequestsInTransit(c) - \cup UNION AllocsInTransit(c) - /\ alloc[c] = holding[c] - \cup UNION AllocsInTransit(c) - \cup UNION ReturnsInTransit(c) - -(* correctness properties in terms of clients' variables *) -ResourceMutex == - \A c1,c2 \in Clients : holding[c1] \cap holding[c2] # {} => c1 = c2 - -ClientsWillReturn == - \A c \in Clients: (requests[c]={} ~> holding[c]={}) - -ClientsWillObtain == - \A c \in Clients, r \in Resources : r \in requests[c] ~> r \in holding[c] - -InfOftenSatisfied == - \A c \in Clients : []<>(requests[c] = {}) - -------------------------------------------------------------------------- - -THEOREM Specification => []TypeInvariant -THEOREM Specification => []ResourceMutex -THEOREM Specification => []Invariant -THEOREM Specification => ClientsWillReturn -THEOREM Specification => ClientsWillObtain -THEOREM Specification => InfOftenSatisfied - -------------------------------------------------------------------------- - -(* This implementation is a refinement of the scheduling allocator. *) - -SchedAllocator == Sched!Allocator - -THEOREM Specification => SchedAllocator -========================================================================= diff --git a/examples/allocator/AllocatorRefinement.cfg b/examples/allocator/AllocatorRefinement.cfg deleted file mode 100644 index bf98a4239e8d473b853e4dd4ed6e155dfcc481aa..0000000000000000000000000000000000000000 --- a/examples/allocator/AllocatorRefinement.cfg +++ /dev/null @@ -1,9 +0,0 @@ -CONSTANT - Clients = {c1,c2,c3} - Resources = {r1,r2} - -SPECIFICATION - Allocator - -PROPERTIES - SimpleAllocator \ No newline at end of file diff --git a/examples/allocator/AllocatorRefinement.tla b/examples/allocator/AllocatorRefinement.tla deleted file mode 100644 index 37eb64bdff91c8d4d1e08073061cfadb71efd5ac..0000000000000000000000000000000000000000 --- a/examples/allocator/AllocatorRefinement.tla +++ /dev/null @@ -1,13 +0,0 @@ ---------------------- MODULE AllocatorRefinement ---------------------- -(*********************************************************************) -(* The scheduling allocator is a refinement of the simple allocator. *) -(*********************************************************************) - -EXTENDS SchedulingAllocator - -Simple == INSTANCE SimpleAllocator -SimpleAllocator == Simple!SimpleAllocator - -THEOREM - Allocator => SimpleAllocator -======================================================================= \ No newline at end of file diff --git a/examples/allocator/README b/examples/allocator/README deleted file mode 100644 index 1629aac1c11d434696ff53c41387b4f008db8ab1..0000000000000000000000000000000000000000 --- a/examples/allocator/README +++ /dev/null @@ -1,9 +0,0 @@ -The files in this directory represent the development of a resource -allocator in TLA+. - -The development is described in some detail in a technical note that -appears as file "allocator.pdf". - -Contact: Stephan.Merz@loria.fr -Version of August 17, 2004. - diff --git a/examples/allocator/SchedulingAllocator.cfg b/examples/allocator/SchedulingAllocator.cfg deleted file mode 100644 index a7345253ab6b3c12f63a70cd27065992b1978cbb..0000000000000000000000000000000000000000 --- a/examples/allocator/SchedulingAllocator.cfg +++ /dev/null @@ -1,16 +0,0 @@ -CONSTANT - Clients = {c1,c2,c3} - Resources = {r1,r2} - -SPECIFICATION - Allocator - -\**DOES NOT WORK FOR LIVENESS ! -\* SYMMETRY Symmetry - -INVARIANTS - TypeInvariant ResourceMutex - AllocatorInvariant - -PROPERTIES - ClientsWillReturn InfOftenSatisfied ClientsWillObtain diff --git a/examples/allocator/SchedulingAllocator.tla b/examples/allocator/SchedulingAllocator.tla deleted file mode 100644 index 21052ee1280b3d3fc1342993f4afb9731ce59a88..0000000000000000000000000000000000000000 --- a/examples/allocator/SchedulingAllocator.tla +++ /dev/null @@ -1,177 +0,0 @@ ------------------------- MODULE SchedulingAllocator --------------------- -(***********************************************************************) -(* Specification of an allocator managing a set of resources: *) -(* - Clients can request sets of resources whenever all their previous *) -(* requests have been satisfied. *) -(* - Requests can be partly fulfilled, and resources can be returned *) -(* even before the full request has been satisfied. However, clients *) -(* only have an obligation to return resources after they have *) -(* obtained all resources they requested. *) -(* This allocator operates by repeatedly choosing a schedule according *) -(* to which requests are satisfied. Resources can be allocated out of *) -(* order as long as no client earlier in the schedule asks for them. *) -(***********************************************************************) - -EXTENDS FiniteSets, Sequences, Naturals, TLC - -CONSTANTS - Clients, \* set of all clients - Resources \* set of all resources - -ASSUME - IsFiniteSet(Resources) - -VARIABLES - unsat, \* set of all outstanding requests per process - alloc, \* set of resources allocated to given process - sched \* schedule represented as a sequence of clients - - -TypeInvariant == - /\ unsat \in [Clients -> SUBSET Resources] - /\ alloc \in [Clients -> SUBSET Resources] - /\ sched \in Seq(Clients) - -------------------------------------------------------------------------- - -(* The set of permutations of a finite set, represented as sequences. *) -PermSeqs(S) == - LET perms[ss \in SUBSET S] == - IF ss = {} THEN { << >> } - ELSE LET ps == [ x \in ss |-> - { Append(sq,x) : sq \in perms[ss \ {x}] } ] - IN UNION { ps[x] : x \in ss } - IN perms[S] - -(* Remove element at index i from a sequence. *) -(* Assumes that i \in 1..Len(seq) *) -Drop(seq,i) == SubSeq(seq, 1, i-1) \circ SubSeq(seq, i+1, Len(seq)) - -(* Resources are available iff they have not been allocated. *) -available == Resources \ (UNION {alloc[c] : c \in Clients}) - -(* Range of a function, e.g. elements of a sequence *) -Range(f) == { f[x] : x \in DOMAIN f } - -(* Clients with pending requests that have not yet been scheduled *) -toSchedule == { c \in Clients : unsat[c] # {} /\ c \notin Range(sched) } - -(* Initially, no resources have been requested or allocated. *) -Init == - /\ unsat = [c \in Clients |-> {}] - /\ alloc = [c \in Clients |-> {}] - /\ sched = << >> - -(* A client c may request a set of resources provided that all of its *) -(* previous requests have been satisfied and that it doesn't hold any *) -(* resources. The client is added to the pool of clients with *) -(* outstanding requests. *) -Request(c,S) == - /\ unsat[c] = {} /\ alloc[c] = {} - /\ S # {} /\ unsat' = [unsat EXCEPT ![c] = S] - /\ UNCHANGED <<alloc,sched>> - -(* Allocation of a set of available resources to a client that has *) -(* requested them (the entire request does not have to be filled). *) -(* The process must appear in the schedule, and no process earlier in *) -(* the schedule may have requested one of the resources. *) -Allocate(c,S) == - /\ S # {} /\ S \subseteq available \cap unsat[c] - /\ \E i \in DOMAIN sched : - /\ sched[i] = c - /\ \A j \in 1..i-1 : unsat[sched[j]] \cap S = {} - /\ sched' = IF S = unsat[c] THEN Drop(sched,i) ELSE sched - /\ alloc' = [alloc EXCEPT ![c] = @ \cup S] - /\ unsat' = [unsat EXCEPT ![c] = @ \ S] - -(* Client c returns a set of resources that it holds. It may do so *) -(* even before its full request has been honored. *) -Return(c,S) == - /\ S # {} /\ S \subseteq alloc[c] - /\ alloc' = [alloc EXCEPT ![c] = @ \ S] - /\ UNCHANGED <<unsat,sched>> - -(* The allocator extends its schedule by adding the processes from *) -(* the set of clients to be scheduled, in some unspecified order. *) -Schedule == - /\ toSchedule # {} - /\ \E sq \in PermSeqs(toSchedule) : sched' = sched \circ sq - /\ UNCHANGED <<unsat,alloc>> - -(* The next-state relation per client and set of resources. *) -Next == - \/ \E c \in Clients, S \in SUBSET Resources : - Request(c,S) \/ Allocate(c,S) \/ Return(c,S) - \/ Schedule - -vars == <<unsat,alloc,sched>> - -------------------------------------------------------------------------- - -(***********************************************************************) -(* Liveness assumptions: *) -(* - Clients must return resources if their request has been satisfied.*) -(* - The allocator must eventually allocate resources when possible. *) -(* - The allocator must schedule the processes in the pool. *) -(***********************************************************************) - -Liveness == - /\ \A c \in Clients : WF_vars(unsat[c]={} /\ Return(c,alloc[c])) - /\ \A c \in Clients : WF_vars(\E S \in SUBSET Resources : Allocate(c, S)) - /\ WF_vars(Schedule) - -(* The specification of the scheduling allocator. *) -Allocator == Init /\ [][Next]_vars /\ Liveness - -------------------------------------------------------------------------- - -ResourceMutex == \** resources are allocated exclusively - \A c1,c2 \in Clients : c1 # c2 => alloc[c1] \cap alloc[c2] = {} - -UnscheduledClients == \** clients that do not appear in the schedule - Clients \ Range(sched) - -PrevResources(i) == - \** resources that will be available when client i has to be satisfied - available - \cup (UNION {unsat[sched[j]] \cup alloc[sched[j]] : j \in 1..i-1}) - \cup (UNION {alloc[c] : c \in UnscheduledClients}) - -AllocatorInvariant == \** a lower-level invariant - /\ \** all clients in the schedule have outstanding requests - \A i \in DOMAIN sched : unsat[sched[i]] # {} - /\ \** all clients that need to be scheduled have outstanding requests - \A c \in toSchedule : unsat[c] # {} - /\ \** clients never hold a resource requested by a process earlier - \** in the schedule - \A i \in DOMAIN sched : \A j \in 1..i-1 : - alloc[sched[i]] \cap unsat[sched[j]] = {} - /\ \** the allocator can satisfy the requests of any scheduled client - \** assuming that the clients scheduled earlier release their resources - \A i \in DOMAIN sched : unsat[sched[i]] \subseteq PrevResources(i) - -ClientsWillReturn == - \A c \in Clients: (unsat[c]={} ~> alloc[c]={}) - -ClientsWillObtain == - \A c \in Clients, r \in Resources : r \in unsat[c] ~> r \in alloc[c] - -InfOftenSatisfied == - \A c \in Clients : []<>(unsat[c] = {}) - -(* Used for symmetry reduction with TLC. - Note: because of the schedule sequence, the specification is no - longer symmetric with respect to the processes! -*) -Symmetry == Permutations(Resources) - -------------------------------------------------------------------------- - -THEOREM Allocator => []TypeInvariant -THEOREM Allocator => []ResourceMutex -THEOREM Allocator => []AllocatorInvariant -THEOREM Allocator => ClientsWillReturn -THEOREM Allocator => ClientsWillObtain -THEOREM Allocator => InfOftenSatisfied - -========================================================================= diff --git a/examples/allocator/SimpleAllocator.cfg b/examples/allocator/SimpleAllocator.cfg deleted file mode 100644 index 41b68f5205beec8b107f249656962bb816dab07c..0000000000000000000000000000000000000000 --- a/examples/allocator/SimpleAllocator.cfg +++ /dev/null @@ -1,15 +0,0 @@ -CONSTANTS - Clients = {c1,c2,c3} - Resources = {r1,r2} - -SPECIFICATION - SimpleAllocator - -\** DOES NOT WORK FOR LIVENESS ! -\** SYMMETRY Symmetry - -INVARIANTS - TypeInvariant ResourceMutex - -PROPERTIES - ClientsWillReturn ClientsWillObtain InfOftenSatisfied \ No newline at end of file diff --git a/examples/allocator/SimpleAllocator.tla b/examples/allocator/SimpleAllocator.tla deleted file mode 100644 index 65db89884b2ec2bb750eb6001d7dd5adea59d9f9..0000000000000000000000000000000000000000 --- a/examples/allocator/SimpleAllocator.tla +++ /dev/null @@ -1,118 +0,0 @@ ------------------------- MODULE SimpleAllocator ------------------------- -(***********************************************************************) -(* Specification of an allocator managing a set of resources: *) -(* - Clients can request sets of resources whenever all their previous *) -(* requests have been satisfied. *) -(* - Requests can be partly fulfilled, and resources can be returned *) -(* even before the full request has been satisfied. However, clients *) -(* only have an obligation to return resources after they have *) -(* obtained all resources they requested. *) -(***********************************************************************) - -EXTENDS FiniteSets, TLC - -CONSTANTS - Clients, \* set of all clients - Resources \* set of all resources - -ASSUME - IsFiniteSet(Resources) - -VARIABLES - unsat, \* set of all outstanding requests per process - alloc \* set of resources allocated to given process - -TypeInvariant == - /\ unsat \in [Clients -> SUBSET Resources] - /\ alloc \in [Clients -> SUBSET Resources] - -------------------------------------------------------------------------- - -(* Resources are available iff they have not been allocated. *) -available == Resources \ (UNION {alloc[c] : c \in Clients}) - -(* Initially, no resources have been requested or allocated. *) -Init == - /\ unsat = [c \in Clients |-> {}] - /\ alloc = [c \in Clients |-> {}] - -(* A client c may request a set of resources provided that all of its *) -(* previous requests have been satisfied and that it doesn't hold any *) -(* resources. *) -Request(c,S) == - /\ unsat[c] = {} /\ alloc[c] = {} - /\ S # {} /\ unsat' = [unsat EXCEPT ![c] = S] - /\ UNCHANGED alloc - -(* Allocation of a set of available resources to a client that *) -(* requested them (the entire request does not have to be filled). *) -Allocate(c,S) == - /\ S # {} /\ S \subseteq available \cap unsat[c] - /\ alloc' = [alloc EXCEPT ![c] = @ \cup S] - /\ unsat' = [unsat EXCEPT ![c] = @ \ S] - -(* Client c returns a set of resources that it holds. It may do so *) -(* even before its full request has been honored. *) -Return(c,S) == - /\ S # {} /\ S \subseteq alloc[c] - /\ alloc' = [alloc EXCEPT ![c] = @ \ S] - /\ UNCHANGED unsat - -(* The next-state relation. *) -Next == - \E c \in Clients, S \in SUBSET Resources : - Request(c,S) \/ Allocate(c,S) \/ Return(c,S) - -vars == <<unsat,alloc>> - -------------------------------------------------------------------------- - -(* The complete high-level specification. *) -SimpleAllocator == - /\ Init /\ [][Next]_vars - /\ \A c \in Clients: WF_vars(Return(c, alloc[c])) - /\ \A c \in Clients: SF_vars(\E S \in SUBSET Resources: Allocate(c,S)) - -------------------------------------------------------------------------- - -ResourceMutex == - \A c1,c2 \in Clients : c1 # c2 => alloc[c1] \cap alloc[c2] = {} - -ClientsWillReturn == - \A c \in Clients : unsat[c]={} ~> alloc[c]={} - -ClientsWillObtain == - \A c \in Clients, r \in Resources : r \in unsat[c] ~> r \in alloc[c] - -InfOftenSatisfied == - \A c \in Clients : []<>(unsat[c] = {}) - -------------------------------------------------------------------------- - -(* Used for symmetry reduction with TLC *) -Symmetry == Permutations(Clients) \cup Permutations(Resources) - -------------------------------------------------------------------------- - -(* The following version states a weaker fairness requirement for the *) -(* clients: resources need be returned only if the entire request has *) -(* been satisfied. *) - -SimpleAllocator2 == - /\ Init /\ [][Next]_vars - /\ \A c \in Clients: WF_vars(unsat[c] = {} /\ Return(c, alloc[c])) - /\ \A c \in Clients: SF_vars(\E S \in SUBSET Resources: Allocate(c,S)) - - -------------------------------------------------------------------------- - -THEOREM SimpleAllocator => []TypeInvariant -THEOREM SimpleAllocator => []ResourceMutex -THEOREM SimpleAllocator => ClientsWillReturn -THEOREM SimpleAllocator2 => ClientsWillReturn -THEOREM SimpleAllocator => ClientsWillObtain -THEOREM SimpleAllocator => InfOftenSatisfied -(** The following do not hold: **) -(** THEOREM SimpleAllocator2 => ClientsWillObtain **) -(** THEOREM SimpleAllocator2 => InfOftenSatisfied **) -========================================================================= diff --git a/examples/allocator/allocator.pdf b/examples/allocator/allocator.pdf deleted file mode 100644 index 26c63a9262afdd1d8bb0c6e1fa785340f109cffe..0000000000000000000000000000000000000000 Binary files a/examples/allocator/allocator.pdf and /dev/null differ diff --git a/examples/dijkstra-mutex/DijkstraMutex.cfg b/examples/dijkstra-mutex/DijkstraMutex.cfg deleted file mode 100644 index e4d9f45878aeef02b2aff38e40e52762955e3ddc..0000000000000000000000000000000000000000 --- a/examples/dijkstra-mutex/DijkstraMutex.cfg +++ /dev/null @@ -1,3 +0,0 @@ -SPECIFICATION Spec -CONSTANT defaultInitValue = defaultInitValue -\* Add statements after this line. diff --git a/examples/dijkstra-mutex/DijkstraMutex.tla b/examples/dijkstra-mutex/DijkstraMutex.tla deleted file mode 100644 index b81b611a2d5fe078ee81361b60f3baa7a9fa3016..0000000000000000000000000000000000000000 --- a/examples/dijkstra-mutex/DijkstraMutex.tla +++ /dev/null @@ -1,342 +0,0 @@ ---------------------------- MODULE DijkstraMutex --------------------------- -(***************************************************************************) -(* This is a PlusCal version of the first published mutual exclusion *) -(* algorithm, which appeared in *) -(* *) -(* E. W. Dijkstra: "Solution of a Problem in Concurrent *) -(* Programming Control". Communications of the ACM 8, 9 *) -(* (September 1965) page 569. *) -(* *) -(* Here is the description of the algorithm as it appeared in that paper. *) -(* The global variables are declared by *) -(* *) -(* Boolean array b, c[1:N]; integer k *) -(* *) -(* The initial values of b[i] and c[i] are true, for each i in 1..N. The *) -(* initial value of k can be any integer in 1..N. The pseudo-code for the *) -(* i-th process, for each i in 1..N, is: *) -(* *) -(* integer j; *) -(* Li0: b[i] := false; *) -(* Li1: if k # i then *) -(* Li2: begin c[i] := true; *) -(* Li3: if b[k] then k := i; *) -(* go to Li1 *) -(* end *) -(* else *) -(* Li4: begin c[i] := false; *) -(* for j := 1 step 1 until N do *) -(* if j # i and not c[j] then go to Li1 *) -(* end; *) -(* critical section; *) -(* c[i] := true; b[i] := true; *) -(* remainder of the cycle in which stopping is allowed; *) -(* go to Li0 *) -(* *) -(* It appears to me that the "else" preceding label Li4 begins the else *) -(* clause of the if statement beginning at Li1, and that the code from Li4 *) -(* through the end three lines later should be the body of that else *) -(* clause. However, the indentation indicates otherwise. Moreover, that *) -(* interpretation produces an incorrect algorithm. It seems that this *) -(* "else" actually marks an empty else clause for the if statement at Li1. *) -(* (Perhaps there should have been a semicolon after the "else".) *) -(***************************************************************************) - -EXTENDS Integers - -(***************************************************************************) -(* There is no reason why the processes need to be numbered from 1 to N. *) -(* So, we assume an arbitrary set Proc of process names. *) -(***************************************************************************) -CONSTANT Proc - -(********* -Here is the PlusCal version of this algorithm. - - --algorithm Mutex - { variables b = [i \in Proc |-> TRUE], c = [i \in Proc |-> TRUE], k \in Proc; - process (P \in Proc) - variable temp ; - { Li0: while (TRUE) - { b[self] := FALSE; - Li1: if (k # self) { Li2: c[self] := TRUE; - Li3a: temp := k; - Li3b: if (b[temp]) { Li3c: k := self } ; - Li3d: goto Li1 - }; - Li4a: c[self] := FALSE; - temp := Proc \ {self}; - Li4b: while (temp # {}) - { with (j \in temp) - { temp := temp \ {j}; - if (~c[j]) { goto Li1 } - } - }; - cs: skip; \* the critical section - Li5: c[self] := TRUE; - Li6: b[self] := TRUE; - ncs: skip \* non-critical section ("remainder of cycle") - } - } - } -Notes on the PlusCal version: - -1. Label Li3d is required by the translation. It could be eliminated by - adding a then clause to the if statement of Li3b and putting the goto - in both branches of the if statement. - -2. The for loop in section Li4 of the original has been changed to - a while loop that examines the other processes in an arbitrary - (nondeterministically chosen) order. Because temp is set equal - to the set of all processes other than self, there is no need for - a test corresponding to the "if j # i" in the original. Note that - the process-local variable j has been replaced by the identifier - j that is local to the with statement. -*********) -\* BEGIN TRANSLATION -CONSTANT defaultInitValue -VARIABLES b, c, k, pc, temp - -vars == << b, c, k, pc, temp >> - -ProcSet == (Proc) - -Init == (* Global variables *) - /\ b = [i \in Proc |-> TRUE] - /\ c = [i \in Proc |-> TRUE] - /\ k \in Proc - (* Process P *) - /\ temp = [self \in Proc |-> defaultInitValue] - /\ pc = [self \in ProcSet |-> CASE self \in Proc -> "Li0"] - -Li0(self) == /\ pc[self] = "Li0" - /\ b' = [b EXCEPT ![self] = FALSE] - /\ pc' = [pc EXCEPT ![self] = "Li1"] - /\ UNCHANGED << c, k, temp >> - -Li1(self) == /\ pc[self] = "Li1" - /\ IF k # self - THEN /\ pc' = [pc EXCEPT ![self] = "Li2"] - ELSE /\ pc' = [pc EXCEPT ![self] = "Li4a"] - /\ UNCHANGED << b, c, k, temp >> - -Li2(self) == /\ pc[self] = "Li2" - /\ c' = [c EXCEPT ![self] = TRUE] - /\ pc' = [pc EXCEPT ![self] = "Li3a"] - /\ UNCHANGED << b, k, temp >> - -Li3a(self) == /\ pc[self] = "Li3a" - /\ temp' = [temp EXCEPT ![self] = k] - /\ pc' = [pc EXCEPT ![self] = "Li3b"] - /\ UNCHANGED << b, c, k >> - -Li3b(self) == /\ pc[self] = "Li3b" - /\ IF b[temp[self]] - THEN /\ pc' = [pc EXCEPT ![self] = "Li3c"] - ELSE /\ pc' = [pc EXCEPT ![self] = "Li3d"] - /\ UNCHANGED << b, c, k, temp >> - -Li3c(self) == /\ pc[self] = "Li3c" - /\ k' = self - /\ pc' = [pc EXCEPT ![self] = "Li3d"] - /\ UNCHANGED << b, c, temp >> - -Li3d(self) == /\ pc[self] = "Li3d" - /\ pc' = [pc EXCEPT ![self] = "Li1"] - /\ UNCHANGED << b, c, k, temp >> - -Li4a(self) == /\ pc[self] = "Li4a" - /\ c' = [c EXCEPT ![self] = FALSE] - /\ temp' = [temp EXCEPT ![self] = Proc \ {self}] - /\ pc' = [pc EXCEPT ![self] = "Li4b"] - /\ UNCHANGED << b, k >> - -Li4b(self) == /\ pc[self] = "Li4b" - /\ IF temp[self] # {} - THEN /\ \E j \in temp[self]: - /\ temp' = [temp EXCEPT - ![self] = temp[self] \ {j}] - /\ IF ~c[j] - THEN /\ pc' = [pc EXCEPT - ![self] = "Li1"] - ELSE /\ pc' = [pc EXCEPT - ![self] = "Li4b"] - ELSE /\ pc' = [pc EXCEPT ![self] = "cs"] - /\ UNCHANGED temp - /\ UNCHANGED << b, c, k >> - -cs(self) == /\ pc[self] = "cs" - /\ TRUE - /\ pc' = [pc EXCEPT ![self] = "Li5"] - /\ UNCHANGED << b, c, k, temp >> - -Li5(self) == /\ pc[self] = "Li5" - /\ c' = [c EXCEPT ![self] = TRUE] - /\ pc' = [pc EXCEPT ![self] = "Li6"] - /\ UNCHANGED << b, k, temp >> - -Li6(self) == /\ pc[self] = "Li6" - /\ b' = [b EXCEPT ![self] = TRUE] - /\ pc' = [pc EXCEPT ![self] = "ncs"] - /\ UNCHANGED << c, k, temp >> - -ncs(self) == /\ pc[self] = "ncs" - /\ TRUE - /\ pc' = [pc EXCEPT ![self] = "Li0"] - /\ UNCHANGED << b, c, k, temp >> - -P(self) == Li0(self) \/ Li1(self) \/ Li2(self) \/ Li3a(self) \/ Li3b(self) - \/ Li3c(self) \/ Li3d(self) \/ Li4a(self) \/ Li4b(self) - \/ cs(self) \/ Li5(self) \/ Li6(self) \/ ncs(self) - -Next == (\E self \in Proc: P(self)) - \/ (* Disjunct to prevent deadlock on termination *) - ((\A self \in ProcSet: pc[self] = "Done") /\ UNCHANGED vars) - -Spec == Init /\ [][Next]_vars /\ \A self \in Proc: WF_vars(P(self)) - -Termination == <>(\A self \in ProcSet: pc[self] = "Done") - -\* END TRANSLATION - -(***************************************************************************) -(* The following formula asserts that no two processes are in their *) -(* critcal sections at the same time. It is the invariant that a mutual *) -(* exclusion algorithm should satisfy. You can have TLC check that the *) -(* algorithm is a mutual exclusion algorithm by checking that this formula *) -(* is an invariant. *) -(***************************************************************************) -MutualExclusion == \A i, j \in Proc : - (i # j) => ~ /\ pc[i] = "cs" - /\ pc[j] = "cs" -(***************************************************************************) -(* An equivalent way to perform the same test would be to change the *) -(* statement labeled cs (the critical section) to *) -(* *) -(* cs: assert \A j \in Proc \ {self} : pc[j] # "cs" *) -(* *) -(* You can give this a try. However, the assert statement requires that *) -(* the EXTENDS statement also import the standard module TLC, so it should *) -(* read *) -(* *) -(* EXTENDS Integers, TLC *) -(***************************************************************************) - ------------------------------------------------------------------------------ - -(***************************************************************************) -(* LIVENESS *) -(* *) -(* If you are a sophisticated PlusCal user and know a little temporal *) -(* logic, you can continue reading about the liveness properties of the *) -(* algorithm. *) -(* *) -(* Dijkstra's algorithm is "deadlock free", which for a mutual exclusion *) -(* algorithm means that if some process is trying to enter its critical *) -(* section, then some process (not necessarily the same one) will *) -(* eventually enter its critical section. Since a process begins trying *) -(* to enter its critical section when it is at the control point labeled *) -(* Li0, and it is in its critical section when it is at control point cs, *) -(* the following formula asserts deadlock freedom. *) -(***************************************************************************) -DeadlockFree == \A i \in Proc : - (pc[i] = "Li0") ~> (\E j \in Proc : pc[j] = "cs") -(***************************************************************************) -(* Dijkstra's algorithm is deadlock free only under the assumption of *) -(* fairness of process execution. The simplest such fairness assumption *) -(* is weak fairness on each process's next-state action. This means that *) -(* no process can halt if it is always possible for that process to take a *) -(* step. The following statement tells the PlusCal translator to define *) -(* the specification to assert weak fairness of each process's next-state *) -(* action. *) -(* *) -(* PlusCal options (wf) *) -(* *) -(* This statement can occur anywhere in the file--either in a comment or *) -(* before or after the module. Because of this statement, the translator *) -(* has added the necessary fairness conjunct to the definition of Spec. *) -(* So, you can have the TLC model checker check that the algorithm *) -(* satisfies property DeadlockFree. *) -(***************************************************************************) - -(***************************************************************************) -(* Dijkstra's algorithm is not "starvation free", because it allows some *) -(* waiting processes to "starve", never entering their critical section *) -(* while other processes keep entering and leaving their critical *) -(* sections. Starvation freedom is asserted by the following formula. *) -(* You can use TLC to show that the algorithm is not starvation free by *) -(* producing a counterexample trace. *) -(***************************************************************************) -StarvationFree == \A i \in Proc : - (pc[i] = "Li0") ~> (pc[i] = "cs") - -(***************************************************************************) -(* In this algorithm, no process can ever be blocked waiting at an `await' *) -(* statement or a `with (v \in S)' statement with S empty. Therefore, *) -(* weak fairness of each process means that each process keeps continually *) -(* trying to enter its critical section, and it exits the critical *) -(* section. An important requirement of a mutual exclusion solution, one *) -(* that rules out many simple solutions, is that a process is allowed to *) -(* remain forever in its non-critical section. (There is also no need to *) -(* require that a process that enters its critical section ever leaves it, *) -(* though without that requirement the definition of starvation freedom *) -(* must be changed.) *) -(* *) -(* We can allow a process to remain forever in its critical section by *) -(* replacing the `skip' statement that represents the non-critical section *) -(* with the following statement, which allows the process to loop forever. *) -(* *) -(* ncs: either skip or goto ncs *) -(* *) -(* An equivalent non-critical section is *) -(* *) -(* nsc: either skip or await FALSE *) -(* *) -(* A more elegant method is to change the fairness requirement to assert *) -(* weak fairness of a process's next-state action only when the process is *) -(* not in its non-critical section. This is accomplished by taking the *) -(* following formula LSpec as the algorithm's specification. *) -(***************************************************************************) -LSpec == Init /\ [][Next]_vars - /\ \A self \in Proc: WF_vars((pc[self] # "ncs") /\ P(self)) - -(***************************************************************************) -(* If we allow a process to remain forever in its non-critical section, *) -(* then our definition of deadlock freedom is too weak. Suppose process p *) -(* were in its critical section and process q, trying to enter its *) -(* critical section, reached Li1. Formula DeadlockFree would allow a *) -(* behavior in which process q exited its critical section and remained *) -(* forever in its non-critical section, but process p looped forever *) -(* trying to enter its critical section and never succeeding. To rule out *) -(* this possibility, we must replace the formula *) -(* *) -(* pc[i] = "Li0" *) -(* *) -(* in DeadLock free with one asserting that control in process i is *) -(* anywhere in control points Li0 through Li4b. It's easier to express *) -(* this by saying where control in process i is NOT, which we do in the *) -(* following property. *) -(***************************************************************************) -DeadlockFreedom == - \A i \in Proc : - (pc[i] \notin {"Li5", "Li6", "ncs"}) ~> (\E j \in Proc : pc[j] = "cs") -(***************************************************************************) -(* Do you see why it's not necessary to include "cs" in the set of values *) -(* that pc[i] does not equal? *) -(***************************************************************************) - - - -(***************************************************************************) -(* Using a single worker thread on a 2.5GHz dual-processor computer, TLC *) -(* can check MutualExclusion and liveness of a 3-process model in about 2 *) -(* or 3 minutes (depending on which spec is used and which liveness *) -(* property is checked). That model has 90882 reachable states and a *) -(* state graph of diameter 54. TLC can check a 4-process model in about *) -(* 53 minutes. That model has 33288512 reachable states and a state graph *) -(* of diameter 89. *) -(***************************************************************************) -============================================================================= -\* Modification History -\* Last modified Sat Jan 01 12:14:14 PST 2011 by lamport -\* Created Fri Dec 31 14:14:14 PST 2010 by lamport diff --git a/examples/dijkstra-mutex/DijkstraMutex.toolbox/.project b/examples/dijkstra-mutex/DijkstraMutex.toolbox/.project deleted file mode 100644 index 6200ac83fc676f85447db1fbac4950fa3388c3b6..0000000000000000000000000000000000000000 --- a/examples/dijkstra-mutex/DijkstraMutex.toolbox/.project +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>DijkstraMutex</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>toolbox.builder.TLAParserBuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>toolbox.builder.PCalAlgorithmSearchingBuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>toolbox.natures.TLANature</nature> - </natures> - <linkedResources> - <link> - <name>DijkstraMutex.tla</name> - <type>1</type> - <location>C:/lamport/books/hyper-tla/specs/dijkstra-mutex/DijkstraMutex.tla</location> - </link> - </linkedResources> -</projectDescription> diff --git a/examples/dijkstra-mutex/DijkstraMutex.toolbox/.settings/org.lamport.tla.toolbox.prefs b/examples/dijkstra-mutex/DijkstraMutex.toolbox/.settings/org.lamport.tla.toolbox.prefs deleted file mode 100644 index 79177aa81c4a2c1c3fc255ef35c74754b4d69576..0000000000000000000000000000000000000000 --- a/examples/dijkstra-mutex/DijkstraMutex.toolbox/.settings/org.lamport.tla.toolbox.prefs +++ /dev/null @@ -1,4 +0,0 @@ -#Fri Dec 31 14:14:14 PST 2010 -ProjectRootFile=C\:\\lamport\\books\\hyper-tla\\specs\\dijkstra-mutex\\DijkstraMutex.tla -ProjectToolboxDirSize=0 -eclipse.preferences.version=1 diff --git a/examples/dijkstra-mutex/DijkstraMutex.toolbox/DijkstraMutex___LSpec-model.launch b/examples/dijkstra-mutex/DijkstraMutex.toolbox/DijkstraMutex___LSpec-model.launch deleted file mode 100644 index ca2972133948973814a6076650d6c17448a24455..0000000000000000000000000000000000000000 --- a/examples/dijkstra-mutex/DijkstraMutex.toolbox/DijkstraMutex___LSpec-model.launch +++ /dev/null @@ -1,40 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<launchConfiguration type="org.lamport.tla.toolbox.tool.tlc.modelCheck"> -<intAttribute key="autoLockTime" value="15"/> -<stringAttribute key="configurationName" value="LSpec-model"/> -<intAttribute key="dfidDepth" value="100"/> -<booleanAttribute key="dfidMode" value="false"/> -<intAttribute key="maxHeapSize" value="500"/> -<booleanAttribute key="mcMode" value="true"/> -<stringAttribute key="modelBehaviorInit" value=""/> -<stringAttribute key="modelBehaviorNext" value=""/> -<stringAttribute key="modelBehaviorSpec" value="LSpec"/> -<intAttribute key="modelBehaviorSpecType" value="1"/> -<stringAttribute key="modelBehaviorVars" value="temp, b, c, k, pc"/> -<booleanAttribute key="modelCorrectnessCheckDeadlock" value="true"/> -<listAttribute key="modelCorrectnessInvariants"> -<listEntry value="1MutualExclusion"/> -</listAttribute> -<listAttribute key="modelCorrectnessProperties"> -<listEntry value="0Termination"/> -<listEntry value="1DeadlockFreedom"/> -</listAttribute> -<stringAttribute key="modelExpressionEval" value=""/> -<stringAttribute key="modelParameterActionConstraint" value=""/> -<listAttribute key="modelParameterConstants"> -<listEntry value="Proc;;{p1, p2, p3};1;0"/> -<listEntry value="defaultInitValue;;defaultInitValue;1;0"/> -</listAttribute> -<stringAttribute key="modelParameterContraint" value=""/> -<listAttribute key="modelParameterDefinitions"/> -<stringAttribute key="modelParameterModelValues" value="{}"/> -<stringAttribute key="modelParameterNewDefinitions" value=""/> -<stringAttribute key="modelPropertiesExpand" value=""/> -<intAttribute key="numberOfWorkers" value="1"/> -<booleanAttribute key="recover" value="false"/> -<intAttribute key="simuAril" value="-1"/> -<intAttribute key="simuDepth" value="100"/> -<intAttribute key="simuSeed" value="-1"/> -<stringAttribute key="specName" value="DijkstraMutex"/> -<stringAttribute key="view" value=""/> -</launchConfiguration> diff --git a/examples/dijkstra-mutex/DijkstraMutex.toolbox/DijkstraMutex___Safety-4-processors.launch b/examples/dijkstra-mutex/DijkstraMutex.toolbox/DijkstraMutex___Safety-4-processors.launch deleted file mode 100644 index f0fc2b548f993b390c61e2f20ce92a1701f98683..0000000000000000000000000000000000000000 --- a/examples/dijkstra-mutex/DijkstraMutex.toolbox/DijkstraMutex___Safety-4-processors.launch +++ /dev/null @@ -1,39 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<launchConfiguration type="org.lamport.tla.toolbox.tool.tlc.modelCheck"> -<intAttribute key="autoLockTime" value="15"/> -<stringAttribute key="configurationName" value="Safety-4-processors"/> -<intAttribute key="dfidDepth" value="100"/> -<booleanAttribute key="dfidMode" value="false"/> -<intAttribute key="maxHeapSize" value="500"/> -<booleanAttribute key="mcMode" value="true"/> -<stringAttribute key="modelBehaviorInit" value=""/> -<stringAttribute key="modelBehaviorNext" value=""/> -<stringAttribute key="modelBehaviorSpec" value="Spec"/> -<intAttribute key="modelBehaviorSpecType" value="1"/> -<stringAttribute key="modelBehaviorVars" value="temp, b, c, k, pc"/> -<booleanAttribute key="modelCorrectnessCheckDeadlock" value="true"/> -<listAttribute key="modelCorrectnessInvariants"> -<listEntry value="1MutualExclusion"/> -</listAttribute> -<listAttribute key="modelCorrectnessProperties"> -<listEntry value="0Termination"/> -</listAttribute> -<stringAttribute key="modelExpressionEval" value=""/> -<stringAttribute key="modelParameterActionConstraint" value=""/> -<listAttribute key="modelParameterConstants"> -<listEntry value="Proc;;{p1, p2, p3, p4};1;0"/> -<listEntry value="defaultInitValue;;defaultInitValue;1;0"/> -</listAttribute> -<stringAttribute key="modelParameterContraint" value=""/> -<listAttribute key="modelParameterDefinitions"/> -<stringAttribute key="modelParameterModelValues" value="{}"/> -<stringAttribute key="modelParameterNewDefinitions" value=""/> -<stringAttribute key="modelPropertiesExpand" value=""/> -<intAttribute key="numberOfWorkers" value="1"/> -<booleanAttribute key="recover" value="false"/> -<intAttribute key="simuAril" value="-1"/> -<intAttribute key="simuDepth" value="100"/> -<intAttribute key="simuSeed" value="-1"/> -<stringAttribute key="specName" value="DijkstraMutex"/> -<stringAttribute key="view" value=""/> -</launchConfiguration> diff --git a/examples/dijkstra-mutex/DijkstraMutex.toolbox/LSpec-model/DijkstraMutex.tla b/examples/dijkstra-mutex/DijkstraMutex.toolbox/LSpec-model/DijkstraMutex.tla deleted file mode 100644 index 80e185b3291291b241fd9d1b006248ca592918fa..0000000000000000000000000000000000000000 --- a/examples/dijkstra-mutex/DijkstraMutex.toolbox/LSpec-model/DijkstraMutex.tla +++ /dev/null @@ -1,336 +0,0 @@ ---------------------------- MODULE DijkstraMutex --------------------------- -(***************************************************************************) -(* This is a PlusCal version of the first published mutual exclusion *) -(* algorithm, which appeared in *) -(* *) -(* E. W. Dijkstra: "Solution of a Problem in Concurrent *) -(* Programming Control". Communications of the ACM 8, 9 *) -(* (September 1965) page 569. *) -(* *) -(* Here is the description of the algorithm as it appeared in that paper. *) -(* The global variables are declared by *) -(* *) -(* Boolean array b, c[1:N]; integer k *) -(* *) -(* The initial values of b[i] and c[i] are true, for each i in 1..N. The *) -(* initial value of k can be any integer in 1..N. The pseudo-code for the *) -(* i-th process, for each i in 1..N, is: *) -(* *) -(* integer j; *) -(* Li0: b[i] := false; *) -(* Li1: if k # i then *) -(* Li2: begin c[i] := true; *) -(* Li3: if b[k] then k := i; *) -(* go to Li1 *) -(* end *) -(* else *) -(* Li4: begin c[i] := false; *) -(* for j := 1 step 1 until N do *) -(* if j # i and not c[j] then go to Li1 *) -(* end; *) -(* critical section; *) -(* c[i] := true; b[i] := true; *) -(* remainder of the cycle in which stopping is allowed; *) -(* go to Li0 *) -(* *) -(* It appears to me that the "else" preceding label Li4 begins the else *) -(* clause of the if statement beginning at Li1, and that the code from Li4 *) -(* through the end three lines later should be the body of that else *) -(* clause. However, the indentation indicates otherwise. Moreover, that *) -(* interpretation produces an incorrect algorithm. It seems that this *) -(* "else" actually marks an empty else clause for the if statement at Li1. *) -(* (Perhaps there should have been a semicolon after the "else".) *) -(***************************************************************************) - -EXTENDS Integers - -(***************************************************************************) -(* There is no reason why the processes need to be numbered from 1 to N. *) -(* So, we assume an arbitrary set Proc of process names. *) -(***************************************************************************) -CONSTANT Proc - -(********* -Here is the PlusCal version of this algorithm. - - --algorithm Mutex - { variables b = [i \in Proc |-> TRUE], c = [i \in Proc |-> TRUE], k \in Proc; - process (P \in Proc) - variable temp ; - { Li0: while (TRUE) - { b[self] := FALSE; - Li1: if (k # self) { Li2: c[self] := TRUE; - Li3a: temp := k; - Li3b: if (b[temp]) { Li3c: k := self } ; - Li3d: goto Li1 - }; - Li4a: c[self] := FALSE; - temp := Proc \ {self}; - Li4b: while (temp # {}) - { with (j \in temp) - { temp := temp \ {j}; - if (~c[j]) { goto Li1 } - } - }; - cs: skip; \* the critical section - Li5: c[self] := TRUE; - Li6: b[self] := TRUE; - ncs: skip \* non-critical section ("remainder of cycle") - } - } - } -Notes on the PlusCal version: - -1. Label Li3d is required by the translation. It could be eliminated by - adding a then clause to the if statement of Li3b and putting the goto - in both branches of the if statement. - -2. The for loop in section Li4 of the original has been changed to - a while loop that examines the other processes in an arbitrary - (nondeterministically chosen) order. Because temp is set equal - to the set of all processes other than self, there is no need for - a test corresponding to the "if j # i" in the original. Note that - the process-local variable j has been replaced by the identifier - j that is local to the with statement. -*********) -\* BEGIN TRANSLATION -CONSTANT defaultInitValue -VARIABLES b, c, k, pc, temp - -vars == << b, c, k, pc, temp >> - -ProcSet == (Proc) - -Init == (* Global variables *) - /\ b = [i \in Proc |-> TRUE] - /\ c = [i \in Proc |-> TRUE] - /\ k \in Proc - (* Process P *) - /\ temp = [self \in Proc |-> defaultInitValue] - /\ pc = [self \in ProcSet |-> CASE self \in Proc -> "Li0"] - -Li0(self) == /\ pc[self] = "Li0" - /\ b' = [b EXCEPT ![self] = FALSE] - /\ pc' = [pc EXCEPT ![self] = "Li1"] - /\ UNCHANGED << c, k, temp >> - -Li1(self) == /\ pc[self] = "Li1" - /\ IF k # self - THEN /\ pc' = [pc EXCEPT ![self] = "Li2"] - ELSE /\ pc' = [pc EXCEPT ![self] = "Li4a"] - /\ UNCHANGED << b, c, k, temp >> - -Li2(self) == /\ pc[self] = "Li2" - /\ c' = [c EXCEPT ![self] = TRUE] - /\ pc' = [pc EXCEPT ![self] = "Li3a"] - /\ UNCHANGED << b, k, temp >> - -Li3a(self) == /\ pc[self] = "Li3a" - /\ temp' = [temp EXCEPT ![self] = k] - /\ pc' = [pc EXCEPT ![self] = "Li3b"] - /\ UNCHANGED << b, c, k >> - -Li3b(self) == /\ pc[self] = "Li3b" - /\ IF b[temp[self]] - THEN /\ pc' = [pc EXCEPT ![self] = "Li3c"] - ELSE /\ pc' = [pc EXCEPT ![self] = "Li3d"] - /\ UNCHANGED << b, c, k, temp >> - -Li3c(self) == /\ pc[self] = "Li3c" - /\ k' = self - /\ pc' = [pc EXCEPT ![self] = "Li3d"] - /\ UNCHANGED << b, c, temp >> - -Li3d(self) == /\ pc[self] = "Li3d" - /\ pc' = [pc EXCEPT ![self] = "Li1"] - /\ UNCHANGED << b, c, k, temp >> - -Li4a(self) == /\ pc[self] = "Li4a" - /\ c' = [c EXCEPT ![self] = FALSE] - /\ temp' = [temp EXCEPT ![self] = Proc \ {self}] - /\ pc' = [pc EXCEPT ![self] = "Li4b"] - /\ UNCHANGED << b, k >> - -Li4b(self) == /\ pc[self] = "Li4b" - /\ IF temp[self] # {} - THEN /\ \E j \in temp[self]: - /\ temp' = [temp EXCEPT - ![self] = temp[self] \ {j}] - /\ IF ~c[j] - THEN /\ pc' = [pc EXCEPT - ![self] = "Li1"] - ELSE /\ pc' = [pc EXCEPT - ![self] = "Li4b"] - ELSE /\ pc' = [pc EXCEPT ![self] = "cs"] - /\ UNCHANGED temp - /\ UNCHANGED << b, c, k >> - -cs(self) == /\ pc[self] = "cs" - /\ TRUE - /\ pc' = [pc EXCEPT ![self] = "Li5"] - /\ UNCHANGED << b, c, k, temp >> - -Li5(self) == /\ pc[self] = "Li5" - /\ c' = [c EXCEPT ![self] = TRUE] - /\ pc' = [pc EXCEPT ![self] = "Li6"] - /\ UNCHANGED << b, k, temp >> - -Li6(self) == /\ pc[self] = "Li6" - /\ b' = [b EXCEPT ![self] = TRUE] - /\ pc' = [pc EXCEPT ![self] = "ncs"] - /\ UNCHANGED << c, k, temp >> - -ncs(self) == /\ pc[self] = "ncs" - /\ TRUE - /\ pc' = [pc EXCEPT ![self] = "Li0"] - /\ UNCHANGED << b, c, k, temp >> - -P(self) == Li0(self) \/ Li1(self) \/ Li2(self) \/ Li3a(self) \/ Li3b(self) - \/ Li3c(self) \/ Li3d(self) \/ Li4a(self) \/ Li4b(self) - \/ cs(self) \/ Li5(self) \/ Li6(self) \/ ncs(self) - -Next == (\E self \in Proc: P(self)) - \/ (* Disjunct to prevent deadlock on termination *) - ((\A self \in ProcSet: pc[self] = "Done") /\ UNCHANGED vars) - -Spec == Init /\ [][Next]_vars /\ \A self \in Proc: WF_vars(P(self)) - -Termination == <>(\A self \in ProcSet: pc[self] = "Done") - -\* END TRANSLATION - -(**************************************************************************** -The following formula asserts that no two processes are in their -critcal sections at the same time. It is the invariant that a mutual -exclusion algorithm should satisfy. You can have TLC check that the -algorithm is a mutual exclusion algorithm by checking that this formula -is an invariant. - - -****************************************************************************) -MutualExclusion == \A i, j \in Proc : - (i # j) => ~ /\ pc[i] = "cs" - /\ pc[j] = "cs" -(***************************************************************************) -(* An equivalent way to perform the same test would be to change the *) -(* statement labeled cs (the critical section) to *) -(* *) -(* cs: assert \A j \in Proc \ {self} : pc[j] # "cs" *) -(* *) -(* You can give this a try. However, the assert statement requires that *) -(* the EXTENDS statement also import the standard module TLC, so it should *) -(* read *) -(* *) -(* EXTENDS Integers, TLC *) -(***************************************************************************) - ------------------------------------------------------------------------------ - -(***************************************************************************) -(* LIVENESS *) -(* *) -(* If you are a sophisticated PlusCal user and know a little temporal *) -(* logic, you can continue reading about the liveness properties of the *) -(* algorithm. *) -(* *) -(* Dijkstra's algorithm is "deadlock free", which for a mutual exclusion *) -(* algorithm means that if some process is trying to enter its critical *) -(* section, then some process (not necessarily the same one) will *) -(* eventually enter its critical section. Since a process begins trying *) -(* to enter its critical section when it is at the control point labeled *) -(* Li0, and it is in its critical section when it is at control point cs, *) -(* the following formula asserts deadlock freedom. *) -(***************************************************************************) -DeadlockFree == \A i \in Proc : - (pc[i] = "Li0") ~> (\E j \in Proc : pc[j] = "cs") -(***************************************************************************) -(* Dijkstra's algorithm is deadlock free only under the assumption of *) -(* fairness of process execution. The simplest such fairness assumption *) -(* is weak fairness on each process's next-state action. This means that *) -(* no process can halt if it is always possible for that process to take a *) -(* step. The following statement tells the PlusCal translator to define *) -(* the specification to assert weak fairness of each process's next-state *) -(* action. *) -(* *) -(* PlusCal options (wf) *) -(* *) -(* This statement can occur anywhere in the file--either in a comment or *) -(* before or after the module. Because of this statement, the translator *) -(* has added the necessary fairness conjunct to the definition of Spec. *) -(* So, you can have the TLC model checker check that the algorithm *) -(* satisfies property DeadlockFree. *) -(***************************************************************************) - -(***************************************************************************) -(* Dijkstra's algorithm is not "starvation free", because it allows some *) -(* waiting processes to "starve", never entering their critical section *) -(* while other processes keep entering and leaving their critical *) -(* sections. Starvation freedom is asserted by the following formula. *) -(* You can use TLC to show that the algorithm is not starvation free by *) -(* producing a counterexample trace. *) -(***************************************************************************) -StarvationFree == \A i \in Proc : - (pc[i] = "Li0") ~> (pc[i] = "cs") - -(***************************************************************************) -(* In this algorithm, no process can ever be blocked waiting at an `await' *) -(* statement or a `with (v \in S)' statement with S empty. Therefore, *) -(* weak fairness of each process means that each process keeps continually *) -(* trying to enter its critical section, and it exits the critical *) -(* section. An important requirement of a mutual exclusion solution, one *) -(* that rules out many simple solutions, is that a process is allowed to *) -(* remain forever in its non-critical section. (There is also no need to *) -(* require that a process that enters its critical section ever leaves it, *) -(* though without that requirement the definition of starvation freedom *) -(* must be changed.) *) -(* *) -(* We can allow a process to remain forever in its critical section by *) -(* replacing the `skip' statement that represents the non-critical section *) -(* with the following statement, which allows the process to loop forever. *) -(* *) -(* ncs: either goto Li0 or goto ncs *) -(* *) -(* A more elegant method is to change the fairness requirement to require *) -(* weak fairness of a process's next-state action only when the process is *) -(* not in its non-critical section. This is accomplished by taking the *) -(* following formula LSpec as the algorithm's specification. *) -(***************************************************************************) -LSpec == Init /\ [][Next]_vars - /\ \A self \in Proc: WF_vars((pc[self] # "ncs") /\ P(self)) - -(***************************************************************************) -(* If we allow a process to remain forever in its non-critical section, *) -(* then our definition of deadlock freedom is too weak. Suppose process p *) -(* were in its critical section and process q, trying to enter its *) -(* critical section, reached Li1. Formula DeadlockFree would allow a *) -(* behavior in which process q exited its critical section and remained *) -(* forever in its non-critical section, but process p looped forever *) -(* trying to enter its critical section and never succeeding. To rule out *) -(* this possibility, we must replace the formula *) -(* *) -(* pc[i] = "Li0" *) -(* *) -(* in DeadLock free with one asserting that control in process i is *) -(* anywhere in control points Li0 through Li4b. It's easier to express *) -(* this by saying where control in process i is NOT, which we do in the *) -(* following property. *) -(***************************************************************************) -DeadlockFreedom == - \A i \in Proc : - (pc[i] \notin {"Li5", "Li6", "ncs"}) ~> (\E j \in Proc : pc[j] = "cs") -(***************************************************************************) -(* Do you see why it's not necessary to include "cs" in the set of values *) -(* that pc[i] does not equal? *) -(***************************************************************************) - - - -(***************************************************************************) -(* TLC checked invariant MutualExclusion and property DeadlockFree for *) -(* three processes in about 2 minutes. It found 90882 distinct states and *) -(* a reachable state graph of diameter 54. *) -(***************************************************************************) -============================================================================= -\* Modification History -\* Last modified Sat Jan 01 07:50:35 PST 2011 by lamport -\* Created Fri Dec 31 14:14:14 PST 2010 by lamport diff --git a/examples/dijkstra-mutex/DijkstraMutex.toolbox/LSpec-model/MC.cfg b/examples/dijkstra-mutex/DijkstraMutex.toolbox/LSpec-model/MC.cfg deleted file mode 100644 index 123b9d13e48a5a58ced8ba58252e63605daac572..0000000000000000000000000000000000000000 --- a/examples/dijkstra-mutex/DijkstraMutex.toolbox/LSpec-model/MC.cfg +++ /dev/null @@ -1,20 +0,0 @@ -\* MV CONSTANT declarations -CONSTANTS -p1 = p1 -p2 = p2 -p3 = p3 -\* MV CONSTANT definitions -CONSTANT -Proc <- const_1293897152927428000 -\* CONSTANT declarations -CONSTANT defaultInitValue = defaultInitValue -\* SPECIFICATION definition -SPECIFICATION -spec_1293897152943429000 -\* INVARIANT definition -INVARIANT -inv_1293897152959430000 -\* PROPERTY definition -PROPERTY -prop_1293897152974431000 -\* Generated at Sat Jan 01 07:52:32 PST 2011 \ No newline at end of file diff --git a/examples/dijkstra-mutex/DijkstraMutex.toolbox/LSpec-model/MC.out b/examples/dijkstra-mutex/DijkstraMutex.toolbox/LSpec-model/MC.out deleted file mode 100644 index a01eb9fa04f208eda93e7d8bfdc88c2f39b39db9..0000000000000000000000000000000000000000 --- a/examples/dijkstra-mutex/DijkstraMutex.toolbox/LSpec-model/MC.out +++ /dev/null @@ -1,298 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.03 of 26 May 2010 -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running in Model-Checking mode. -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file MC.tla -Parsing file DijkstraMutex.tla -Parsing file C:\lamport\tla\newtools\tla2-inria\org.lamport.tla.toolbox\StandardModules\TLC.tla -Parsing file C:\lamport\tla\newtools\tla2-inria\org.lamport.tla.toolbox\StandardModules\Integers.tla -Parsing file C:\lamport\tla\newtools\tla2-inria\org.lamport.tla.toolbox\StandardModules\Naturals.tla -Parsing file C:\lamport\tla\newtools\tla2-inria\org.lamport.tla.toolbox\StandardModules\Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module DijkstraMutex -Semantic processing of module Sequences -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2011-01-01 07:52:33) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2212:0 @!@!@ -Implied-temporal checking--satisfiability problem has 3 branches. -@!@!@ENDMSG 2212 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 3 distinct states generated. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(13) at 2011-01-01 07:52:37: 4928 states generated, 2119 distinct states found, 542 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(27) at 2011-01-01 07:53:37: 111398 states generated, 40628 distinct states found, 5441 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(34) at 2011-01-01 07:54:37: 224816 states generated, 75258 distinct states found, 3435 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2192:0 @!@!@ -Checking temporal properties for the complete state space... -@!@!@ENDMSG 2192 @!@!@ -@!@!@STARTMSG 2193:0 @!@!@ -Model checking completed. No error has been found. - Estimates of the probability that TLC did not check all reachable states - because two distinct states had the same fingerprint: - calculated (optimistic): val = 9.5E-10 - based on the actual fingerprints: val = 4.9E-10 -@!@!@ENDMSG 2193 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 07:55:35 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 13773 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 13773 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 13773 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 13773 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 13773 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 31878 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 23001 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 54879 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 54879 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 54879 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 54879 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 31878 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 31878 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 31878 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 31878 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 31878 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 27594 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 27594 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 27594 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 27594 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 27594 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 852 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 8790 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 9642 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 9642 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 9642 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 9642 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 6648 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 6648 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 6648 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 6648 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 6648 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 17496 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 17496 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 17496 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 17496 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 17496 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 41709 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 41709 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 41709 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 41709 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 41709 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 37458 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 13782 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 23676 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 44874 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 44874 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 44874 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 9717 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 9717 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 9717 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 9717 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 9717 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 9765 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 9765 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 9765 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 9765 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 9765 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(54) at 2011-01-01 07:55:35: 282810 states generated, 90882 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -282810 states generated, 90882 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2194:0 @!@!@ -The depth of the complete state graph search is 54. -@!@!@ENDMSG 2194 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished. (2011-01-01 07:55:36) -@!@!@ENDMSG 2186 @!@!@ diff --git a/examples/dijkstra-mutex/DijkstraMutex.toolbox/LSpec-model/MC.tla b/examples/dijkstra-mutex/DijkstraMutex.toolbox/LSpec-model/MC.tla deleted file mode 100644 index eee3a7e84346e714299fb23a7dd7fc345a3e8e9a..0000000000000000000000000000000000000000 --- a/examples/dijkstra-mutex/DijkstraMutex.toolbox/LSpec-model/MC.tla +++ /dev/null @@ -1,28 +0,0 @@ ----- MODULE MC ---- -EXTENDS DijkstraMutex, TLC - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -p1, p2, p3 ----- - -\* MV CONSTANT definitions Proc -const_1293897152927428000 == -{p1, p2, p3} ----- - -\* SPECIFICATION definition @modelBehaviorSpec:0 -spec_1293897152943429000 == -LSpec ----- -\* INVARIANT definition @modelCorrectnessInvariants:0 -inv_1293897152959430000 == -MutualExclusion ----- -\* PROPERTY definition @modelCorrectnessProperties:0 -prop_1293897152974431000 == -DeadlockFreedom ----- -============================================================================= -\* Modification History -\* Created Sat Jan 01 07:52:32 PST 2011 by lamport diff --git a/examples/dijkstra-mutex/DijkstraMutex.toolbox/LSpec-model/MC_TE.out b/examples/dijkstra-mutex/DijkstraMutex.toolbox/LSpec-model/MC_TE.out deleted file mode 100644 index a01eb9fa04f208eda93e7d8bfdc88c2f39b39db9..0000000000000000000000000000000000000000 --- a/examples/dijkstra-mutex/DijkstraMutex.toolbox/LSpec-model/MC_TE.out +++ /dev/null @@ -1,298 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.03 of 26 May 2010 -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running in Model-Checking mode. -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file MC.tla -Parsing file DijkstraMutex.tla -Parsing file C:\lamport\tla\newtools\tla2-inria\org.lamport.tla.toolbox\StandardModules\TLC.tla -Parsing file C:\lamport\tla\newtools\tla2-inria\org.lamport.tla.toolbox\StandardModules\Integers.tla -Parsing file C:\lamport\tla\newtools\tla2-inria\org.lamport.tla.toolbox\StandardModules\Naturals.tla -Parsing file C:\lamport\tla\newtools\tla2-inria\org.lamport.tla.toolbox\StandardModules\Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module DijkstraMutex -Semantic processing of module Sequences -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2011-01-01 07:52:33) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2212:0 @!@!@ -Implied-temporal checking--satisfiability problem has 3 branches. -@!@!@ENDMSG 2212 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 3 distinct states generated. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(13) at 2011-01-01 07:52:37: 4928 states generated, 2119 distinct states found, 542 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(27) at 2011-01-01 07:53:37: 111398 states generated, 40628 distinct states found, 5441 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(34) at 2011-01-01 07:54:37: 224816 states generated, 75258 distinct states found, 3435 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2192:0 @!@!@ -Checking temporal properties for the complete state space... -@!@!@ENDMSG 2192 @!@!@ -@!@!@STARTMSG 2193:0 @!@!@ -Model checking completed. No error has been found. - Estimates of the probability that TLC did not check all reachable states - because two distinct states had the same fingerprint: - calculated (optimistic): val = 9.5E-10 - based on the actual fingerprints: val = 4.9E-10 -@!@!@ENDMSG 2193 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 07:55:35 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 13773 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 13773 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 13773 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 13773 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 13773 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 31878 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 23001 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 54879 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 54879 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 54879 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 54879 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 31878 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 31878 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 31878 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 31878 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 31878 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 27594 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 27594 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 27594 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 27594 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 27594 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 852 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 8790 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 9642 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 9642 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 9642 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 9642 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 6648 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 6648 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 6648 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 6648 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 6648 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 17496 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 17496 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 17496 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 17496 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 17496 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 41709 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 41709 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 41709 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 41709 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 41709 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 37458 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 13782 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 23676 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 44874 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 44874 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 44874 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 7416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 9717 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 9717 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 9717 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 9717 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 9717 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 9765 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 9765 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 9765 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 9765 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 9765 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(54) at 2011-01-01 07:55:35: 282810 states generated, 90882 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -282810 states generated, 90882 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2194:0 @!@!@ -The depth of the complete state graph search is 54. -@!@!@ENDMSG 2194 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished. (2011-01-01 07:55:36) -@!@!@ENDMSG 2186 @!@!@ diff --git a/examples/dijkstra-mutex/DijkstraMutex.toolbox/Safety-4-processors/DijkstraMutex.tla b/examples/dijkstra-mutex/DijkstraMutex.toolbox/Safety-4-processors/DijkstraMutex.tla deleted file mode 100644 index 80e185b3291291b241fd9d1b006248ca592918fa..0000000000000000000000000000000000000000 --- a/examples/dijkstra-mutex/DijkstraMutex.toolbox/Safety-4-processors/DijkstraMutex.tla +++ /dev/null @@ -1,336 +0,0 @@ ---------------------------- MODULE DijkstraMutex --------------------------- -(***************************************************************************) -(* This is a PlusCal version of the first published mutual exclusion *) -(* algorithm, which appeared in *) -(* *) -(* E. W. Dijkstra: "Solution of a Problem in Concurrent *) -(* Programming Control". Communications of the ACM 8, 9 *) -(* (September 1965) page 569. *) -(* *) -(* Here is the description of the algorithm as it appeared in that paper. *) -(* The global variables are declared by *) -(* *) -(* Boolean array b, c[1:N]; integer k *) -(* *) -(* The initial values of b[i] and c[i] are true, for each i in 1..N. The *) -(* initial value of k can be any integer in 1..N. The pseudo-code for the *) -(* i-th process, for each i in 1..N, is: *) -(* *) -(* integer j; *) -(* Li0: b[i] := false; *) -(* Li1: if k # i then *) -(* Li2: begin c[i] := true; *) -(* Li3: if b[k] then k := i; *) -(* go to Li1 *) -(* end *) -(* else *) -(* Li4: begin c[i] := false; *) -(* for j := 1 step 1 until N do *) -(* if j # i and not c[j] then go to Li1 *) -(* end; *) -(* critical section; *) -(* c[i] := true; b[i] := true; *) -(* remainder of the cycle in which stopping is allowed; *) -(* go to Li0 *) -(* *) -(* It appears to me that the "else" preceding label Li4 begins the else *) -(* clause of the if statement beginning at Li1, and that the code from Li4 *) -(* through the end three lines later should be the body of that else *) -(* clause. However, the indentation indicates otherwise. Moreover, that *) -(* interpretation produces an incorrect algorithm. It seems that this *) -(* "else" actually marks an empty else clause for the if statement at Li1. *) -(* (Perhaps there should have been a semicolon after the "else".) *) -(***************************************************************************) - -EXTENDS Integers - -(***************************************************************************) -(* There is no reason why the processes need to be numbered from 1 to N. *) -(* So, we assume an arbitrary set Proc of process names. *) -(***************************************************************************) -CONSTANT Proc - -(********* -Here is the PlusCal version of this algorithm. - - --algorithm Mutex - { variables b = [i \in Proc |-> TRUE], c = [i \in Proc |-> TRUE], k \in Proc; - process (P \in Proc) - variable temp ; - { Li0: while (TRUE) - { b[self] := FALSE; - Li1: if (k # self) { Li2: c[self] := TRUE; - Li3a: temp := k; - Li3b: if (b[temp]) { Li3c: k := self } ; - Li3d: goto Li1 - }; - Li4a: c[self] := FALSE; - temp := Proc \ {self}; - Li4b: while (temp # {}) - { with (j \in temp) - { temp := temp \ {j}; - if (~c[j]) { goto Li1 } - } - }; - cs: skip; \* the critical section - Li5: c[self] := TRUE; - Li6: b[self] := TRUE; - ncs: skip \* non-critical section ("remainder of cycle") - } - } - } -Notes on the PlusCal version: - -1. Label Li3d is required by the translation. It could be eliminated by - adding a then clause to the if statement of Li3b and putting the goto - in both branches of the if statement. - -2. The for loop in section Li4 of the original has been changed to - a while loop that examines the other processes in an arbitrary - (nondeterministically chosen) order. Because temp is set equal - to the set of all processes other than self, there is no need for - a test corresponding to the "if j # i" in the original. Note that - the process-local variable j has been replaced by the identifier - j that is local to the with statement. -*********) -\* BEGIN TRANSLATION -CONSTANT defaultInitValue -VARIABLES b, c, k, pc, temp - -vars == << b, c, k, pc, temp >> - -ProcSet == (Proc) - -Init == (* Global variables *) - /\ b = [i \in Proc |-> TRUE] - /\ c = [i \in Proc |-> TRUE] - /\ k \in Proc - (* Process P *) - /\ temp = [self \in Proc |-> defaultInitValue] - /\ pc = [self \in ProcSet |-> CASE self \in Proc -> "Li0"] - -Li0(self) == /\ pc[self] = "Li0" - /\ b' = [b EXCEPT ![self] = FALSE] - /\ pc' = [pc EXCEPT ![self] = "Li1"] - /\ UNCHANGED << c, k, temp >> - -Li1(self) == /\ pc[self] = "Li1" - /\ IF k # self - THEN /\ pc' = [pc EXCEPT ![self] = "Li2"] - ELSE /\ pc' = [pc EXCEPT ![self] = "Li4a"] - /\ UNCHANGED << b, c, k, temp >> - -Li2(self) == /\ pc[self] = "Li2" - /\ c' = [c EXCEPT ![self] = TRUE] - /\ pc' = [pc EXCEPT ![self] = "Li3a"] - /\ UNCHANGED << b, k, temp >> - -Li3a(self) == /\ pc[self] = "Li3a" - /\ temp' = [temp EXCEPT ![self] = k] - /\ pc' = [pc EXCEPT ![self] = "Li3b"] - /\ UNCHANGED << b, c, k >> - -Li3b(self) == /\ pc[self] = "Li3b" - /\ IF b[temp[self]] - THEN /\ pc' = [pc EXCEPT ![self] = "Li3c"] - ELSE /\ pc' = [pc EXCEPT ![self] = "Li3d"] - /\ UNCHANGED << b, c, k, temp >> - -Li3c(self) == /\ pc[self] = "Li3c" - /\ k' = self - /\ pc' = [pc EXCEPT ![self] = "Li3d"] - /\ UNCHANGED << b, c, temp >> - -Li3d(self) == /\ pc[self] = "Li3d" - /\ pc' = [pc EXCEPT ![self] = "Li1"] - /\ UNCHANGED << b, c, k, temp >> - -Li4a(self) == /\ pc[self] = "Li4a" - /\ c' = [c EXCEPT ![self] = FALSE] - /\ temp' = [temp EXCEPT ![self] = Proc \ {self}] - /\ pc' = [pc EXCEPT ![self] = "Li4b"] - /\ UNCHANGED << b, k >> - -Li4b(self) == /\ pc[self] = "Li4b" - /\ IF temp[self] # {} - THEN /\ \E j \in temp[self]: - /\ temp' = [temp EXCEPT - ![self] = temp[self] \ {j}] - /\ IF ~c[j] - THEN /\ pc' = [pc EXCEPT - ![self] = "Li1"] - ELSE /\ pc' = [pc EXCEPT - ![self] = "Li4b"] - ELSE /\ pc' = [pc EXCEPT ![self] = "cs"] - /\ UNCHANGED temp - /\ UNCHANGED << b, c, k >> - -cs(self) == /\ pc[self] = "cs" - /\ TRUE - /\ pc' = [pc EXCEPT ![self] = "Li5"] - /\ UNCHANGED << b, c, k, temp >> - -Li5(self) == /\ pc[self] = "Li5" - /\ c' = [c EXCEPT ![self] = TRUE] - /\ pc' = [pc EXCEPT ![self] = "Li6"] - /\ UNCHANGED << b, k, temp >> - -Li6(self) == /\ pc[self] = "Li6" - /\ b' = [b EXCEPT ![self] = TRUE] - /\ pc' = [pc EXCEPT ![self] = "ncs"] - /\ UNCHANGED << c, k, temp >> - -ncs(self) == /\ pc[self] = "ncs" - /\ TRUE - /\ pc' = [pc EXCEPT ![self] = "Li0"] - /\ UNCHANGED << b, c, k, temp >> - -P(self) == Li0(self) \/ Li1(self) \/ Li2(self) \/ Li3a(self) \/ Li3b(self) - \/ Li3c(self) \/ Li3d(self) \/ Li4a(self) \/ Li4b(self) - \/ cs(self) \/ Li5(self) \/ Li6(self) \/ ncs(self) - -Next == (\E self \in Proc: P(self)) - \/ (* Disjunct to prevent deadlock on termination *) - ((\A self \in ProcSet: pc[self] = "Done") /\ UNCHANGED vars) - -Spec == Init /\ [][Next]_vars /\ \A self \in Proc: WF_vars(P(self)) - -Termination == <>(\A self \in ProcSet: pc[self] = "Done") - -\* END TRANSLATION - -(**************************************************************************** -The following formula asserts that no two processes are in their -critcal sections at the same time. It is the invariant that a mutual -exclusion algorithm should satisfy. You can have TLC check that the -algorithm is a mutual exclusion algorithm by checking that this formula -is an invariant. - - -****************************************************************************) -MutualExclusion == \A i, j \in Proc : - (i # j) => ~ /\ pc[i] = "cs" - /\ pc[j] = "cs" -(***************************************************************************) -(* An equivalent way to perform the same test would be to change the *) -(* statement labeled cs (the critical section) to *) -(* *) -(* cs: assert \A j \in Proc \ {self} : pc[j] # "cs" *) -(* *) -(* You can give this a try. However, the assert statement requires that *) -(* the EXTENDS statement also import the standard module TLC, so it should *) -(* read *) -(* *) -(* EXTENDS Integers, TLC *) -(***************************************************************************) - ------------------------------------------------------------------------------ - -(***************************************************************************) -(* LIVENESS *) -(* *) -(* If you are a sophisticated PlusCal user and know a little temporal *) -(* logic, you can continue reading about the liveness properties of the *) -(* algorithm. *) -(* *) -(* Dijkstra's algorithm is "deadlock free", which for a mutual exclusion *) -(* algorithm means that if some process is trying to enter its critical *) -(* section, then some process (not necessarily the same one) will *) -(* eventually enter its critical section. Since a process begins trying *) -(* to enter its critical section when it is at the control point labeled *) -(* Li0, and it is in its critical section when it is at control point cs, *) -(* the following formula asserts deadlock freedom. *) -(***************************************************************************) -DeadlockFree == \A i \in Proc : - (pc[i] = "Li0") ~> (\E j \in Proc : pc[j] = "cs") -(***************************************************************************) -(* Dijkstra's algorithm is deadlock free only under the assumption of *) -(* fairness of process execution. The simplest such fairness assumption *) -(* is weak fairness on each process's next-state action. This means that *) -(* no process can halt if it is always possible for that process to take a *) -(* step. The following statement tells the PlusCal translator to define *) -(* the specification to assert weak fairness of each process's next-state *) -(* action. *) -(* *) -(* PlusCal options (wf) *) -(* *) -(* This statement can occur anywhere in the file--either in a comment or *) -(* before or after the module. Because of this statement, the translator *) -(* has added the necessary fairness conjunct to the definition of Spec. *) -(* So, you can have the TLC model checker check that the algorithm *) -(* satisfies property DeadlockFree. *) -(***************************************************************************) - -(***************************************************************************) -(* Dijkstra's algorithm is not "starvation free", because it allows some *) -(* waiting processes to "starve", never entering their critical section *) -(* while other processes keep entering and leaving their critical *) -(* sections. Starvation freedom is asserted by the following formula. *) -(* You can use TLC to show that the algorithm is not starvation free by *) -(* producing a counterexample trace. *) -(***************************************************************************) -StarvationFree == \A i \in Proc : - (pc[i] = "Li0") ~> (pc[i] = "cs") - -(***************************************************************************) -(* In this algorithm, no process can ever be blocked waiting at an `await' *) -(* statement or a `with (v \in S)' statement with S empty. Therefore, *) -(* weak fairness of each process means that each process keeps continually *) -(* trying to enter its critical section, and it exits the critical *) -(* section. An important requirement of a mutual exclusion solution, one *) -(* that rules out many simple solutions, is that a process is allowed to *) -(* remain forever in its non-critical section. (There is also no need to *) -(* require that a process that enters its critical section ever leaves it, *) -(* though without that requirement the definition of starvation freedom *) -(* must be changed.) *) -(* *) -(* We can allow a process to remain forever in its critical section by *) -(* replacing the `skip' statement that represents the non-critical section *) -(* with the following statement, which allows the process to loop forever. *) -(* *) -(* ncs: either goto Li0 or goto ncs *) -(* *) -(* A more elegant method is to change the fairness requirement to require *) -(* weak fairness of a process's next-state action only when the process is *) -(* not in its non-critical section. This is accomplished by taking the *) -(* following formula LSpec as the algorithm's specification. *) -(***************************************************************************) -LSpec == Init /\ [][Next]_vars - /\ \A self \in Proc: WF_vars((pc[self] # "ncs") /\ P(self)) - -(***************************************************************************) -(* If we allow a process to remain forever in its non-critical section, *) -(* then our definition of deadlock freedom is too weak. Suppose process p *) -(* were in its critical section and process q, trying to enter its *) -(* critical section, reached Li1. Formula DeadlockFree would allow a *) -(* behavior in which process q exited its critical section and remained *) -(* forever in its non-critical section, but process p looped forever *) -(* trying to enter its critical section and never succeeding. To rule out *) -(* this possibility, we must replace the formula *) -(* *) -(* pc[i] = "Li0" *) -(* *) -(* in DeadLock free with one asserting that control in process i is *) -(* anywhere in control points Li0 through Li4b. It's easier to express *) -(* this by saying where control in process i is NOT, which we do in the *) -(* following property. *) -(***************************************************************************) -DeadlockFreedom == - \A i \in Proc : - (pc[i] \notin {"Li5", "Li6", "ncs"}) ~> (\E j \in Proc : pc[j] = "cs") -(***************************************************************************) -(* Do you see why it's not necessary to include "cs" in the set of values *) -(* that pc[i] does not equal? *) -(***************************************************************************) - - - -(***************************************************************************) -(* TLC checked invariant MutualExclusion and property DeadlockFree for *) -(* three processes in about 2 minutes. It found 90882 distinct states and *) -(* a reachable state graph of diameter 54. *) -(***************************************************************************) -============================================================================= -\* Modification History -\* Last modified Sat Jan 01 07:50:35 PST 2011 by lamport -\* Created Fri Dec 31 14:14:14 PST 2010 by lamport diff --git a/examples/dijkstra-mutex/DijkstraMutex.toolbox/Safety-4-processors/MC.cfg b/examples/dijkstra-mutex/DijkstraMutex.toolbox/Safety-4-processors/MC.cfg deleted file mode 100644 index c287ceb1db3ba9d79c113b285875bd04eca8c9aa..0000000000000000000000000000000000000000 --- a/examples/dijkstra-mutex/DijkstraMutex.toolbox/Safety-4-processors/MC.cfg +++ /dev/null @@ -1,18 +0,0 @@ -\* MV CONSTANT declarations -CONSTANTS -p1 = p1 -p2 = p2 -p3 = p3 -p4 = p4 -\* MV CONSTANT definitions -CONSTANT -Proc <- const_1293897507996435000 -\* CONSTANT declarations -CONSTANT defaultInitValue = defaultInitValue -\* SPECIFICATION definition -SPECIFICATION -spec_1293897508011436000 -\* INVARIANT definition -INVARIANT -inv_1293897508027437000 -\* Generated at Sat Jan 01 07:58:28 PST 2011 \ No newline at end of file diff --git a/examples/dijkstra-mutex/DijkstraMutex.toolbox/Safety-4-processors/MC.out b/examples/dijkstra-mutex/DijkstraMutex.toolbox/Safety-4-processors/MC.out deleted file mode 100644 index 6a8526c7c30d1b7ad8f3f29399fe9bca04fe043f..0000000000000000000000000000000000000000 --- a/examples/dijkstra-mutex/DijkstraMutex.toolbox/Safety-4-processors/MC.out +++ /dev/null @@ -1,3547 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.03 of 26 May 2010 -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running in Model-Checking mode. -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file MC.tla -Parsing file DijkstraMutex.tla -Parsing file C:\lamport\tla\newtools\tla2-inria\org.lamport.tla.toolbox\StandardModules\TLC.tla -Parsing file C:\lamport\tla\newtools\tla2-inria\org.lamport.tla.toolbox\StandardModules\Integers.tla -Parsing file C:\lamport\tla\newtools\tla2-inria\org.lamport.tla.toolbox\StandardModules\Naturals.tla -Parsing file C:\lamport\tla\newtools\tla2-inria\org.lamport.tla.toolbox\StandardModules\Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module DijkstraMutex -Semantic processing of module Sequences -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2011-01-01 07:58:28) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 4 distinct states generated. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(17) at 2011-01-01 07:58:31: 152897 states generated, 49158 distinct states found, 14927 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(26) at 2011-01-01 07:59:31: 3572051 states generated, 1024738 distinct states found, 258575 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(29) at 2011-01-01 08:00:31: 7004101 states generated, 1968463 distinct states found, 470190 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:01:32) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(30) at 2011-01-01 08:01:32: 10641032 states generated, 2946655 distinct states found, 668085 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:01:32 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 580652 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 580652 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 580652 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 580652 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 580652 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 1400945 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 587651 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 1988596 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 1988596 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 1988596 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 1988596 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 1067240 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 1067240 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 1067240 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 1067240 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 1067240 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 805384 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 805384 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 805384 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 805384 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 805384 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 26711 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 657423 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 684134 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 684134 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 684134 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 684134 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 228761 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 228761 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 228761 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 228761 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 228761 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 881844 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 881844 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 881844 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 881844 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 881844 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 751744 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 751744 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 751744 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 751744 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 751744 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 3236174 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 1023363 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 2212811 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 130510 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 130510 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 3366684 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 3366684 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 3366684 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 98446 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 98446 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 98446 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 98446 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 98446 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 73537 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 73537 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 73537 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 73537 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 73537 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 64725 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 64725 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 64725 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 64725 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 64725 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 49281 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 49281 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 49281 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 49281 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 49281 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(31) at 2011-01-01 08:02:32: 14273867 states generated, 3901358 distinct states found, 835700 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(32) at 2011-01-01 08:03:32: 17948425 states generated, 4860751 distinct states found, 1000452 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:04:32) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(33) at 2011-01-01 08:04:32: 21621803 states generated, 5807671 distinct states found, 1150646 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(34) at 2011-01-01 08:05:32: 25289550 states generated, 6737372 distinct states found, 1277651 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:05:32 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 943758 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 943758 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 943758 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 943758 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 943758 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 3383208 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 1529695 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 4912903 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 4912903 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 4912903 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 4912903 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 2702860 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 2702860 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 2702860 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 2702860 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 2702860 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 2136275 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 2136275 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 2136275 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 2136275 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 2136275 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 54997 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 1446816 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 1501813 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 1501813 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 1501813 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 1501813 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 537007 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 537007 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 537007 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 537007 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 537007 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 1932215 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 1932215 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 1932215 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 1932215 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 1932215 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 2123631 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 2123631 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 2123631 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 2123631 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 2123631 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 7369761 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 2894825 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 4474936 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 319618 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 319618 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 7689379 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 7689379 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 7689379 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 255088 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 255088 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 255088 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 255088 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 255088 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 200368 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 200368 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 200368 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 200368 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 200368 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 195347 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 195347 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 195347 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 195347 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 195347 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 158902 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 158902 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 158902 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 158902 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 158902 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(35) at 2011-01-01 08:06:33: 28904065 states generated, 7633600 distinct states found, 1372832 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:07:33) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(35) at 2011-01-01 08:07:33: 32249103 states generated, 8465120 distinct states found, 1469800 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(36) at 2011-01-01 08:08:33: 35159302 states generated, 9181078 distinct states found, 1536593 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(36) at 2011-01-01 08:09:33: 38116134 states generated, 9913728 distinct states found, 1621622 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:09:33 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 1166588 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 1166588 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 1166588 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 1166588 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 1166588 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 5139580 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 2395977 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 7535557 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 7535557 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 7535557 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 7535557 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 4233633 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 4233633 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 4233633 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 4233633 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 4233633 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 3454169 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 3454169 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 3454169 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 3454169 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 3454169 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 77952 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 2032654 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 2110606 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 2110606 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 2110606 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 2110606 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 821330 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 821330 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 821330 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 821330 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 821330 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 2798382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 2798382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 2798382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 2798382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 2798382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 3520235 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 3520235 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 3520235 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 3520235 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 3520235 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 10638254 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 4507485 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 6130769 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 485742 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 485742 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 11123996 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 11123996 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 11123996 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 400357 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 400357 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 400357 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 400357 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 400357 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 324755 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 324755 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 324755 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 324755 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 324755 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 340318 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 340318 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 340318 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 340318 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 340318 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 286204 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 286204 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 286204 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 286204 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 286204 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:10:33) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(36) at 2011-01-01 08:10:33: 41089170 states generated, 10622220 distinct states found, 1658502 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(37) at 2011-01-01 08:11:33: 44077509 states generated, 11344111 distinct states found, 1720724 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(37) at 2011-01-01 08:12:33: 47058502 states generated, 12052176 distinct states found, 1759101 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:13:33) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(38) at 2011-01-01 08:13:33: 49987007 states generated, 12751808 distinct states found, 1802401 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:13:33 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 1366936 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 1366936 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 1366936 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 1366936 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 1366936 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 6756168 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 3221176 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 9977344 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 9977344 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 9977344 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 9977344 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 5720164 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 5720164 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 5720164 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 5720164 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 5720164 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 4796473 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 4796473 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 4796473 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 4796473 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 4796473 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 99452 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 2469238 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 2568690 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 2568690 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 2568690 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 2568690 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 1069000 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 1069000 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 1069000 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 1069000 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 1069000 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 3541967 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 3541967 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 3541967 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 3541967 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 3541967 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 5014050 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 5014050 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 5014050 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 5014050 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 5014050 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 13381055 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 5887085 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 7493970 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 636616 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 636616 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 14017671 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 14017671 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 14017671 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 538927 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 538927 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 538927 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 538927 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 538927 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 448718 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 448718 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 448718 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 448718 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 448718 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 495382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 495382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 495382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 495382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 495382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 431681 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 431681 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 431681 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 431681 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 431681 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(38) at 2011-01-01 08:14:34: 52912500 states generated, 13445915 distinct states found, 1848935 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(38) at 2011-01-01 08:15:34: 55827947 states generated, 14101608 distinct states found, 1831541 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:16:34) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(39) at 2011-01-01 08:16:34: 58733319 states generated, 14800014 distinct states found, 1893283 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(39) at 2011-01-01 08:17:34: 61580044 states generated, 15444630 distinct states found, 1890220 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:17:34 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 1551814 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 1551814 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 1551814 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 1551814 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 1551814 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 8337124 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 4031295 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 12368419 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 12368419 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 12368419 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 12368419 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 7231420 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 7231420 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 7231420 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 7231420 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 7231420 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 6210227 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 6210227 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 6210227 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 6210227 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 6210227 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 122412 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 2823723 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 2946135 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 2946135 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 2946135 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 2946135 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 1271792 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 1271792 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 1271792 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 1271792 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 1271792 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 4155403 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 4155403 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 4155403 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 4155403 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 4155403 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 6536207 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 6536207 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 6536207 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 6536207 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 6536207 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 15981416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 7303994 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 8677422 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 788754 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 788754 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 16770170 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 16770170 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 16770170 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 683105 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 683105 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 683105 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 683105 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 683105 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 582409 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 582409 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 582409 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 582409 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 582409 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 676561 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 676561 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 676561 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 676561 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 676561 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 596378 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 596378 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 596378 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 596378 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 596378 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(39) at 2011-01-01 08:18:34: 64402715 states generated, 16063735 distinct states found, 1849702 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:19:34) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(40) at 2011-01-01 08:19:34: 67247557 states generated, 16732401 distinct states found, 1892993 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(40) at 2011-01-01 08:20:34: 67530144 states generated, 16792638 distinct states found, 1887249 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(40) at 2011-01-01 08:21:35: 69636897 states generated, 17270852 distinct states found, 1887549 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:21:35 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 1688295 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 1688295 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 1688295 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 1688295 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 1688295 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 9409832 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 4606008 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 14015840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 14015840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 14015840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 14015840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 8301896 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 8301896 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 8301896 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 8301896 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 8301896 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 7249993 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 7249993 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 7249993 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 7249993 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 7249993 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 137554 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 3044264 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 3181818 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 3181818 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 3181818 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 3181818 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 1418015 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 1418015 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 1418015 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 1418015 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 1418015 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 4552072 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 4552072 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 4552072 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 4552072 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 4552072 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 7689825 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 7689825 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 7689825 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 7689825 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 7689825 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 17645164 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 8179378 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 9465786 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 893352 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 893352 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 18538516 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 18538516 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 18538516 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 785127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 785127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 785127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 785127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 785127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 679247 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 679247 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 679247 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 679247 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 679247 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 812907 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 812907 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 812907 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 812907 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 812907 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 723342 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 723342 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 723342 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 723342 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 723342 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:22:35) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(40) at 2011-01-01 08:22:35: 72445002 states generated, 17880033 distinct states found, 1838812 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(41) at 2011-01-01 08:23:35: 75302563 states generated, 18535021 distinct states found, 1857780 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(41) at 2011-01-01 08:24:35: 78129549 states generated, 19156809 distinct states found, 1829428 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:25:36) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(42) at 2011-01-01 08:25:36: 80907037 states generated, 19764496 distinct states found, 1787527 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:25:36 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 1930840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 1930840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 1930840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 1930840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 1930840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 10832549 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 5398905 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 16231454 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 16231454 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 16231454 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 16231454 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 9788382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 9788382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 9788382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 9788382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 9788382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 8757543 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 8757543 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 8757543 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 8757543 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 8757543 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 159687 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 3357996 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 3517683 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 3517683 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 3517683 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 3517683 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 1659009 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 1659009 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 1659009 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 1659009 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 1659009 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 5126187 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 5126187 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 5126187 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 5126187 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 5126187 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 9416099 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 9416099 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 9416099 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 9416099 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 9416099 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 19695883 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 9113624 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 10582259 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 1035519 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 1035519 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 20731402 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 20731402 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 20731402 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 932580 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 932580 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 932580 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 932580 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 932580 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 828363 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 828363 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 828363 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 828363 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 828363 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 1033213 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 1033213 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 1033213 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 1033213 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 1033213 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 954278 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 954278 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 954278 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 954278 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 954278 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(42) at 2011-01-01 08:26:36: 83706123 states generated, 20374343 distinct states found, 1762611 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(42) at 2011-01-01 08:27:36: 86466351 states generated, 20975329 distinct states found, 1725156 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:28:37) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(43) at 2011-01-01 08:28:37: 89218611 states generated, 21584736 distinct states found, 1693736 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(43) at 2011-01-01 08:29:37: 92030723 states generated, 22177163 distinct states found, 1640472 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:29:37 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 2165434 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 2165434 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 2165434 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 2165434 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 2165434 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 12243265 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 6189010 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 18432275 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 18432275 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 18432275 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 18432275 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 11304108 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 11304108 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 11304108 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 11304108 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 11304108 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 10384360 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 10384360 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 10384360 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 10384360 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 10384360 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 174719 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 3611409 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 3786128 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 3786128 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 3786128 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 3786128 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 1863461 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 1863461 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 1863461 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 1863461 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 1863461 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 5587132 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 5587132 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 5587132 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 5587132 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 5587132 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 11078514 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 11078514 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 11078514 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 11078514 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 11078514 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 21730556 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 10094157 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 11636399 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 1181170 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 1181170 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 22911726 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 22911726 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 22911726 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 1084693 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 1084693 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 1084693 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 1084693 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 1084693 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 981850 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 981850 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 981850 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 981850 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 981850 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 1269328 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 1269328 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 1269328 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 1269328 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 1269328 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 1181710 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 1181710 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 1181710 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 1181710 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 1181710 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(43) at 2011-01-01 08:30:38: 94809443 states generated, 22765040 distinct states found, 1579985 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:31:38) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(44) at 2011-01-01 08:31:38: 97590917 states generated, 23355864 distinct states found, 1525134 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(44) at 2011-01-01 08:32:38: 100415699 states generated, 23956876 distinct states found, 1474762 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(45) at 2011-01-01 08:33:38: 103163346 states generated, 24556320 distinct states found, 1434761 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:33:38 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 2466189 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 2466189 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 2466189 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 2466189 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 2466189 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 13582822 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 6973940 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 20556762 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 20556762 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 20556762 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 20556762 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 12763114 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 12763114 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 12763114 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 12763114 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 12763114 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 11941195 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 11941195 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 11941195 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 11941195 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 11941195 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 189223 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 3849564 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 4038787 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 4038787 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 4038787 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 4038787 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 2127999 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 2127999 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 2127999 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 2127999 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 2127999 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 6071603 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 6071603 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 6071603 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 6071603 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 6071603 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 12960316 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 12960316 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 12960316 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 12960316 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 12960316 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 23560492 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 10904058 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 12656434 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 1314412 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 1314412 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 24874904 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 24874904 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 24874904 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 1231885 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 1231885 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 1231885 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 1231885 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 1231885 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 1139802 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 1139802 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 1139802 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 1139802 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 1139802 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 1523944 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 1523944 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 1523944 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 1523944 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 1523944 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 1466842 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 1466842 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 1466842 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 1466842 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 1466842 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:34:40) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(45) at 2011-01-01 08:34:40: 105981719 states generated, 25136179 distinct states found, 1359712 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(45) at 2011-01-01 08:35:40: 106193335 states generated, 25175387 distinct states found, 1348920 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(45) at 2011-01-01 08:36:40: 108256602 states generated, 25602838 distinct states found, 1290627 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:37:41) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(46) at 2011-01-01 08:37:41: 111062226 states generated, 26196511 distinct states found, 1236462 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:37:41 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 2684127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 2684127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 2684127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 2684127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 2684127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 14546604 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 7523185 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 22069789 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 22069789 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 22069789 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 22069789 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 13834270 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 13834270 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 13834270 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 13834270 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 13834270 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 13115639 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 13115639 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 13115639 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 13115639 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 13115639 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 197547 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 3972804 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 4170351 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 4170351 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 4170351 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 4170351 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 2302699 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 2302699 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 2302699 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 2302699 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 2302699 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 6341754 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 6341754 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 6341754 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 6341754 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 6341754 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 14261625 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 14261625 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 14261625 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 14261625 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 14261625 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 24836587 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 11501919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 13334668 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 1411573 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 1411573 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 26248160 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 26248160 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 26248160 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 1341361 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 1341361 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 1341361 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 1341361 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 1341361 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 1263417 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 1263417 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 1263417 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 1263417 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 1263417 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 1751921 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 1751921 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 1751921 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 1751921 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 1751921 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 1677109 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 1677109 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 1677109 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 1677109 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 1677109 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(46) at 2011-01-01 08:38:41: 113764500 states generated, 26757531 distinct states found, 1163014 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(47) at 2011-01-01 08:39:41: 116357293 states generated, 27299276 distinct states found, 1102644 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:40:42) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(48) at 2011-01-01 08:40:42: 119006129 states generated, 27851290 distinct states found, 1031899 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(48) at 2011-01-01 08:41:42: 121737897 states generated, 28413581 distinct states found, 954327 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:41:42 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 3046522 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 3046522 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 3046522 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 3046522 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 3046522 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 15813449 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 8265332 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 24078781 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 24078781 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 24078781 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 24078781 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 15265798 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 15265798 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 15265798 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 15265798 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 15265798 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 14547505 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 14547505 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 14547505 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 14547505 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 14547505 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 209587 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 4128753 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 4338340 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 4338340 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 4338340 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 4338340 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 2642831 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 2642831 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 2642831 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 2642831 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 2642831 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 6713081 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 6713081 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 6713081 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 6713081 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 6713081 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 16195262 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 16195262 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 16195262 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 16195262 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 16195262 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 26444511 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 12194545 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 14249966 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 1538273 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 1538273 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 27982784 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 27982784 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 27982784 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 1483106 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 1483106 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 1483106 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 1483106 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 1483106 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 1421044 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 1421044 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 1421044 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 1421044 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 1421044 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 2024632 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 2024632 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 2024632 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 2024632 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 2024632 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 1998207 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 1998207 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 1998207 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 1998207 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 1998207 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(49) at 2011-01-01 08:42:42: 124457322 states generated, 28973729 distinct states found, 872168 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:43:43) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(49) at 2011-01-01 08:43:43: 126920204 states generated, 29476642 distinct states found, 790810 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(50) at 2011-01-01 08:44:43: 129418363 states generated, 29978361 distinct states found, 698463 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(51) at 2011-01-01 08:45:43: 131931867 states generated, 30494112 distinct states found, 615219 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:45:43 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 3403133 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 3403133 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 3403133 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 3403133 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 3403133 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 16973189 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 8964101 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 25937290 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 25937290 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 25937290 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 25937290 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 16639405 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 16639405 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 16639405 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 16639405 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 16639405 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 15888981 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 15888981 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 15888981 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 15888981 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 15888981 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 217032 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 4293506 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 4510538 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 4510538 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 4510538 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 4510538 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 3017667 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 3017667 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 3017667 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 3017667 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 3017667 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 7119476 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 7119476 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 7119476 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 7119476 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 7119476 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 18254926 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 18254926 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 18254926 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 18254926 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 18254926 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 27710423 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 12631127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 15079296 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 1656648 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 1656648 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 29367071 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 29367071 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 29367071 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 1623286 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 1623286 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 1623286 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 1623286 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 1623286 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 1582204 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 1582204 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 1582204 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 1582204 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 1582204 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 2289213 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 2289213 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 2289213 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 2289213 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 2289213 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 2298673 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 2298673 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 2298673 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 2298673 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 2298673 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:46:44) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(52) at 2011-01-01 08:46:44: 134533277 states generated, 31029208 distinct states found, 530591 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(53) at 2011-01-01 08:47:44: 137087382 states generated, 31557652 distinct states found, 451111 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(55) at 2011-01-01 08:48:44: 139685633 states generated, 32084826 distinct states found, 358821 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:49:45) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(57) at 2011-01-01 08:49:45: 142371026 states generated, 32606067 distinct states found, 236068 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:49:45 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 3747373 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 3747373 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 3747373 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 3747373 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 3747373 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 18146093 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 9700116 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 27846209 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 27846209 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 27846209 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 27846209 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 18006528 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 18006528 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 18006528 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 18006528 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 18006528 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 17184970 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 17184970 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 17184970 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 17184970 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 17184970 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 222345 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 4431456 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 4653801 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 4653801 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 4653801 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 4653801 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 3378091 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 3378091 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 3378091 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 3378091 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 3378091 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 7565933 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 7565933 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 7565933 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 7565933 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 7565933 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 20786567 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 20786567 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 20786567 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 20786567 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 20786567 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 28850971 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 13047774 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 15803197 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 1755230 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 1755230 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 30606201 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 30606201 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 30606201 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 1743277 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 1743277 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 1743277 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 1743277 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 1743277 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 1729748 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 1729748 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 1729748 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 1729748 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 1729748 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 2545805 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 2545805 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 2545805 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 2545805 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 2545805 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 2576519 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 2576519 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 2576519 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 2576519 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 2576519 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(61) at 2011-01-01 08:50:45: 145097992 states generated, 33091403 distinct states found, 58226 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2193:0 @!@!@ -Model checking completed. No error has been found. - Estimates of the probability that TLC did not check all reachable states - because two distinct states had the same fingerprint: - calculated (optimistic): val = 0 - based on the actual fingerprints: val = 0 -@!@!@ENDMSG 2193 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:51:27 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 3859612 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 3859612 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 3859612 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 3859612 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 3859612 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 18502488 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 9959576 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 28462064 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 28462064 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 28462064 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 28462064 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 18502488 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 18502488 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 18502488 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 18502488 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 18502488 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 17777940 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 17777940 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 17777940 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 17777940 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 17777940 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 223176 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 4462056 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 4685232 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 4685232 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 4685232 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 4685232 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 3483756 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 3483756 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 3483756 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 3483756 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 3483756 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 7693260 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 7693260 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 7693260 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 7693260 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 7693260 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 21861944 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 21861944 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 21861944 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 21861944 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 21861944 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 29147088 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 13115184 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 16031904 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 30938336 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 30938336 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 30938336 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 2646208 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 2646208 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 2646208 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 2646208 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 2646208 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 2664376 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 2664376 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 2664376 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 2664376 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 2664376 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(89) at 2011-01-01 08:51:28: 146157716 states generated, 33288512 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -146157716 states generated, 33288512 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2194:0 @!@!@ -The depth of the complete state graph search is 89. -@!@!@ENDMSG 2194 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished. (2011-01-01 08:51:30) -@!@!@ENDMSG 2186 @!@!@ diff --git a/examples/dijkstra-mutex/DijkstraMutex.toolbox/Safety-4-processors/MC.tla b/examples/dijkstra-mutex/DijkstraMutex.toolbox/Safety-4-processors/MC.tla deleted file mode 100644 index d5fc22e6cee442f38cec4adead4cf22e7a1ce9ba..0000000000000000000000000000000000000000 --- a/examples/dijkstra-mutex/DijkstraMutex.toolbox/Safety-4-processors/MC.tla +++ /dev/null @@ -1,24 +0,0 @@ ----- MODULE MC ---- -EXTENDS DijkstraMutex, TLC - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -p1, p2, p3, p4 ----- - -\* MV CONSTANT definitions Proc -const_1293897507996435000 == -{p1, p2, p3, p4} ----- - -\* SPECIFICATION definition @modelBehaviorSpec:0 -spec_1293897508011436000 == -Spec ----- -\* INVARIANT definition @modelCorrectnessInvariants:0 -inv_1293897508027437000 == -MutualExclusion ----- -============================================================================= -\* Modification History -\* Created Sat Jan 01 07:58:28 PST 2011 by lamport diff --git a/examples/dijkstra-mutex/DijkstraMutex.toolbox/Safety-4-processors/MC_TE.out b/examples/dijkstra-mutex/DijkstraMutex.toolbox/Safety-4-processors/MC_TE.out deleted file mode 100644 index 6a8526c7c30d1b7ad8f3f29399fe9bca04fe043f..0000000000000000000000000000000000000000 --- a/examples/dijkstra-mutex/DijkstraMutex.toolbox/Safety-4-processors/MC_TE.out +++ /dev/null @@ -1,3547 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.03 of 26 May 2010 -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running in Model-Checking mode. -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file MC.tla -Parsing file DijkstraMutex.tla -Parsing file C:\lamport\tla\newtools\tla2-inria\org.lamport.tla.toolbox\StandardModules\TLC.tla -Parsing file C:\lamport\tla\newtools\tla2-inria\org.lamport.tla.toolbox\StandardModules\Integers.tla -Parsing file C:\lamport\tla\newtools\tla2-inria\org.lamport.tla.toolbox\StandardModules\Naturals.tla -Parsing file C:\lamport\tla\newtools\tla2-inria\org.lamport.tla.toolbox\StandardModules\Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module DijkstraMutex -Semantic processing of module Sequences -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2011-01-01 07:58:28) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 4 distinct states generated. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(17) at 2011-01-01 07:58:31: 152897 states generated, 49158 distinct states found, 14927 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(26) at 2011-01-01 07:59:31: 3572051 states generated, 1024738 distinct states found, 258575 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(29) at 2011-01-01 08:00:31: 7004101 states generated, 1968463 distinct states found, 470190 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:01:32) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(30) at 2011-01-01 08:01:32: 10641032 states generated, 2946655 distinct states found, 668085 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:01:32 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 580652 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 580652 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 580652 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 580652 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 580652 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 1400945 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 587651 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 1988596 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 1988596 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 1988596 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 1988596 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 1067240 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 1067240 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 1067240 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 1067240 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 1067240 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 805384 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 805384 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 805384 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 805384 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 805384 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 26711 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 657423 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 684134 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 684134 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 684134 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 684134 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 228761 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 228761 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 228761 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 228761 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 228761 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 881844 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 881844 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 881844 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 881844 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 881844 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 751744 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 751744 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 751744 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 751744 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 751744 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 3236174 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 1023363 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 2212811 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 130510 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 130510 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 3366684 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 3366684 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 3366684 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 98446 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 98446 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 98446 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 98446 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 98446 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 73537 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 73537 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 73537 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 73537 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 73537 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 64725 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 64725 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 64725 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 64725 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 64725 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 49281 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 49281 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 49281 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 49281 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 49281 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(31) at 2011-01-01 08:02:32: 14273867 states generated, 3901358 distinct states found, 835700 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(32) at 2011-01-01 08:03:32: 17948425 states generated, 4860751 distinct states found, 1000452 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:04:32) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(33) at 2011-01-01 08:04:32: 21621803 states generated, 5807671 distinct states found, 1150646 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(34) at 2011-01-01 08:05:32: 25289550 states generated, 6737372 distinct states found, 1277651 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:05:32 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 943758 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 943758 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 943758 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 943758 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 943758 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 3383208 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 1529695 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 4912903 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 4912903 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 4912903 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 4912903 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 2702860 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 2702860 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 2702860 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 2702860 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 2702860 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 2136275 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 2136275 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 2136275 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 2136275 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 2136275 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 54997 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 1446816 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 1501813 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 1501813 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 1501813 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 1501813 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 537007 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 537007 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 537007 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 537007 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 537007 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 1932215 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 1932215 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 1932215 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 1932215 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 1932215 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 2123631 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 2123631 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 2123631 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 2123631 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 2123631 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 7369761 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 2894825 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 4474936 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 319618 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 319618 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 7689379 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 7689379 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 7689379 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 255088 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 255088 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 255088 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 255088 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 255088 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 200368 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 200368 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 200368 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 200368 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 200368 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 195347 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 195347 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 195347 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 195347 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 195347 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 158902 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 158902 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 158902 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 158902 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 158902 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(35) at 2011-01-01 08:06:33: 28904065 states generated, 7633600 distinct states found, 1372832 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:07:33) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(35) at 2011-01-01 08:07:33: 32249103 states generated, 8465120 distinct states found, 1469800 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(36) at 2011-01-01 08:08:33: 35159302 states generated, 9181078 distinct states found, 1536593 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(36) at 2011-01-01 08:09:33: 38116134 states generated, 9913728 distinct states found, 1621622 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:09:33 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 1166588 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 1166588 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 1166588 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 1166588 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 1166588 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 5139580 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 2395977 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 7535557 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 7535557 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 7535557 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 7535557 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 4233633 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 4233633 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 4233633 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 4233633 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 4233633 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 3454169 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 3454169 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 3454169 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 3454169 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 3454169 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 77952 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 2032654 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 2110606 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 2110606 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 2110606 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 2110606 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 821330 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 821330 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 821330 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 821330 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 821330 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 2798382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 2798382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 2798382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 2798382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 2798382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 3520235 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 3520235 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 3520235 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 3520235 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 3520235 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 10638254 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 4507485 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 6130769 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 485742 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 485742 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 11123996 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 11123996 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 11123996 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 400357 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 400357 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 400357 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 400357 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 400357 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 324755 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 324755 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 324755 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 324755 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 324755 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 340318 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 340318 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 340318 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 340318 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 340318 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 286204 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 286204 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 286204 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 286204 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 286204 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:10:33) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(36) at 2011-01-01 08:10:33: 41089170 states generated, 10622220 distinct states found, 1658502 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(37) at 2011-01-01 08:11:33: 44077509 states generated, 11344111 distinct states found, 1720724 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(37) at 2011-01-01 08:12:33: 47058502 states generated, 12052176 distinct states found, 1759101 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:13:33) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(38) at 2011-01-01 08:13:33: 49987007 states generated, 12751808 distinct states found, 1802401 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:13:33 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 1366936 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 1366936 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 1366936 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 1366936 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 1366936 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 6756168 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 3221176 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 9977344 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 9977344 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 9977344 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 9977344 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 5720164 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 5720164 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 5720164 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 5720164 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 5720164 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 4796473 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 4796473 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 4796473 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 4796473 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 4796473 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 99452 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 2469238 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 2568690 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 2568690 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 2568690 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 2568690 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 1069000 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 1069000 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 1069000 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 1069000 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 1069000 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 3541967 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 3541967 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 3541967 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 3541967 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 3541967 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 5014050 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 5014050 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 5014050 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 5014050 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 5014050 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 13381055 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 5887085 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 7493970 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 636616 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 636616 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 14017671 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 14017671 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 14017671 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 538927 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 538927 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 538927 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 538927 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 538927 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 448718 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 448718 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 448718 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 448718 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 448718 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 495382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 495382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 495382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 495382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 495382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 431681 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 431681 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 431681 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 431681 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 431681 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(38) at 2011-01-01 08:14:34: 52912500 states generated, 13445915 distinct states found, 1848935 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(38) at 2011-01-01 08:15:34: 55827947 states generated, 14101608 distinct states found, 1831541 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:16:34) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(39) at 2011-01-01 08:16:34: 58733319 states generated, 14800014 distinct states found, 1893283 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(39) at 2011-01-01 08:17:34: 61580044 states generated, 15444630 distinct states found, 1890220 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:17:34 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 1551814 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 1551814 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 1551814 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 1551814 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 1551814 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 8337124 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 4031295 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 12368419 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 12368419 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 12368419 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 12368419 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 7231420 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 7231420 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 7231420 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 7231420 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 7231420 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 6210227 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 6210227 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 6210227 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 6210227 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 6210227 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 122412 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 2823723 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 2946135 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 2946135 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 2946135 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 2946135 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 1271792 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 1271792 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 1271792 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 1271792 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 1271792 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 4155403 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 4155403 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 4155403 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 4155403 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 4155403 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 6536207 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 6536207 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 6536207 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 6536207 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 6536207 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 15981416 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 7303994 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 8677422 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 788754 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 788754 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 16770170 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 16770170 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 16770170 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 683105 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 683105 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 683105 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 683105 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 683105 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 582409 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 582409 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 582409 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 582409 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 582409 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 676561 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 676561 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 676561 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 676561 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 676561 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 596378 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 596378 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 596378 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 596378 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 596378 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(39) at 2011-01-01 08:18:34: 64402715 states generated, 16063735 distinct states found, 1849702 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:19:34) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(40) at 2011-01-01 08:19:34: 67247557 states generated, 16732401 distinct states found, 1892993 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(40) at 2011-01-01 08:20:34: 67530144 states generated, 16792638 distinct states found, 1887249 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(40) at 2011-01-01 08:21:35: 69636897 states generated, 17270852 distinct states found, 1887549 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:21:35 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 1688295 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 1688295 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 1688295 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 1688295 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 1688295 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 9409832 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 4606008 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 14015840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 14015840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 14015840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 14015840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 8301896 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 8301896 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 8301896 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 8301896 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 8301896 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 7249993 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 7249993 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 7249993 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 7249993 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 7249993 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 137554 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 3044264 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 3181818 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 3181818 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 3181818 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 3181818 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 1418015 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 1418015 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 1418015 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 1418015 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 1418015 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 4552072 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 4552072 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 4552072 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 4552072 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 4552072 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 7689825 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 7689825 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 7689825 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 7689825 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 7689825 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 17645164 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 8179378 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 9465786 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 893352 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 893352 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 18538516 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 18538516 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 18538516 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 785127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 785127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 785127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 785127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 785127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 679247 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 679247 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 679247 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 679247 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 679247 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 812907 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 812907 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 812907 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 812907 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 812907 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 723342 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 723342 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 723342 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 723342 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 723342 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:22:35) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(40) at 2011-01-01 08:22:35: 72445002 states generated, 17880033 distinct states found, 1838812 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(41) at 2011-01-01 08:23:35: 75302563 states generated, 18535021 distinct states found, 1857780 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(41) at 2011-01-01 08:24:35: 78129549 states generated, 19156809 distinct states found, 1829428 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:25:36) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(42) at 2011-01-01 08:25:36: 80907037 states generated, 19764496 distinct states found, 1787527 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:25:36 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 1930840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 1930840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 1930840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 1930840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 1930840 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 10832549 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 5398905 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 16231454 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 16231454 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 16231454 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 16231454 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 9788382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 9788382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 9788382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 9788382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 9788382 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 8757543 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 8757543 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 8757543 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 8757543 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 8757543 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 159687 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 3357996 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 3517683 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 3517683 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 3517683 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 3517683 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 1659009 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 1659009 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 1659009 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 1659009 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 1659009 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 5126187 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 5126187 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 5126187 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 5126187 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 5126187 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 9416099 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 9416099 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 9416099 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 9416099 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 9416099 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 19695883 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 9113624 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 10582259 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 1035519 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 1035519 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 20731402 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 20731402 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 20731402 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 932580 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 932580 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 932580 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 932580 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 932580 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 828363 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 828363 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 828363 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 828363 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 828363 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 1033213 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 1033213 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 1033213 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 1033213 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 1033213 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 954278 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 954278 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 954278 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 954278 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 954278 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(42) at 2011-01-01 08:26:36: 83706123 states generated, 20374343 distinct states found, 1762611 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(42) at 2011-01-01 08:27:36: 86466351 states generated, 20975329 distinct states found, 1725156 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:28:37) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(43) at 2011-01-01 08:28:37: 89218611 states generated, 21584736 distinct states found, 1693736 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(43) at 2011-01-01 08:29:37: 92030723 states generated, 22177163 distinct states found, 1640472 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:29:37 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 2165434 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 2165434 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 2165434 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 2165434 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 2165434 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 12243265 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 6189010 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 18432275 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 18432275 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 18432275 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 18432275 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 11304108 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 11304108 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 11304108 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 11304108 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 11304108 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 10384360 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 10384360 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 10384360 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 10384360 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 10384360 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 174719 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 3611409 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 3786128 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 3786128 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 3786128 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 3786128 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 1863461 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 1863461 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 1863461 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 1863461 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 1863461 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 5587132 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 5587132 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 5587132 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 5587132 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 5587132 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 11078514 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 11078514 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 11078514 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 11078514 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 11078514 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 21730556 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 10094157 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 11636399 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 1181170 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 1181170 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 22911726 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 22911726 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 22911726 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 1084693 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 1084693 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 1084693 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 1084693 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 1084693 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 981850 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 981850 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 981850 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 981850 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 981850 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 1269328 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 1269328 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 1269328 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 1269328 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 1269328 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 1181710 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 1181710 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 1181710 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 1181710 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 1181710 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(43) at 2011-01-01 08:30:38: 94809443 states generated, 22765040 distinct states found, 1579985 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:31:38) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(44) at 2011-01-01 08:31:38: 97590917 states generated, 23355864 distinct states found, 1525134 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(44) at 2011-01-01 08:32:38: 100415699 states generated, 23956876 distinct states found, 1474762 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(45) at 2011-01-01 08:33:38: 103163346 states generated, 24556320 distinct states found, 1434761 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:33:38 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 2466189 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 2466189 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 2466189 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 2466189 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 2466189 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 13582822 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 6973940 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 20556762 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 20556762 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 20556762 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 20556762 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 12763114 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 12763114 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 12763114 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 12763114 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 12763114 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 11941195 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 11941195 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 11941195 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 11941195 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 11941195 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 189223 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 3849564 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 4038787 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 4038787 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 4038787 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 4038787 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 2127999 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 2127999 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 2127999 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 2127999 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 2127999 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 6071603 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 6071603 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 6071603 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 6071603 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 6071603 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 12960316 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 12960316 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 12960316 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 12960316 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 12960316 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 23560492 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 10904058 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 12656434 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 1314412 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 1314412 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 24874904 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 24874904 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 24874904 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 1231885 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 1231885 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 1231885 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 1231885 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 1231885 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 1139802 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 1139802 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 1139802 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 1139802 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 1139802 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 1523944 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 1523944 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 1523944 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 1523944 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 1523944 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 1466842 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 1466842 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 1466842 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 1466842 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 1466842 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:34:40) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(45) at 2011-01-01 08:34:40: 105981719 states generated, 25136179 distinct states found, 1359712 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(45) at 2011-01-01 08:35:40: 106193335 states generated, 25175387 distinct states found, 1348920 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(45) at 2011-01-01 08:36:40: 108256602 states generated, 25602838 distinct states found, 1290627 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:37:41) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(46) at 2011-01-01 08:37:41: 111062226 states generated, 26196511 distinct states found, 1236462 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:37:41 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 2684127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 2684127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 2684127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 2684127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 2684127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 14546604 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 7523185 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 22069789 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 22069789 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 22069789 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 22069789 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 13834270 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 13834270 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 13834270 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 13834270 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 13834270 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 13115639 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 13115639 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 13115639 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 13115639 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 13115639 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 197547 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 3972804 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 4170351 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 4170351 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 4170351 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 4170351 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 2302699 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 2302699 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 2302699 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 2302699 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 2302699 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 6341754 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 6341754 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 6341754 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 6341754 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 6341754 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 14261625 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 14261625 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 14261625 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 14261625 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 14261625 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 24836587 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 11501919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 13334668 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 1411573 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 1411573 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 26248160 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 26248160 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 26248160 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 1341361 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 1341361 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 1341361 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 1341361 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 1341361 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 1263417 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 1263417 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 1263417 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 1263417 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 1263417 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 1751921 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 1751921 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 1751921 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 1751921 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 1751921 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 1677109 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 1677109 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 1677109 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 1677109 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 1677109 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(46) at 2011-01-01 08:38:41: 113764500 states generated, 26757531 distinct states found, 1163014 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(47) at 2011-01-01 08:39:41: 116357293 states generated, 27299276 distinct states found, 1102644 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:40:42) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(48) at 2011-01-01 08:40:42: 119006129 states generated, 27851290 distinct states found, 1031899 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(48) at 2011-01-01 08:41:42: 121737897 states generated, 28413581 distinct states found, 954327 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:41:42 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 3046522 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 3046522 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 3046522 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 3046522 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 3046522 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 15813449 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 8265332 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 24078781 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 24078781 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 24078781 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 24078781 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 15265798 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 15265798 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 15265798 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 15265798 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 15265798 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 14547505 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 14547505 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 14547505 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 14547505 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 14547505 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 209587 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 4128753 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 4338340 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 4338340 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 4338340 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 4338340 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 2642831 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 2642831 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 2642831 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 2642831 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 2642831 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 6713081 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 6713081 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 6713081 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 6713081 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 6713081 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 16195262 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 16195262 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 16195262 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 16195262 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 16195262 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 26444511 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 12194545 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 14249966 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 1538273 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 1538273 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 27982784 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 27982784 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 27982784 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 1483106 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 1483106 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 1483106 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 1483106 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 1483106 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 1421044 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 1421044 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 1421044 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 1421044 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 1421044 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 2024632 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 2024632 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 2024632 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 2024632 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 2024632 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 1998207 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 1998207 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 1998207 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 1998207 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 1998207 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(49) at 2011-01-01 08:42:42: 124457322 states generated, 28973729 distinct states found, 872168 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:43:43) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(49) at 2011-01-01 08:43:43: 126920204 states generated, 29476642 distinct states found, 790810 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(50) at 2011-01-01 08:44:43: 129418363 states generated, 29978361 distinct states found, 698463 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(51) at 2011-01-01 08:45:43: 131931867 states generated, 30494112 distinct states found, 615219 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:45:43 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 3403133 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 3403133 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 3403133 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 3403133 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 3403133 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 16973189 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 8964101 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 25937290 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 25937290 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 25937290 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 25937290 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 16639405 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 16639405 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 16639405 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 16639405 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 16639405 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 15888981 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 15888981 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 15888981 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 15888981 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 15888981 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 217032 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 4293506 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 4510538 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 4510538 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 4510538 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 4510538 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 3017667 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 3017667 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 3017667 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 3017667 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 3017667 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 7119476 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 7119476 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 7119476 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 7119476 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 7119476 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 18254926 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 18254926 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 18254926 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 18254926 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 18254926 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 27710423 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 12631127 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 15079296 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 1656648 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 1656648 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 29367071 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 29367071 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 29367071 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 1623286 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 1623286 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 1623286 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 1623286 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 1623286 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 1582204 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 1582204 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 1582204 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 1582204 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 1582204 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 2289213 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 2289213 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 2289213 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 2289213 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 2289213 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 2298673 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 2298673 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 2298673 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 2298673 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 2298673 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:46:44) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(52) at 2011-01-01 08:46:44: 134533277 states generated, 31029208 distinct states found, 530591 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(53) at 2011-01-01 08:47:44: 137087382 states generated, 31557652 distinct states found, 451111 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(55) at 2011-01-01 08:48:44: 139685633 states generated, 32084826 distinct states found, 358821 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2195:0 @!@!@ -Checkpointing of run C:\lamport\books\hyper-tla\specs\dijkstra-mutex\DijkstraMutex.toolbox\Safety-4-processors\11-01-01-07-58-28 -@!@!@ENDMSG 2195 @!@!@ -@!@!@STARTMSG 2196:0 @!@!@ -Checkpointing completed at (2011-01-01 08:49:45) -@!@!@ENDMSG 2196 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(57) at 2011-01-01 08:49:45: 142371026 states generated, 32606067 distinct states found, 236068 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:49:45 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 3747373 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 3747373 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 3747373 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 3747373 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 3747373 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 18146093 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 9700116 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 27846209 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 27846209 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 27846209 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 27846209 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 18006528 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 18006528 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 18006528 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 18006528 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 18006528 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 17184970 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 17184970 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 17184970 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 17184970 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 17184970 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 222345 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 4431456 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 4653801 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 4653801 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 4653801 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 4653801 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 3378091 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 3378091 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 3378091 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 3378091 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 3378091 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 7565933 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 7565933 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 7565933 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 7565933 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 7565933 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 20786567 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 20786567 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 20786567 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 20786567 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 20786567 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 28850971 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 13047774 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 15803197 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 1755230 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 1755230 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 30606201 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 30606201 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 30606201 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 1743277 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 1743277 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 1743277 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 1743277 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 1743277 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 1729748 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 1729748 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 1729748 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 1729748 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 1729748 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 2545805 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 2545805 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 2545805 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 2545805 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 2545805 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 2576519 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 2576519 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 2576519 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 2576519 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 2576519 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(61) at 2011-01-01 08:50:45: 145097992 states generated, 33091403 distinct states found, 58226 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2193:0 @!@!@ -Model checking completed. No error has been found. - Estimates of the probability that TLC did not check all reachable states - because two distinct states had the same fingerprint: - calculated (optimistic): val = 0 - based on the actual fingerprints: val = 0 -@!@!@ENDMSG 2193 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2011-01-01 08:51:27 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 12 to line 100, col 12 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 15 to line 100, col 15 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 18 to line 100, col 18 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 21 to line 100, col 22 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 25 to line 100, col 28 of module DijkstraMutex: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 113, col 17 to line 113, col 47 of module DijkstraMutex: 3859612 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 114, col 17 to line 114, col 49 of module DijkstraMutex: 3859612 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 30 to line 115, col 30 of module DijkstraMutex: 3859612 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 33 to line 115, col 33 of module DijkstraMutex: 3859612 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 115, col 36 to line 115, col 39 of module DijkstraMutex: 3859612 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 119, col 28 to line 119, col 60 of module DijkstraMutex: 18502488 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 120, col 28 to line 120, col 61 of module DijkstraMutex: 9959576 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 30 to line 121, col 30 of module DijkstraMutex: 28462064 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 33 to line 121, col 33 of module DijkstraMutex: 28462064 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 36 to line 121, col 36 of module DijkstraMutex: 28462064 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 121, col 39 to line 121, col 42 of module DijkstraMutex: 28462064 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 124, col 17 to line 124, col 46 of module DijkstraMutex: 18502488 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 125, col 17 to line 125, col 50 of module DijkstraMutex: 18502488 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 30 to line 126, col 30 of module DijkstraMutex: 18502488 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 33 to line 126, col 33 of module DijkstraMutex: 18502488 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 126, col 36 to line 126, col 39 of module DijkstraMutex: 18502488 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 129, col 18 to line 129, col 50 of module DijkstraMutex: 17777940 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 130, col 18 to line 130, col 51 of module DijkstraMutex: 17777940 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 31 to line 131, col 31 of module DijkstraMutex: 17777940 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 34 to line 131, col 34 of module DijkstraMutex: 17777940 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 131, col 37 to line 131, col 37 of module DijkstraMutex: 17777940 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 135, col 29 to line 135, col 62 of module DijkstraMutex: 223176 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 136, col 29 to line 136, col 62 of module DijkstraMutex: 4462056 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 31 to line 137, col 31 of module DijkstraMutex: 4685232 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 34 to line 137, col 34 of module DijkstraMutex: 4685232 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 37 to line 137, col 37 of module DijkstraMutex: 4685232 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 137, col 40 to line 137, col 43 of module DijkstraMutex: 4685232 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 140, col 18 to line 140, col 26 of module DijkstraMutex: 3483756 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 141, col 18 to line 141, col 51 of module DijkstraMutex: 3483756 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 31 to line 142, col 31 of module DijkstraMutex: 3483756 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 34 to line 142, col 34 of module DijkstraMutex: 3483756 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 142, col 37 to line 142, col 40 of module DijkstraMutex: 3483756 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 145, col 18 to line 145, col 50 of module DijkstraMutex: 7693260 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 31 to line 146, col 31 of module DijkstraMutex: 7693260 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 34 to line 146, col 34 of module DijkstraMutex: 7693260 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 37 to line 146, col 37 of module DijkstraMutex: 7693260 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 146, col 40 to line 146, col 43 of module DijkstraMutex: 7693260 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 149, col 18 to line 149, col 48 of module DijkstraMutex: 21861944 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 150, col 18 to line 150, col 62 of module DijkstraMutex: 21861944 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 151, col 18 to line 151, col 51 of module DijkstraMutex: 21861944 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 31 to line 152, col 31 of module DijkstraMutex: 21861944 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 152, col 34 to line 152, col 34 of module DijkstraMutex: 21861944 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 157, col 34 to line 158, col 71 of module DijkstraMutex: 29147088 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 160, col 45 to line 161, col 69 of module DijkstraMutex: 13115184 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 162, col 45 to line 163, col 70 of module DijkstraMutex: 16031904 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 164, col 29 to line 164, col 60 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 165, col 39 to line 165, col 42 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 31 to line 166, col 31 of module DijkstraMutex: 30938336 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 34 to line 166, col 34 of module DijkstraMutex: 30938336 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 166, col 37 to line 166, col 37 of module DijkstraMutex: 30938336 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 170, col 16 to line 170, col 48 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 29 to line 171, col 29 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 32 to line 171, col 32 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 35 to line 171, col 35 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 171, col 38 to line 171, col 41 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 174, col 17 to line 174, col 46 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 175, col 17 to line 175, col 49 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 30 to line 176, col 30 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 33 to line 176, col 33 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 176, col 36 to line 176, col 39 of module DijkstraMutex: 1791248 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 179, col 17 to line 179, col 46 of module DijkstraMutex: 2646208 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 180, col 17 to line 180, col 49 of module DijkstraMutex: 2646208 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 30 to line 181, col 30 of module DijkstraMutex: 2646208 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 33 to line 181, col 33 of module DijkstraMutex: 2646208 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 181, col 36 to line 181, col 39 of module DijkstraMutex: 2646208 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 185, col 17 to line 185, col 49 of module DijkstraMutex: 2664376 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 30 to line 186, col 30 of module DijkstraMutex: 2664376 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 33 to line 186, col 33 of module DijkstraMutex: 2664376 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 36 to line 186, col 36 of module DijkstraMutex: 2664376 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 186, col 39 to line 186, col 42 of module DijkstraMutex: 2664376 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(89) at 2011-01-01 08:51:28: 146157716 states generated, 33288512 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -146157716 states generated, 33288512 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2194:0 @!@!@ -The depth of the complete state graph search is 89. -@!@!@ENDMSG 2194 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished. (2011-01-01 08:51:30) -@!@!@ENDMSG 2186 @!@!@ diff --git a/general/bugzilla/README.txt b/general/bugzilla/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..809525ab2a8e25824e9be5143ecbca5474219e22 --- /dev/null +++ b/general/bugzilla/README.txt @@ -0,0 +1,11 @@ +This folder contains an HTML as well as an XML dump of the old Bugzilla +database which used to be available at bugzilla.tlaplus.net. + +All places in the TLA+ source code that linked to bugzilla.tlaplus.net +have been converted to link to (local) the dump file instead for +historical reasons. + + +The bzipped bugzilla.sql file is a MySQL database dump. As such, it can +be used if someone ever wants to revive bugzilla.tlaplus.net (The domain +"tlaplus.net" is owned by Simon Zambrowski). \ No newline at end of file diff --git a/general/bugzilla/bugzilla.sql.tar.bz2 b/general/bugzilla/bugzilla.sql.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..fc39ff89d286a0f4d926defac48b945651776c32 Binary files /dev/null and b/general/bugzilla/bugzilla.sql.tar.bz2 differ diff --git a/general/bugzilla/css/buglist.css b/general/bugzilla/css/buglist.css new file mode 100644 index 0000000000000000000000000000000000000000..6d23fc8bbbb3afba2a460ed64f5340b03e1b4273 --- /dev/null +++ b/general/bugzilla/css/buglist.css @@ -0,0 +1,131 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This Source Code Form is "Incompatible With Secondary Licenses", as + * defined by the Mozilla Public License, v. 2.0. + */ +.bz_query_head { + text-align: center; +} + +.bz_query_timestamp { + font-weight: bold; +} + +.search_description { + margin: .5em 0; + padding: 0; +} +.search_description li { + list-style-type: none; + display: inline; + margin-right: 2em; +} + +.zero_results, .zero_result_links { + font-size: 120%; + font-weight: bold; +} + +.bz_buglist_header th { + text-align: left; +} + +.bz_sort_order_primary, +.bz_sort_order_secondary { + display: inline-block; + padding-left: .2em; + text-decoration: none; +} +.bz_sort_order_primary { color: black; } +.bz_sort_order_secondary { color: #777; } + + +.bz_id_column { +} + +.bz_row_odd { + background-color: #F7F7F7; + color: #000000; +} + +.bz_row_even { + background-color: #FFFFFF; + color: #000000; +} + +/* Style bug rows according to severity. */ +.bz_blocker { color: red; font-weight: bold; } +.bz_critical { color: red; } +.bz_enhancement { color: #666; background-color: white; } + +/* Align columns in the "change multiple bugs" form to the right. */ +table#form tr th { text-align: right; } + +table.bz_buglist td, table.bz_buglist th { +} + +/* we use a first-child class and not the pseudo-class because IE + * doesn't support it :-( */ +tr.bz_secure td.first-child, a.bz_secure { + background-image: url("../../images/padlock.png"); + background-position: center left; + background-repeat: no-repeat; + background-color: inherit; +} + +th.first-child, td.first-child, a.bz_secure { + padding-left: 20px; +} + +tr.bz_secure_mode_implied td.first-child { +} + +tr.bz_secure_mode_manual td.first-child { +} + +td.bz_estimated_time_column, +td.bz_remaining_time_column, +td.bz_actual_time_column, +td.bz_percentage_complete_column { + text-align: right; +} + +td.bz_total_label { + font-weight: bold; +} + +td.bz_total { + border-top-style: solid; + border-top-color: #929bb1; + border-top-width: 3px; + text-align: right; +} + +#commit, #action { + margin-top: .25em; +} + +.bz_query_debug { + text-align: left; +} + +.bz_short_desc_column a, .bz_short_short_desc_column a { + color: inherit; +} + +/* The "filtering" table is specific to request.cgi. + * Same for the "requests" class used for tables. */ + +#filtering #requester, #filtering #requestee { + min-width: 8em; +} + +#filtering th { + text-align: right; +} + +table.requests th { + text-align: left; +} diff --git a/general/bugzilla/css/global.css b/general/bugzilla/css/global.css new file mode 100644 index 0000000000000000000000000000000000000000..e829a7f52d6c5afd2ad75c9e86a43921d0677684 --- /dev/null +++ b/general/bugzilla/css/global.css @@ -0,0 +1,551 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This Source Code Form is "Incompatible With Secondary Licenses", as + * defined by the Mozilla Public License, v. 2.0. + */ + +/* global (begin) */ + body { + font-family: sans-serif; + color: #000; + background: #fff url("global/body-back.gif") repeat-x; + } + body, td, th, input { + font-family: Verdana, sans-serif; + font-size: small; + } + /* monospace is much smaller than Verdana by default, so we make it a bit bigger. */ + pre, code, kbd { + font-size: medium; + } +/* global (end) */ + +/* header (begin) */ + #header { + margin-bottom: 1em; + } + + #header form, #header form input, + #footer form, #footer form input + { + font-size: 95%; + display: inline; + } + + #header .links { + border-left: 1px solid #747E93; + border-right: 1px solid #747E93; + border-bottom: 1px solid #747E93; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + padding: 0.5em; + } + + #lang_links_container { + float: right; + } + #lang_links_container .links { + border: none; + padding: .5em; + } + + .lang_current { + font-weight: bold; + } + + #message { + border: 1px solid red; + margin: 0.3em 0em; + padding: 0.3em; + color: green; + } + + form.mini_login input.bz_login { + width: 10em; + } + form.mini_login input.bz_password { + width: 6em; + } + form.mini_login input.bz_remember { + margin: 0; + } + .bz_mini_login_help { + color: #777; + } + +/* header (end) */ + +/* banner (begin) */ + #banner { + } + +/* banner (end) */ + +/* titles (begin) */ + #titles { + width: 100%; + background-color: #404D6C; + color: #fff; + border-top-left-radius: 5px; + border-top-right-radius: 5px; + font-size: 110%; + margin: 0; + padding: 0.5em; + vertical-align: bottom; + } + + #titles a { + color: #fff; + } + + #titles p { + margin: 0; + padding: 0; + } + + #titles #title { + font-weight: bold; + white-space: nowrap; + } + + #titles #subtitle { + font-weight: normal; + width: 100%; + text-align: center; + } + + #titles #information { + font-weight: normal; + text-align: right; + font-size: 90%; + white-space: nowrap; + } + +/* titles (end) */ + +/* footer (begin) + * See also the "header" section for styles that apply + * to both the header and footer. + */ + #footer { + clear: both; + margin-top: 1em; + width: 100%; + background: #edf2f2; + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + } + + #footer #useful-links { + padding-left: 1ex; + padding-right: 1ex; + } + + #footer ul { + list-style-type: none; + } + #links-saved ul { + display: inline; + } + #links-saved th { + vertical-align: top; + } + + #footer .label { + white-space: nowrap; + vertical-align: top; + } + + #footer .links { + vertical-align: top; + } +/* footer (end) */ + +/* link lists (begin) */ + ul.links { + margin: 0; + padding: 0; + list-style-type: none; + } + + ul.links li { + display: inline; + white-space: nowrap; + } +/* link lists (end) */ + +/* tabs (begin) */ + .tabs td { + background: #eee; + text-align: center; + border-style: solid; + border-color: black; + border-width: 0px 0px 2px 0px; + } + + .tabs td.selected { + background: white; + border-width: 2px 2px 0px 2px; + } + + .tabs td.spacer { + background: white; + } +/* tabs (end) */ + +/* generic (begin) */ + a { + color: #039; + } + + a:visited { + color: #636; + } + + a:hover { + color: #333; + } + + a:active { + color: #000; + } + + .clickable_area { + cursor: pointer; + } + + textarea { + font-family: monospace; + } +/* generic (end) */ + +/* Links that control whether or not something is visible. */ +a.controller { + font-size: 115%; +} + +div#docslinks { + float: right; + border: 1px solid black; + padding: 1ex; + font-size: 80%; +} + +#docslinks h2 { + margin: 0; +} + +/**************************/ +/* Bug links and statuses */ +/**************************/ + +.bz_bug_link { + /* Catch-all if you want common styles for all bug links */ +} + +.bz_bug_link .bz_status_UNCONFIRMED { + font-style: italic; +} + +.bz_obsolete { + text-decoration: line-through; +} +.bz_inactive { + text-decoration: line-through; +} +.bz_closed, +.bz_CLOSED td { + text-decoration: line-through; +} +.bz_private { + color: darkred; + background: #f3eeee; +} +.bz_disabled { + color: #a0a0a0; +} + +/************/ +/* Comments */ +/************/ + +.bz_comment_table td { + vertical-align: top; +} + +.bz_comment { + margin-bottom: 2em; +} + +/* tbody.file pre is for the Diff view of attachments. */ +.bz_comment_text, .uneditable_textarea, tbody.file pre { + font-family: monospace; + white-space: pre-wrap; +} + +.bz_comment_text { + width: 50em; +} + +.bz_comment_user, .bz_comment_time, .bz_comment_number, +.bz_private_checkbox, .bz_comment_actions +{ + margin: 0 .5em; +} + +.bz_comment_actions, .bz_comment_number, .bz_private_checkbox { + float: right; +} + +.bz_collapse_expand_comments { + padding: 0; + margin: 0 0 0 1em; + list-style-type: none; +} +.bz_collapse_expand_comments li { + margin-bottom: .5em; +} +.bz_collapse_comment { + text-decoration: none; +} + +.bz_private_checkbox input { + margin: 0; + vertical-align: middle; +} + +.bz_comment_head, .bz_first_comment_head { + padding-top: .1em; + padding-bottom: .1em; + padding-left: .5em; + background-color: #e0e0e0; +} + +.bz_comment_user_images img { + vertical-align: bottom; +} + +.bz_comment_hilite pre { + background-color: lightgreen; + margin: 0; + padding: 1em 0; +} + +/** End Comments **/ + +.bz_default_hidden, .bz_tui_hidden, .bz_hidden_field, .bz_hidden_option { + /* We have !important because we want elements with these classes to always + * be hidden, even if there is some CSS that overrides it (we use these + * classes inside JavaScript to hide things). */ + display: none !important; +} + +.bz_comment_text span.quote { + color: #65379c; + /* Make quoted text not wrap. */ + white-space: pre; +} + +table#flags th, +table#flags td { + vertical-align: middle; + text-align: left; +} + +.flag_select { + min-width: 3em; +} + +input.requestee { + width: 15em; +} + +#error_msg { + font-size: x-large; +} + +.warning { + color: red; +} + +.throw_error { + background-color: #ff0000; + color: black; + font-size: 120%; + margin: 1em; + padding: 0.5em 1em; +} + +dt { + font-weight: bold; +} +body > dl > dt { + border-top: dotted gray thin; +} +dl dl > dt { + border-top: none; +} + +#admin_table th { + white-space: normal !important; +} + +/* Arrow buttons are buttons with only ↑, ↓, ← or → on + * them. We want these to look a little less spidery. */ +.arrow_button { + font-size: 150%; +} + +/* Style of the attachment table and time tracking table */ +#attachment_table { + border-collapse: collapse; + border: 1px solid #333333; +} + +#attachment_table th, .bz_attach_footer, .bz_time_tracking_table th { + background-color: #E0E0E0; + color: black; +} + +#attachment_table td, .bz_time_tracking_table th, .bz_time_tracking_table td { + border: 1px solid #333333; +} + +.bz_attach_extra_info { + font-size: smaller; +} + +.bz_attach_flags, .bz_attach_footer { + white-space: nowrap; +} + +.bz_attach_view_hide { + float: right; + padding-left: 1em; +} + +div.user_match { + margin-bottom: 1em; +} + +.box { + border: 1px solid black; + color: black; + background-color: #ffc; + margin: 1em; + padding: 0.5em 1em; +} + +.collapsed { + display: none; +} + +/* Rules specific for printing */ +@media print { + #header, #footer { + display: none; + } + + div.bz_query_buttons { + display: none; + } + + body { + background-image: none; + background-color: #fff; + } +} + +/**************/ +/* Bug Fields */ +/**************/ + +.field_label { + text-align: right; + vertical-align: top; + font-weight: bold; +} +.field_help_link { + cursor: help; +} +.field_value, form#Create th, form#Create td { + vertical-align: top; +} +.field_value .text_input { + width: 100%; + min-width: 25em; +} + +.uneditable_textarea { + width: 30em; + font-size: medium; +} + +th.required:before { + content: "* "; +} +th.required:before, span.required_star { + color: red; +} +input.required, select.required, span.required_explanation { + background-color: #fff7cd; + color: #000; +} + +.calendar_button { + background: transparent url("global/calendar.png") no-repeat; + width: 20px; + height: 20px; + vertical-align: middle; +} +.calendar_button span { display: none } +/* These classes are set by YUI. */ +.yui-calcontainer { + display: none; + background-color: white; + padding: 10px; + border: 1px solid #404D6C; +} + +.bug_urls { + margin: 0 0 1em 0; + padding: 0; + list-style-type: none; +} + +/* custom styles for inline instances of autocomplete input fields */ +.yui-skin-sam .yui-ac-input { position:static !important; + vertical-align:middle !important; } +.yui-skin-sam .yui-ac-container { left:0px !important; } +.yui-skin-sam .yui-ac { display: inline-block; } +#bugzilla-body .yui-ac-content { + max-height: 19em; + overflow: auto; + overflow-x: hidden; +} + +#keywords_container { + padding-top: .2em; +} + + +#keywords_container .yui-ac-content { + margin-left: -1px; +} + +/*******************/ +/* Form Validation */ +/*******************/ + +.validation_error_text { + font-size: 120%; + color: #B70000; + font-weight: bold; +} + +.validation_error_field, input.validation_error_field { + border: 2px solid #B70000; + background-color: #FFEBEB; +} diff --git a/general/bugzilla/css/show_multiple.css b/general/bugzilla/css/show_multiple.css new file mode 100644 index 0000000000000000000000000000000000000000..dbfa6eb1989a3420f3edd277c846393584222ee2 --- /dev/null +++ b/general/bugzilla/css/show_multiple.css @@ -0,0 +1,60 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This Source Code Form is "Incompatible With Secondary Licenses", as + * defined by the Mozilla Public License, v. 2.0. + */ + +hr {margin: 20px auto 40px} + +.bz_private { color:darkred } + +h1 { + font-size: 2em; + margin-bottom: 10px; +} + +/* bugfields is table of all fields and values */ +.bugfields { + font-size: small; + background: #eee; + padding: 5px; + border: 1px solid silver; + width: 100%; +} + +.bugfields tr { + vertical-align: top; +} + +.bugfields th { + width: 10em; + text-align: left; + font-weight: normal; + line-height: 150%; +} + +.bugfields td { + font-weight: bold; + line-height: 150%; +} + +.bugfields .rightcell { + padding-left: 10px; +} + +/* set line-height to normal for nested tables of bugfields table */ +.bugfields table th, .bugfields table td { + line-height: 100%; + width: auto; +} + +.bugfields table.timetracking th, .bugfields table.timetracking td { + width: 10em; +} + +.error { + color: red; + font-weight: bold; +} diff --git a/general/bugzilla/index.html b/general/bugzilla/index.html new file mode 100644 index 0000000000000000000000000000000000000000..1051487ac7b84767b64fed9c629767d82be20c2c --- /dev/null +++ b/general/bugzilla/index.html @@ -0,0 +1,84565 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html lang="en"><head> + <title>Full Text Bug Listing</title> + + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + + +<link rel="Top" href="https://bugzilla.tlaplus.net/"> + + + + + <link href="css/global.css" rel="alternate stylesheet" title="Classic"><link href="css/global.css" rel="stylesheet" type="text/css"><link href="css/show_multiple.css" rel="stylesheet" type="text/css"><link href="css/buglist.css" rel="stylesheet" type="text/css"><!--[if lte IE 7]> + + + + <link href="skins/standard/IE-fixes.css" rel="stylesheet" + type="text/css" > +<![endif]--> + + + + + + + + +<script type="text/javascript" src="yahoo-dom-event.js"></script><script type="text/javascript" src="jcookie-min.js"></script><script type="text/javascript" src="global.js"></script> + + <script type="text/javascript"> + <!-- + YAHOO.namespace('bugzilla'); + YAHOO.util.Event.addListener = function (el, sType, fn, obj, overrideContext) { + if ( ("onpagehide" in window || YAHOO.env.ua.gecko) && sType === "unload") { sType = "pagehide"; }; + var capture = ((sType == "focusin" || sType == "focusout") && !YAHOO.env.ua.ie) ? true : false; + return this._addListener(el, this._getType(sType), fn, obj, overrideContext, capture); + }; + if ( "onpagehide" in window || YAHOO.env.ua.gecko) { + YAHOO.util.Event._simpleRemove(window, "unload", + YAHOO.util.Event._unload); + } + + function unhide_language_selector() { + YAHOO.util.Dom.removeClass( + 'lang_links_container', 'bz_default_hidden' + ); + } + YAHOO.util.Event.onDOMReady(unhide_language_selector); + + + var BUGZILLA = { + param: { + cookiepath: '\/', + maxusermatches: 1000 + }, + constant: { + COMMENT_COLS: 80 + }, + string: { + + + attach_desc_required: + 'You must enter a Description for this attachment.', + component_required: + 'You must select a Component for this bug.', + description_required: + 'You must enter a Description for this bug.', + short_desc_required: + 'You must enter a Summary for this bug.', + version_required: + 'You must select a Version for this bug.' + } + }; + + // --> + </script> + + + + + + <link rel="search" type="application/opensearchdescription+xml" title="Bugzilla" href="https://54.195.32.3/search_plugin.cgi"> + <link rel="shortcut icon" href="https://54.195.32.3/images/favicon.ico"> + <style type="text/css"> +:root #header + #content > #left > #rlblock_left, +:root #content > #center > .dose > .dosesingle, +:root #content > #right > .dose > .dosesingle +{ display: none !important; }</style><link href="socialwidgets.css" type="text/css" rel="stylesheet"></head> + + + + <body onload="" class="bugzilla-tlaplus-net yui-skin-sam"> + + + +<div id="header"> +<div id="banner"> + </div> + +<table id="titles" border="0" cellpadding="0" cellspacing="0"> +<tbody><tr> + <td id="title"> + <p>Bugzilla – Full Text Bug Listing</p> + </td> + + +</tr> +</tbody></table> + +<table id="lang_links_container" class="bz_default_hidden" cellpadding="0" cellspacing="0"><tbody><tr><td> +</td></tr></tbody></table> +<ul class="links"> + <li><a href="https://54.195.32.3/">Home</a></li> + <li><span class="separator">| </span><a href="https://54.195.32.3/enter_bug.cgi">New</a></li> + <li><span class="separator">| </span><a href="https://54.195.32.3/describecomponents.cgi">Browse</a></li> + <li><span class="separator">| </span><a href="https://54.195.32.3/query.cgi">Search</a></li> + + <li class="form"> + <span class="separator">| </span> + <form action="buglist.cgi" method="get" onsubmit="if (this.quicksearch.value == '') + { alert('Please enter one or more search terms first.'); + return false; } return true;"> + <input id="no_redirect_top" name="no_redirect" value="0" type="hidden"> + <script type="text/javascript"> + if (history && history.replaceState) { + var no_redirect = document.getElementById("no_redirect_top"); + no_redirect.value = 1; + } + </script> + <input class="txt" id="quicksearch_top" name="quicksearch" title="Quick Search" value="OO" type="text"> + <input class="btn" value="Search" id="find_top" type="submit"></form> + <a href="https://54.195.32.3/page.cgi?id=quicksearch.html" title="Quicksearch Help">[?]</a></li> + + <li><span class="separator">| </span><a href="https://54.195.32.3/report.cgi">Reports</a></li> + + <li></li> + + <li> + <span class="separator">| </span> + <a href="https://54.195.32.3/docs/en/html/bug_page.html" target="_blank">Help</a> + </li> + + <li id="new_account_container_top"> + <span class="separator">| </span> + <a href="https://54.195.32.3/createaccount.cgi">New Account</a> + </li> + + <li id="mini_login_container_top"> + <span class="separator">| </span> + <a id="login_link_top" href="https://54.195.32.3/show_bug.cgi?format=multiple&id=2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2C30%2C31%2C32%2C33%2C34%2C35%2C36%2C37%2C38%2C39%2C40%2C41%2C42%2C43%2C44%2C45%2C46%2C47%2C48%2C49%2C50%2C51%2C52%2C53%2C54%2C55%2C56%2C57%2C58%2C59%2C60%2C61%2C62%2C63%2C64%2C66%2C67%2C68%2C69%2C70%2C71%2C72%2C73%2C74%2C75%2C76%2C77%2C78%2C79%2C80%2C81%2C82%2C83%2C86%2C87%2C88%2C89%2C90%2C91%2C92%2C93%2C94%2C95%2C96%2C97%2C98%2C100%2C101%2C102%2C103%2C104%2C105%2C106%2C107%2C108%2C109%2C110%2C111%2C112%2C113%2C114%2C115%2C116%2C117%2C118%2C119%2C120%2C121%2C122%2C123%2C124%2C125%2C126%2C127%2C128%2C129%2C130%2C131%2C132%2C133%2C134%2C135%2C136%2C137%2C138%2C139%2C140%2C141%2C142%2C143%2C144%2C145%2C146%2C147%2C148%2C149%2C150%2C151%2C152%2C153%2C154%2C155%2C156%2C157%2C158%2C159%2C160%2C161%2C162%2C163%2C164%2C165%2C166%2C167%2C168%2C169%2C170%2C171%2C172%2C173%2C174%2C175%2C176%2C177%2C178%2C179%2C180%2C181%2C182%2C183%2C184%2C185%2C186%2C187%2C188%2C189%2C190%2C191%2C192%2C193%2C194%2C195%2C196%2C197%2C198%2C199%2C200%2C201%2C202%2C203%2C204%2C205%2C206%2C207%2C208%2C209%2C210%2C211%2C212%2C213%2C214%2C215%2C216%2C217%2C218%2C219%2C220%2C221%2C222%2C223%2C224%2C225%2C226%2C227%2C228%2C229%2C230%2C231%2C232%2C233%2C234%2C235%2C236%2C237%2C238%2C239%2C240%2C241%2C242%2C243%2C244%2C245%2C246%2C247%2C248%2C249%2C250%2C251%2C252%2C253%2C254%2C255%2C256%2C257%2C258%2C259%2C260%2C261%2C262%2C263%2C264%2C265%2C266%2C267%2C268%2C269%2C270%2C271%2C272%2C273%2C274%2C275%2C276%2C277%2C278%2C279%2C280%2C281%2C282%2C283%2C284%2C285%2C286%2C287%2C288%2C289%2C290%2C291%2C292%2C293%2C294%2C295%2C296%2C297%2C298%2C299%2C300%2C301%2C302%2C303%2C304%2C305%2C306%2C307%2C308%2C309%2C310%2C311%2C312%2C313%2C314%2C315%2C316%2C317%2C318%2C319%2C320%2C321%2C322%2C323%2C324%2C325%2C326%2C327?GoAheadAndLogIn=1" onclick="return show_mini_login_form('_top')">Log In</a> + + + <form action="show_bug.cgi?format=multiple&id=2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2C30%2C31%2C32%2C33%2C34%2C35%2C36%2C37%2C38%2C39%2C40%2C41%2C42%2C43%2C44%2C45%2C46%2C47%2C48%2C49%2C50%2C51%2C52%2C53%2C54%2C55%2C56%2C57%2C58%2C59%2C60%2C61%2C62%2C63%2C64%2C66%2C67%2C68%2C69%2C70%2C71%2C72%2C73%2C74%2C75%2C76%2C77%2C78%2C79%2C80%2C81%2C82%2C83%2C86%2C87%2C88%2C89%2C90%2C91%2C92%2C93%2C94%2C95%2C96%2C97%2C98%2C100%2C101%2C102%2C103%2C104%2C105%2C106%2C107%2C108%2C109%2C110%2C111%2C112%2C113%2C114%2C115%2C116%2C117%2C118%2C119%2C120%2C121%2C122%2C123%2C124%2C125%2C126%2C127%2C128%2C129%2C130%2C131%2C132%2C133%2C134%2C135%2C136%2C137%2C138%2C139%2C140%2C141%2C142%2C143%2C144%2C145%2C146%2C147%2C148%2C149%2C150%2C151%2C152%2C153%2C154%2C155%2C156%2C157%2C158%2C159%2C160%2C161%2C162%2C163%2C164%2C165%2C166%2C167%2C168%2C169%2C170%2C171%2C172%2C173%2C174%2C175%2C176%2C177%2C178%2C179%2C180%2C181%2C182%2C183%2C184%2C185%2C186%2C187%2C188%2C189%2C190%2C191%2C192%2C193%2C194%2C195%2C196%2C197%2C198%2C199%2C200%2C201%2C202%2C203%2C204%2C205%2C206%2C207%2C208%2C209%2C210%2C211%2C212%2C213%2C214%2C215%2C216%2C217%2C218%2C219%2C220%2C221%2C222%2C223%2C224%2C225%2C226%2C227%2C228%2C229%2C230%2C231%2C232%2C233%2C234%2C235%2C236%2C237%2C238%2C239%2C240%2C241%2C242%2C243%2C244%2C245%2C246%2C247%2C248%2C249%2C250%2C251%2C252%2C253%2C254%2C255%2C256%2C257%2C258%2C259%2C260%2C261%2C262%2C263%2C264%2C265%2C266%2C267%2C268%2C269%2C270%2C271%2C272%2C273%2C274%2C275%2C276%2C277%2C278%2C279%2C280%2C281%2C282%2C283%2C284%2C285%2C286%2C287%2C288%2C289%2C290%2C291%2C292%2C293%2C294%2C295%2C296%2C297%2C298%2C299%2C300%2C301%2C302%2C303%2C304%2C305%2C306%2C307%2C308%2C309%2C310%2C311%2C312%2C313%2C314%2C315%2C316%2C317%2C318%2C319%2C320%2C321%2C322%2C323%2C324%2C325%2C326%2C327" method="POST" class="mini_login bz_default_hidden" id="mini_login_top" onsubmit="return check_mini_login_fields( '_top' );"> + <input id="Bugzilla_login_top" class="bz_login" name="Bugzilla_login" title="Login" onfocus="mini_login_on_focus('_top')"> + <input class="bz_password" id="Bugzilla_password_top" name="Bugzilla_password" title="Password" type="password"> + <input class="bz_password bz_default_hidden bz_mini_login_help" id="Bugzilla_password_dummy_top" value="password" title="Password" onfocus="mini_login_on_focus('_top')" type="text"> + <input name="Bugzilla_login_token" value="1471866997-vpARUFPFphsF_jsKttkB0DlKMRPb9m_vAp4x8ftLVSQ" type="hidden"> + <input name="GoAheadAndLogIn" value="Log in" id="log_in_top" type="submit"> + <script type="text/javascript"> + mini_login_constants = { + "login" : "login", + "warning" : "You must set the login and password before logging in." + }; + + if (YAHOO.env.ua.gecko || YAHOO.env.ua.ie || YAHOO.env.ua.opera) { + YAHOO.util.Event.onDOMReady(function() { + init_mini_login_form('_top'); + }); + } + else { + YAHOO.util.Event.on(window, 'load', function () { + window.setTimeout(function() { + init_mini_login_form('_top'); + }, 200); + }); + } + </script> + <a href="#" onclick="return hide_mini_login_form('_top')">[x]</a> + </form> +</li> +<li id="forgot_container_top"> + <span class="separator">| </span> + <a id="forgot_link_top" href="https://54.195.32.3/show_bug.cgi?format=multiple&id=2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2C30%2C31%2C32%2C33%2C34%2C35%2C36%2C37%2C38%2C39%2C40%2C41%2C42%2C43%2C44%2C45%2C46%2C47%2C48%2C49%2C50%2C51%2C52%2C53%2C54%2C55%2C56%2C57%2C58%2C59%2C60%2C61%2C62%2C63%2C64%2C66%2C67%2C68%2C69%2C70%2C71%2C72%2C73%2C74%2C75%2C76%2C77%2C78%2C79%2C80%2C81%2C82%2C83%2C86%2C87%2C88%2C89%2C90%2C91%2C92%2C93%2C94%2C95%2C96%2C97%2C98%2C100%2C101%2C102%2C103%2C104%2C105%2C106%2C107%2C108%2C109%2C110%2C111%2C112%2C113%2C114%2C115%2C116%2C117%2C118%2C119%2C120%2C121%2C122%2C123%2C124%2C125%2C126%2C127%2C128%2C129%2C130%2C131%2C132%2C133%2C134%2C135%2C136%2C137%2C138%2C139%2C140%2C141%2C142%2C143%2C144%2C145%2C146%2C147%2C148%2C149%2C150%2C151%2C152%2C153%2C154%2C155%2C156%2C157%2C158%2C159%2C160%2C161%2C162%2C163%2C164%2C165%2C166%2C167%2C168%2C169%2C170%2C171%2C172%2C173%2C174%2C175%2C176%2C177%2C178%2C179%2C180%2C181%2C182%2C183%2C184%2C185%2C186%2C187%2C188%2C189%2C190%2C191%2C192%2C193%2C194%2C195%2C196%2C197%2C198%2C199%2C200%2C201%2C202%2C203%2C204%2C205%2C206%2C207%2C208%2C209%2C210%2C211%2C212%2C213%2C214%2C215%2C216%2C217%2C218%2C219%2C220%2C221%2C222%2C223%2C224%2C225%2C226%2C227%2C228%2C229%2C230%2C231%2C232%2C233%2C234%2C235%2C236%2C237%2C238%2C239%2C240%2C241%2C242%2C243%2C244%2C245%2C246%2C247%2C248%2C249%2C250%2C251%2C252%2C253%2C254%2C255%2C256%2C257%2C258%2C259%2C260%2C261%2C262%2C263%2C264%2C265%2C266%2C267%2C268%2C269%2C270%2C271%2C272%2C273%2C274%2C275%2C276%2C277%2C278%2C279%2C280%2C281%2C282%2C283%2C284%2C285%2C286%2C287%2C288%2C289%2C290%2C291%2C292%2C293%2C294%2C295%2C296%2C297%2C298%2C299%2C300%2C301%2C302%2C303%2C304%2C305%2C306%2C307%2C308%2C309%2C310%2C311%2C312%2C313%2C314%2C315%2C316%2C317%2C318%2C319%2C320%2C321%2C322%2C323%2C324%2C325%2C326%2C327?GoAheadAndLogIn=1#forgot" onclick="return show_forgot_form('_top')">Forgot Password</a> + <form action="token.cgi" method="post" id="forgot_form_top" class="mini_forgot bz_default_hidden"> + <label for="login_top">Login:</label> + <input name="loginname" size="20" id="login_top" type="text"> + <input id="forgot_button_top" value="Reset Password" type="submit"> + <input name="a" value="reqpw" type="hidden"> + <input id="token_top" name="token" value="1471866997-0gkN2msssbgm0ZzyCuyJhhs3UeSh--qlPBRmXSHl1EE" type="hidden"> + <a href="#" onclick="return hide_forgot_form('_top')">[x]</a> + </form> +</li> +</ul> +</div> + +<div id="bugzilla-body"><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=2">2</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Add way to tell if spec has changed since last run of a model, and to look at old spec if it has.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=2#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-18 02:42:11 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Something can be added to the Results Page to indicate if the spec has changed since the last run of the model. More difficult is figuring out a nice, simple interface to allow the user to look at the saved, read-only version of the spec files on which the model was run. One possibility is to add to the Spec explorer an extra level to list, for each model, any modules that have changed since the model was last run. Clicking on the module name would raise a read-lonly module editor on that module--with something in the tab indicating which model the module was saved for. + +(Items 1 and 67 from todo.txt)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=2#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Simon Zambrovski</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-18 13:38:27 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I would make it transparently to the user. If the user clicks on the marker that is pointing to a changed file, the unchanged version should be shown.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=2#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-18 15:09:36 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When a user clicks on an action in the error trace or coverage table, what should happen? I think if the module has not been changed, the action should be highlighted in the writable version of the module. If the module has been changed, it should be highlighted in the read-only version.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=2#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-19 02:56:39 UTC + </span> + </div> + + + +<pre class="bz_comment_text">It's not at all clear what the interface should be. If the user clicks on an error trace produced +6 months ago, he would reasonably expect it to show the saved module. On the other hand, +suppose the user runs the model, clicks on the location of one error, corrects that error, saves the +module, then clicks on the location of the next error. He would not be happy to find himself in the +read-only saved version of the module. + +My initial thought is that, right next to the notification that the spec has been changed, there should be +two buttons the user can push: one choosing the current spec and the other the original spec. (They could both be enabled if he has chosen "original spec" for a different model.) Whichever one he +chooses, it's the modules of that spec that appear in all editor views. + +But that's just my initial thought. I expect I'll find problems with it if I think harder.</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=2#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-26 12:05:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Here's Dan's and my current view on how saved modules should be handled. + +1. Define the current version of a module to be the one in an open editor window, if there is one; else it's the version in the file. If the version of a module saved after running a model is not the current version, then the user should be able to open the saved version by using an option on the TLC Model Checker menu. Clicking on that option shows a list of all modules in the spec for which the saved version of he currently selected model is not the same as the current one. Clicking on one of them opens a read-only editor on that version as a separate tab in the model's view. + +2. If the user double clicks on an action in the error-trace view, then this takes the user to the indicated location in the saved module iff + (a) the saved version is not the current version and + (b) the saved module is open in a tab in the model.</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=2#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-06-15 12:08:53 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I implemented what is described in <a href="https://54.195.32.3/show_bug.cgi?id=2#c4">comment 4</a> + with a modification to item 2. That item is now + +If the user double clicks on an action in the error-trace view, then +this takes the user to the indicated location in the saved module iff +the saved module is open in a tab in the model. The toolbox does not +check if the saved version is not the current version.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=3">3</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Add reporting of fingerprint collision probability</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=3#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-18 13:56:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The Model Checking Results page should list + in the General section the information about probability of fingerprint + collision that TLC prints after a run that finishes computing the +reachable states. (I think it prints it out in the event of a liveness +error.) It should say approximately something like: Probability of +fingerprint collision: theoretical: 4.3E-15 pragmatic: 8.7E-15</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=4">4</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Cannot get the default VM install on Mac OS to run TLC</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Simon Zambrovski <simon></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_blocker">blocker + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P1">P1 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 32-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Mac OS</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=4#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-19 13:24:59 UTC + </span> + </div> + + + +<pre class="bz_comment_text">In TLCProcessJob, the method JavaRuntime.getDefaultVMInstall() returns null on Mac OS. A non-null value is required to run TLC.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=4#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Simon Zambrovski</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-27 22:51:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">On Leopard, Carbon, 32Bit delivers the code, run in Eclipse (not RCP) + +IVMInstall install = JavaRuntime.getDefaultVMInstall(); +System.out.println(install); +-> org.eclipse.jdt.internal.launching.macosx.MacOSXVMInstall@31d55cc +System.out.println(install.getInstallLocation()); +-> /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=4#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Simon Zambrovski</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-27 23:01:00 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The same platform / installation delivers null in RCP mode. +(In reply to <a href="https://54.195.32.3/show_bug.cgi?id=4#c1">comment #1</a>) +<span class="quote">> On Leopard, Carbon, 32Bit delivers the code, run in Eclipse (not RCP) +> +> IVMInstall install = JavaRuntime.getDefaultVMInstall(); +> System.out.println(install); +> -> org.eclipse.jdt.internal.launching.macosx.MacOSXVMInstall@31d55cc +> System.out.println(install.getInstallLocation()); +> -> /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home</span></pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=4#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Simon Zambrovski</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-27 23:02:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Another reference describing the same bug: <a href="http://www.eclipse.org/forums/index.php?t=msg&goto=495006&S=af54b9bdf2bc342a1f3154a501e149b5">http://www.eclipse.org/forums/index.php?t=msg&goto=495006&S=af54b9bdf2bc342a1f3154a501e149b5</a></pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=4#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-28 16:13:07 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I posted the message that you linked to in the last comment.</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=4#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Simon Zambrovski</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-16 16:36:20 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Added the plugin dependency to +org.eclipse.jdt.launching.macosx to enable Mac OSx support. Could +someone try if it solved the problem?</pre> + </div><div id="c6" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=4#c6">Comment 6</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Simon Zambrovski</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-17 13:55:51 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Adding a mandatory reference to the +OS-dependent plugin was wrong and didn't allow to run the dependent +plugin on other platforms. But I made the reference "optional" (click on + properties in the plugin.xml editor, dependency tab). Please try if it +works.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=5">5</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">The help view does not always receive focus when the user clicks help</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Toolbox Help</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=5#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-19 15:01:30 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The help menu is not getting the focus if +it doesn't already have the focus and it either is in or is being opened + into a folder that has the focus.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=5#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-19 15:48:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This is now fixed by activating the help +view in HelpHandler after it is opened by displayDynamicHelp(). In cases + where the view already receives focus, this has no effect. In cases +when it previously did not receive focus, activating the help view gives + it focus.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=6">6</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">The rename spec command does not behave properly</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=2">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=6#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-19 16:09:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The rename spec command doesn't do the +right thing if a spec already exists that has the same name ignoring +case but with different capitalization. In particular, a +ResourcesException is thrown saying "A resource exists with a different +case". If the spec being renamed is open at the time, then a +RuntimeException is thrown saying "Specification newSpecName not found" +and the toolbox returns to the welcome view. + +In addition, if a spec is renamed to a name "newName" when there exists a + folder newName.toolbox, this seems to cause the same problem. + +There may be other renaming actions that can cause the same resource +problems.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=6#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-27 16:51:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I changed the renaming validation method to + check if any specifications exist that have the same name but a +different case. I cannot reproduce the problem that I said occured when +there exists a folder newName.toolbox that has not been opened as a +specification and the user renames an open specification to "newName". I + will assume that I made this problem up, so the rename spec bug has +been fixed.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=6#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-27 16:51:03 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=2" name="attach_2" title="mylyn/context/zip">attachment 2</a> <a href="https://54.195.32.3/attachment.cgi?id=2&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=7">7</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Parsing errors in the MC file contain "Encountered ----" sometimes</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=7#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-25 15:09:36 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Entering an expression such as "1+" +followed by nothing in fields of the model editor will result in a parse + error message that says "Encountered ----". The parser finds "----" in +the MC.tla file because that is the separator between sections. This +should probably be replaced with something more useful for the user.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=7#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-27 23:29:22 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I wouldn't bother worrying about that. The message is nicely ambiguous, since it could +be interpreted to mean that the parser encountered something that it either can't or isn't +bothering to tell you what. More confusing is the stack trace part of the message that talks +about line numbers in the MC file. I'd suggest subtracting the suitable number from the +line numbers so numbers from 1 through the number of lines in the expression correspond +to what the user typed. This will leave most of the line numbers in the stack trace negative, +which will tell the user that these are not lines he should expect to see. However, this +has low priority.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=8">8</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Add module-editor line width preference</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=8#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-30 02:10:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Add a new parameter that is a default line +width for modules. This should be put on a new Module Editor +preferences page. (it's not clear to me if any of the General +preferences that apply to the module editor should be moved to this +page. That should be done only if they apply only to the module editor +and not to anything else, such as the Model Editor.) Its default value + should be 77. + +The creation of a new module file by the Toolbox (for example, when +opening a new spec with a new file) should use the parameter as follows. + Let the value of this parameter be P. Then + +- The closing line of the module should consist of P "=" characters. + +- The opening line of the module should consist of the following: + + N "-" characters, 1 space character, "MODULE", one space +character, + the module name, one space character, M "-" characters + + where N and M are the smallest integers greater than or equal to 4 +such that: + (a) M equals either N or N-1, and + (b) The total number of characters in the line is greater than or +equal to P + + I believe this means that, with Java notation, + N = Max(4, (Q / 2) + (Q%2)) + M = Max(4, Q / 2) + where Q = P - ("MODULE".length + ModuleName.length + 3) + +Also, rename the items under TLA+ Preferences to remove "Preferences" +from their names--e.g., change "TLA+ Parser Preferences" to "TLA+ +Parser".</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=8#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Simon Zambrovski</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-30 11:54:50 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The preference renaming is moved to the separate <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Rename Preference Pages" href="https://54.195.32.3/show_bug.cgi?id=9">Bug 9</a>.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=8#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Simon Zambrovski</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-30 12:02:26 UTC + </span> + </div> + + + +<pre class="bz_comment_text">What is to do with those numbers, M, N, P +and Q? + +The formulas are not needed for determination of width of new modules +(it is trivial, since the content of the module is stored in a +template). + +I don't see any other purpose of the editor width, beyond the usage in +the formater. Writing a formater is a task which is usually more than +finding out how long the line is. + +The GENERAL setting of the TEXT EDITOR (not TLA+ Editor) should not be +changed.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=9">9</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Rename Preference Pages</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Simon Zambrovski <simon></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=3">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=9#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Simon Zambrovski</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-30 11:55:46 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Rename the items under TLA+ Preferences to remove "Preferences" from +their names -- e.g., change "TLA+ Parser Preferences" to "TLA+ Parser".</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=9#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-10 12:53:42 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=3" name="attach_3" title="mylyn/context/zip">attachment 3</a> <a href="https://54.195.32.3/attachment.cgi?id=3&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=10">10</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Eclipse buttons don't work on Linux ubuntu 9.10</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Simon Zambrovski <simon></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_critical">critical + </td> +<th class="rightcell">CC:</th> + <td>bugzilla.tlaplus.net, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Linux</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Upgrade to recent Eclipse RCP version" href="https://54.195.32.3/show_bug.cgi?id=116">116</a> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr> + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=10#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Simon Zambrovski</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-30 17:16:33 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I tried it in my linux (ubuntu Karmic) machine. +The toolbox, quickly used around 1 gb (1172 mb) of my virtual memory +before opening a file. +Having 1 GB of physical memory in my laptop, +only opening a spec file almost like forever. +I don't think it is a normal situation. + +I tried to upgrade my machine using the latest stable kernel +2.6.31-15-generic, +but the problem remains. + +Other applications (such as netbeans, eclipse, mysql) run normally in my +machine. +I'm not sure what went wrong. + + +Sincerely yours, +Ade Azurat (<a href="mailto:ade@cs.ui.ac.id">ade@cs.ui.ac.id</a>)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=10#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-04 17:22:57 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This is not a memory issue. The physical +memory usage of the toolbox on startup was only 60MB on his machine. He +was unable to open a spec because the Finish button did not work +properly on the New Spec Wizard on his machine. In particular, clicking +on it does nothing. There is at least one other way to actually select +Finish: hold Control and press Enter. + +It turns out this is an eclipse bug. The same thing occurs with some +buttons in eclipse on ubuntu Karmic. This problem is listed many times +on bug lists. For example, + +<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=291257">https://bugs.eclipse.org/bugs/show_bug.cgi?id=291257</a> +<a href="https://bugs.launchpad.net/gtk/+bug/442078/comments/28">https://bugs.launchpad.net/gtk/+bug/442078/comments/28</a> +<a href="https://bugs.launchpad.net/ubuntu/+source/eclipse/+bug/443004">https://bugs.launchpad.net/ubuntu/+source/eclipse/+bug/443004</a> + +From what I've gathered from these bug lists, the most recent release of + ubuntu (and maybe some past releases) contains an updated version of +gtk, which I've learned is a widget toolkit for greating GUIs. The +second link explains that if eclipse had used gtk properly in the past, +then this new version would not cause problems, but evidently, eclipse +has been using gtk in strange ways that only happened to work on past +version but don't work on this new version. The button clicking bug is +just one of the problems that exists in eclipse on the newest version of + ubuntu. + +Some of the messages in the first link explain that eclipse 3.5.2 and +3.6 appear to fix the problem, but these versions are still in +development. We could get one of the builds of 3.5.2 and use this as the + new target platform, but since its not officially released, who knows +what bugs this would introduce. This seems like a bad option to me. +According to a message on the first link, the target date to release +3.5.2 is February 26, 2010. + +The GTK developers included a flag that allows the previous behavior of +GTK to be used by an application. This flag is set by setting the the +environment variable GTK_NATIVE_WINDOWS=1 . I tried this on the linux +machine I've been using in Orsay, and it does seem to fix the problem. +The only way I've found to set this is to run the command + +export GTK_NATIVE_WINDOWS=1 + +in a shell and then run the toolbox from that shell. It would be +annoying for the user to have to do this every time, so it might be +better to just include those two commands in a shell script that the +user would run. We could do this while waiting for eclipse 3.5.2 to be +released. Or maybe there is a nicer way to set this flag that I haven't +found. + +Another option as Leslie suggested is to just put a message in every +wizard and dialog explaining what to do if clicking on a button doesn't +work. Unfortunately, there may be issues with widgets in the toolbox +besides buttons that we haven't discovered. + +Any thoughts on this?</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=10#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-10 12:44:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This is a slightly updated description of +the bug. Some buttons don't work properly on Eclipse and the Toolbox on +some platforms. In particular, any platform that uses GTK+ version 2.18 +(the latest version) will experience this bug. The desktop environment +GNOME uses GTK+ as its base widget toolkit, and the latest version of +GNOME (released in September, 2009) uses GTK+2.18. GNOME is the default +desktop environment for Fedora, Debian, Ubuntu, and OpenSolaris, so +those systems with the latest version of GNOME probably experience the +problem. We don't have a distribution for Solaris, so I guess that's not + an issue right now. The wikipedia page for GTK+ lists a few other +desktop environments that use GTK+ and can run on Linux machines. They +are Xfce, LXDE, and ROX Desktop. They don't seem to be very widely used, + but we can note those on the website just in case. + +The complete extent of the bug is not clear. However, from the bug +forums and from my tests in Orsay, I believe that the button problem +only occurs with the default button in a dialog or wizard. The default +button is usually a different color and can be selected by pressing +Enter (when they work properly). On platforms with the bug clicking on +these buttons will cause the button to appear pressed, but nothing else +will happen. If this happens, the user should try one or more of the +following: + +1.) Press Enter +2.) Hold Control and press Enter +3.) Let the mouse hover over the button and press Enter +4.) Let the mouse hover over the button and press Space + +There may be other ways to select the buttons, but these are the one's +that people have mentioned in the bug forums. Its also worth noting that + if a user experiences any other strange behavior with a widget on one +of those platforms, then there's a good chance its the same bug. Some of + the posts on the bug forums mentioned other problems with GTK+ 2.18 +besides the buttons. I don't believe these problems are relevant to the +Toolbox, but there may be some other non-button problems that are. + +The workaround provided by the GTK+ developers is to set +GDK_NATIVE_WINDOWS=true in a shell before launching the toolbox (or +eclipse) from that shell. This causes GTK+ to behave as it did before +2.18. The real fix will be provided in Eclipse 3.5.2 which is scheduled +for release on February 26, 2010.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=10#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-02 15:12:20 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The trace explorer buttons for Explore and Restore seem to be affected by this bug.</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=10#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-11 16:45:40 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Once fixed the system specific Instructions for Linux [0] can be removed from the web page. + +[0] <a href="http://research.microsoft.com/en-us/um/people/lamport/tla/toolbox.html#downloading">http://research.microsoft.com/en-us/um/people/lamport/tla/toolbox.html#downloading</a></pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=10#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 20:08:42 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The new Maven/Tycho based build has upgraded the toolbox dependency to Eclipse 3.6, marking as fixed.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=11">11</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Add the notion of a model being locked</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=11#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-11-30 18:18:27 UTC + </span> + </div> + + + +<pre class="bz_comment_text">We still have the problem that TLC might be + running for weeks, and the user in the meantime changed the spec. When + TLC stops running, the model gets revalidated and stuff that was in the + model configuration gets lost. Here is a possible solution: Add the +notion of a model being LOCKED, meaning that it cannot be changed in any + way, meaning that it is read only and it doesn't change to conform to +the current spec. (This state actually exists in the toolbox now: it is + called "model in use".) In particular, it conforms to the copy of the +spec that's salted away with the model. Running the spec locks the +model. There will also be a menu item that the user can select to lock +the spec himself. (This will allow the user to protect himself from +accidentally modifying or re-running a spec by mistake--perhaps losing a + trace that took weeks for TLC to produce.) We must decide what should +happen to the lock state when a TLC run completes. Should the user have +to explicitly unlock it? I suggest that it be unlocked when the run +completes if and only if that run did not take too long--where "too +long" is a user-settable preference.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=11#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-02 17:57:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I'll add a field to the TLC preference page + that specifies how long the model must run in order to remain locked +when TLC terminates. I'll add a lock and an unlock button to the +toolbars that currently contain the buttons for running, validating, and + stopping. + +I think there should be a notion of an explicit user lock and an +automatic lock. A user lock occurs when the user clicks on the lock +button. An automatic lock occurs when TLC starts. A model with a user +lock can only be unlocked when the user clicks the unlock button. A +model with an automatic lock can be unlocked if TLC terminates in less +than the specified time or if TLC terminates in more than the specified +time and the user clicks the unlock button after TLC completes. If a +user locks a model while there is an automatic lock (he clicks the lock +button while the model is running), then the user lock replaces the +automatic lock. + +When the model is locked, all fields in the model editor will be +disabled (they will have the grayed out look, and the user will not be +able to edit them). The lock button will be enabled when TLC is running +and the unlock button will be disabled. When TLC is not running, the +unlock button will be enabled only when the model is locked and the lock + button will be enabled only when the model is unlocked.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=11#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-02 23:38:13 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This sounds good.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=11#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-07 11:23:17 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Should the user be able to rename the model when it is locked?</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=11#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-07 19:14:44 UTC + </span> + </div> + + + +<pre class="bz_comment_text">It doesn't matter whether or not the user +is allowed to rename a locked model. (If he is allowed to remain it, +that shouldn't unlock it.)</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=12">12</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox checking unselected behavior spec options.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=4">a spec + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=12#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-02 23:44:42 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When I change the spec to remove all +variables and save it and then open an existing model, the model +correctly opens with the "No behavior spec" option selected and the +other options disabled. However, when validating the Toolbox, it +complains that the Init and Next formulas left over from the previous +version (which I can't change because the option is disabled) are +undefined. We should make sure that no entry from a disabled field is +ever put into the MC file.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=12#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-03 00:10:14 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I can't seem to reproduce this error. Can you send me the spec and model that caused this problem?</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=12#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-07 11:25:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Since this does not seem to be reproducible, I'm marking it as worksforme.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=12#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-21 02:39:24 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=4" name="attach_4" title="a spec">attachment 4</a> <a href="https://54.195.32.3/attachment.cgi?id=4&action=edit" title="a spec">[details]</a></span> +a spec + +see description</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=12#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-21 02:50:29 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Open a new spec with this root file. Create a model for it, assigning arbitrary small +integer values to M and N and using Init and Next as the initial predicate and next-state +action. Add the invariant + + (x=y) => x = GCD(M, N) + +Run the model. It will produce an error, which you can ignore. + +Now enter ===== right before the CONSTANTS declaration and save the module. + +Go to the model and validate it. Depending on the Toolbox's mood, you'll get 5 or 7 errors. If you get 7 errors, +two of them will be complaining about Init and Spec. But you may get only 5, in which case it is correctly +complaining about the bad Invariant. However, it's impossible to remove the invariant because the invariant +section can't be opened. This is not a terrible problem; one just has to add a variable to the spec. But it's a +nuisance--especially if the randomly occurring complaint about Init and Spec occurs.</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=12#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-21 16:01:12 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The statement in my previous comment that the 5 errors in the Invariant are not +a bug was wrong. You can't check invariants or other properties if there's no +spec, so they should be ignored in that case. Other parts of the model that +should be disabled and ignored when there's no behavioral spec are: +- Recover from Checkpoint +- Number of workers +- State and Action constraint +- TLC Options</pre> + </div><div id="c6" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=12#c6">Comment 6</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-27 15:40:14 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I don't believe that number of workers +makes any difference. The toolbox was already disabling the invariants +and properties sections but was not ignoring them when it launched TLC. +It now ignores them. It also ignores checkpoint recovery, state and +action contraints, and anything in the TLC Options section. I found that + disabling the State Constraints, Action Constraints, and TLC Options +sections creates some bizarre behavior on the Advanced Options page, so I + decided not to do this.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=13">13</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Trace exploration</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=13#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-07 11:22:48 UTC + </span> + </div> + + + +<pre class="bz_comment_text">After an error trace is generated from a +run of TLC, the user should be able to enter one or more expressions for + which he wants to see the value at each state of the trace.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=13#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-07 17:00:12 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Currently, I think the TLC Error View +should contain a section that looks the same as the invariants or the +properties sections. This would require some re-implementation of the +lower part of the view's sash form, but I think this would be a nice +interface. In addition to the Add, Edit, and Remove buttons, the section + will contain a run button. I'm not yet sure where the best place for +this button is. Its necessary to determine if an expression contains +primed variables. We could do this by providing the user with a +checkbox for each expression that indicates if it has primed variables. +We could also run SANY to determine if an expression has primed +variables. This would require running SANY once to determine which +expressions have primed variables, once to parse the initial predicate +and next-state relations that are generated for exploring the trace, and + once when TLC runs. I think it is preferable to provide the user with a + checkbox and display the error produced by TLC if the user makes the +wrong selection. + +Clicking the run button will execute the trace explorer, unless one of +the following conditions is true: + +1.) The model is unlocked and the spec is not parsed. +2.) The model has a validation error (If the validation error is in the +spec, init and next, invariants, properties, or constraints sections, +this should not prevent the user from running the trace explorer, +although this might be a little more difficult to implement). + +If one of these conditions is true, then an error window will pop up +explaining the error. If neither is true, the following steps will +occur: + +1.) The toolbox will run SANY to validate the expressions. If there are +errors, these will be displayed as red error bubbles (the same as in the + model editor). + +2.) If SANY finds no errors, TLC will be run to evaluate the expression +at each state of the trace (If the expression contains primed variables, + then it cannot be evaluated for the last state of the trace). + +3.) If TLC produces an error evaluating the expressions at any state, +then I think this error should be appended to the existing message in +the error box at the top of the error view. Another option is to have a +separate box for reporting errors from evaluating expressions for trace +exploration. A third option is to display the errors in error bubbles as + with validation errors. + +4.) If TLC does not produce an error, then the existing error trace will + be replaced with a new error trace. Each state will be identical to the + corresponding state in the previous trace except that there will be one + additional row for each expression that was evaluated. The left column +of a row corresponding to an expression will have the expression and the + right column will have its value. If an expression contains primed +variables, then the value column of its row in the final state will have + something like "--" to indicate that it cannot be evaluated. + +A while ago Leslie and I discussed the meaning of primed variables when +exploring the error trace. I'm not sure if we came to a conclusion on +this point, but I think that if an expression contains the primed value +of a variable x, then the value of that expression at state number z +should use the value of x in state number z+1. For example, consider the + following trace. + +STATE 1: <Initial predicate> + /\ x = 0 + /\ y = 0 + + STATE 2: <Action line 8, col 3 to line 9, col 15 of module +Test> + /\ x = 1 + /\ y = 0 + + STATE 3: <Action line 8, col 3 to line 9, col 15 of module +Test> + /\ x = 2 + /\ y = 1 + + STATE 4: <Action line 8, col 3 to line 9, col 15 of module +Test> + /\ x = 3 + /\ y = 3 + +If the user wants to evaluate the expression x'+y, then I think he +should see the following trace. + +STATE 1: <Initial predicate> + /\ x = 0 + /\ y = 0 + \* x'+y = 1 + + STATE 2: <Action line 8, col 3 to line 9, col 15 of module +Test> + /\ x = 1 + /\ y = 0 + \* x'+y = 2 + + STATE 3: <Action line 8, col 3 to line 9, col 15 of module +Test> + /\ x = 2 + /\ y = 1 + \* x'+y = 4 + + STATE 4: <Action line 8, col 3 to line 9, col 15 of module +Test> + /\ x = 3 + /\ y = 3 + \* x'+y = "--" + +The other option, which would be easier to implement, but which makes +less sense to me would be to display the following trace. + +STATE 1: <Initial predicate> + /\ x = 0 + /\ y = 0 + \* x'+y = "--" + + STATE 2: <Action line 8, col 3 to line 9, col 15 of module +Test> + /\ x = 1 + /\ y = 0 + \* x'+y = 1 + + STATE 3: <Action line 8, col 3 to line 9, col 15 of module +Test> + /\ x = 2 + /\ y = 1 + \* x'+y = 2 + + STATE 4: <Action line 8, col 3 to line 9, col 15 of module +Test> + /\ x = 3 + /\ y = 3 + \* x'+y = 4 + +In the preceding trace, the value of x' in the second state is equal to +the value of x in the second state instead of the value of x in the +third state.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=13#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-07 17:30:49 UTC + </span> + </div> + + + +<pre class="bz_comment_text">1.) Create three new files in the model +folder, TE.tla, TE.cfg, TE.out (TE stands for trace explorer, might need + to choose something that the user is less likely to choose as a module +name). + +2.) For each expression the user enters for trace exploration, assign an + identifier that is unlikely to appear in the spec. Declare these +identifiers as variables in TE.tla. Alternatively, the user could be +responsible for assigning identifiers to expressions. + +3.) Fill TE.cfg and TE.tla with the values of constants, additional +definitions, definition overrides, and additional model values. + +4.) Write the initial predicate and next-state relation to TE.cfg and +TE.tla. This is best illustrated with an example. The trace is the +following: + +STATE 1: <Initial predicate> + /\ x = 0 + /\ y = 0 + +STATE 2: <Action line 8, col 3 to line 9, col 15 of module Test> + /\ x = 1 + /\ y = 0 + +STATE 3: <Action line 8, col 3 to line 9, col 15 of module Test> + /\ x = 2 + /\ y = 1 + +STATE 4: <Action line 8, col 3 to line 9, col 15 of module Test> + /\ x = 3 + /\ y = 3 + +The user wants to evaluate two expressions: + +x + y +x' > y + +The file TE.tla will define two new variables: + +VARIABLES sum, big + +The variables are named "sum" and "big" for the simplicity of this +example. In reality they will be something like "trace_2348902347238", +unless the user is responsible to assigning labels to the expressions. +The file will also define two new identifiers: + +sum_def == x + y +big_def == x' >y + +We define the initial predicate and next-state relation as follows: + +TInit == + /\ x = 0 + /\ y = 0 + /\ sum = sum_def + /\ big = "--" + +TNext == + \/ /\ x = 0 + /\ y = 0 + /\ x' = 1 + /\ y' = 0 + /\ sum' = sum_def' + /\ big' = big_def + + \/ /\ x = 1 + /\ y = 0 + /\ x' = 2 + /\ y' = 1 + /\ sum' = sum_def' + /\ big' = big_def + + \/ /\ x = 2 + /\ y = 1 + /\ x' = 3 + /\ y' = 3 + /\ sum' = sum_def' + /\ big' = big_def + +The expression defined by big_def has primed variables so the variable +big takes the value "--" in the initial state predicate. The expression +defined by sum_def does not contain primed variables. This will produce +an error trace by defining the invariant: + +~(x=3/\y=3) + +The TLC Error View will have to alter this error trace if it is to +display it in the way I described in the previous comment. In +particular, the value of big must be shifted up one state and the last +state should have that big = "--". Thus, the value of big in the second +state will be displayed with the first state in the error view. + +The toolbox will call TLC on the root file TE.tla with config file +TE.cfg and write its output to TE.out.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=13#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-07 18:15:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">One question that I forgot to put in the +first comment. When the model is unlocked, should running the trace +explorer cause module files to be recopied to the model directory?</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=13#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-07 19:57:57 UTC + </span> + </div> + + + +<pre class="bz_comment_text"> + Currently, I think the TLC Error View should contain a section + that looks the same as the invariants or the properties sections. + This would require some re-implementation of the lower part of the + view's sash form, but I think this would be a nice interface. In + addition to the Add, Edit, and Remove buttons, the section will + contain a run button. I'm not yet sure where the best place for + this button is. + +The button should be the same place as the Add/Edit/Remove buttons. +And it should be an "explore" button. The button to restore the original +trace (see below) should be in the same place. + + Its necessary to determine if an expression contains primed + variables. We could do this by providing the user with a checkbox + for each expression that indicates if it has primed variables. We + could also run SANY to determine if an expression has primed + variables. This would require running SANY once to determine which + expressions have primed variables, once to parse the initial + predicate and next-state relations that are generated for exploring + the trace, and once when TLC runs. + +The second run of SANY isn't necessary. If the expressions parse +correctly in the first parse, then the initial predicate and +next-state actions that the Toolbox creates will also parse correctly. +(This isn't completely trivial, but it's easy to ensure. For example, +the first module that SANY parses should declare the new variables to +make sure that they are legal variable names.) + + I think it is preferable to provide the user with a checkbox and + display the error produced by TLC if the user makes the wrong + selection. + +Since it doesn't require an extra parse, the Toolbox should determine +this by itself. + + Clicking the run button will execute the trace explorer, unless + one of the following conditions is true: + + 1.) The model is unlocked and the spec is not parsed. + 2.) The model has a validation error (If the validation error + is in the spec, init and next, invariants, properties, or + constraints sections, this should not prevent the user from + running the trace explorer, although this might be a little + more difficult to implement). + +It's not worth worrying about this. The explorer should be run only +if there is no validation error. + + If one of these conditions is true, then an error window will pop + up explaining the error. If neither is true, the following steps + will occur: + + 1.) The toolbox will run SANY to validate the expressions. If + there are errors, these will be displayed as red error bubbles + (the same as in the model editor). + + 2.) If SANY finds no errors, TLC will be run to evaluate the + expression at each state of the trace (If the expression + contains primed variables, then it cannot be evaluated for the + last state of the trace). + + 3.) If TLC produces an error evaluating the expressions at any + state, then I think this error should be appended to the + existing message in the error box at the top of the error view. + Another option is to have a separate box for reporting errors + from evaluating expressions for trace exploration. A third + option is to display the errors in error bubbles as with + validation errors. + +The original error should not be destroyed or mucked with. Remember +That it might have taken TLC a week to produce that message. I +suggest that in case trace exploration yields an error, that error +should replace the original error in the window--with some clear +indication that the error occurred in trace exploration. If the +exploration also produces an error trace, then that trace should be +displayed in the trace view. If the trace explorer succeeds on the +next try, the original error message is restored. When the user +clicks on the button to restore the original trace (see below), that +should also restore the original error message. + + 4.) If TLC does not produce an error, then the existing error + trace will be replaced with a new error trace. + +This replacement is not permanent. The original error trace must be +saved, and there must be a button that permits the use to restore it. + + Each state will be identical to the corresponding state in the + previous trace except that there will be one additional row for + each expression that was evaluated. The left column of a row + corresponding to an expression will have the expression and the + right column will have its value. If an expression contains + primed variables, then the value column of its row in the final + state will have something like "--" to indicate that it cannot be + evaluated. + + A while ago Leslie and I discussed the meaning of primed variables + when exploring the error trace. I'm not sure if we came to a + conclusion on this point, but I think that if an expression contains + the primed value of a variable x, then the value of that expression + at state number z should use the value of x in state number z+1. + For example... + +Yes, that's correct + + 1.) Create three new files in the model folder, TE.tla, + TE.cfg, TE.out (TE stands for trace explorer, might need to + choose something that the user is less likely to choose as a + module name). + +TE is fine. As with MC, the user shouldn't be allowed to create a +module named TE. + + 2.) For each expression the user enters for trace exploration, + assign an identifier that is unlikely to appear in the spec. + Declare these identifiers as variables in TE.tla. Alternatively, + the user could be responsible for assigning identifiers to + expressions. + +It's better to have the user choose the identifier. If the user +defines + + Sum2 == x'+y + +Then the error trace would contain something like + + STATE 1: <Initial predicate> + /\ x = 0 + /\ y = 0 + /\ Sum2 = 1 + + STATE 2: <Action line 8, col 3 to line 9, col 15 of module Test> + /\ x = 1 + /\ y = 0 + /\ Sum2 = ... + +One reason for this is that it would be good to allow the user to +change which variables' values are displayed and in what order. If +this feature is implemented, Sum2 would be treated as just another +variable like x and y.</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=13#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-27 11:43:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When the trace from the trace explorer is +shown for a given model, it will continue to be shown in the error view +for that model unless model checking is run, the restore button is +pressed, or the error hyperlink on the results page is pressed. Closing +and re-opening the toolbox, switching to another model and back, closing + and re-opening using the menu item in the TLC menu will show in the +error whatever errors were previously there for that model (errors from +the trace explorer or errors from model checking). + +I decided to make the hyperlink on the results page restore the original + error/trace in case the trace explorer somehow messes up the error view + so that the restore button does not appear.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=14">14</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">The column numbers do not appear in module editor</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=14#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-07 13:53:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">At one point I think the column number of +the cursor appeared at the bottom of the module editor. I may have +removed this when turning the module editor into a multipage editor to +include a pretty printed version of the module.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=14#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-29 13:13:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I created a class +TLAMultiPageEditorActionBarContributor that acts as the contributor +class for the TLAEditorAndPDFViewer class that is the editor for TLA +modules. The contributor adds the cursor position to the status line at +the bottom of the toolbox when a text editor is active. I also re-added +the Content Assist and Content Tip menu items to the edit menu that I +had removed when I made the editor for tla modules into a multi page +editor. I'm not sure what the Content Tip item does, but it was there +before.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=15">15</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Rename or deleting root file outside toolbox produces incorrect editor page</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>bugzilla.tlaplus.net, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=15#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-10 14:49:24 UTC + </span> + </div> + + + +<pre class="bz_comment_text">If the user renames or deletes a root file +outside of the toolbox and then opens the spec, the toolbox displays a +page that says + + Resource is out of sync with the file system: '/test/test10.tla'. + + Press F5 or select File -> Refresh to refresh the file. + +Pressing F5 does nothing and File -> Refresh does not exist in the +toolbox, so I guess this page is generated by eclipse code. The toolbox +also shows the Parsing Error view which says "Could not find module."</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=15#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-10 14:50:02 UTC + </span> + </div> + + + +<pre class="bz_comment_text">A solution is to attach a resource change +listener to the work space. If the root file is renamed the listener +would change the spec to point to the new root file name. I think that +it would also have to change the name of the root module to equal the +new file name. If the root file is deleted, the listener would change +the spec to reflect this and the open spec handler would have to check +for this before opening an editor on that file. + +I don't know that this would always put the toolbox in sync with the +file system, because its not clear exactly when resource change +listeners get notified of resource changes. + +An easier solution would be to simply check before opening an editor on +the root file if that file still exists with the name the toolbox thinks + it has and display an sensible error message to the user if it doesn't.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=15#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-03-19 15:44:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Resource change listeners are notified of +resource changes that occur outside of the toolbox only after the method + refreshLocal is called on a directory containing the changed resources.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=15#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-11 17:01:40 UTC + </span> + </div> + + + +<pre class="bz_comment_text">AFAIR ResourceChangeListener only track +resources while the workbench is up and running. If spec or .toolbox/* +files are moved/deleted while the Toolbox is down has to be handled too. + Otherwise exception like the following show up in the log and/or +current editor: + +org.eclipse.ui.PartInitException: The file does not exist. + at +org.eclipse.ui.texteditor.AbstractTextEditor.internalInit(AbstractTextEditor.java:3075) + + at +org.eclipse.ui.texteditor.AbstractTextEditor.init(AbstractTextEditor.java:3088) + + at +org.lamport.tla.toolbox.editor.basic.TLAEditor.init(TLAEditor.java:175) + at +org.eclipse.ui.part.MultiPageEditorPart.addPage(MultiPageEditorPart.java:237) + + at org.eclipse.ui.forms.editor.FormEditor.addPage(FormEditor.java:325) + at +org.lamport.tla.toolbox.editor.basic.TLAEditorAndPDFViewer.addPages(TLAEditorAndPDFViewer.java:70) + + at +org.eclipse.ui.forms.editor.FormEditor.createPages(FormEditor.java:138) + at +org.eclipse.ui.part.MultiPageEditorPart.createPartControl(MultiPageEditorPart.java:348) + + at +org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + + at +org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + + at +org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + + at +org.eclipse.ui.internal.EditorAreaHelper.setVisibleEditor(EditorAreaHelper.java:271) + + at +org.eclipse.ui.internal.EditorManager.setVisibleEditor(EditorManager.java:1429) + + at +org.eclipse.ui.internal.EditorManager$5.runWithException(EditorManager.java:942) + + at +org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at +org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803) + + at +org.eclipse.ui.internal.Workbench$31.runWithException(Workbench.java:1567) + + at +org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2548) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:592) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) +Caused by: org.eclipse.core.runtime.CoreException: The file does not +exist. + at +org.eclipse.core.internal.filebuffers.ResourceFileBuffer.create(ResourceFileBuffer.java:237) + + at +org.eclipse.core.internal.filebuffers.TextFileBufferManager.connect(TextFileBufferManager.java:112) + + at +org.eclipse.ui.editors.text.TextFileDocumentProvider.createFileInfo(TextFileDocumentProvider.java:559) + + at +org.eclipse.ui.editors.text.TextFileDocumentProvider.connect(TextFileDocumentProvider.java:478) + + at +org.eclipse.ui.texteditor.AbstractTextEditor.doSetInput(AbstractTextEditor.java:4056) + + at +org.eclipse.ui.texteditor.StatusTextEditor.doSetInput(StatusTextEditor.java:217) + + at +org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.doSetInput(AbstractDecoratedTextEditor.java:1444) + + at +org.eclipse.ui.editors.text.TextEditor.doSetInput(TextEditor.java:169) + at +org.eclipse.ui.texteditor.AbstractTextEditor$19.run(AbstractTextEditor.java:3043) + + at +org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464) + + at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372) + at +org.eclipse.jface.window.ApplicationWindow$1.run(ApplicationWindow.java:759) + + at +org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at +org.eclipse.jface.window.ApplicationWindow.run(ApplicationWindow.java:756) + + at +org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2606) + at +org.eclipse.ui.texteditor.AbstractTextEditor.internalInit(AbstractTextEditor.java:3061) + + ... 45 more + +!ENTRY org.eclipse.ui 4 0 2011-05-09 18:46:38.059 +!MESSAGE Unable to create editor ID +org.lamport.tla.toolbox.editor.basic.TLAEditorAndPDFViewer: assertion +failed: +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: assertion failed: + at org.eclipse.core.runtime.Assert.isTrue(Assert.java:110) + at org.eclipse.core.runtime.Assert.isTrue(Assert.java:96) + at +org.eclipse.ui.part.MultiPageEditorPart.setActivePage(MultiPageEditorPart.java:1065) + + at +org.eclipse.ui.forms.editor.FormEditor.setActivePage(FormEditor.java:607) + + at +org.eclipse.ui.part.MultiPageEditorPart.createPartControl(MultiPageEditorPart.java:352) + + at +org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + + at +org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + + at +org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + + at +org.eclipse.ui.internal.EditorAreaHelper.setVisibleEditor(EditorAreaHelper.java:271) + + at +org.eclipse.ui.internal.EditorManager.setVisibleEditor(EditorManager.java:1429) + + at +org.eclipse.ui.internal.EditorManager$5.runWithException(EditorManager.java:942) + + at +org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at +org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803) + + at +org.eclipse.ui.internal.Workbench$31.runWithException(Workbench.java:1567) + + at +org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2548) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:592) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) + +!ENTRY org.eclipse.ui 2 2 2011-05-09 18:46:38.163 +!MESSAGE Ignored attempt to add saveable that was already registered +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: unknown saveable: +org.eclipse.ui.internal.DefaultSaveable@3a33a6b8 from part: +org.eclipse.ui.internal.ErrorEditorPart@3a33a6b8 + at +org.eclipse.ui.internal.SaveablesList.logWarning(SaveablesList.java:187) + at +org.eclipse.ui.internal.SaveablesList.addModel(SaveablesList.java:117) + at +org.eclipse.ui.internal.SaveablesList.addModels(SaveablesList.java:289) + at +org.eclipse.ui.internal.SaveablesList.postOpen(SaveablesList.java:684) + at org.eclipse.ui.internal.PartList.partOpened(PartList.java:234) + at org.eclipse.ui.internal.PartList.access$0(PartList.java:210) + at org.eclipse.ui.internal.PartList$1.propertyChanged(PartList.java:40) + at +org.eclipse.ui.internal.WorkbenchPartReference.fireInternalPropertyChange(WorkbenchPartReference.java:375) + + at +org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:610) + + at +org.eclipse.ui.internal.EditorAreaHelper.setVisibleEditor(EditorAreaHelper.java:271) + + at +org.eclipse.ui.internal.EditorManager.setVisibleEditor(EditorManager.java:1429) + + at +org.eclipse.ui.internal.EditorManager$5.runWithException(EditorManager.java:942) + + at +org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at +org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803) + + at +org.eclipse.ui.internal.Workbench$31.runWithException(Workbench.java:1567) + + at +org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2548) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:592) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384)</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=15#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-11 17:02:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">One more stacktrace: + +!ENTRY org.eclipse.core.resources 4 2 2011-05-09 19:19:40.165 +!MESSAGE Problems occurred when invoking code from plug-in: +"org.eclipse.core.resources". +!STACK 0 +java.lang.NullPointerException + at +org.lamport.tla.toolbox.ui.contribution.StatusReflectingSpecLifecycleParticipant.initialize(StatusReflectingSpecLifecycleParticipant.java:23) + + at +org.lamport.tla.toolbox.util.SpecLifecycleManager.initialize(SpecLifecycleManager.java:49) + + at +org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.<init>(WorkspaceSpecManager.java:58) + + at org.lamport.tla.toolbox.Activator.getSpecManager(Activator.java:297) + at +org.lamport.tla.toolbox.util.ResourceHelper.getResourceByName(ResourceHelper.java:147) + + at +org.lamport.tla.toolbox.util.ResourceHelper.getResourceByModuleName(ResourceHelper.java:137) + + at +org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:258) + + at +org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:83) + + at +org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:56) + + at +org.lamport.tla.toolbox.spec.parser.SpecificationParserLauncher.parseSpecification(SpecificationParserLauncher.java:38) + + at +org.lamport.tla.toolbox.spec.nature.ParserHelper$2.run(ParserHelper.java:75) + + at +org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975) + at +org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1957) + at +org.lamport.tla.toolbox.spec.nature.ParserHelper.rebuildSpec(ParserHelper.java:81) + + at +org.lamport.tla.toolbox.spec.nature.TLAParsingBuilder.build(TLAParsingBuilder.java:67) + + at +org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) + + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) + + at +org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) + + at +org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) + + at +org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) + + at +org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) + + at +org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=16">16</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">cygwin doesn't properly unzip the Windows executable</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=16#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-17 21:19:20 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I received the following problem report from a user here. The problem +occurred when he unzipped the file using Cygwin's unzip command. It +worked fine when he used WinZip. He also said that when he unzipped +with WinZip, then produced a zip file with Cygwin and unzipped that +file with Cygwin, it worked fine. This all happened on an XP system. + +We should see if this is reproducible. If it is, we should spend a +few milliseconds trying to figure out if there's a way to produce a +zip file that Cygwin will handle properly. If we can't figure out +such a way, we should warn users not to unzip with Cygwin. + +----- + +I tried to install the toolbox but I'm getting an error. My operating +system is Windows XP. Here's what I did: + + - downloaded ZIP file from <a href="http://www.msr-inria.inria.fr/">http://www.msr-inria.inria.fr/</a> + Projects/tools-for-formal-specs/toolbox.win32.win32.x86.zip + + - unzipped it to c:\, creating directory c:\tlatoolbox + + - installed Java (Java Version 6 Update 17). + + - rebooted computer + + - executed c:\tlatoolbox\toolbox.exe + + - got a pop up window that says "The Toolbox executable launcher was + unable to locate its companion shared library"</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=17">17</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">tlatex translation not working?</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLATEX Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + WORKSFORME + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=17#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-18 00:17:00 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When I try to produce a pdf version, the +appropriate tab appears but it is blank. While this could be a problem +with my installation, it has worked in the past and I haven't changed +anything in my LaTeX installation. (Which doesn't mean that Windows +didn't decide to change it for me.) However, no log entry is produced, +which is a bug even if the Toolbox is calling tla2tex correctly. +Moreover, even if there were a problem with my LaTeX installation, +TLATeX would write a .tex file and the Toolbox command isn't doing that. + And furthermore, there is an old version of the pdf file in the +.toolbox directory that the Toolbox isn't displaying. + +Also, I don't remember if TLATeX produces an error message that the +Toolbox is supposed to recognize and translate into an error warning for + the user. If that's not being done now, it should be implemented.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=17#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-23 19:48:21 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The translation is working for me now. As near as I can tell, nothing changed in the Toolbox +or in my machines' configuration. Of course, this being modern software, it might now be +working because Neptune entered Sagitarius.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=18">18</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Modifying the Toolbox to handle pcal files.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA Tools</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + INVALID + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED INVALID - PlusCal translation needs to be reimplemented to handle .pcal files" href="https://54.195.32.3/show_bug.cgi?id=33">33</a> + </td> +<td> </td> + <td> </td> + </tr> + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=18#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-18 00:28:08 UTC + </span> + </div> + + + +<pre class="bz_comment_text">There will be two kinds of module files: .tla and .pcal files. A root +or non-root file of a spec can be of either kind. A .pcal file has a +derived .tla file that is produced by running the pcal translator, +which is done by calling pcal.trans.runMe(). For a pcal module, +"parsing" consists of running the pcal translator and then, if there +are no errors, parsing the resulting tla file. (Thus, no additional +"translate on save" option is needed.) + +When the user opens a pcal module, the corresponding tla file should +be opened in another tab of the editor (but the pcal file's tab should +have the focus). Eventually there will be a version of tla2tex for +pcal files. There will then need to be two separate commands for +producing a pdf version of the pcal file and of the tla file. (The +latter command should not be commonly used.) For now, the "Produce +PDF Version" command will call tla2tex on the tla file. + +Should the user want to edit the tla file? Normally, it's a bad idea +to edit derived files. However, I can imagine the user wanting to add +debugging code to the algorithm. Adding it to the TLA+ translation +might be a nice way to do this, since he will probably that code will +then be removed when he fixes the bug in the pcal file and translates +it. I suggest that the default be to pop up a warning the first time +the user changes the tla file after it's translated. We can have a +preference that allows him to disable that warning. We could also +have a preference that makes the tla file read only. + +Most command-line options will be specified by the options statement +in the pcal file. Moreover, the most common options, which specify +fairness and termination, will eventually be eliminated by changes to +the language. However, the user may want to specify some global +default options that will be passed to the translator as command-line +options. A preference will be provided to specify that. Its default +value will be -nocfg. Since the ability to specify options for an +individual spec in the Spec Explorer has been implemented, we perhaps +we should keep it--letting the preference specify the initial setting +of that field. Since those options will rarely be set by the user, it +doesn't make much difference what we do. + +A read-only copy of the pcal file should be saved in the model's +subdirectory along with the tla file. + +The module is considered to have changed if either the pcal file or +the tla file has been changed since it was last translated or parsed. + +I think this is a complete list of what has to be changed to handle +pcal files.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=18#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-07-14 03:41:33 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The plan for using pcal files has been abandoned, so this is moot.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=19">19</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox caches obsolete values on startup</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>bugzilla.tlaplus.net, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=36">stack trace + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=19#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2009-12-23 01:47:07 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I regularly synchronize my home and office machines by copying files back +and forth between them. This means that I frequently overwrite .toolbox +directories. If I open the Toolbox and it restores the previous state, it +fails to check if the models that it knew about when it was last run are +still there. This causes bizarre behavior. Often the Toolbox fails to +start the first time I try to open it. + +By the way, is P4 higher or lower priority than P3?</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=19#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-29 13:11:25 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=36" name="attach_36" title="stack trace">attachment 36</a> <a href="https://54.195.32.3/attachment.cgi?id=36&action=edit" title="stack trace">[details]</a></span> +stack trace</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=20">20</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Model editor incorrectly reports that TLC is running</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=5">Root module for spec + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=6">toolbox directory containing the only model + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=20#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-18 15:59:18 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Opening the spec and the (only) model (see +attachments) gets the model in a state in which most of it thinks that +TLC is running, except that the Model Checking Results page correctly +reports its status as "Not running". This state may have been produced +by running the trace explorer, but running the trace explorer on another + spec doesn't do that.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=20#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-18 16:00:12 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=5" name="attach_5" title="Root module for spec">attachment 5</a> <a href="https://54.195.32.3/attachment.cgi?id=5&action=edit" title="Root module for spec">[details]</a></span> +Root module for spec</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=20#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-18 16:00:44 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=6" name="attach_6" title="toolbox directory containing the only model">attachment 6</a> <a href="https://54.195.32.3/attachment.cgi?id=6&action=edit" title="toolbox directory containing the only model">[details]</a></span> +toolbox directory containing the only model</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=21">21</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Browsing for a new spec on Mac does not allow user to type in name</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 32-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Mac OS</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=21#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-18 16:05:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">In Windows, you can create a new file by +browsing to an existing directory, typing in the name of the file, and +clicking on Open. This opens the file if it exists, and creates it if +it doesn't. The Toolbox's file browser on the Mac doesn't offer the +option of typing in a file name.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=21#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-18 16:06:24 UTC + </span> + </div> + + + +<pre class="bz_comment_text">In a standard Mac interface, you have two menu items. One (open) to +open an existing file and the other (save as) to save the contents of +the window to a new file (possibly overwriting an existing file). +Accordingly, there are two file browsers: the "open" file dialog and +the "save" file dialog. + +In the case of the toolbox, it is missing a "new" menu item to create +a new empty window, and the "save as" item doesn't open the right +dialog.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=21#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 14:11:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Changing the file dialog to a "save" dialog + allows the user to type in the file name on Mac. The downside is that +next to the text bar where the user can type in the file name, the +dialog says "Save As", and the button to finish says "Save". We can set +the title of the dialog to be whatever we want.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=21#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-28 16:58:54 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The save dialog has been implemented for +Mac OS X. The Save As menu also now opens a save dialog instead of an +open dialog on all operating systems.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=22">22</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Help does not work on Mac</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Toolbox Help</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 32-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Mac OS</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=11">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=22#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-21 01:44:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Jean-Charles reports that nothing appears +on the Help menu at the top of the screen when the Toolbox is selected. + (That's where MAC is supposed to show the help choices.)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=22#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 14:41:45 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I do not believe it is possible to have one + click help as a menu. It would appear that it is necessary to make +Dynamic Help a menu item of the Help menu. This is fine because we are +going to add an About menu item there as well.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=22#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-28 12:56:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The Help menu now has a Dynamic Help item.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=22#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-28 12:56:49 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=11" name="attach_11" title="mylyn/context/zip">attachment 11</a> <a href="https://54.195.32.3/attachment.cgi?id=11&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=23">23</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Minor fixes to the Trace Explorer Window</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=9">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=23#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-21 02:10:21 UTC + </span> + </div> + + + +<pre class="bz_comment_text">- Add a local help button (the ? inside a +circle) that leads to help for the window. + +- When the user selects a state in the Error Trace, he sees the value of + the expression as something like + + __trace_var_126403425857315000 = 12 + + The user should not see a variable name like that. Best would be to +replace the variable name with the expression, the way it's shown in the + Error Trace. If this isn't easy, the Toolbox should use shorter +variable names for the expressions. + +- When nothing is selected in the Error-Trace window, the bottom text +field says "No error information". It should say something more +helpful, like: + + Select line in Error Trace to show its value here.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=23#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-22 13:19:36 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Help button has been added.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=23#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-22 17:46:42 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Variable names of trace explorer +expressions in the value viewer are replaced with the single line form +of the expressions (as shown in the trace viewer.) If the user enters a +multi-line expression, all line breaks are removed. If the line breaks +are not removed, then the value of the state is difficult to read. The +order of the variables now reflects what is shown in the trace viewer. +For variables that do not represent trace explorer expressions, I have +attempted to keep the format the same as TLC's output.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=23#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-22 17:46:43 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=9" name="attach_9" title="mylyn/context/zip">attachment 9</a> <a href="https://54.195.32.3/attachment.cgi?id=9&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=24">24</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Parsing an unsaved file</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=10">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=24#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-21 18:40:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">If you click on the "parse" button when the + file has been modified, the Toolbox asks if you want to save the file +but neither saves it nor parses it when you answer "yes".</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=24#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 10:38:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Clicking on "Parse Spec" when a spec module + has been modified since last save brings up a dialog asking if you want + to save the modified resources. If you click yes, it parses the spec +but does not save the modified resources. If you click "Parse Module" on + a module that has been modified, the toolbox does not prompt you to +save. It just parses the module without saving.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=24#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 10:41:50 UTC + </span> + </div> + + + +<pre class="bz_comment_text">In the dialog that asks if you want to save the modified resources, clicking "No" has the same effect as clicking "Yes".</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=24#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 12:28:50 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I changed the dialog to have three buttons, + Yes, No, Cancel. Yes saves any modified .tla files and parses, No +parses without saving, and Cancel does not save or parse. This dialog +appears if there are modified resources when the user selects "Parse +Spec" or "Parse Module".</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=24#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-26 11:28:29 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I changed the dialog to OK/cancel. If the +user selects OK, the unsaved modules are saved and the spec or module is + parsed. Cancel does not save or parse.</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=24#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-26 11:28:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=10" name="attach_10" title="mylyn/context/zip">attachment 10</a> <a href="https://54.195.32.3/attachment.cgi?id=10&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=25">25</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Minor problem with value display in TLC Error Trace view</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=8">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=25#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-22 00:58:20 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When no line in the Error Trace is +selected, the text box below it should say + + Select line in Error Trace to show its value here. + +It does not display this when the TLC Errors Window is first raised. +Nor does it do that when the Explore or Restore button is pushed--unless + a line in the Error Trace was already selected when that Button was +pushed.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=25#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-22 13:52:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=8" name="attach_8" title="mylyn/context/zip">attachment 8</a> <a href="https://54.195.32.3/attachment.cgi?id=8&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=26">26</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Elements with multiple lines do not display properly in trace viewer</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=7">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=26#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-22 01:03:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text">A name/expression or value that takes up +multiple lines does not display properly in the trace viewer. In +particular, only the first line shows.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=26#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-22 01:22:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I don't understand. The trace viewer (the +two-column viewer with Name and Value columns) shows only a single line. + To view a multi-line value, the user should either select the line, in + which case the entire value should appear in the viewer, or expand the +line so he can view the individual parts of the value separately. This +seems to be working as it should. What am I missing?</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=26#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-22 11:02:03 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Sorry, I was incorrect in saying that +multi-line values display incorrectly. The bug is in displaying +multi-line trace explorer expressions in the Name column. Only the first + line appears.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=26#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-22 13:18:00 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Multi-line expressions are now displayed as a single line in the Name column.</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=26#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-22 13:18:02 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=7" name="attach_7" title="mylyn/context/zip">attachment 7</a> <a href="https://54.195.32.3/attachment.cgi?id=7&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=27">27</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Extra menu for the toolbox on Mac</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>bugzilla.tlaplus.net, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P5">P5 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Mac OS</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=104">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=27#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 12:56:22 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The toolbox on Mac OS has an extra menu +item entitled "TLA+ Toolbox." It has the menu items "About TLA+ +Toolbox", "Preferences...", "Services", "Hide TLA+ Toolbox", Hide +Others", "Show All", and "Quit TLA+ Toolbox." "Services" seems to be +permanently grayed out. The Preferences menu item also appears in the +File menu, which I think is fine. All menu items perform as expects, +except for the "About TLA+ Toolbox" menu item which seems to do nothing. + We are going to add an About item to the Help menu. It would be nice to + be able to remove the one from the "TLA+ Toolbox" menu, but I'm not +sure if this is possible.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=27#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-25 14:00:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed in HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=27#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-25 14:00:11 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=104" name="attach_104" title="mylyn/context/zip">attachment 104</a> <a href="https://54.195.32.3/attachment.cgi?id=104&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=28">28</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Use of model values</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=28#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 14:51:06 UTC + </span> + </div> + + + +<pre class="bz_comment_text">a. There is no reason why the user cannot use the same model value in two + different constant instantiations or in a constant instantiation and a + definition override. Or uses a model value declared on the advanced + page as a model value in a constant instantiation. This requires + checking that a model value is declared elsewhere before adding a + CONSTANT declaration for it. + + b. The correct order in which things should be written in the MC file are: + - Declaration of advanced model values. + - Declaration of the sets of model values that instantiate constants. + - New User Definitions. + - Everything Else, which is all of the form + newId_1234567 == some expression. + However, the current structure of the toolbox makes it a nuisance to do + this, and the current validator will disallow the models that this order + is designed to allow.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=29">29</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">PlusCal translator errors do not disappear</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=29#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 14:54:45 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Suppose the user starts to write a PlusCal +algorithm, translates it and gets a PlusCal error, and then decides to +delete the PlusCal code and just write the spec in TLA+. There's no way + for him to get rid of the PlusCal error message in the Parse Errors +window. In fact, even if I run the translator on another module, the +PlusCal error remains in the Parse Error window--whether or not the +other translation produces an error. (The only way to get rid of it is +to go back to the original module, correct the PlusCall error, and +re-run the translator.) The best thing to do is probably to create a +separate PlusCal Error Window. Running the translator should first +clear this window and remove all PlusCal error markers in the module on +which the translator is run. (I believe that if running the PlusCal +translator creates a PlusCal error, then the file is not re-parsed, so +only the PlusCal error window would need to be popped up.)</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=30">30</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">The Definitions Override menu allows the user to override the same definition multiple times.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=30#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 14:56:08 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The Definitions Override menu allows the user to override the same definition multiple times.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=31">31</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Parsing spec command gets disabled</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=31#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 14:58:00 UTC + </span> + </div> + + + +<pre class="bz_comment_text">For a big spec--in particular, for the +farsite spec, after Parse the parse spec command gets disabled. But +parse module file still works. Simon thinks it may be that the build +infrastructure of Eclipse is deactivating builders under some +conditions--for example, if a builder dies with an exception, it is +deactivated. Perhaps it's also deactivated on a time-out. The list of +builders is attached to the project, so one can query the project or the + project nature to find this out. So, Simon assumes that for some +reason, the builder is deactivated. + +The parser is being launched in a separate thread, but Simon thinks that + perhaps he's not doing it in the right way.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=32">32</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Closing the toolbox simply kills any running TLC</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=32#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 14:59:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Closing the toolbox simply kills any +running TLC. Instead, it should warn the user that this will kill TLC +and give him the option of canceling. To do this, need to modify to +CloseSpecHandler.execute() so it checks if editors have been closed +successfully before exiting. The model editor's method that gets called + by the closeAllEditors method should return false. Another approach is +to register another handler in place of this one when TLC is running, +and having that handler call the current one only if the user says it's +OK to stop TLC.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=33">33</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">PlusCal translation needs to be reimplemented to handle .pcal files</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + INVALID + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED INVALID - Modifying the Toolbox to handle pcal files." href="https://54.195.32.3/show_bug.cgi?id=18">18</a> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr> + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=33#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 15:02:15 UTC + </span> + </div> + + + +<pre class="bz_comment_text">PlusCal translation needs to be examined. +Here are some things that need to be fixed: + - There should be a more user-friendly way to specify translation +options. This involves: + (a) Providing check-boxes or radio buttons for the common +options. + (b) Finding a more convenient way to add them than the current +one (right-clicking in the Toolbox Explorer) and selecting properties. + + - Translation options are now attached to the spec; they should be +attached to an individual module. (It's possible for a single spec to +have PlusCal algorithms in two different modules.)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=33#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-03 10:28:07 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I renamed this, but apparently bugzilla +doesn't allow me to change the description. The things mentioned in the + description are minor compared to the major change required: adapting +the Toolbox to the new way to use PlusCal: by having .pcal file +containing the algorithm separate from the .tla file containing its +translation. This requires that the user be able to open a spec with a + .pcal file as its "root". The existence of the two files raises many +new issues to be dealt with, such as: + + - Should the user be able to edit the .tla file? This is a bad idea in + general, but it's conceivable that the user may want to do this. It +should be made difficult but not impossible. That is, the editor on the + .tla file should by default be read-only. + + - The user should be able to pretty-print either of the two files or +both of them. (TlaTeX will need to be modified to work on .pcal files.) + + - Do we allow the user to create a spec or open a module editor on a +.tla file for which there also exists a .pcal file? Perhaps that should + be the way for him to edit the .tla file.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=33#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-03-01 23:59:21 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The plan to use .pcal files has been abandoned as a bad idea.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=34">34</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Reset window layout produces blank window in welcome perspective</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=34#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 15:04:42 UTC + </span> + </div> + + + +<pre class="bz_comment_text">If I select window / reset window layout in the Welcome Perspective, it produces a blank window instead of the Welcome View.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=34#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-07-01 11:49:27 UTC + </span> + </div> + + + +<pre class="bz_comment_text">We should just disable the reset window command.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=35">35</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Module editor keybindings</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=35#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 15:05:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Here are some thoughts on enhancements to +the Module Editor. + + - Add a preference to choose an Emacs-like keybinding. This +requires adding new commands that appear in the General/Editors/Keys, +and options that choose from among sets of bindings. + + - Add editing commands (and invent bindings) for comments. Perhaps +copy the commands I use for boxing comments. + +Note that Simon has bound toggle comments to Control-/, but that command + doesn't appear either when I type Ctl-Shift-L or in tthe preferences +keybinding options.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=36">36</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Option to add lists of weakly and strongly fair actions</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + WONTFIX + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=36#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 15:07:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Enhance the Init/Next method of writing the spec to add lists of weakly and strongly fair actions.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=36#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-17 16:35:00 UTC + </span> + </div> + + + +<pre class="bz_comment_text">LL Comment: Now that the user can specify fairness with PlusCal, this seems unnecessary.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=37">37</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Change default for making a set of model values typed or untyped</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P2">P2 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=37#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 15:10:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When the user has chosen assigned a set of +model values to a constant and specified symmetry, the default on the +next page of the wizard should be to make the values untyped. This may +be hard to do because the second wizard page is created before the first + page of the wizard is raised. If it's hard, perhaps we should change +the default to be to make the values untyped. This is done in +TypingWizardPage.createControl.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=37#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Simon Zambrovski</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 15:54:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The reason of the default setting being "typed" is because we want people to use typed sets instead of untyped sets.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=38">38</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Import Existing spec option behaves incorrectly when .toolbox directory does not exist</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + WONTFIX + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_trivial">trivial + </td> +<th class="rightcell">CC:</th> + <td>bugzilla.tlaplus.net, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P5">P5 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=38#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 15:16:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When creating a new spec, the Import +Existing spec option is always checked and disabled. It should be +unchecked and disabled if the .toolbox directory does not already exist. + However, if the .toolbox directory does exist, its present behavior of + checking and enabling the box is the correct one. If it's hard to have + both behaviors, forget about this.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=38#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-17 21:24:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">It has been forgotten about.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=39">39</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">When a spec is open, the module browser should show the specification's directory</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=13">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=39#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 15:18:45 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When the user clicks on File/Open +Module/Choose TLA+ Module, the file browser that pops up should show the + specification's directory.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=39#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Simon Zambrovski</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 15:57:08 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I find it more natural if it is the last +directory you were in. If you want to add five modules from another +directory you have to navigate five times to it, instead of once...</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=39#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 16:00:51 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I think that the file browser should open +to the specification's directory because SANY requires all the module +files for a specification to be in the same directory.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=39#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-02 19:08:54 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Simon's comment makes some sense, as long +as "the last directory you were in" means the last directory from which +you opened a file in a module editor. This means that, when I first +open a spec, "the last directory I was in" is the spec directory. +Currently, the browser doesn't open on the last directory I was in, but +on the directory of the last spec that I closed. That is clearly wrong. + Opening a module from a directory other than the spec's is something +that seems to me to be so uncommon that I don't know whether it's better + to open the browser on the last directory I was in or on the current +spec's directory. I can think of scenarios in which each is the better +thing to do. However, since it's so uncommon, I don't think it makes +much difference. As a guess, I'd say that it's better to open it on the + spec's directory. However, if either is easier to implement than the +other, then let's go with that one. + +This problem applies to Save As as well as Open Module.</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=39#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-03 14:17:30 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I made both dialogs open to the current spec's directory. I believe this will partially fix <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - New spec and Add module dialogs do not open to correct directory on linux" href="https://54.195.32.3/show_bug.cgi?id=52">bug 52</a>. In particular, it should cause the add module dialog on linux to open to the spec's directory. I need to verify this.</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=39#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-03 14:17:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=13" name="attach_13" title="mylyn/context/zip">attachment 13</a> <a href="https://54.195.32.3/attachment.cgi?id=13&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=40">40</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLC's liveness checking in simulation mode is buggy</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA Tools</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>bugzilla.tlaplus.net + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=40#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 15:20:25 UTC + </span> + </div> + + + +<pre class="bz_comment_text">TLC's liveness checking in simulation mode +is seriously buggy. Unless Yuan volunteers to find the fix quickly +(which seems unlikely), we'll have to tell users not to check liveness +properties in simulation mode. If Yuan does find the fix, we will +probably have to fix a bug introduced by Simon that causes TLC to +produce an error trace ending with + + State 5: <Action line 12, col 9 to line 12, col 20 of module +Test2> + x = 4 + + State 6: Stuttering + Back to state 1.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=40#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2015-04-27 11:54:45 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=41">41</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Model editor does not remove some error messages on user input</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=41#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-25 15:24:54 UTC + </span> + </div> + + + +<pre class="bz_comment_text">In at least one place, the Toolbox marks an + error when the user starts entering a value, but doesn't remove the +error marker when the user's typing removes the error. Here are the +cases I've found: + + - Write a model specifying Init and Next, leaving Temporal Formula +empty. Then select Temporal Formula. This produces an error because the + Temporal + Formula field is empty. However, typing into that field doesn't +make the error marker go away. + - In TLC Options on the Advanced Options page, choose simulation +node. Then: + (a) Enter a non-number. Then delete that and enter a number. Or + (b) Enter a non-numeric seed or aril, then delete it or change it + to a number. or else choose Model-checking mode and depth-first mode, +then do the same + thing with the depth field. (Incidentally, there's no reason to +check those fields at all when the appropriate option isn't chosen.) + - In the constant assignment section of the main model page, specify + the value of a constant to be a set of model values one of which is +SPECIFICATION. + This produces an error marker which remains after that constant +assignment is changed. + +This isn't a big deal, because the errors go away when the model is +validated. + +A similar case occurs if one first enters a Temporal Formula and then +chooses "Initial predicate and next-state relation".</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=42">42</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox does not alert user when editing a module out of synch with file system</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>bugzilla.tlaplus.net, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=42#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-27 11:37:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text">If the user edits a module that is out of +synch with the file system, the toolbox does not warn the user of this. +When the user saves the module, a message pops up telling the user that +the module is out of synch.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=43">43</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLA files appear grayed out when browsing for new spec and adding a module</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Mac OS</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=43#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-28 17:03:00 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Files ending in .tla appear grayed out when + browsing for a new spec or adding a module. It is still possible to +select the grayed out items. They were not gray when the dialogs were +"Open" dialogs but are gray now that the dialogs are "Save" dialogs.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=43#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-07-01 11:52:24 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This only occurs on mac OS. I spent some time trying to figure out why this occurs, but was unsuccessful.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=44">44</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Drag-and-drop in module editor?</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=44#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-29 08:36:21 UTC + </span> + </div> + + + +<pre class="bz_comment_text">A Mac 64-bit user requested drag-and-drop. + On a Friday morning, on Windows, with cloudy weather and an outside +temperature around 0, here's what I observed: + +- In the Toolbox module editor, if I select a piece of text and drag it, + I get visual feedback that indicates I'm dragging it. But when I +release the mouse button to drop it, nothing happens. + +- In Eclipse, drag-and-drop works when I edit a java file or an xml +file, but not when I edit an html file. + +Simon: do you know what's supposed to happen? + +I don't imagine the Eclipse code contains anything so retro as +documentation, but perhaps someone has posted something about +drag-and-drop somewhere. This is not worth worrying about now, but we +should probably look into it when we start working on the editor.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=45">45</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">The toolbox program file is not being set to be executable.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 32-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Mac OS</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=45#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-01-30 22:08:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Jean-Charles reports that on two out of +three of the machines he tried running the Mac 64-bit version (by +double-clicking on the icon), nothing happened. He eventually found +that the problem was that a file was not set to be executable--a problem + that reports solving with + +chmod +x (macosx.cocoa.x86_64-jc.macosx.cocoa.x86_64/) +toolbox.app/Contents/MacOS/toolbox + +I presume that the parenthesized text is supposed to indicate a +super-directory of the directory in which the command was executed. + +I believe he found this problem with both the original version that Dan +created and a later one that I made. I also have a vague recollection +of this problem occurring on a different release. If this can't be +fixed, we need to add a warning about it on the web page.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=45#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-02 13:27:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">There is an eclipse bug open on this: + +<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=282260">https://bugs.eclipse.org/bugs/show_bug.cgi?id=282260</a> + +The bug seems to be with the zip command run by the eclipse product +export wizard when exporting to an archive file. The first comment +claims that unchecking "Generate metadata repository" solves the +problem.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=45#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-02 13:30:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This is a discussion on the same topic: + +<a href="http://www.eclipse.org/forums/index.php?t=msg&goto=373468">http://www.eclipse.org/forums/index.php?t=msg&goto=373468</a>&</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=45#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-02 13:41:37 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I created an archive file using the eclipse + product export wizard for mac 32-bit without generating a metadata +repository. I tested it on the mac mini at the lab and it ran without +requiring any changes in file permissions. When I produced the archive +file for mac with a metadata repository, it did not run on the same mac. + +I believe this repository is for installing new features into a user's +existing toolbox application and for running automatic updates for the +toolbox. Do we need this right now?</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=45#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-02 15:30:40 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I created a zip file for linux using the +export wizard without generating the metadata repository. The toolbox +ran without requiring setting it to be executable.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=46">46</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Validating the model deletes the contents of MC.out</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=46#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-01 13:06:55 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Running validation on a model deletes the +contents of MC.out. I think that the contents of that file should only +be erased if TLC is going to be launched, not for validation.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=46#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-04 17:27:26 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I'm not sure if this is a bug or not. +Validation of the model changes the identifiers used for defining +invariants, properties, etc, so the ids that may appear in MC.out no +longer correspond to anything in MC.tla. This may be a reason to erase +MC.out on validation. Anyone else have any input on this one?</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=46#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Simon Zambrovski</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-05 00:08:50 UTC + </span> + </div> + + + +<pre class="bz_comment_text">You are right. Running validateion in general means regeneration of the MC files. Which means that the MC.out file is obsolete.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=46#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-05 15:10:41 UTC + </span> + </div> + + + +<pre class="bz_comment_text">There is a slight inconsistency issue here. + Running validation clears MC.out but does not clear the output in the +data provider for the model. When the user closes and reopens the +toolbox after validating the model, any output disappears. This could be + confusing/annoying.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=47">47</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Automatically add last updated comment to end of module</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=47#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-01 15:47:17 UTC + </span> + </div> + + + +<pre class="bz_comment_text">We have the \* Generated at Thu Jan 28 +12:46:04 EST 2010 comment at the end of the file. Why not also have an +automatic \* Last updated ... ?</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=48">48</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Load all spec modules at once</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P5">P5 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=48#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-01 15:48:46 UTC + </span> + </div> + + + +<pre class="bz_comment_text">After loading a spec's top module, why not +have an option to load all (related) other modules, to avoid having to +go through the menu one by one?</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=48#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-03 16:36:46 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This was Jean-Charles' idea. A better idea would be a menu that allows you to select multiple modules to open at the same time.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=49">49</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Goto definition feature not opening new module editor when it should.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=17">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=49#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-02 13:40:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text">If I hold down Control and click on a +symbol that's defined or declared in an extended module, the right thing + happens if that module is open in a model editor. If it isn't, +nothing happens because the Toolbox throws: + +org.eclipse.ui.PartInitException: Unable to open editor, unknown editor +ID: org.lamport.tla.toolbox.TLAEditorAndPDFViewer</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=49#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-24 14:11:24 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The ID used for opening the editor was wrong.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=49#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-24 14:11:27 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=17" name="attach_17" title="mylyn/context/zip">attachment 17</a> <a href="https://54.195.32.3/attachment.cgi?id=17&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=50">50</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Deleting a model does not remove output source or data provider for model</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=50#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-02 14:10:11 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Deleting a model does not remove the +sources and data providers for that model from the tlc output source +registry. If a user recreates a model with the same name, the output +data from the old model appears.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=50#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-03 16:15:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Deleting a model actually did remove the +output source from the registry but did not remove the provider +associated with that output source. It now removes the provider as well.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=51">51</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Running trace explorer does not disable running of the model checker</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=51#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-02 14:40:51 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Running the trace explorer should disable +running of the model checker on the same model because both operations +work on the same directory.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=52">52</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">New spec and Add module dialogs do not open to correct directory on linux</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Linux</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=14">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=52#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-02 15:15:29 UTC + </span> + </div> + + + +<pre class="bz_comment_text">On a linux ubuntu machine, the new spec +browse dialog and add module dialogs open to the directory containing +the toolbox executable everytime. The new spec browse dialog should open + to the most recently opened directory, and the add module dialog should + open to the directory of the root module.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=52#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-03 15:38:27 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I think the add module dialog issue should have been fixed by the fix for <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - When a spec is open, the module browser should show the specification's directory" href="https://54.195.32.3/show_bug.cgi?id=39">bug 39</a>. + I think I have also fixed the new spec browse dialog for all systems. +The toolbox determines in which directory it should open by finding the +first directory in the following list: + +1.) The directory to which the user most recently browsed from the +current new spec wizard page. This is reset to null every time the user +reopens that page, so this only persists through one "Add New Spec..." +dialog session. +2.) The directory of the root module of the most recently opened spec. +3.) The home directory of the user.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=52#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-03 15:38:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=14" name="attach_14" title="mylyn/context/zip">attachment 14</a> <a href="https://54.195.32.3/attachment.cgi?id=14&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=53">53</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Go-to definition/declaration does not work for non-spec modules</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=12">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=53#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-02 15:28:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Jumping to the definition/declaration for a + symbol does not work properly for a module that is not extended or +included in the root module. I believe the toolbox looks for symbols in +the symbol table for the root module. If the user is editing a module +that is not currently extended or instanced by the root module, then the + toolbox will not detect the hyperlink for symbols that are not in the +symbol table of the root module. If the symbol happens to be in the +symbol table for the root module, then the toolbox will incorrectly jump + to the definition or declaration of that symbol in the spec.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=53#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-02 15:31:30 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=12" name="attach_12" title="mylyn/context/zip">attachment 12</a> <a href="https://54.195.32.3/attachment.cgi?id=12&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=53#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-07-01 11:55:36 UTC + </span> + </div> + + + +<pre class="bz_comment_text">According to Leslie, this is fixed as much as it's going to be.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=54">54</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Default for Save As browser should be Browse Folders</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + WORKSFORME + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=54#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-02 19:17:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">For some reason, the file browser for the +Save As command has a button to choose whether or not to display the +selected folder. (The Open New Module file browser doesn't have that +option.) I would use the Open New Module's file browser for the Save As + command as well. However, if there's some good reason for using a +different browser, then the browser should by default open with the +current folder shown. Currently, it opens the first time with the +current folder hidden. Combined with <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - When a spec is open, the module browser should show the specification's directory" href="https://54.195.32.3/show_bug.cgi?id=39">bug 39</a>, this is a disaster.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=54#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-02 19:35:53 UTC + </span> + </div> + + + +<pre class="bz_comment_text">On my machine, even when browse folders is +not selected, the current folder is shown. Can you attach a screenshot +of what appears on your machine when you don't have browse folders +selected. + +The downside to using the same dialog as the Add New Module dialog is +that the button to finish says "Open" instead of "Save". It's possible +that this could be confusing to some users, but we decided to use the +Save dialog for opening new modules and specs on Macs, so I guess its +not a big deal. + +Alternatively, eclipse uses a completely different browser for Save As. +What do you think about this dialog?</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=55">55</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Feature needed for handling many specs</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=55#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-03 08:27:19 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The Problem: I already have too many specs +to be able to find easily the one I want to open. I don't want to start + deleting them because the I would lose the models I've defined. + +The Solution: The following two features. + +1. The option of deleting a spec without deleting its .toolbox +directory. Let's call that "Deleting" and the current behavior +"Expunging". The simplest interface to use would be simply be to have +Delete and Expunge options on the Spec Explorer menu. However, no one +would figure out from the name what they mean. A more intuitive +interface would be for Delete to raise a popup allowing the user to +check or uncheck an "Allow spec to be reopened later" option. (I +suggest that the default be that the option is checked.) Dan, Simon: +which interface do you think is better? + +Note: This suggestions a third possible option: deleting the module +files as well as the .toolbox directory. This is a bad idea because, to + be useful, it should delete all the spec's modules, which is bad +because (a) it's easy to forget that a spec imports a module that's used + elsewhere and should be saved and (b) that option will almost always be + used to delete an uncompleted spec, which is likely to be +unparsable--so the Toolbox couldn't delete anything but the root module. + +2. Add to the Open Spec menu the option Reopen Deleted Spec. It would +produce an alphabetically sorted list of all deleted (but not expunged) +specs for the user to choose from. Note that there are three reasons +why that operation might fail: (a) the root module [or the .toolbox +directory] no longer exists, (b) the user has created a new spec with +the old name, or (c) the user has created a new spec with that root +module. Of course, (a) exists when opening an existing spec. I suggest + that (b) and (c) be made impossible by removing an old spec from the +list if a new one is created with the same name or root file. I also +suggest that when the user opens a new spec with the name or root file +of an old one, he be warned and given the option of canceling. + +It is possible to implement feature 1 without feature 2, since the old +spec can be reopened now with the Add New Spec option. Feature 2 is +still useful because it might be easier to find an old spec this way +than by hunting through the file system. However, we can start with +just feature 1.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=55#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-03 08:58:19 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I suggest an alternative solution +consisting of two changes: + +1.) Have a list of the n most recently opened specs. This could be +placed at the bottom of the file menu, as in eclipse and many other +programs, or could be a submenu as the Open Spec menu item currently is. + +2.) Have a menu item for opening specs that brings up a dialog that +looks like eclipse's dialog for opening a resource. This would be a +searchable list of all specs.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=55#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-04-13 20:00:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I now vote for Leslie's solution. I think +for feature 1, the better interface is for Delete to pop up a message +asking if the user wants to remove the .toolbox directory. However, I +think that Delete is confusing. I think the menu item should day Remove +Spec, and the popup should say "Delete models?". This makes it more +clear what the operation is doing.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=56">56</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Feature needed for controlling disk space usage</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=56#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-03 08:47:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">TLC's checkpoint files can take up lots of +space. The Toolbox should tell the user how much disk space his specs +are using. We will need to discuss what the best interface is for doing + this. Here are things that he should be able to see from the Toolbox: + +- For each spec, the size of the .toolbox directory. This should be a +property of the spec, and it shouldn't be too hard for the user to go +through all his specs in the Spec Explorer to see which ones are using +lots of space. The size should also be displayed for the currently open + spec, in some way that is discrete if the size is small and becomes +more obvious if it's big. + +- For each spec, the space used be each model should be a property of +that model. The space used by a model should be displayed on one of the + model pages--again, discretely if it's small and loudly if it's big. +There should also be a button to delete the model's checkpoint. (Is +there anything else kept for the model that might be big enough to need +deleting?) It would be useful if the user could see the space taken up +by each model of a spec without opening each of them. (He is likely to +want to find the guilty model when he sees that the spec is taking up a +lot of space.) This could be done as a model property in the Spec +Explorer, which provides a menu option for one that pops up an error +box.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=57">57</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Minor bug in Spec Explorer: permits operations on models of unopened spec</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=57#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-03 08:59:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When a spec is open, the Spec Explorer +allows the user to display the models only of the open spec. I presume +that's a feature and not a bug. (It would make sense to show them for +unopened specs too, with commands like Open or Clone the model disabled, + but that's not worth the bother.) However, when I close the spec, I +can still see that spec's models and their menu items are still active. + I don't know what Open does; the console shows that the Toolbox thinks +it is opening the spec and then the model, but there's no sign that it +has. Clone and Delete actually perform the action (on the apparently +closed spec), but then make the models invisible in the Spec Explorer. + +Obviously, the fix is just not to display the models of any spec in the +Spec Explorer when there's no spec open.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=58">58</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Renaming a spec does not change model configuration file names</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Renaming spec broken, causing inconsistent projects even after Toolbox restart" href="https://54.195.32.3/show_bug.cgi?id=121">121</a> + </td> +<td> </td> + <td> </td> + </tr> + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=71">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=58#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-03 14:40:39 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Renaming a spec should change the +configuration file names for models of the spec. Currently it does not, +so renaming a spec and then attempting to open a model that existed +before the renaming throws a null pointer exception and does not open +the model.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=58#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-15 19:19:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed in HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=58#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-15 19:19:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=71" name="attach_71" title="mylyn/context/zip">attachment 71</a> <a href="https://54.195.32.3/attachment.cgi?id=71&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=59">59</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Trace Explorer getting wedged (plus minor bug)</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=59#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-04 16:12:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Load the following spec: + +---------- MODULE Test2 ----------- +EXTENDS Naturals, TLC +VARIABLE x +CONSTANT C +Spec == (x=0) /\ [][x'=x+1]_x +Inv == x < 5 +================================= + +Set C to 44, check Inv as an invariant, and run the spec. On the +resulting error trace, add C as the expression to print, and hit +Explore. Everything is fine, and it prints 44. Go to the Constants +section, change the value of C to 22 and hit Finish. BUT DO NOT SAVE +THE MODEL. Go back to the Results page, open the Error Trace window, +and hit Explore. It runs fine, except it's still printing 44 rather +than 22. This indicates a minor bug: it should save the model before +running TLC again. Now the major bug. Hit Explore again. Nothing +happens. The Trace Explorer is wedged. Closing and opening it again +doesn't help. The only way to unwedge it is to run the spec again, +recreating the error trace from scratch. When Explore is selected, the +Toolbox seems to be writing empty TE.tla and TE.tlc files. (Perhaps +fixing the minor bug will prevent the major one.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=59#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-04 16:28:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The trace explorer is not running because +MC.out is empty. This occurs because the delegate for running the trace +explorer attempts to read the trace from MC.out, but MC.out is cleared +when the model is validated, but not run. I think that validation should + not clear MC.out (this is <a class="bz_bug_link + bz_status_NEW " title="NEW - Validating the model deletes the contents of MC.out" href="https://54.195.32.3/show_bug.cgi?id=46">bug 46</a>).</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=59#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-04 17:25:26 UTC + </span> + </div> + + + +<pre class="bz_comment_text">It doesn't seem wise to have the trace +explorer rely on MC.out for the trace. It should write the trace to +another file when the user clicks explore.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=59#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-05 15:07:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Running the model checker on a model now +creates a new file called MC_TE.out. The trace explorer delegate reads +the trace from this file. It is not edited on validation of the model, +only when TLC is run for model checking (not for trace exploration). + +When the trace explorer is run on an unsaved model, the model is now +saved without validating. We don't want running the trace explorer to +clear MC.out, which is one thing that validation does.</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=59#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-05 15:08:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">MC_TE.out is created by attaching a sink to + the process output sink for TLC runs. The class is +TraceExplorerTraceSourceOutputSink.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=60">60</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Trace Explorer's TE.tla file has entries in wrong order</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=15">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=60#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-04 16:17:15 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The Trace Explorer reports an error if an +expression to be printed contains a model value or a symbol defined in +the Advanced model page's Additional Definitions section. The problem +seems to be that the expressions to be printed appear too early in the +TE.tla file. They should be the last things before the definition of +the initial predicate and next-state relation.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=60#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-04 16:41:46 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=15" name="attach_15" title="mylyn/context/zip">attachment 15</a> <a href="https://54.195.32.3/attachment.cgi?id=15&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=61">61</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Hiding of variables in Trace Explorer</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=61#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-04 16:24:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The user should be able to specify which +variables are hidden (not displayed) in the Trace Explorer. (This +should apply only to the view obtained by hitting Explore, not to the +original trace obtained by hitting Restore.) We need to discuss what +the interface should be for this before implementing the feature. + +Note: We were originally discussing adding the feature of changing the +order in which variables are shown. That's unnecessary. The user can +hide all the variables and then enter them in any order as expressions +to be printed.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=61#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Simon Zambrovski</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-05 00:12:19 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I would add a filter (JFace Viwers support filters), which can be activated using a view-action.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=62">62</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Build custom about dialog</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>bugzilla.tlaplus.net, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P5">P5 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=62#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-04 16:45:37 UTC + </span> + </div> + + + +<pre class="bz_comment_text">We should build our own About dialog. Some +of the aspects of the eclipse provided about dialog should not be on +there, such as Installation Details.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=62#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Simon Zambrovski</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-05 00:10:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">In general, the About dialog is +customizable. I read somewhere about it. I suppose it is set up using +the plugin_customization.ini.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=63">63</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Change order of trace explorer variables in trace viewer</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=63#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-04 16:56:19 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The trace explorer variables should appear before other variables in the order in which the user entered the expressions.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=63#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-07-14 03:25:07 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Dan apparently fixed this months ago.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=64">64</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Constant expression evaluation shows up in User Output on linux</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Linux</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=64#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-05 16:11:41 UTC + </span> + </div> + + + +<pre class="bz_comment_text">If the user enters expr into the evaluating + constant expressions field, then the value val of expr correctly shows +up in the value field, but <<!@$!@$!@$, val>> shows up in +User Output. This occurs on Linux ubuntu.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=64#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-05 16:15:19 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This also occurs on mac.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=66">66</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Clicking on module location jumps to PDF viewer sometimes</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=16">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=66#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-18 00:29:11 UTC + </span> + </div> + + + +<pre class="bz_comment_text">If I have the PDF viewer tab selected in +the Module Editor and I double click on a location in the coverage +field, The Toolbox selects the right region in the .tla file, but it +jumps to the PDF viewer rather than the .tla file viewer.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=66#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-02-18 10:59:12 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=16" name="attach_16" title="mylyn/context/zip">attachment 16</a> <a href="https://54.195.32.3/attachment.cgi?id=16&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=67">67</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Problem with printing of invariant when it is violated.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=67#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-03-01 23:47:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When the toolbox reports that TLC found an +invariant violated, if the invariant is multi-line, it should print the +message as + + Invariant <newline> + the text of the invariant <newline> + violated. + +If the invariant is a single line (contains no newline characters), it +should be printed as it now is: + + Invariant text-of-invariant violated + +unless the text of the invariant is too long, in which case it should be + printed as + + Invariant text-of-invariant<newline> + violated. + +How long is "too long" should be determined by experiment to ensure that + the word "violated" is likely to be visible in the window. + +Note: trailing spaces and newline characters should be removed from the +invariant before trying to print it.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=68">68</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Set defaults for PlusCal algorithms</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=68#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-03-01 23:58:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The following default settings should be +made when creating new model. (The user can override them if he +wants.) + +1. If a spec contains the constant defaultInitValue, then it should be +set to a model value. + +2. If a spec contains a defined operator Spec whose level is temporal, +then it should be made the temporal spec and that + option chosen. Otherwise, if it contains a defined operator Init +whose level is state and a defined operator Next whose + level is action, then they should be made the Init/Next spec. + +These defaults (especially the first) will be most useful to specs that +come from PlusCal algorithms. We could limit their application to files + that have PlusCal algorithms. However, I suggest that we don't because + the algorithm could be in an EXTENDed module.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=69">69</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox confused about directories.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>ASSIGNED + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>bugzilla.tlaplus.net, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P2">P2 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=69#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-03-02 17:24:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I opened a spec and then did a SaveAs to +save the root module under a different name in the same directory. I +then tried to open the root directory module. It was not listed among +the choices presented in the OpenModule menu. When I clicked on +AddModule, the browser came up showing the contents of the .toolbox +directory. When I selected the parent directory (that is, the spec's +directory) and selected the root module from it, I go an error window +saying + + The provided module Euclid.tla is not located in the same directory +as the root file. Please select the module in \Euclid + +Of course, the module I selected, file Euclid.tla in directory +...\Euclid, was the root file. + +When I closed the spec and tried to reopen it, I got various errors +saying the root file didn't exist and something indicating that it was +looking in the .toolbox directory.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=69#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-03-02 17:28:37 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I just deleted the spec and tried opening a + new spec. When I clicked on Browse, nothing happened. (Nothing +appeared on the Eclipse console.) I had to close the Toolbox and +restart it to be able to open a new spec.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=70">70</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Save dirty editor prior to execution - PlusCal preference and Save on Run TLC option</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=70#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-03-04 07:28:27 UTC + </span> + </div> + + + +<pre class="bz_comment_text">A user was confused when he edited his +PlusCal file and hit translate without saving, and found that the spec +he was running the model checker on hadn't changed. This suggests that +there should be a Save on Translate preference option that is selected +by default. We should probably also add a Translate on Save +preference. + +And this also raises the question of what should happen if the user +tries to run the model checker (or validate a model) with an unsaved +spec. I suggest that the default behavior should be to raise a window +asking the user if he wants to save it. Note that this should be the +case when there is any unsaved module that was part of the spec the last + time the spec was parsed.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=70#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-17 16:30:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">LL comment: A popup/dialog should ask the +user if he/she wants to save the dirty editor prior to running the model + checker and/or PlusCal translator. -> Generally a dirty editor +should be saved before running any command on it (e.g. produce pdf, +....)</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=70#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-14 17:26:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The second part of this bug in now tracked in <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Toolbox not asking for approval to run TLC when spec has been modified" href="https://54.195.32.3/show_bug.cgi?id=150">bug #150</a>.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=71">71</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Make it easier to clone a model</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=71#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-03-05 03:29:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Now, to clone a model you have to go to the + spec explorer--which means that no user will discover it by himself. +And it's also inconvenient. There should be an easy way to create a +clone of the model. Perhaps a Clone Model command on TLC Model Checker +menu.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=72">72</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Inconvenience in using TLA2TeX</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=72#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-03-05 17:47:09 UTC + </span> + </div> + + + +<pre class="bz_comment_text">For some reason, Acrobat reader shows the +pretty-printed version at an inconveniently large magnification. I can +reduce the size, but the next time I run the pretty-printer the pdf is +shown at the same large magnification. It would be nice if Acrobat +could be called so it uses the magnification it had the last time--or at + least the current magnification if it is already opened on the file. +Alternatively (and perhaps in addition) it would be good to add a +preference that specifies the magnification used when Acrobat opens the +pdf file. (This would have to be specified in a sufficiently generic +way--e.g., as command-line arguments--so it could be used if the user +has a different program for displaying pdf files.)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=72#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-17 14:10:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Might be related to <a class="bz_bug_link + bz_status_NEW " title="NEW - Adobe PDF opens up in a separate windows instead of embedded editor" href="https://54.195.32.3/show_bug.cgi?id=117">bug #117</a></pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=73">73</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLC not reporting anything useful on a stack overflow</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA Tools</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=73#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-03-10 04:05:54 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When computing the invariant on the initial + state throws a stack overflow exception (because of an infinite +recursion), TLC just reports + + %1% + While working on the initial state: + %2% + + I'm pretty sure it used to report the stack overflow, so this bug was +probably added when the error reporting was rewritten. However, the +same useless error report is printed when TLC is run from a shell.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=73#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-03-13 03:54:37 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I fixed this and a couple of similar cases +of useless error messages. They were all caused by a code that caught +an except e and then called MP.printError with e.getMessage() as an +argument. However, for StackOverFlow, NullPointer, and who knows what +other exceptions, e.getMessage() equals null. (How appropriate for a +NullPointer exception.) This produced something like \%1\% as the +message. (That should be percent 1 percent, except that the stupid +editor deletes percents, so I just typed backslash-percents in the hope +that it will do the right thing.) + +I went through and changed a bunch of e.getMessage() instances to +produce e.getString() if e.getMessage() is null. I may have missed some + that can cause useless error messages. If we encounter one, we can +probably find it by running TLC in debug mode with breakpoints on +(handled and unhandled) StackOverFlow and NullPointer exceptions.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=74">74</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox does not report violated invariant</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + WORKSFORME + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P2">P2 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=18">Modules and model + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=74#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-03-12 20:34:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=18" name="attach_18" title="Modules and model">attachment 18</a> <a href="https://54.195.32.3/attachment.cgi?id=18&action=edit" title="Modules and model">[details]</a></span> +Modules and model + +Running the Toolbox on the model for CastroLiskovBug produces an MC file that +reports an invariant failure, but the Toolbox reports that it has finished +without reporting an error (the statistics show one state left on the queue).</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=74#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-17 14:32:57 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Can´t reproduce it. This may have been +solved by fixing the TLC -tool mode bug that caused the output that TLC +printed early in its execution not to be seen by the Toolbox.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=75">75</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Allow examining a locked TLC model.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=75#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-03-13 16:04:17 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When a model is locked, the user should +still be able to open sections to examine them. While a model is +running, I'd like to see the model--for example, how many workers it's +using, what the constraint is, etc. It's a nuisance to start TLC and +wonder what it's actually checking. I just realized that I can do this +by cloning the model. But it would be better to make the model fully +examinable, just not modifiable. If that's hard, another possibility +is to allow the user to unlock the running model and then relock it +after opening the necessary sections. This is dangerous, but the user +would have to be pretty stupid to shoot himself in the foot.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=75#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-03-18 10:34:03 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The easiest thing to do is to expand every +section before disabling it when the model is locked. This could be +annoying for the user. + +The better option and probably only slightly more difficult to implement + is to disable the widgets on each page that are actually modifiable +rather than entire sections. This means, for example, disabling the text + box and buttons in the constants section rather than the entire section + so that the user can still change the expansion state of the section +but not change anything else.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=76">76</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Browse button on new spec menu not working</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + WORKSFORME + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=76#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-03-24 23:34:22 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When no spec is open and I select Open +Spec/Add New Spec, the Browse button on the popup menu does nothing. +However, if I do the same thing when a spec is open, the Browse button +works fine.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=76#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-03-25 16:01:19 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I can't reproduce this. Is there anything worth noting that gets printed to the console when this happens?</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=76#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-03-26 19:17:08 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This is either sporadic or else it occurs +on Vista and not on XP. I'm afraid I don't remember if I've observed it + on both systems. Nothing is printed on the console.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=77">77</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Model Editor unusable when checkpoints folder is large</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=20">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=77#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-03-29 17:26:46 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When the checkpoints folder for a model +contains a large number of files, the model editor becomes almost +unusable. This occurs because the of a call to refreshLocal() in the +method ModelHelper.getCheckpoints(). It refreshes the checkpoints +folder, which in some case can mean refreshing the 1000s of files +inside. This is slow. Based on the comments, this call to refreshLocal +is sometimes necessary because the toolbox doesn't always recognize the +checkpoint folder, but currently it occurs on every validation of the +main model page, which is probably unnecessary. This call needs to be +made more selectively.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=77#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-05-05 11:59:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The second argument of +ModelHelper.getCheckpoints(ILaunchConfiguration,boolean) is a flag +indicating if the refreshLocal() should be called for the model folder. +This flag is only set to true after a TLC job completes. All other calls + to the getCheckpoints() method set the flag to false. This means that +refreshing will not occur on every validation of the main model page. It + will only occur when necessary, after TLC completes and may have +created new checkpoints.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=77#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-05-05 11:59:18 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=20" name="attach_20" title="mylyn/context/zip">attachment 20</a> <a href="https://54.195.32.3/attachment.cgi?id=20&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=78">78</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Non-automatic parsing locks UI</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + DUPLICATE + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>bugzilla.tlaplus.net, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=78#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-03-30 12:36:56 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Launching parsing by selecting the Parse +Module/Spec menu item locks the UI while auto-parse on save runs in a +separate thread. I think that parsing should always be run +asynchronously.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=78#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-11 15:19:20 UTC + </span> + </div> + + + +<pre class="bz_comment_text"> +*** This bug has been marked as a duplicate of <a class="bz_bug_link + bz_status_NEW " title="NEW - I/O and backend calls not sufficiently decoupled from UI (main) thread" href="https://54.195.32.3/show_bug.cgi?id=103">bug 103</a> ***</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=79">79</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Add new TLC parameter Maximum Fingerprint Memory Size</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>bugzilla.tlaplus.net, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Add -fpMemRatio parameter to set percentage of RAM dedicated to fingerprint sets" href="https://54.195.32.3/show_bug.cgi?id=243">243</a> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr> + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=79#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-04-07 00:41:12 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Yuan has added a new run-time parameter to +TLC: the number of megabytes of memory to be allocated to storing the +fingerprints of found states. This is specified with a new switch +-fpmem ,as in + + -fpmem 100 + +The default value is 1/4 the maximum memory size that the JVW will +assign to the program. (This amount apparently grows with the Maximum +JVM Heap Size parameter.) This new parameter should appear both in the + "How to Run" section of the Model Overview page and in the TLC model +checker preferences page. The user chooses the default by leaving the +text box blank. Only if the user specifies a values should the -fpmem +argument be given to TLC. + +The parameter should be labeled Maximum FingerPrint Memory size in MB.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=79#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-04-07 20:21:46 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The Toolbox should allow the new parameter +to be set only to a value less than the value of Maximum JVM Heap Size. + (And conversely, the JVM heap size should not be settable to less than +or equal to the new parameter.)</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=80">80</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">trace explorer doesn't work on trace of length 1</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=80#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-04-11 18:19:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">You can create such an error trace by +checking deadlock in a spec that deadlocks in the initial state. + +Why would I want to explore such an error trace? Because it's a +convenient way to evaluate expressions on a particular state. (Perhaps +that indicates a missing feature.)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=80#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-07-14 03:35:46 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This now appears to work. I presume Dan fixed it without marking the bug report as resolved.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=81">81</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Bad behavior of model-editor page with long Invariants and Properties.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=81#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-04-11 19:39:29 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The display of Invariants and Properties +on the Model Overview Page does weird and unsatisfying things when the +one-line displayed entries get too wide. In particular, the width of +their column grows to accommodate the widest line, and cannot be shrunk +even when the wide lines are eliminated--except by closing and reopening + the model. As I recall, there are serious problems trying to fix this + with the Eclipse primitives. So, I suggest the following change to +ameliorate the problem: On the displayed line, replace each sequence of + spaces with a single space.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=81#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-07-01 12:06:18 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I suggest preventing the widgets from expanding and adding a scroll bar.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=82">82</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox crashed by out-of-memory exception</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>lamport, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=19">the files + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=82#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-04-26 18:23:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I was running a TLC model that, according +to the log entry pasted below, ran TLC out of memory. (Sorry for doing +it this way, but I couldn't find the switch in the 747 cockpit that +allows me to attach something to the bug report--though I'm sure I've +stumbled upon it before.) It would be nice if this could be prevented +from crashing the Toolbox, but would simply cause it to report a TLC +error. Of course, if TLC running out of memory causes the Toolbox to +run out of memory as well, this is likely to be impossible. But I don't + see why this should happen. (Of course, I have a lot of trouble seeing + why all the ways computer programs fail should happen.) + +eclipse.buildId=unknown +java.version=1.6.0_11 +java.vendor=Sun Microsystems Inc. +BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US +Framework arguments: -product +org.lamport.tla.toolbox.product.standalone.product +Command-line arguments: -product +org.lamport.tla.toolbox.product.standalone.product -data +C:\users\lamport\tla\newtools\tla2-inria/../runtime-standalone.product +-dev +file:C:/users/lamport/tla/newtools/tla2-inria/.metadata/.plugins/org.eclipse.pde.core/standalone.product/dev.properties + -os win32 -ws win32 -arch x86 + +!ENTRY org.eclipse.osgi 2 0 2010-04-22 09:21:38.625 +!MESSAGE The following is a complete list of bundles which are not +resolved, see the prior log entry for the root cause if it exists: +!SUBENTRY 1 org.eclipse.osgi 2 0 2010-04-22 09:21:38.625 +!MESSAGE Bundle org.eclipse.jdt.launching.macosx_3.2.0.v20090527 [337] +was not resolved. +!SUBENTRY 2 org.eclipse.jdt.launching.macosx 2 0 2010-04-22 09:21:38.625 +!MESSAGE Platform filter did not match: (osgi.os=macosx) + +!ENTRY org.eclipse.core.resources 2 10035 2010-04-22 09:21:39.750 +!MESSAGE The workspace exited with unsaved changes in the previous +session; refreshing workspace to recover changes. + +!ENTRY org.eclipse.ui 2 0 2010-04-22 09:21:40.562 +!MESSAGE Warnings while parsing the commands from the +'org.eclipse.ui.commands' and 'org.eclipse.ui.actionDefinitions' +extension points. +!SUBENTRY 1 org.eclipse.ui 2 0 2010-04-22 09:21:40.562 +!MESSAGE Commands should really have a category: +plug-in='org.lamport.tla.toolbox.tool.prover.ui', +id='org.lamport.tla.toolbox.tool.prover.ui.checkStep.delegate', +categoryId='org.eclipse.debug.ui.category.run' + +!ENTRY org.eclipse.ui 4 4 2010-04-22 09:23:52.814 +!MESSAGE Plugin org.lamport.tla.toolbox, extension +org.eclipse.ui.perspectiveExtensions, id +toolbox.view.ToolboxWelcomeView: Attribute 'relative' not defined. This + attribute is required when relationship="left". + +!ENTRY org.eclipse.ui 4 4 2010-04-22 09:23:52.814 +!MESSAGE Unable to process element: view in perspective extension: null + +!ENTRY org.eclipse.ui 4 4 2010-04-22 09:24:31.268 +!MESSAGE Plugin org.lamport.tla.toolbox, extension +org.eclipse.ui.perspectiveExtensions, id +toolbox.view.ToolboxWelcomeView: Attribute 'relative' not defined. This + attribute is required when relationship="left". + +!ENTRY org.eclipse.ui 4 4 2010-04-22 09:24:31.268 +!MESSAGE Unable to process element: view in perspective extension: null + +!ENTRY org.eclipse.ui 4 4 2010-04-22 12:12:57.928 +!MESSAGE Plugin org.lamport.tla.toolbox, extension +org.eclipse.ui.perspectiveExtensions, id +toolbox.view.ToolboxWelcomeView: Attribute 'relative' not defined. This + attribute is required when relationship="left". + +!ENTRY org.eclipse.ui 4 4 2010-04-22 12:12:58.100 +!MESSAGE Unable to process element: view in perspective extension: null + +!ENTRY org.eclipse.ui 4 4 2010-04-22 12:13:51.304 +!MESSAGE Plugin org.lamport.tla.toolbox, extension +org.eclipse.ui.perspectiveExtensions, id +toolbox.view.ToolboxWelcomeView: Attribute 'relative' not defined. This + attribute is required when relationship="left". + +!ENTRY org.eclipse.ui 4 4 2010-04-22 12:13:51.319 +!MESSAGE Unable to process element: view in perspective extension: null + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2010-04-23 23:14:47.975 +!MESSAGE Error writing the TLC process output file for +ByzPaxosConsensus___TinyModel.launch +!STACK 1 +org.eclipse.core.runtime.CoreException: Could not write file: +C:\users\lamport\papers\paxos\simple\byztla\ByzPaxosConsensus.toolbox\TinyModel\MC.out. + + at org.eclipse.core.internal.filesystem.Policy.error(Policy.java:55) + at +org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:386) + + at +org.eclipse.core.internal.localstore.FileSystemResourceManager.write(FileSystemResourceManager.java:956) + + at +org.eclipse.core.internal.resources.File.internalSetContents(File.java:320) + + at +org.eclipse.core.internal.resources.File.appendContents(File.java:53) + at +org.lamport.tla.toolbox.tool.tlc.output.internal.FileProcessOutputSink$1.run(FileProcessOutputSink.java:47) + + at +org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1800) + at +org.lamport.tla.toolbox.tool.tlc.output.internal.FileProcessOutputSink.appendText(FileProcessOutputSink.java:43) + + at +org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + + at java.lang.Thread.run(Thread.java:619) +Caused by: java.io.FileNotFoundException: +C:\users\lamport\papers\paxos\simple\byztla\ByzPaxosConsensus.toolbox\TinyModel\MC.out + (The process cannot access the file because it is being used by another + process) + at java.io.FileOutputStream.openAppend(Native Method) + at java.io.FileOutputStream.<init>(FileOutputStream.java:177) + at +org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:377) + + ... 15 more +!SUBENTRY 1 org.eclipse.core.filesystem 4 272 2010-04-23 23:14:49.928 +!MESSAGE Could not write file: +C:\users\lamport\papers\paxos\simple\byztla\ByzPaxosConsensus.toolbox\TinyModel\MC.out. +!STACK + 0 +java.io.FileNotFoundException: +C:\users\lamport\papers\paxos\simple\byztla\ByzPaxosConsensus.toolbox\TinyModel\MC.out + (The process cannot access the file because it is being used by another + process) + at java.io.FileOutputStream.openAppend(Native Method) + at java.io.FileOutputStream.<init>(FileOutputStream.java:177) + at +org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:377) + + at +org.eclipse.core.internal.localstore.FileSystemResourceManager.write(FileSystemResourceManager.java:956) + + at +org.eclipse.core.internal.resources.File.internalSetContents(File.java:320) + + at +org.eclipse.core.internal.resources.File.appendContents(File.java:53) + at +org.lamport.tla.toolbox.tool.tlc.output.internal.FileProcessOutputSink$1.run(FileProcessOutputSink.java:47) + + at +org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1800) + at +org.lamport.tla.toolbox.tool.tlc.output.internal.FileProcessOutputSink.appendText(FileProcessOutputSink.java:43) + + at +org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + + at java.lang.Thread.run(Thread.java:619) + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2010-04-23 23:22:10.093 +!MESSAGE Error writing the TLC process output file for +ByzPaxosConsensus___TinyModel.launch +!STACK 1 +org.eclipse.core.runtime.CoreException: Could not write file: +C:\users\lamport\papers\paxos\simple\byztla\ByzPaxosConsensus.toolbox\TinyModel\MC_TE.out. + + at org.eclipse.core.internal.filesystem.Policy.error(Policy.java:55) + at +org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:386) + + at +org.eclipse.core.internal.localstore.FileSystemResourceManager.write(FileSystemResourceManager.java:956) + + at +org.eclipse.core.internal.resources.File.internalSetContents(File.java:320) + + at +org.eclipse.core.internal.resources.File.appendContents(File.java:53) + at +org.lamport.tla.toolbox.tool.tlc.output.internal.FileProcessOutputSink$1.run(FileProcessOutputSink.java:47) + + at +org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1800) + at +org.lamport.tla.toolbox.tool.tlc.output.internal.FileProcessOutputSink.appendText(FileProcessOutputSink.java:43) + + at +org.lamport.tla.toolbox.tool.tlc.output.internal.TraceExplorerTraceSourceOutputSink.appendText(TraceExplorerTraceSourceOutputSink.java:53) + + at +org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + + at java.lang.Thread.run(Thread.java:619) +Caused by: java.io.FileNotFoundException: +C:\users\lamport\papers\paxos\simple\byztla\ByzPaxosConsensus.toolbox\TinyModel\MC_TE.out + (The process cannot access the file because it is being used by another + process) + at java.io.FileOutputStream.openAppend(Native Method) + at java.io.FileOutputStream.<init>(FileOutputStream.java:177) + at +org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:377) + + ... 16 more +!SUBENTRY 1 org.eclipse.core.filesystem 4 272 2010-04-23 23:22:10.093 +!MESSAGE Could not write file: +C:\users\lamport\papers\paxos\simple\byztla\ByzPaxosConsensus.toolbox\TinyModel\MC_TE.out. +!STACK + 0 +java.io.FileNotFoundException: +C:\users\lamport\papers\paxos\simple\byztla\ByzPaxosConsensus.toolbox\TinyModel\MC_TE.out + (The process cannot access the file because it is being used by another + process) + at java.io.FileOutputStream.openAppend(Native Method) + at java.io.FileOutputStream.<init>(FileOutputStream.java:177) + at +org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:377) + + at +org.eclipse.core.internal.localstore.FileSystemResourceManager.write(FileSystemResourceManager.java:956) + + at +org.eclipse.core.internal.resources.File.internalSetContents(File.java:320) + + at +org.eclipse.core.internal.resources.File.appendContents(File.java:53) + at +org.lamport.tla.toolbox.tool.tlc.output.internal.FileProcessOutputSink$1.run(FileProcessOutputSink.java:47) + + at +org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1800) + at +org.lamport.tla.toolbox.tool.tlc.output.internal.FileProcessOutputSink.appendText(FileProcessOutputSink.java:43) + + at +org.lamport.tla.toolbox.tool.tlc.output.internal.TraceExplorerTraceSourceOutputSink.appendText(TraceExplorerTraceSourceOutputSink.java:53) + + at +org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + + at java.lang.Thread.run(Thread.java:619) + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:32:33.287 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable +(java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + at java.util.Arrays.copyOf(Arrays.java:2882) + at +java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) + + at +java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515) + at java.lang.StringBuffer.append(StringBuffer.java:306) + at +org.eclipse.ui.editors.text.StorageDocumentProvider.setDocumentContent(StorageDocumentProvider.java:144) + + at +org.eclipse.ui.editors.text.FileDocumentProvider.setDocumentContent(FileDocumentProvider.java:424) + + at +org.eclipse.ui.editors.text.FileDocumentProvider.handleElementContentChanged(FileDocumentProvider.java:830) + + at +org.eclipse.ui.editors.text.FileDocumentProvider$2.execute(FileDocumentProvider.java:274) + + at +org.eclipse.ui.editors.text.FileDocumentProvider$SafeChange.run(FileDocumentProvider.java:163) + + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:32:38.444 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable +(java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + at java.util.Arrays.copyOf(Arrays.java:2882) + at +java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) + + at +java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515) + at java.lang.StringBuffer.append(StringBuffer.java:306) + at +org.eclipse.ui.editors.text.StorageDocumentProvider.setDocumentContent(StorageDocumentProvider.java:144) + + at +org.eclipse.ui.editors.text.FileDocumentProvider.setDocumentContent(FileDocumentProvider.java:424) + + at +org.eclipse.ui.editors.text.FileDocumentProvider.handleElementContentChanged(FileDocumentProvider.java:830) + + at +org.eclipse.ui.editors.text.FileDocumentProvider$2.execute(FileDocumentProvider.java:274) + + at +org.eclipse.ui.editors.text.FileDocumentProvider$SafeChange.run(FileDocumentProvider.java:163) + + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:32:43.319 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable +(java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + at java.util.Arrays.copyOf(Arrays.java:2882) + at +java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) + + at +java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515) + at java.lang.StringBuffer.append(StringBuffer.java:306) + at +org.eclipse.ui.editors.text.StorageDocumentProvider.setDocumentContent(StorageDocumentProvider.java:144) + + at +org.eclipse.ui.editors.text.FileDocumentProvider.setDocumentContent(FileDocumentProvider.java:424) + + at +org.eclipse.ui.editors.text.FileDocumentProvider.handleElementContentChanged(FileDocumentProvider.java:830) + + at +org.eclipse.ui.editors.text.FileDocumentProvider$2.execute(FileDocumentProvider.java:274) + + at +org.eclipse.ui.editors.text.FileDocumentProvider$SafeChange.run(FileDocumentProvider.java:163) + + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:36:25.073 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable +(java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + at java.util.Arrays.copyOf(Arrays.java:2882) + at +java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) + + at +java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515) + at java.lang.StringBuffer.append(StringBuffer.java:306) + at +org.eclipse.ui.editors.text.StorageDocumentProvider.setDocumentContent(StorageDocumentProvider.java:144) + + at +org.eclipse.ui.editors.text.FileDocumentProvider.setDocumentContent(FileDocumentProvider.java:424) + + at +org.eclipse.ui.editors.text.FileDocumentProvider.handleElementContentChanged(FileDocumentProvider.java:830) + + at +org.eclipse.ui.editors.text.FileDocumentProvider$2.execute(FileDocumentProvider.java:274) + + at +org.eclipse.ui.editors.text.FileDocumentProvider$SafeChange.run(FileDocumentProvider.java:163) + + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:36:30.011 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable +(java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:36:34.026 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable +(java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:36:38.105 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable +(java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:36:42.120 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable +(java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:40:27.937 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable +(java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:40:32.047 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable +(java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:40:36.078 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable +(java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:40:40.109 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable +(java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:40:44.172 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable +(java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:43:47.566 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable +(java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:43:51.613 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable +(java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:43:55.613 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable +(java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:44:30.285 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable +(java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:46:51.273 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable +(java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:46:55.351 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable +(java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=82#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-04-26 19:11:42 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The first few exceptions are +FileNotFoundExceptions for the two output files MC_TE.out and MC.out. +The message claims that another process is using these files. I tried +running TLC on the same model from two different instances of the +toolbox, but this did not produce any Java exceptions. I don't know what + other process would be accessing those files.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=82#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-04-26 19:37:03 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Those file not found exceptions don't seem +to be relevant, since the toolbox did start the model and TLC ran for +about two days before the out-of-memory exception killed it.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=82#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-04-26 20:11:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I'm probably missing something, but what makes you think that TLC ran out of memory? I see that the Toolbox ran out of memory.</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=82#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-04-26 21:17:26 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=19" name="attach_19" title="the files">attachment 19</a> <a href="https://54.195.32.3/attachment.cgi?id=19&action=edit" title="the files">[details]</a></span> +the files + +I think I finally figured out how to attach this.</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=82#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-04-26 21:19:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">TLC was not running, so I assumed that it +had crashed. Would the Toolbox running out of memory stop TLC? + +Anyway, the TLC run started at 14:26 on 22 April. The last progress +report was at 11:46:20 on 24 April, which was also the time of the last +checkpoint. I have no idea why the Toolbox should have been writing +ByzPaxosConsensus___TinyModel.launch on 23 April. Anyway, I finally saw + where to add attachments, so I attached the files. (I could swear that + section was not there when I created the report.)</pre> + </div><div id="c6" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=82#c6">Comment 6</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Simon Zambrovski</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-04-26 22:30:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">There are generally two independent +happenings. I think these are dependent now due to a bug in toolbox. +These are things that I know of: + - A stack overflow in TLC produces a stack overflow of Toolbox + - An out-of-memory in TLC should not crash the toolbox. At least that +was one of the design issues. I don't know how it behaves now, but this +is easy to simulate. + - Toolbox is writing an incomming stream to a file. I assume it will +fail, after the file size exceeds 2GB. This could be the error of +FileNotFound. Windows is not very smart reporting errors. If the file +can not be accessed it reports that the reason is that it is hold by +another process. + - The out-of-memory of Toolbox seems to be produced by the Toolbox +itself. This can be the similar problem as the previous. Trying to +display a content of the file that is 2GB big can be problematic. We +spoke about a kind of sliding-window mechanism for boths: file and +display with Leslie, but I actually never implemented it.</pre> + </div><div id="c7" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=82#c7">Comment 7</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-04-26 22:55:14 UTC + </span> + </div> + + + +<pre class="bz_comment_text">There is no file larger than 5MB in the +TinyModel directory, where I presume it should be. In fact, the +directory containing all the related specs and their models is only +about 35MB. + +I'd be curious to know why a stack overflow in TLC produces a stack +overflow in a separate process. However, that's very unlikely to be the + cause of the problem. I've never seen a TLC stack overflow that was +not produced by a problem with the spec (and properly caught by TLC). I + just restarted the model from the checkpoint that was created just +before the Toolbox crashed; it has been happily running for about 5 +minutes. + +However, there does seem to be a memory problem with the Toolbox. I +just noticed that, right before I closed it, the Toolbox was using over +700MB of memory. I restarted the Toolbox this morning and have not been + doing much of anything with it. So, there must be a memory leak in the + code.</pre> + </div><div id="c8" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=82#c8">Comment 8</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Simon Zambrovski</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-04-26 23:13:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I found it interesting, that a 5 MB file is + being produced in 2 days of running TLC. As far as I know TLC writes +log. In two days it should have produced tonns of logs.. + +So again, my comments to your bug descriptions are: +-> I was running a TLC model that, according to the log entry pasted +below, ran +TLC out of memory. + +This is wrong. The log says that there was a out-of-memory in a toolbox, + not in TLA. + +-> Of course, if TLC running out of memory causes the Toolbox to run +out of memory as well, this is likely to be impossible. + +This is not the case.</pre> + </div><div id="c9" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=82#c9">Comment 9</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-04-27 12:48:09 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Simon and I talked about the toolbox's +parsing and storing of TLC's output as one source of memory leak. The +following steps are taken to parse TLC's output: + +1.) Create an empty document (an eclipse construct that provides support + for editing and partitioning text, among other things). +2.) When new output from TLC arrives, append it to this document. +3.) Using the eclipse document partitioning framework, this is +partitioned into regions where each region is either a start message +tag, an end message tag, or a character that is not in a start or end +message tag. +4.) The parser is notified each time the partitioning of the document +changes. It uses the positions of the new partitions to create the +appropriate data types to store for any interested listeners. + +I think that at least one problem is that the document containing all of + TLC's output is stored as long as TLC is running. After TLC has been +running for 2 weeks, the document created in step 1 will still contain + +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ + +and the associated partitions and other data types used by eclipse to +maintain a document, even though the information contained in this part +of the message has been stored in another data type in step 4. This +redundant storage is unnecessary, and takes up a lot of memory. Once the + partitioning for a portion of the document has been used to generate +the appropriate data type in step 4, these partitions, along with the +portion of the document to which they correspond, are no longer needed. + +Simon and I also talked about the caching of the data type created in +step 4. All instances of this data type created by any run of TLC since +the Toolbox was last started are held in memory. This doesn't seem to be + a large percentage of the toolbox heap size, so it may not be worth +worrying about right now. To test this, I ran TLC for about 12 hours, +and then took a heap dump. The total heap size was about 250MB. Objects +that I'm pretty sure relate to documents and partitioning of TLC's +output seem to take up at least 100MB, while objects created in step 4 +seem to take up less than 1 MB.</pre> + </div><div id="c10" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=82#c10">Comment 10</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-04-27 12:53:42 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The formatting of my last comment is not +what I wanted. Try selecting "View Unformatted Text" in the menu to the +right of the comment title to see what I actually intended.</pre> + </div><div id="c11" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=82#c11">Comment 11</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-04-27 13:20:11 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Compounding the problem is the fact that +instances of BroadcastStreamListener (which broadcast TLC's output +stream to interested sinks) are never removed as listeners to TLC's +output stream. This means that all sinks, all parsers, and thus all +documents containing output from any run of TLC since the toolbox was +last started are kept in memory.</pre> + </div><div id="c12" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=82#c12">Comment 12</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-04-27 16:23:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Further data: just running the model +overnight, the Toolbox's memory use grew from 200MB to close to 700MB. A + quick estimate indicates that during that time, the Toolbox received +1000 messages, each about 100 bytes long, for a total of about 100KB. +If that's the cause of the memory growth, that means the Toolbox is +using 5KB of storage for each byte of input it receives. I suppose +that's possible with modern software. In any case, this needs to be +fixed.</pre> + </div><div id="c13" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=82#c13">Comment 13</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-04-30 10:39:08 UTC + </span> + </div> + + + +<pre class="bz_comment_text">There's another source of memory leak. +FileDocumentProviders are used throughout the toolbox code. They are +connected to file editor input to provide convenient access to the file +contents. Connecting them to a file editor input also causes them to +register as a resource change listener in order to synchronize with +changes to the file. When no longer needed, the disconnect() method +should be called so that the file document providers remove themselves +as resource change listeners. However, this is never done in the +toolbox, so references remain to these providers so that they are never +removed from the toolbox's heap. After running TLC for two days, +FileDocumentProviders were responsible for approximately 40% of the heap + space. Another 40% seems to be occupied by objects related to what I +explained in <a href="https://54.195.32.3/show_bug.cgi?id=82#c11">comment 11</a>.</pre> + </div><div id="c14" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=82#c14">Comment 14</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-07-01 12:08:39 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I've fixed the two memory leaks that I noticed, so this is at least partially fixed.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=83">83</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Renumber proof command does not work for non theorem nodes</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=83#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-06-02 12:47:54 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The renumber proof command does not work if + the proof contains steps that cannot have proofs (use/hide, instance, +def). SANY does not seem to provide a way to get the location of the +step number for these nodes, so this might motivate a change to SANY.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=86">86</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Goto Declaration not working with subexpression names</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=86#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-07-14 03:21:12 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The Goto Declaration command does nothing +with a subexpression name like Foo!2!(x). The best one can do is to go +to the definition of Foo if the user is pointing at the "Foo". + +This will be difficult to fix and will require modifying how +TLAHyperlinkDector.detectHyperlinks parses the region of the module +being pointed at to obtain the operator name to look up. Note that in +Foo!Bar!<<!(x), the symbol to find is Foo!Bar, the "!<<!(x)" + being a subexpression of that symbol's definition. Since very few +people will notice that this case isn't handled, fixing it has low +priority.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=86#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-10-01 08:37:36 UTC + </span> + </div> + + + +<pre class="bz_comment_text">All known bugs in Goto Declaration, +hyperlinking, and Show Uses deemed worth fixing have been fixed. The +only known bug is that the Toolbox may not find the symbol if you point +at a space in the symbol name, as in "Foo ! Bar". + +One perhaps surprising feature is that it will go to the definition or +declaration of a symbol if that symbol is not serving as the symbol--in +particular, if it appears in a comment or at the "<" or ">" in +something like "<3>". (But it works correctly for "<3>1".)</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=87">87</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox will not raise TLAPM console if TLC console has been raised.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + WONTFIX + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=87#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-08-21 02:59:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Open a spec and run a TLC model on it, +producing output on the TLC Console. Then run the prover. Clicking on +the TLAPM Console raises the TLC Console. There seems to be no way to +get rid of it except to close the Toolbox. + +Note: There should be a TLAPS Component as a bug attribute, but I don't +know how to add one.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=87#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-08-22 17:29:02 UTC + </span> + </div> + + + +<pre class="bz_comment_text">There is a way to open the TLAPS console +when the TLC console is already open. One of the buttons at the top of +the console allows you to switch between consoles. It has some sort of +drop down menu with the console options. + +The TLAPS menu item to open the console should probably open the TLAPS +console always, but I considered it a low priority because I didn't +expect users to ever use the TLAPS console.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=87#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-17 16:36:08 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Support to separate consoles would require +support in Eclipse. Unless this is going to be implemented there, this +bug is unlikely to be addressed. + +TODO open bug a eclipse.org. + +Trivial workaround by selecting the console instance on the console +selector icon.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=88">88</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Goto Declaration (F3), Show Declaration (F5), and Show Uses (F6) don't work on subexpression names</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P5">P5 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=88#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-09-02 03:40:17 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Goto Declaration (F3) and Show Declaration +(F5) don't work if the cursor is on a symbol in a PICK or CASE statement + of a proof. They need to be tested to see if there are other places as + well where they don't work.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=88#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-09-14 08:37:06 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This appears to have been a misdiagnosis. +The problem seems to be caused when selecting a name that occurs in a +subexpression name, as in Foo(a)!1!(c).</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=88#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-09-14 12:41:15 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I fixed Show Uses so that, when searching +for uses of a defined symbol Foo, it marks all names of subexpressions +of Foo. For example, it will mark the Foo in Foo!1!(a+b). + +Goto Declaration and Show Uses still don't work if the cursor is at a +symbol that is part of the name of a subexpression of the +definitiion--for example, if the cursor is at the Foo in Foo!1!(a+b). +It doesn't seem worth fixing now. Instead, it should be fixed as part +of a re-implementation of EditorUtil.getTokenAt so it works purely on +what's in the buffer without using the parse tree.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=88#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-09-17 10:52:02 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Note: Goto Declaration, etc. don't work on a symbol formed with a parameterized instantiation--e.g., I(exp)!Foo.</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=88#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-10-01 08:38:33 UTC + </span> + </div> + + + +<pre class="bz_comment_text">All known bugs in Goto Declaration, hyperlinking, and Show Uses deemed worth +fixing have been fixed. The only known bug is that the Toolbox may not find +the symbol if you point at a space in the symbol name, as in "Foo ! Bar". + +One perhaps surprising feature is that it will go to the definition or +declaration of a symbol if that symbol is not serving as the symbol--in +particular, if it appears in a comment or at the "<" or ">" in something like +"<3>". (But it works correctly for "<3>1".)</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=89">89</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Show Uses (F6) not working.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=89#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-09-16 12:05:05 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I don't know what happened, but it's perhaps not a coincidence that this appeared after I partiallly fixed <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Goto Declaration (F3), Show Declaration (F5), and Show Uses (F6) don't work on subexpression names" href="https://54.195.32.3/show_bug.cgi?id=88">bug 88</a>.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=89#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-09-17 10:32:50 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Bug fixed. + +The Show Uses command still has the following minor bug. When Foo is +defined in module M, which is instantiated by I == INSTANCE M, then +when showing uses of I!Foo, if the use appears in a subexpression name +like I!Foo!2, then just the "I" rather than the "I!Foo" is marked. +This is pretty harmless and is probably not worth fixing.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=90">90</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Performance problem reading any non-trivial amount of TLC output</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + DUPLICATE + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Mac OS</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=37">Test_Copy.toolbox.zip + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=38">spec + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=90#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-10-01 08:52:12 UTC + </span> + </div> + + + +<pre class="bz_comment_text">It takes the Toolbox much too long to parse + and display TLC output when it gets long. The only real examples I +know of in which this is a problem are long uniprocess (sequential) +PlusCal algorithms. An example that illustrates the problem is in the +module FindOp.tla appended to the TokenSpec class. There are two kinds +of output involved: + +- Error traces. It can take effectively forever for TLC to process a +long error trace. Putting an "assert FALSE" statement at the end of the + algorithm in FindOp.tla produces an error traces with about 1400 +states. I have no idea how long it would take the Toolbox to process +it, but I would guess it would be at least on the order of hours. + +- Progress information. I believe that it takes TLC about 20 seconds to + process each progress report of FindOp.tla. (TLC completes in about a +second, so the problem is only in the final report.) I believe that +each progress report is about 1000 lines, where each line of output is a + separate message. + +Experimentation suggests that the majority of time taken processing the +error trace is in displaying it. However, a significant fraction +(perhaps 1/3) is spent parsing the TLC output. There seems to be no +good reason for that--especially since the entire trace is just a single + TLC message. The parsing of TLC output needs to be completely +rewritten so it is fast. It's likely that displaying the trace cannot +be made fast enough, in which case the user can be warned that the trace + is long and given the option of displaying just a part of it. + +When parsing the performance information is fast, we can figure out if +displaying it is slow enough to require that something be done about it.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=90#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-10-01 15:42:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I just discovered a much more serious +example of what appears to be the same problem. If you run in +simulation mode a simple program with a Print statement that produces +output, the Toolbox seems to be swamped by the output and displays no +user output on the Results page. Fortunately, aborting the run stops +everything, so the user doesn't have to wait for however many hours it +takes the Toolbox to parse the output. Unfortunately, that gives the +user no indication that any output was produced. + +I/O should be slow enough that the Toolbox should be able to read a +stream of input and display it on the screen without falling behind. It + should also take the Toolbox just nanoseconds per line to discover that + it's not a message and should therefore go to the user output window. +So, fixing the Toolbox's handling of TLC output should fix this problem.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=90#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-10-01 16:13:43 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I just discovered that when you run TLC in +model-checking mode and the Toolbox gets behind in printing user output, + it doesn't print the remaining output when TLC stops normally. (It +probably also doesn't if TLC stops because of an error.)</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=90#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-30 13:11:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=37" name="attach_37" title="Test_Copy.toolbox.zip">attachment 37</a> <a href="https://54.195.32.3/attachment.cgi?id=37&action=edit" title="Test_Copy.toolbox.zip">[details]</a></span> +Test_Copy.toolbox.zip + +To run it with the Toolbox, unzip the Test_Copy.toolbox directory, put +it in the same directory as Test.tla, and open a spec named Test_Copy +with root file Test.tla. The models N=12, N=18, etc. are the models +that display the behavior with different values of the parameter N, +which is the number of states in the error trace. (Ignore the other +models.) + +L.</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=90#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-30 13:12:11 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=38" name="attach_38" title="spec">attachment 38</a> <a href="https://54.195.32.3/attachment.cgi?id=38&action=edit" title="spec">[details]</a></span> +spec</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=90#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 20:16:41 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I assume all issues mentioned in this bug report have been solved by fix for <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser does not scale for large output" href="https://54.195.32.3/show_bug.cgi?id=151">bug #151</a> + +*** This bug has been marked as a duplicate of <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser does not scale for large output" href="https://54.195.32.3/show_bug.cgi?id=151">bug 151</a> ***</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=91">91</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Sany error not being reported by the toolbox.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=91#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-10-15 18:03:41 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The following module produces a SANY error that is not reported by the Toolbox. + +---- MODULE Test -------- +Foo == 1 + +THEOREM TRUE +<1> QED + BY DEF Foo.x' +================</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=91#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-10-17 17:52:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed by change to ModuleParserLauncher.findLineAndColumn.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=92">92</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Launch Prover command does not check if module has been saved.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=92#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-12-14 04:01:50 UTC + </span> + </div> + + + +<pre class="bz_comment_text">As it says, the Launch Prover command (Ctl+G Ctl+P) does not check if the module has been saved. It should.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=92#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-12-14 19:26:46 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed by copying some code from the other commands.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=93">93</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Characters produced by alt + number key cannot be entered from keyboard</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Vidar <vidar_slatten></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 32-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Mac OS</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=93#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Vidar</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2010-12-20 11:28:49 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I cannot type |, [ or ] into the editor +when on Mac. It works fine on Windows. Seems the problem has to do with +any character that is produced by holding down the alt key then pressing + a number key. Pressing shift + alt + number key works, though. + +I have a Norwegian keyboard, in case that has something to do with it. I + have tried changing the input source to US keyboard, but the editor +still does not register characters typed by holding alt + number key. + +I am able to copy paste these characters from existing specifications or + other programs, so I can work around it. + +Versions: +OS: Snow Leopard +Java: 1.6 64-bit +TLA+ toolbox: 1.2.1</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=93#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-01-13 17:26:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The alt+number keys are currently bound to commands that do nothing. +The commands may eventually do something, but probably not for a +while. To remove the bindings, go to File/Preferences/Keys and type +Prefix into where it says "type filter text". This will show you all +those bindings, which you can then remove with the Unbind Command +button. + +In the next release, those commands will be rebound to +shift+alt+ctl+number. (I prefer to do this rather than completely +removing the commands because it will make it a little easier if we +decide to make them do something.) I hope that no system uses +these key combinations.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=94">94</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox can't deal with long prover console output.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=94#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-02-08 01:30:56 UTC + </span> + </div> + + + +<pre class="bz_comment_text">On a long prover job, the Toolbox slows to a + crawl and produces errors. (It's hard to read the "problem occurred" +window, since the Toolbox can't paint its windows, but it seems to be +trying to report a Java heap error.) It appears to be due to +inefficient handling of the console output--perhaps the same problem +that occurs when TLC produces a lot of console output. Here's what the +Eclipse log shows: + + +Exception in thread "Output Stream Monitor" java.lang.OutOfMemoryError: +Java heap space + at java.util.Arrays.copyOf(Arrays.java:2882) + at +java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) + + at +java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390) + at java.lang.StringBuffer.append(StringBuffer.java:224) + at +org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:154) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + + at java.lang.Thread.run(Thread.java:619)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=94#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Dan Ricketts</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-02-08 06:34:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Eclipse uses a class called +OutputStreamMonitor to wrap a process's output streams. By default the +OutputStreamMonitor saves the stream in a StringBuffer. Since we +currently don't use any of this saved stream, the StringBuffer is +useless. To fix this, I committed some code that turns off buffering. +This needs to be tested.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=94#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-02-08 21:19:36 UTC + </span> + </div> + + + +<pre class="bz_comment_text">It looks like Dan's fix has solved the +problem, though I don't know how to test it thoroughly enough to make +sure. I'll close this report and reopen it if I encounter the problem +again.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=95">95</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox displaying only a tiny piece of a TLC error message (and missing feature)</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=95#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-03-11 01:21:17 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When using the Evaluate Constant Expression feature to evaluate the expression + +<<TestObj \in Object, + ReachableFrom(TestObj, TestHeap) +<span class="quote">>></span> + +TLC produced the error message: + +Error: Evaluating assumption line 73, col 8 to line 73, col 66 of module + MC failed. +Attempted to apply function: +(id1 :> [f1 |-> id2, f2 |-> <<v1, id3>>] @@ id2 +:> <<>> @@ id3 :> <<>>) +to argument {}, which is not in the domain of the function. + +but the Toolbox just displayed this in the top field of the TLC Errors +window + +The `Evaluate Constant Expression’ section’s evaluation +to argument {}, which is not in the domain of the function. + +Since Bugzilla does not provide any way to attach input to the bug +report that I've been able to find (though I seem to recall that there +is some way to do it that is obvious to anyone who has a PhD in +Bugzilla), I checked the example into the +tla/trunk/tla2-inria/general/bug-11-03-10 directory. The root file is +Promises.tla and it is Model_1 (the only model).</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=95#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-03-11 20:42:02 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When I tried to open a copy of the spec in +the Toolbox, the Toolbox did not find the model, which is Model_1, even +though the Model_1 directory was inside the .toolbox directory. (I have + been unable to reproduce this problem with a fresh spec.) If that +happens, to recreate the bug, it's necessary to create a new model using + all the model info inside the Model_1/MC.{tla,cfg} files. Here's how +to do it. + +What is the Model +---------------- +EventualType : make model value + +Type: ordinary value: + {EventualType} + +Id: set of model values + {id1, id2, id3} + +Exception: set of model values + {exc1, exc2} + +Value: set of model values + {v1, v2} + +Field: ordinary value: + {"type", "f1", "f2"} + +Definition Overrides: +-------------------- +Nat == 0..5 + +Seq(S) == UNION { [1..n -> S] : n \in 0..2 } + +Additional Definitions: +---------------------- +TestHeap == +(id1 :> [ f1 |-> id2, + f2 |-> <<v1, id3>>]) + @@ +(id2 :> << >>) + @@ +(id3 :> << >>) + +TestObj == +[type |-> EventualType, + f1 |-> id1] + +Evaluate Constant Expression: +----------------------------- +<<TestObj \in Object, + ReachableFrom(TestObj, TestHeap) +<span class="quote">>></span> + +Running the model should then produce the error.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=95#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-03-13 18:21:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I stupidly just realized that the problem +is probably caused by the error being in the MC module. The Toolbox +should be deleting just the location information from the message, but +it's deleting too much. + +The Toolbox should actually translate the location into a location in +the Model. This is a missing feature, which was not mentioned in the +Bugzilla database. It now is.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=95#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-17 16:34:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Related to <a class="bz_bug_link + bz_status_NEW " title="NEW - Parsing errors in the MC file contain "Encountered ----" sometimes" href="https://54.195.32.3/show_bug.cgi?id=7">bug #7</a></pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=96">96</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Print output not shown in Evaluate Constant Expression</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=96#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-03-11 01:48:54 UTC + </span> + </div> + + + +<pre class="bz_comment_text">If evaluating the constant expression in +Evaluate Constant Expression evaluates a Print or PrintT statement, the +output printed by TLC does not appear in the User Output area.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=96#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-03-11 03:04:14 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I wasn't finished with the description when + it was submitted (I think by Eclipse, but perhaps I accidentally hit +the Submit button). First of all, this is a problem because it makes it + impossible to use Evaluate Constant Expression to debug constant +operators with Print statements. + +Here's an example that explains what's triggering the bug. In the spec, + put + +Foo(x) == IF PrintT("PrintFoo") THEN "Foo" ELSE 0 +Bar(x) == IF PrintT("PrintBar") THEN "Bar" ELSE 0 +ASSUME PrintT(Bar(1)) + +(We give Foo and Bar arguments, otherwise TLC will evaluate them before +it does any execution of the spec.) Note that evaluating the +assumption prints "PrintBar" and "Bar". Now, put Foo(1) as the +expression in Evaluate Constant Expression. This essentially puts +ASSUME <<"xxxx", Foo(1)>> into the MC.tla file, where xxxx +is actually a less readable string. Evaluating this expression prints +"PrintFoo" and <<"xxxx", "Foo">>. The User Output field +should show "PrintBar", "Bar", and "PrintFoo", since the Toolbox grabs +the <<"xxxx", "Foo">> and puts "Foo" in the Value area of +the Evaluate Constant Expression section. However, it doesn't print the + "PrintFoo" where it should. If you run TLC on the MC file outside the +Toolbox, you'll see that the problem is that the "PrintFoo" is printed +before the "Starting... (2011-...)" line, while all the other stuff is +printed afterwards. Apparently, the Toolbox doesn't look for user +output until after that "Starting..." line. + +So, the bug is not in the Toolbox itself, but rather in the placement of + the code in TLC that prints the "Starting..." line.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=96#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-03-11 03:22:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I moved the appropriate TLC code and it seems to have fixed the problem.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=97">97</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox not reporting invariant violation</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + WONTFIX + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=21">Source file + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=22">The MC.out file + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=23">guess what + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=24">you'll never guess + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=25">... + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=97#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-03-22 03:06:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">First of all let me report a Bugzilla bug. There is no place to attach a file to this bug report. However, I observed that on <a class="bz_bug_link + bz_status_NEW " title="NEW - Toolbox displaying only a tiny piece of a TLC error message (and missing feature)" href="https://54.195.32.3/show_bug.cgi?id=95">Bug 95</a>, + there is now a place for attachments. So apparently, Bugzilla creates +the section for attachments only after the Bug is submitted. Assuming +that doesn't just happen on the ides of March under a 1/4 full moon when + it's raining, I will submit this and then try to attach the necessary +files. + +Now for this bug. TLC found an invariant violation, but the Toolbox +didn't report it or any other information about the run because of an +array out of bounds exception. Below is what the Eclipse console shows. + I will attach the spec and the various MC* files, which show what TLC +produced. + +footFileName = +C:\lamport\microsoft\spec-examples\joe_duffy\Promises2.tla +Writing files to: Model_1\ +---- + +Skipping resource: Model_1/MC.tla +Skipping resource: Model_1/Promises2.tla +---- + +entering removeModelProblemMarkers() on Promises2___Model_1 with +markerType set to org.lamport.tla.toolbox.tlc.modelErrorSANY +Final check for the modelcheck mode. The result of the check is true +--------------------------- +TLC ARGUMENTS: +--------------------------- +-checkpoint +3 +-config +MC.cfg +-coverage +3 +-workers +1 +-tool +-metadir +C:\lamport\microsoft\spec-examples\joe_duffy\Promises2.toolbox\Model_1 +MC +--------------------------- +END TLC ARGUMENTS +--------------------------- +entering removeModelProblemMarkers() on Promises2___Model_1 with +markerType set to org.lamport.tla.toolbox.tlc.modelErrorTLC +TLCOutputSourceRegistry for model checking maintains 1 sources. +The source Promises2___Model_1.launch has 4 prio and 1 listeners + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2011-03-21 19:04:03.564 +!MESSAGE Error broadcasting the message +!STACK 0 +java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0 + at java.util.Vector.get(Vector.java:694) + at +org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.createError(TLCModelLaunchDataProvider.java:586) + + at +org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.onOutput(TLCModelLaunchDataProvider.java:273) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:92) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:59) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:225) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:604) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:731) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:712) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:697) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:762) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1157) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1176) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:315) + + at +org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:25) + + at +org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + + at java.lang.Thread.run(Thread.java:619) +---- + +Skipping resource: Model_1/MC.tla +---- + +Job 'TLC run for Model_1' terminated with status: { Done } +---- + +----</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=97#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-03-22 03:07:14 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=21" name="attach_21" title="Source file">attachment 21</a> <a href="https://54.195.32.3/attachment.cgi?id=21&action=edit" title="Source file">[details]</a></span> +Source file</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=97#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-03-22 03:07:45 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=22" name="attach_22" title="The MC.out file">attachment 22</a> <a href="https://54.195.32.3/attachment.cgi?id=22&action=edit" title="The MC.out file">[details]</a></span> +The MC.out file</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=97#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-03-22 03:08:18 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=23" name="attach_23" title="guess what">attachment 23</a> <a href="https://54.195.32.3/attachment.cgi?id=23&action=edit" title="guess what">[details]</a></span> +guess what</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=97#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-03-22 03:08:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=24" name="attach_24" title="you'll never guess">attachment 24</a> <a href="https://54.195.32.3/attachment.cgi?id=24&action=edit" title="you'll never guess">[details]</a></span> +you'll never guess</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=97#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-03-22 03:09:22 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=25" name="attach_25" title="...">attachment 25</a> <a href="https://54.195.32.3/attachment.cgi?id=25&action=edit" title="...">[details]</a></span> +...</pre> + </div><div id="c6" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=97#c6">Comment 6</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-03-22 03:11:09 UTC + </span> + </div> + + + +<pre class="bz_comment_text">How nice, the attached files are all comments. Very helpful. But they're now there.</pre> + </div><div id="c7" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=97#c7">Comment 7</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-03-22 03:24:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">After carefully documenting all this, I +tried running under the debugger and the problem didn't occur. I then +restarted the Toolbox and tried again, and again it didn't occur. +I'll resolve this as "Won't Fix", since there are probably more +important things to worry about than why that exception occurred.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=98">98</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox incorrectly reports which invariant is violated if some members of the list of invariants are unchecked</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Chris Newcombe <chris.newcombe></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=198">Screenshot of unselected, yet checked invariant + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=98#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Chris Newcombe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-04-03 20:39:29 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Toolbox incorrectly reports which invariant + is violated if some members of the list of invariants are unchecked + +Running Version 1.2.1 of 29 September 2010 (32-bit), on Windows 7 +(64-bit). + +First bug: + +I have a list of 3 invariants to be checked (in the Model Overview +page). +When all of them are enabled (checked), everything seems to work fine. + +I temporarily unchecked the second (middle) invariant in the list (first + time I’ve used this feature). +I ran the model-checker, knowing that the 3rd invariant in the list +would be violated by my current spec/model. +The toolbox incorrectly reported that the second (unchecked) invariant +was the one that was violated. +Examining the TLC error trace, I am sure that it was really the 3rd +invariant that was violated. +i.e. Model checking appears to have been done correctly, but the toolbox + incorrectly reported which invariant was violated. Presumably due to a + bug in the handling of unchecked invariants. + +Second related bug: + +After the above problem, I completely removed the middle (unchecked) +invariant, by clicking the 'Remove' button. +I re-ran the model checker. The toolbox again incorrectly reported that + the (now removed) second invariant was the one that was violated. + +I then removed all of the invariants (leaving an empty list). +I added back one invariant -- the one I knew would fail. +Again the toolbox reported that the wrong invariant was violated -- it +reported that the original 1st invariant was violated, when that +invariant didn't even appear in the list anymore.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=98#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-04-09 21:18:18 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I was able to reproduce this bug on my +Windows 7 64-bit machine with a 4-core Intel Xeon CPU. It does not +occur on my Vista 32-bit 2-core machine. Also, when I tried to +reproduce the bug again on my 64-bit machine, it didn't occur. + +The bug is in the Toolbox, not in TLC. It smells like a concurrency +bug--especially since I have observed that the 64-bit machine seems to +be good at revealing concurrency bugs, probably because it uses a weaker + memory model than the 32-bit one. The code that finds and reads the +TLC output is too complicated and requires too much knowledge of the +Eclipse infrastructure for me to understand.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=98#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2015-02-23 11:34:44 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Another incarnation is that TLC checks *no* + invariant even though a (single one) is checked in the model editor. I +have yet to reproduce this though.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=98#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2015-03-05 09:02:57 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=198" name="attach_198" title="Screenshot of unselected, yet checked invariant">attachment 198</a> <a href="https://54.195.32.3/attachment.cgi?id=198&action=edit" title="Screenshot of unselected, yet checked invariant">[details]</a></span> +Screenshot of unselected, yet checked invariant + +I got bitten by this again yesterday. The Toolbox checked the TypeOK +invariant even though it wasn't selected (see screenshot). I wonder if +it even checked the selected ones.</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=98#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2015-03-18 18:25:22 UTC + </span> + </div> + + + +<pre class="bz_comment_text"><a href="http://tlaplus.codeplex.com/SourceControl/changeset/b00cb4336eeed3fd82cfd0d8170bc57c305a40e2">http://tlaplus.codeplex.com/SourceControl/changeset/b00cb4336eeed3fd82cfd0d8170bc57c305a40e2</a> + causes the Toolbox to properly lock the workspace before it writes +files to launch the model checker. This makes sure that it can't +interfer with other background operations that write to files. +I hope that this change addresses this bug too.</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=98#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2015-03-20 16:41:13 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Below is an updated stacktrace with current line numbers: + +Negative seek offset + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:212) + at tlc2.tool.liveness.DiskGraph.getNode(DiskGraph.java:169) + at tlc2.tool.liveness.DiskGraph.getPath(DiskGraph.java:310) + at tlc2.tool.liveness.LiveWorker.printTrace(LiveWorker.java:603) + at tlc2.tool.liveness.LiveWorker.checkComponent(LiveWorker.java:373) + at tlc2.tool.liveness.LiveWorker.checkSccs(LiveWorker.java:163) + at tlc2.tool.liveness.LiveWorker.run(LiveWorker.java:613)</pre> + </div><div id="c6" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=98#c6">Comment 6</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2015-05-12 13:55:45 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed with 1.5.0</pre> + </div><div id="c7" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=98#c7">Comment 7</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2015-10-06 06:53:59 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The fix in 1.5.0 turns out to be +incomplete. Thus, a workaround has been put in place [1] that caches the + invariant list upon model checking start-up as fall-back. + +[1] <a href="https://tlaplus.codeplex.com/SourceControl/changeset/72a66a7ecd246018aaf5c1bfbe89dbe2280cb46d">https://tlaplus.codeplex.com/SourceControl/changeset/72a66a7ecd246018aaf5c1bfbe89dbe2280cb46d</a></pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=100">100</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox in confused state after system restart during model-checking</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Chris Newcombe <chris.newcombe></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + WONTFIX + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=100#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Chris Newcombe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-04-03 20:45:54 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Running Version 1.2.1 of 29 September 2010 +(32-bit) on Windows 7 Enterprise 64-bit, on a 4-proc 4GB ThinkPad +laptop. + +Sequence of events: + +1. TLC was checking a model. (I can't remember if it was doing it in the + background.) + +2. I had to do a system restart to install an update of some unrelated +software (Adobe Reader). + +3. After the restart I ran the toolbox and found that: + + - TLC is not running (not surprising, as I haven't restarted it.) + + - The Model Overview tab says "(model checking is in progress)" + + - The "How to run" options are all greyed out. The "Checkpoint Id" and + "Checkpoint Size" are populated with reasonable values, but they are +greyed-out. + + - The "Model Checking Results" tab says "Current Status: Not running" +and "Errors detected: No Errors". The "State space progress" box lists +the last few state reports (from before the system restart) + + - The 'Stop model checker' button (small red square) was enabled, but +had no apparent effect when clicked. + +Note: I did previously stop this TLC run, and restart from a checkpoint, + without any problems. But I didn't do a system-restart that time. + +I worked around this by cloning the model. So it's not a severe problem, + just confusing at first. +The cloned model initially had 1 error, that there was no checkpoint +state. I realized that this was because the 'restart from checkpoint' +box was already checked for the clone (it was also checked on the +original model). I unchecked the box, and could then run TLC as normal.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=100#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-04-07 20:12:20 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This is a known behavior, documented in the + Help pages, for which the Toolbox provides the repair menu item for a +model in the spec explorer.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=101">101</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Absolute path names in .toolbox directory files prevents opening existing specs that have been moved.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Dan Ricketts <daniel.bmore.ricketts></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + WORKSFORME + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P2">P2 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=101#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-04-07 20:14:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">A Spec's .toolbox directory has data files +containing absolute path names of files. This causes havoc if one +copies an existing spec--for example, from another machine--and tries to + open it without copying it to a directory with exactly the same path +name. + +A possible bug fix is to rewrite the offending files when opening the +new spec. See the comments preceding Spec.createNewSpec(...).</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=102">102</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Incorrect links in displayed PlusCal translator error message</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>ASSIGNED + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=26">this is a tla file + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=102#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-04-17 21:35:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">In the soon-to-be-attached example, the +PlusCal translator reports missing labels in two locations. When the +Toolbox displays that message, it seems to attach links to the two +locations that both refer to the first location.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=102#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-04-17 21:36:59 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=26" name="attach_26" title="this is a tla file">attachment 26</a> <a href="https://54.195.32.3/attachment.cgi?id=26&action=edit" title="this is a tla file">[details]</a></span> +this is a tla file</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=102#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-06-11 10:44:20 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I just noticed that this was filed under +the wrong component. It looks like yet another bug in the Toolbox's +parsing of output of the programs it calls.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=103">103</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">I/O and backend calls not sufficiently decoupled from UI (main) thread</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>daniel.bmore.ricketts, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Linux</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=103#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-04 14:28:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">File > Open Spec > a fairly large +spec causes the UI to hang. This is due to parsing the model in the UI +thread. Same happens, if File > Parse Spec is clicked. +The appropriate command handles have to take care of decoupling the +parsing from the UI thread by using a short-lived Thread or an +org.eclipse.core.runtime.jobs.Job.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=103#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Simon Zambrovski</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-06 20:59:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I remeber a discussion between Leslie and +me regarding this issue. I also remember that we decided to touch this +place on demand only, because Lesli ensured me that the biggest spec he +ever saw was 64KB and Sany parses it in very few seconds, so it is +acceptable for the user to wait. + +There are several issues to solve if running the SANY in a separate +thread/job. +1. There is the synchronization issue with the Parse Status +2. During Parsing, the SpecObj and is not available, which means that +the most parts of smart editor functions doesn't work. + +Since we developed A MINIMAL parser integration solution, it worked for +us and it is ok to improve it in the current iteration. I would address +another important issue if you touch this place. Currently SANY runs a +complete reparse, which is a litte dump. Large specs consists of many +individual TLA+ modules and a modification usually doesn't affect all +the modules. So instead of parsing the spec starting from root module +every time, it would be better to only affected modules. I remember +Leslie and me discussed this issue and we even tried to implement it, +but then we left it as it is and decided to implement the easiest +parsing solution and improve it later. + +So, in short: YES, I vote for decoupling parsing from UI thread.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=103#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-11 15:19:20 UTC + </span> + </div> + + + +<pre class="bz_comment_text">*** <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED DUPLICATE - Non-automatic parsing locks UI" href="https://54.195.32.3/show_bug.cgi?id=78">Bug 78</a> has been marked as a duplicate of this bug. ***</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=103#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-27 13:25:07 UTC + </span> + </div> + + + +<pre class="bz_comment_text">More candidates: +org.lamport.tla.toolbox.tool.tlc.ui.editor.page.BasicFormPage.RunAction.run() +org.lamport.tla.toolbox.tool.tlc.ui.editor.ModelEditor.doSave(IProgressMonitor)</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=103#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-30 11:03:02 UTC + </span> + </div> + + + +<pre class="bz_comment_text">org.lamport.tla.toolbox.tool.tlc.traceexplorer.TraceExplorerComposite.doExplore()</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=103#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 19:58:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">org.lamport.tla.toolbox.tool.tlc.ui.modelexplorer.CloneModelContributionItem.getContributionItems()</pre> + </div><div id="c6" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=103#c6">Comment 6</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 19:59:05 UTC + </span> + </div> + + + +<pre class="bz_comment_text">*** <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED DUPLICATE - CloneModelContributionItem.getContributionItems() refreshes workspace in UI thread" href="https://54.195.32.3/show_bug.cgi?id=137">Bug 137</a> has been marked as a duplicate of this bug. ***</pre> + </div><div id="c7" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=103#c7">Comment 7</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 20:17:57 UTC + </span> + </div> + + + +<pre class="bz_comment_text">*** <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED DUPLICATE - "Produce PDF Version" handler executes PDF generation on the UI thread" href="https://54.195.32.3/show_bug.cgi?id=110">Bug 110</a> has been marked as a duplicate of this bug. ***</pre> + </div><div id="c8" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=103#c8">Comment 8</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 20:18:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">org.lamport.tla.toolbox.tool.tla2tex.handler.ProducePDFHandler.execute(ExecutionEvent)</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=104">104</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Bundle-RequiredExecutionEnvironment is set to J2SE-1.4 although Java5 API is used</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA Tools</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=27">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=104#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-09 10:14:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">org.lamport.tla.toolbox.* bundles use Java5 API but their BREE is set to Java 1.4.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=104#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-09 10:18:14 UTC + </span> + </div> + + + +<pre class="bz_comment_text">BREE has been set to Java 1.5</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=104#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-09 10:18:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=27" name="attach_27" title="mylyn/context/zip">attachment 27</a> <a href="https://54.195.32.3/attachment.cgi?id=27&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=105">105</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">org.lamport.tla.toolbox.tool.prover uses Java 1.6 API</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA Tools</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=28">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=105#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-09 10:23:53 UTC + </span> + </div> + + + +<pre class="bz_comment_text">java.lang.String.isEmpty() is not avaiable in Java 5</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=105#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-09 10:34:39 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released by replacing isEmpty() with length() == 0</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=105#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-09 10:34:40 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=28" name="attach_28" title="mylyn/context/zip">attachment 28</a> <a href="https://54.195.32.3/attachment.cgi?id=28&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=106">106</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Test dependencies not satisfied causing compiler errors in o.l.t.toolbox and o.l.t.toolbox.tool.tlc.ui</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA Tools</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Linux</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=29">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=106#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-09 12:29:50 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Both bundles may _optionally_ depend on +package "junit.framework" to satisfy the build time dependency but allow + Junits absence at runtime.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=106#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-09 12:45:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=106#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-09 12:45:17 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=29" name="attach_29" title="mylyn/context/zip">attachment 29</a> <a href="https://54.195.32.3/attachment.cgi?id=29&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=107">107</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Distributed TLC based on RMI broken</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=107#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-09 12:46:48 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Refactorings broke the RMI based distributed version of TLC.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=107#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-09 12:51:27 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Hi Simon, + +what's the reason you have deprecated all RMI related code? I have +hacked it to get back working and our manual tests appear to work. Real +tests are pending though.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=107#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Simon Zambrovski</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-09 21:39:39 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Somehow Yuan and me decided that we are not + able to make TLC work in distributed mode. From this point on I tried +to push all the refactorings through both code bases: the single machine + TLC, which I could test and through the distributed part wchi I could +not test. In order to distuinguish the one from another, I marked TLC +parts as depricated... I assume it was a mistake.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=107#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-31 11:37:51 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed in HEAD (more performance tests pending)</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=108">108</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Add framework to run automated UI tests</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Automated product build" href="https://54.195.32.3/show_bug.cgi?id=120">120</a> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr> + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=108#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-11 15:15:33 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Automated UI tests are a great time saver +especially when developing for multiple OS. SWTBot [0] allows to easily +write UI tests that can be executed automatically. + +[0] <a href="http://eclipse.org/swtbot/">http://eclipse.org/swtbot/</a></pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=108#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-31 11:40:20 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Framework released to HEAD</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=109">109</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Automatically detect pdflatex on the system</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=109#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-11 15:36:18 UTC + </span> + </div> + + + +<pre class="bz_comment_text">If pdflatex is not on the system path, an +incomprehensible dialog pops up complaining that pdflatex cannot be +found ("No such file or directory"). To make it easier for the user, +either: + +a) Find pdflatex automatically (CDT has facilities to located system +binaries) +b) Generate PDF directly in Java +c) Improve error dialog with a direct link to the Preferences > TLA+ +Prefs > PDF Viewer</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=110">110</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">"Produce PDF Version" handler executes PDF generation on the UI thread</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + DUPLICATE + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=110#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-11 15:38:21 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Canceling a long or stuck operation is impossible since the buttons don't work.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=110#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 20:15:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">org.lamport.tla.toolbox.tool.tla2tex.PDFHandlerThreadingTest has been added as a test case, though not activated yet.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=110#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 20:17:57 UTC + </span> + </div> + + + +<pre class="bz_comment_text"> +*** This bug has been marked as a duplicate of <a class="bz_bug_link + bz_status_NEW " title="NEW - I/O and backend calls not sufficiently decoupled from UI (main) thread" href="https://54.195.32.3/show_bug.cgi?id=103">bug 103</a> ***</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=111">111</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">NullPointerException when using spaces in application path (path to TLC java process)</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Mac OS</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Release Toolbox 1.3.2 or 1.4" href="https://54.195.32.3/show_bug.cgi?id=157">157</a> + </td> +<td> </td> + <td> </td> + </tr> + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=111#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-11 16:12:00 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When using a space in the app path on Mac +OS X, Toolbox throws a NPE while executing a model check. Changing the +path name to not contain a whitespace appears to prevent this error +(even thought the path gets renamed back to spaces again)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=111#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-17 16:35:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text">See <a class="bz_bug_link + bz_status_NEW " title="NEW - Toolbox crashed by out-of-memory exception" href="https://54.195.32.3/show_bug.cgi?id=82">bug# 82</a> (same code area)</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=111#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-18 13:04:17 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed by <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Upgrade to recent Eclipse RCP version" href="https://54.195.32.3/show_bug.cgi?id=116">bug #116</a></pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=112">112</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Open spec wizard accepts specs with illegal names</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=40">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=112#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-11 16:13:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Add a marker to the new spec wizard forbidding illegal names (like -)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=112#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-31 11:41:08 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed in HEAD, verified on Mac, Windows XP, Linux</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=112#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-31 11:41:09 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=40" name="attach_40" title="mylyn/context/zip">attachment 40</a> <a href="https://54.195.32.3/attachment.cgi?id=40&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=113">113</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox does not shut down gracefully with model checks still running</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=113#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-11 16:15:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Closing the Toolbox during a model check +causes exceptions (e.g. NPE) in different parts of the code base. The +assumption is, that the asynchronous jobs do not get canceled correctly +or themselves check if the Toolbox has quit.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=113#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-11 17:03:45 UTC + </span> + </div> + + + +<pre class="bz_comment_text">ENTRY org.eclipse.ui 4 4 2011-05-11 14:31:12.919 +!MESSAGE Failed to execute item toolbox.command.spec.new +!STACK 0 +org.eclipse.core.commands.ExecutionException: No activeWorkbenchWindow +found while executing toolbox.command.spec.new + at org.eclipse.ui.handlers.HandlerUtil.noVariableFound(HandlerUtil.java:40) + at +org.eclipse.ui.handlers.HandlerUtil.getVariableChecked(HandlerUtil.java:89) + at +org.eclipse.ui.handlers.HandlerUtil.getActiveWorkbenchWindowChecked(HandlerUtil.java:210) + at +org.lamport.tla.toolbox.ui.handler.NewSpecHandler.execute(NewSpecHandler.java:33) + at +org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at +org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at +org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at +org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at +org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820) + at +org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806) + at +org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1282) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1267) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1061) + at +org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot$2.run(AbstractSWTBot.java:159) + at +org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$5.doRun(UIThreadRunnable.java:221) + at +org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$1.run(UIThreadRunnable.java:89) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at +org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.runEventLoop(EventLoopProgressMonitor.java:123) + at +org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.isCanceled(EventLoopProgressMonitor.java:97) + at org.eclipse.core.internal.jobs.ThreadJob.isCanceled(ThreadJob.java:146) + at org.eclipse.core.internal.jobs.ThreadJob.waitForRun(ThreadJob.java:235) + at org.eclipse.core.internal.jobs.ThreadJob.joinRun(ThreadJob.java:199) + at org.eclipse.core.internal.jobs.ImplicitJobs.begin(ImplicitJobs.java:92) + at org.eclipse.core.internal.jobs.JobManager.beginRule(JobManager.java:286) + at +org.eclipse.core.internal.resources.WorkManager.checkIn(WorkManager.java:117) + at +org.eclipse.core.internal.resources.Workspace.prepareOperation(Workspace.java:1914) + at org.eclipse.core.internal.resources.Project.touch(Project.java:1270) + at org.lamport.tla.toolbox.spec.Spec.setLastModified(Spec.java:193) + at +org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.setSpecLoaded(WorkspaceSpecManager.java:242) + at +org.lamport.tla.toolbox.ui.handler.OpenSpecHandler.execute(OpenSpecHandler.java:64) + at +org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at +org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at +org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at +org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.lamport.tla.toolbox.util.UIHelper.runCommand(UIHelper.java:420) + at +org.lamport.tla.toolbox.ui.handler.NewSpecHandler.execute(NewSpecHandler.java:55) + at +org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at +org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at +org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at +org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at +org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820) + at +org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806) + at +org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1282) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1267) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1061) + at +org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot$2.run(AbstractSWTBot.java:159) + at +org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$5.doRun(UIThreadRunnable.java:221) + at +org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$1.run(UIThreadRunnable.java:89) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.swtbot.eclipse.core.UITestApplication.start(UITestApplication.java:54) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384)</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=113#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-12 08:48:22 UTC + </span> + </div> + + + +<pre class="bz_comment_text">!ENTRY org.eclipse.ui 4 0 2011-05-12 08:45:48.479 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (org.eclipse.swt.SWTException: Widget is disposed) + at org.eclipse.swt.SWT.error(SWT.java:4083) + at org.eclipse.swt.SWT.error(SWT.java:3998) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at org.lamport.tla.toolbox.ui.handler.NewSpecHandler.execute(NewSpecHandler.java:45) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820) + at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806) + at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1282) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1267) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1061) + at org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot$2.run(AbstractSWTBot.java:159) + at org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$5.doRun(UIThreadRunnable.java:221) + at org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$1.run(UIThreadRunnable.java:89) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.swtbot.eclipse.core.UITestApplication.start(UITestApplication.java:54) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) +Caused by: org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4083) + at org.eclipse.swt.SWT.error(SWT.java:3998) + at org.eclipse.swt.SWT.error(SWT.java:3969) + at org.eclipse.swt.widgets.Widget.error(Widget.java:466) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:403) + at org.eclipse.swt.widgets.Label.setImage(Label.java:524) + at org.eclipse.jface.dialogs.TitleAreaDialog.setTitleImage(TitleAreaDialog.java:650) + at org.eclipse.jface.wizard.WizardDialog.hardClose(WizardDialog.java:870) + at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:819) + at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:430) + at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1282) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1267) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1061) + at org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot$2.run(AbstractSWTBot.java:159) + at org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$5.doRun(UIThreadRunnable.java:221) + at org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$1.run(UIThreadRunnable.java:89) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + ... 47 more + +!ENTRY org.eclipse.ui 4 0 2011-05-12 08:45:48.482 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.NullPointerException) + at org.eclipse.swt.SWT.error(SWT.java:4083) + at org.eclipse.swt.SWT.error(SWT.java:3998) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.swtbot.eclipse.core.UITestApplication.start(UITestApplication.java:54) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) +Caused by: java.lang.NullPointerException + at org.lamport.tla.toolbox.util.UIHelper.runCommand(UIHelper.java:414) + at org.lamport.tla.toolbox.ui.handler.NewSpecHandler.execute(NewSpecHandler.java:55) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820) + at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806) + at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1282) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1267) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1061) + at org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot$2.run(AbstractSWTBot.java:159) + at org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$5.doRun(UIThreadRunnable.java:221) + at org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$1.run(UIThreadRunnable.java:89) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + ... 24 more</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=113#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-18 12:42:46 UTC + </span> + </div> + + + +<pre class="bz_comment_text">!ENTRY org.eclipse.core.jobs 4 2 2011-05-18 + 12:41:33.895 +!MESSAGE An internal error occurred during: "Parsing spec...". +!STACK 0 +java.lang.NullPointerException + at +org.lamport.tla.toolbox.ui.contribution.StatusReflectingSpecLifecycleParticipant.initialize(StatusReflectingSpecLifecycleParticipant.java:23) + + at +org.lamport.tla.toolbox.util.SpecLifecycleManager.initialize(SpecLifecycleManager.java:49) + + at +org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.<init>(WorkspaceSpecManager.java:58) + + at org.lamport.tla.toolbox.Activator.getSpecManager(Activator.java:297) + at +org.lamport.tla.toolbox.util.ResourceHelper.getResourceByName(ResourceHelper.java:147) + + at +org.lamport.tla.toolbox.util.ResourceHelper.getResourceByModuleName(ResourceHelper.java:137) + + at +org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:258) + + at +org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:83) + + at +org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:56) + + at +org.lamport.tla.toolbox.spec.parser.SpecificationParserLauncher.parseSpecification(SpecificationParserLauncher.java:38) + + at +org.lamport.tla.toolbox.spec.nature.ParserHelper$2.run(ParserHelper.java:75) + + at +org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975) + at +org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1957) + at +org.lamport.tla.toolbox.spec.nature.ParserHelper.rebuildSpec(ParserHelper.java:81) + + at +org.lamport.tla.toolbox.ui.handler.OpenSpecHandler$1.run(OpenSpecHandler.java:73) + + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=113#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-19 18:50:03 UTC + </span> + </div> + + + +<pre class="bz_comment_text">java.lang.NullPointerException + at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1196) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1984) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1957) + at org.lamport.tla.toolbox.spec.nature.ParserHelper.rebuildSpec(ParserHelper.java:81) + at org.lamport.tla.toolbox.ui.handler.OpenSpecHandler$1.run(OpenSpecHandler.java:73) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=113#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-19 18:50:20 UTC + </span> + </div> + + + +<pre class="bz_comment_text">!ENTRY org.eclipse.core.jobs 4 2 2011-05-18 12:56:17.191 +!MESSAGE An internal error occurred during: "Parsing spec...". +!STACK 0 +java.lang.NullPointerException + at org.lamport.tla.toolbox.util.RCPNameToFileIStream.initInternalLibraryPath(RCPNameToFileIStream.java:58) + at org.lamport.tla.toolbox.util.RCPNameToFileIStream.<init>(RCPNameToFileIStream.java:48) + at org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:128) + at org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:83) + at org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:56) + at org.lamport.tla.toolbox.spec.parser.SpecificationParserLauncher.parseSpecification(SpecificationParserLauncher.java:38) + at org.lamport.tla.toolbox.spec.nature.ParserHelper$2.run(ParserHelper.java:75) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1957) + at org.lamport.tla.toolbox.spec.nature.ParserHelper.rebuildSpec(ParserHelper.java:81) + at org.lamport.tla.toolbox.ui.handler.OpenSpecHandler$1.run(OpenSpecHandler.java:73) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=114">114</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Grey out edit button in model editor unless selection in declared constants table</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=114#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-11 16:24:25 UTC + </span> + </div> + + + +<pre class="bz_comment_text">User reports indicate that the model editor + Edit button for the constants should be greyed out unless a valid +selection in the table is present. Otherwise one might think the button +does no function correctly since clicking it has no effect.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=114#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-11 16:25:17 UTC + </span> + </div> + + + +<pre class="bz_comment_text">!ENTRY org.eclipse.ui 4 0 2011-05-11 +16:22:22.313 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: null argument: + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:73) + at +org.lamport.tla.toolbox.tool.tlc.ui.editor.part.ValidateableConstantSectionPart.doEditFormula(ValidateableConstantSectionPart.java:37) + + at +org.lamport.tla.toolbox.tool.tlc.ui.editor.part.ValidateableConstantSectionPart.doEdit(ValidateableConstantSectionPart.java:80) + + at +org.lamport.tla.toolbox.tool.tlc.ui.editor.part.ValidateableTableSectionPart$1.widgetSelected(ValidateableTableSectionPart.java:67) + + at +org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234) + + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3540) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3161) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) + + +Clicking the button with a selection</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=115">115</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Open .tla from the system by double clicking in TLA Toolbox</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Upgrade to recent Eclipse RCP version" href="https://54.195.32.3/show_bug.cgi?id=116">116</a> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr> + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=115#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-11 16:34:07 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This feature has been added with Eclipse 3.6 (Helios release) [0]. + +[0] <a href="https://bugs.eclipse.org/4922">https://bugs.eclipse.org/4922</a></pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=115#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-04 09:57:33 UTC + </span> + </div> + + + +<pre class="bz_comment_text">See Eclipse bug <a href="https://bugs.eclipse.org/4922">https://bugs.eclipse.org/4922</a></pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=115#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-04 10:28:49 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Documentation can be found on the Eclipse wiki: +- <a href="http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/product_open_file.htm">http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/product_open_file.htm</a> +- <a href="http://wiki.eclipse.org/Eclipse/OpenFileFeature">http://wiki.eclipse.org/Eclipse/OpenFileFeature</a></pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=116">116</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Upgrade to recent Eclipse RCP version</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td><a class="bz_bug_link + bz_status_NEW " title="NEW - Open .tla from the system by double clicking in TLA Toolbox" href="https://54.195.32.3/show_bug.cgi?id=115">115</a>, <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Eclipse buttons don't work on Linux ubuntu 9.10" href="https://54.195.32.3/show_bug.cgi?id=10">10</a> + </td> +<td> </td> + <td> </td> + </tr> + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=116#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-11 16:45:13 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The Toolbox ships on top of Eclipse 3.5 (2009). This bugs require a more recent version of Eclipse. + +Since this change potentially introduces new bugs, it shouldn't be done lightheadedly though.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=116#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-18 10:15:22 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed a while ago with the introduction of an automated build</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=117">117</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Adobe PDF opens up in a separate windows instead of embedded editor</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLATEX Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=117#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-11 16:51:24 UTC + </span> + </div> + + + +<pre class="bz_comment_text">It has been reported that on Windows 7 a +generated PDF does not open up inside the Toolbox editor but in a +separate Adobe windows.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=118">118</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">"Translate PlusCal Algorithm" handle may only be enabled if spec indeed contains a PlusCal definition</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=118#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-11 16:55:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text"></pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=118#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-17 16:31:11 UTC + </span> + </div> + + + +<pre class="bz_comment_text">LL comment: Even go further and do not show the translation button unless the current spec contains a PlusCal spec.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=119">119</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">German keyboard layout does not match ASCII values</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Mac OS</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=119#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-11 19:08:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">A user reported that: "The first time I +tried to create a example project but I could not type “[ ]” It seems +that TLA+ is not recognizing special chars like “[ ] { }”, when input +method in Mac OS X is set to German. If you set it to English it works."</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=120">120</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Automated product build</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Add framework to run automated UI tests" href="https://54.195.32.3/show_bug.cgi?id=108">108</a> + </td> +<td> </td> + <td> </td> + </tr> + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=120#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-12 13:32:11 UTC + </span> + </div> + + + +<pre class="bz_comment_text">TLA+ Toolbox currently is build manually from inside the development environment. A headless build should replace this task.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=120#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-31 11:41:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to SVN + +run "mvn install" in the tla2-inria/ folder to build products</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=121">121</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Renaming spec broken, causing inconsistent projects even after Toolbox restart</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Renaming a spec does not change model configuration file names" href="https://54.195.32.3/show_bug.cgi?id=58">58</a> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr> + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=121#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-17 16:39:21 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Renaming a spec causes the renamed spec to +vanish from the spec explorer. After restarting the toolbox both the +renamed as well as the new spec show up. + +If the underlying fix proves difficult, greying out "Rename" from the +context menu should be considered.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=121#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-14 18:57:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Is a spec rename even supposed to change the name of the root .tla file as well as the module name inside?</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=121#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-18 11:20:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed in HEAD</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=122">122</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Generated PDF does not show in embedded browser hard locking the Toolbox</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Linux</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=122#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-18 08:22:30 UTC + </span> + </div> + + + +<pre class="bz_comment_text">On Ubuntu Natty 11.04 producing a PDF +causes the progress bar to come up which hard locks at approximately +50%. No multipage editor with the embedded browser is ever shown. +The only option to recover from this situation is to forcefully kill the + Toolbox (which might cause data loss).</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=122#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-18 08:46:14 UTC + </span> + </div> + + + +<pre class="bz_comment_text">It appears as if reinstalling +"xulrunner-1.9.2" fixed the hard lock issue. It must have somehow +reseted the file handling in Mozilla Firefox (purging ~/.mozilla/eclipse + did not help). Now the editor page opens up, but instead of showing the + PDF, it prompts to save the file to disk.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=123">123</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Statusline should indicate "unparsed" state on dirty editor</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=30">Protocol Bernhard Schildendorfer + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=31">Report Bernd Wittman + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=123#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-18 08:30:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">"[...] it was not possible to enter +behavior spec in the model for an existing specification. Although the +Spec Status was displayed as “parsed”, the input fields were disabled. +It turned +out that the specification contained errors, but the spec status was +displayed wrong because it was a new specification. After parsing the +spec manually, an error occurred because of [...]" (Bernhard +Schildendorfer)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=123#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-18 08:37:55 UTC + </span> + </div> + + + +<pre class="bz_comment_text">"Changes in the TLA-Module-Window are not indicated in the “Spec Status” Field at the bottom of the +window. From my point of view, each editing action should be indicated in the “Spec Status” as +“unknown” or similar (independently of the file-save-status). Also, by executing the TLC Model +Checker, no “Do you want to save the modified resources” announcement is displayed in reference to +changes in the TLA-Module-Window." (Bernd Wittmann)</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=123#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-18 09:41:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=30" name="attach_30" title="Protocol Bernhard Schildendorfer">attachment 30</a> <a href="https://54.195.32.3/attachment.cgi?id=30&action=edit" title="Protocol Bernhard Schildendorfer">[details]</a></span> +Protocol Bernhard Schildendorfer + +see page 4 to 5</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=123#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-18 09:49:39 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=31" name="attach_31" title="Report Bernd Wittman">attachment 31</a> <a href="https://54.195.32.3/attachment.cgi?id=31&action=edit" title="Report Bernd Wittman">[details]</a></span> +Report Bernd Wittman + +see page 2</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=124">124</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">PDF editor pages stays empty with error message indicating that the file could not be loaded</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows 7</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=32">Report Silvia Straihammer + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=124#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-18 08:36:40 UTC + </span> + </div> + + + +<pre class="bz_comment_text">"If I generate PDF to view the tla-File, +the program asks me if I want to open or save the pdf-File. But the pdf +is already stored in the same directory as the tla-File. If I click on +the “open”-Button it lasts a relative long time until it opens the +external Reader and the pdf-viewer says: “The navigation to the website +was aborted”. Why is it necessary to download the pdf-File?" (Silvia +Straithammer) + +The report does not really indicate if this happened on Vista or Windows + 7. Will leave it as Windows 7 for now.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=124#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-18 09:51:06 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=32" name="attach_32" title="Report Silvia Straihammer">attachment 32</a> <a href="https://54.195.32.3/attachment.cgi?id=32&action=edit" title="Report Silvia Straihammer">[details]</a></span> +Report Silvia Straihammer</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=125">125</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox fails to detect default VM installation on first run</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>leuschel, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Mac OS</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Release Toolbox 1.3.2 or 1.4" href="https://54.195.32.3/show_bug.cgi?id=157">157</a> + </td> +<td> </td> + <td> </td> + </tr> + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=125#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-19 18:52:07 UTC + </span> + </div> + + + +<pre class="bz_comment_text">It has been reported, that the Toolbox fails to start if not installed into Applications/. Verification pending...</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=125#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-10 18:51:54 UTC + </span> + </div> + + + +<pre class="bz_comment_text">While running performance tests, I have made following observations (Mac OS X 10.0.6 x86_64): +a) Toolbox does not have to be installed in Applications/ +b) First toolbox run model checking throws an NPE +c) A toolbox restart fixes the NPE irregardless of where it is installed</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=125#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-10 18:59:44 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Job 'TLC run for Model_1' terminated with status: { Error } + +!ENTRY org.eclipse.core.jobs 4 2 2011-06-10 18:59:05.167 +!MESSAGE An internal error occurred during: "TLC run for Model_1". +!STACK 0 +java.lang.NullPointerException + at org.lamport.tla.toolbox.tool.tlc.job.TLCProcessJob.run(TLCProcessJob.java:108) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=125#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-10 19:01:15 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The root cause appears to be that the +toolbox fails to find the default VM installation +(org.eclipse.jdt.launching.JavaRuntime.getDefaultVMInstall()) on its +first run. Updating bug title to reflect this.</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=125#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-22 16:10:09 UTC + </span> + </div> + + + +<pre class="bz_comment_text">If bundle "org.eclipse.jdt.launching.macosx" is missing, eclipse fails to detect/find the VM on Mac.</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=125#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 20:00:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">*** <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED DUPLICATE - Internal Error when running TLC on Mac" href="https://54.195.32.3/show_bug.cgi?id=133">Bug 133</a> has been marked as a duplicate of this bug. ***</pre> + </div><div id="c6" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=125#c6">Comment 6</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-18 13:04:21 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed by <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Upgrade to recent Eclipse RCP version" href="https://54.195.32.3/show_bug.cgi?id=116">bug #116</a></pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=126">126</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">NPE in Add Spec handler when parent directory does not exist</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=68">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=126#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-24 08:31:15 UTC + </span> + </div> + + + +<pre class="bz_comment_text">For the user it appears as if the Finish button has no functionality. + +!SUBENTRY 1 org.lamport.tla.toolbox 4 0 2011-05-23 12:11:38.434 +!MESSAGE Error creating TLA+ file +!STACK 0 +java.io.IOException: No such file or directory + at java.io.UnixFileSystem.createFileExclusively(Native Method) + at java.io.File.createNewFile(File.java:883) + at org.lamport.tla.toolbox.job.NewTLAModuleCreationOperation.run(NewTLAModuleCreationOperation.java:47) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1957) + at org.lamport.tla.toolbox.ui.wizard.NewSpecWizard.performFinish(NewSpecWizard.java:51) + at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:811) + at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:430) + at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3540) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3161) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at org.lamport.tla.toolbox.ui.handler.NewSpecHandler.execute(NewSpecHandler.java:45) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820) + at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806) + at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3540) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3161) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=126#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-14 11:24:08 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=126#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-14 11:24:09 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=68" name="attach_68" title="mylyn/context/zip">attachment 68</a> <a href="https://54.195.32.3/attachment.cgi?id=68&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=127">127</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Graph windows do not have a title bar making it impossible to close</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Linux</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=58">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=127#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-25 14:59:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The graph title bar is missing on Linux +(click on the column title to open it), which makes it impossible to +close the graphs. No shortcuts appear to help either.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=127#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-06 13:18:59 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed in HEAD + +Removed SWT.ON_TOP style bit which screws up on Linux/GTK and which does not have a visible effect on Win or Mac.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=127#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-06 13:19:02 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=58" name="attach_58" title="mylyn/context/zip">attachment 58</a> <a href="https://54.195.32.3/attachment.cgi?id=58&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=128">128</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">util.SimpleFilenameToStream.locate(String) fails if path contains whitespaces</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - TLCWorker may read specification and configuration from TLCServer via RMI" href="https://54.195.32.3/show_bug.cgi?id=129">129</a> + </td> +<td> </td> + <td> </td> + </tr> + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=33">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=128#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-26 14:24:46 UTC + </span> + </div> + + + +<pre class="bz_comment_text">\\C:\\Documents%20and%20Settings\\markus\\tlatoolbox\\tlatools\\class\\tla2sany\\StandardModules\\ + vs "\\C:\\Documents and +Settings\\markus\\tlatoolbox\\tlatools\\class\\tla2sany\\StandardModules\\"</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=128#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-27 09:16:02 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD, verified on Mac OS X, Windows XP (x86) and Linux.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=128#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-27 09:16:05 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=33" name="attach_33" title="mylyn/context/zip">attachment 33</a> <a href="https://54.195.32.3/attachment.cgi?id=33&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=129">129</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLCWorker may read specification and configuration from TLCServer via RMI</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA Tools</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - util.SimpleFilenameToStream.locate(String) fails if path contains whitespaces" href="https://54.195.32.3/show_bug.cgi?id=128">128</a> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr> + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=55">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=129#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-26 14:26:49 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Instead of requiring the user to copy the +specification and configuration files to all workers, workers may read +the files with RMI.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=129#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 19:57:43 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Closing as fixed, RMI has been added to TLCServerRMI.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=129#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 19:57:44 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=55" name="attach_55" title="mylyn/context/zip">attachment 55</a> <a href="https://54.195.32.3/attachment.cgi?id=55&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=130">130</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">tlc2.util.ByteUtilsTest fails to create test file</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Linux</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=34">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=130#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-27 09:54:49 UTC + </span> + </div> + + + +<pre class="bz_comment_text">-- Error Log from JUnit -- +Class: tlc2.util.ByteUtilsTest +Method: test4 +Actual: null +Expected: null +Stack Trace: +java.io.FileNotFoundException: test (Is a directory) + at java.io.FileOutputStream.open(Native Method) + at java.io.FileOutputStream.<init>(FileOutputStream.java:179) + at java.io.FileOutputStream.<init>(FileOutputStream.java:70) + at tlc2.util.ByteUtilsTest.mainTestWriteLongReadLong(ByteUtilsTest.java:156) + at tlc2.util.ByteUtilsTest.test4(ByteUtilsTest.java:73) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at junit.framework.TestCase.runTest(TestCase.java:164) + at junit.framework.TestCase.runBare(TestCase.java:130) + at junit.framework.TestResult$1.protect(TestResult.java:106) + at junit.framework.TestResult.runProtected(TestResult.java:124) + at junit.framework.TestResult.run(TestResult.java:109) + at junit.framework.TestCase.run(TestCase.java:120) + at junit.framework.TestSuite.runTest(TestSuite.java:230) + at junit.framework.TestSuite.run(TestSuite.java:225) + at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130) + at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) + at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) + at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) + at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) + at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=130#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-27 10:00:15 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD, verified on Linux</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=130#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-27 10:00:19 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=34" name="attach_34" title="mylyn/context/zip">attachment 34</a> <a href="https://54.195.32.3/attachment.cgi?id=34&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=131">131</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">tlc2.util.BigInt.equals causes java.lang.StackOverflowError</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=35">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=131#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-27 10:02:40 UTC + </span> + </div> + + + +<pre class="bz_comment_text">-- Error Log from JUnit -- +Class: tlc2.util.ByteUtilsTest +Method: test5 +Actual: null +Expected: null +Stack Trace: +java.lang.StackOverflowError + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=131#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-27 10:17:45 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD, verified on Linux</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=131#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-27 10:17:48 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=35" name="attach_35" title="mylyn/context/zip">attachment 35</a> <a href="https://54.195.32.3/attachment.cgi?id=35&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=132">132</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Open Saved Module menu item not grayed out</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P5">P5 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=132#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-29 17:23:12 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Open Saved Module item on the The TLC Model + Checker menu should be grayed out if no model is selected. Currently, +it's not grayed out but clicking on it does nothing. This will confuse +naive users who have no idea what that command does. (They'll probably +still be confused if they use that command when it is enabled, but at +least they have a chance of figuring it out--and may perhaps go to the +help pages to find out.)</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=133">133</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Internal Error when running TLC on Mac</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Michael Leuschel <leuschel></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + DUPLICATE + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Mac OS</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=133#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Michael Leuschel</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-30 16:44:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I am trying to run TLC from the TLA toolbox 1.3.1 on Mac OS X 10.6.7. +Whenever I try to run TLC I get the error message: + +An internal error occurred during: "TLC run for Model_1". +java.lang.NullPointerException + +This happens both using the 32-bit and the 64-bit version. +The Hardware is a MacBook Pro Core2Duo 3.06 GHz. +It happens with all my specifications and models (which ran successfully on 1.1.0 from Feb 5, 2010). +I have also tried creating new specifications from scratch; without success. + +(As a side-not: the "About TLA Toolbox" menu command seems to perform no action.)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=133#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-30 17:38:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">(In reply to <a href="https://54.195.32.3/show_bug.cgi?id=133#c0">comment #0</a>) +<span class="quote">> I am trying to run TLC from the TLA toolbox 1.3.1 on Mac OS X 10.6.7. +> Whenever I try to run TLC I get the error message: +> +> An internal error occurred during: "TLC run for Model_1". +> java.lang.NullPointerException +> +> This happens both using the 32-bit and the 64-bit version. +> The Hardware is a MacBook Pro Core2Duo 3.06 GHz. +> It happens with all my specifications and models (which ran successfully on +> 1.1.0 from Feb 5, 2010). +> I have also tried creating new specifications from scratch; without success.</span> + +Hi Michael, + +this appears to be an incarnation of <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - NullPointerException when using spaces in application path (path to TLC java process)" href="https://54.195.32.3/show_bug.cgi?id=111">bug #111</a> and potentially <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Toolbox fails to detect default VM installation on first run" href="https://54.195.32.3/show_bug.cgi?id=125">bug #125</a> + too. Can you try and check if the workarounds mentioned on those bugs +solve your issue? + +Basically make sure that the toolbox is installed into Applcations/ and +that the path to the toolbox does not contain whitespaces. + +<span class="quote">> (As a side-not: the "About TLA Toolbox" menu command seems to perform no +> action.)</span> + +This already gets tracked in <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Extra menu for the toolbox on Mac" href="https://54.195.32.3/show_bug.cgi?id=27">bug #27</a>. + +Thanks +Markus</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=133#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 20:00:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text"> +*** This bug has been marked as a duplicate of <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Toolbox fails to detect default VM installation on first run" href="https://54.195.32.3/show_bug.cgi?id=125">bug 125</a> ***</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=134">134</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Distributed TLC does not compile on Java 1.5</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Linux</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=39">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=134#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-31 09:25:14 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Description Resource Path Location Type +The constructor IOException(String, EOFException) is undefined +MemFPSet2.java /tlatools/src/tlc2/tool/fp line 235 Java Problem +Description Resource Path Location Type +The constructor IOException(String, IOException) is undefined +DiskFPSet.java /tlatools/src/tlc2/tool/fp line 147 Java Problem +Description Resource Path Location Type +The method getLiveRef() is undefined for the type UnicastRef +TLCServer.java /tlatools/src/tlc2/tool/distributed line 157 Java Problem</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=134#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-31 11:35:09 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=134#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-31 11:35:11 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=39" name="attach_39" title="mylyn/context/zip">attachment 39</a> <a href="https://54.195.32.3/attachment.cgi?id=39&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=135">135</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">NPE startup crash requiring Toolbox restart (happens randomly)</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Linux</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=41">Console output + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=42">mylyn/context/zip + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=54">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=135#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-31 11:52:21 UTC + </span> + </div> + + + +<pre class="bz_comment_text">!ENTRY org.eclipse.ui 4 0 2011-05-31 01:10:00.273 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NullPointerException + at org.lamport.tla.toolbox.util.SpecLifecycleManager$1.invoke(SpecLifecycleManager.java:30) + at org.lamport.tla.toolbox.util.SpecLifecycleManager.sendEventWithVeto(SpecLifecycleManager.java:80) + at org.lamport.tla.toolbox.util.SpecLifecycleManager.sendEvent(SpecLifecycleManager.java:64) + at org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.addSpec(WorkspaceSpecManager.java:156) + at org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.<init>(WorkspaceSpecManager.java:97) + at org.lamport.tla.toolbox.Activator.getSpecManager(Activator.java:297) + at org.lamport.tla.toolbox.ui.contribution.SizeControlContribution.updateSize(SizeControlContribution.java:90) + at org.lamport.tla.toolbox.ui.contribution.SizeControlContribution.createControl(SizeControlContribution.java:78) + at org.eclipse.jface.action.ControlContribution.fill(ControlContribution.java:97) + at org.eclipse.jface.action.ToolBarManager.update(ToolBarManager.java:353) + at org.eclipse.jface.action.ToolBarManager.createControl(ToolBarManager.java:111) + at org.eclipse.ui.internal.menus.TrimContributionManager$ToolBarTrimProxy.dock(TrimContributionManager.java:88) + at org.eclipse.ui.internal.menus.TrimContributionManager.update(TrimContributionManager.java:232) + at org.eclipse.ui.internal.WorkbenchWindow.updateLayoutDataForContents(WorkbenchWindow.java:3784) + at org.eclipse.ui.internal.WorkbenchWindow.setLayoutDataForContents(WorkbenchWindow.java:3795) + at org.eclipse.ui.internal.WorkbenchWindow.createDefaultContents(WorkbenchWindow.java:1113) + at org.eclipse.ui.internal.WorkbenchWindowConfigurer.createDefaultContents(WorkbenchWindowConfigurer.java:625) + at org.eclipse.ui.application.WorkbenchWindowAdvisor.createWindowContents(WorkbenchWindowAdvisor.java:268) + at org.eclipse.ui.internal.WorkbenchWindow.createContents(WorkbenchWindow.java:999) + at org.eclipse.jface.window.Window.create(Window.java:431) + at org.eclipse.ui.internal.Workbench$20.runWithException(Workbench.java:1032) + at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803) + at org.eclipse.ui.internal.Workbench$28.runWithException(Workbench.java:1384) + at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2316) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=135#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-31 11:53:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=41" name="attach_41" title="Console output">attachment 41</a> <a href="https://54.195.32.3/attachment.cgi?id=41&action=edit" title="Console output">[details]</a></span> +Console output</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=135#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-31 11:55:57 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I suspect the call to +org.eclipse.core.runtime.IConfigurationElement.createExecutableExtension(String) + in +org.lamport.tla.toolbox.util.SpecLifecycleManager.SpecLifecycleManager() + to return null on Eclipse <= 3.5. Eclipse bugzilla searches turn up +empty though.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=135#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-31 11:55:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=42" name="attach_42" title="mylyn/context/zip">attachment 42</a> <a href="https://54.195.32.3/attachment.cgi?id=42&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=135#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-31 11:56:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">To activate assertions in Eclipse follow <a href="http://tech.puredanger.com/2007/01/17/eclipse-assertions/">http://tech.puredanger.com/2007/01/17/eclipse-assertions/</a></pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=135#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-31 12:06:51 UTC + </span> + </div> + + + +<pre class="bz_comment_text">To avoid having to go to the Web to find out how to enable/disable assertions, here's the explanation from <a href="http://tech.puredanger.com/2007/01/17/eclipse-assertions/">http://tech.puredanger.com/2007/01/17/eclipse-assertions/</a> + +When using the JDK 1.4+ assert keyword, it’s nice in Eclipse to enable +them for all your launch configurations at once. The easiest way to do +this is to specify a default VM argument for your installed JDK. You can + do this by going to Windows -> Preferences -> Java -> +Installed JREs. Then select your JDK and click the Edit… button. In the +“Default VM Arguments” box, add -ea.</pre> + </div><div id="c6" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=135#c6">Comment 6</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-21 15:52:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Changed +ProverUIActivator.start(BundleContext) to access the preference store +from inside the UI thread to prevent SWT invalid thread access +exceptions.</pre> + </div><div id="c7" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=135#c7">Comment 7</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 19:56:00 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Changes in <a href="https://54.195.32.3/show_bug.cgi?id=135#c6">comment #6</a> seem to have done the trick, closing as fixed.</pre> + </div><div id="c8" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=135#c8">Comment 8</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 19:56:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=54" name="attach_54" title="mylyn/context/zip">attachment 54</a> <a href="https://54.195.32.3/attachment.cgi?id=54&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=136">136</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">NPE in UIHelper.runCommand() if workbench window is inactive</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=136#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-05-31 15:13:18 UTC + </span> + </div> + + + +<pre class="bz_comment_text">!ENTRY org.eclipse.ui 4 4 2011-05-31 15:03:36.247 +!MESSAGE An internal error has occurred. +!STACK 0 +java.lang.NullPointerException + at org.lamport.tla.toolbox.util.UIHelper.runCommand(UIHelper.java:417) + at org.lamport.tla.toolbox.ui.handler.NewSpecHandler$2$1.runInUIThread(NewSpecHandler.java:168) + at org.eclipse.ui.progress.UIJob$1.run(UIJob.java:95) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.swt.widgets.Display.release(Display.java:3215) + at org.eclipse.swt.graphics.Device.dispose(Device.java:246) + at org.lamport.tla.toolbox.Application.start(Application.java:50) + at org.eclipse.swtbot.eclipse.core.UITestApplication.start(UITestApplication.java:54) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384)</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=137">137</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">CloneModelContributionItem.getContributionItems() refreshes workspace in UI thread</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + DUPLICATE + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=137#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-01 11:14:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">org.lamport.tla.toolbox.tool.tlc.ui.modelexplorer.CloneModelContributionItem.getContributionItems() + triggers a local workspace refresh each time the UI asks for +contribution items. This is an expensive operation and should be +refactored into a non-UI job.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=137#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-08 08:59:18 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Causing the following test failure: + +junit.framework.AssertionFailedError: Backend code (e.g. parsing must +not be executed in UI thread) times executed: 14 + at junit.framework.Assert.fail(Assert.java:47) + at junit.framework.Assert.assertTrue(Assert.java:20) + at junit.framework.Assert.assertFalse(Assert.java:34) + at +org.lamport.tla.toolbox.tool.tlc.ui.test.threading.HandlerThreadingTest.assertNoBackendCodeInUIThread(HandlerThreadingTest.java:99) + + at +org.lamport.tla.toolbox.tool.tlc.ui.test.threading.HandlerThreadingTest.parseSpecInNonUIThread(HandlerThreadingTest.java:88) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at +org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) + + at +org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) + + at +org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) + + at +org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) + + at +org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) + + at +org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) + + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) + at +org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) + + at org.junit.runners.ParentRunner.run(ParentRunner.java:236) + at +org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner.run(SWTBotJunit4ClassRunner.java:54) + + at +org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) + + at +org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) + + at +org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) + + at +org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) + + at +org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) + + at +org.eclipse.swtbot.eclipse.core.RemotePluginTestRunner.main(RemotePluginTestRunner.java:64) + + at +org.eclipse.swtbot.eclipse.core.UITestApplication.runTests(UITestApplication.java:117) + + at +org.eclipse.ui.internal.testing.WorkbenchTestable$1.run(WorkbenchTestable.java:71) + + at java.lang.Thread.run(Thread.java:680)</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=137#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 19:59:05 UTC + </span> + </div> + + + +<pre class="bz_comment_text"> +*** This bug has been marked as a duplicate of <a class="bz_bug_link + bz_status_NEW " title="NEW - I/O and backend calls not sufficiently decoupled from UI (main) thread" href="https://54.195.32.3/show_bug.cgi?id=103">bug 103</a> ***</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=138">138</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Missing view descriptor causes PartInitException at startup</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=72">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=138#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-02 10:38:55 UTC + </span> + </div> + + + +<pre class="bz_comment_text">!ENTRY org.eclipse.ui 4 4 2011-05-31 +18:30:35.320 +!MESSAGE Exception in +org.eclipse.ui.internal.FolderLayout.addView(String): +org.eclipse.ui.PartInitException: View descriptor not found: +org.eclipse.ui.navigator.ProjectExplorer + +!ENTRY org.eclipse.ui 4 4 2011-05-31 18:30:35.325 +!MESSAGE Exception in +org.eclipse.ui.internal.FolderLayout.addView(String): +org.eclipse.ui.PartInitException: View descriptor not found: +org.eclipse.ui.navigator.ProjectExplorer +!STACK 1 +org.eclipse.ui.PartInitException: View descriptor not found: +org.eclipse.ui.navigator.ProjectExplorer + at org.eclipse.ui.internal.FolderLayout.addView(FolderLayout.java:75) + at +org.eclipse.ui.internal.ide.application.ResourcePerspective.defineLayout(ResourcePerspective.java:84) + + at +org.eclipse.ui.internal.ide.application.ResourcePerspective.createInitialLayout(ResourcePerspective.java:49) + + at +org.eclipse.ui.internal.Perspective.loadPredefinedPersp(Perspective.java:816) + + at +org.eclipse.ui.internal.Perspective.createPresentation(Perspective.java:270) + + at +org.eclipse.ui.internal.Perspective.<init>(Perspective.java:156) + at +org.eclipse.ui.internal.tweaklets.Workbench3xImplementation.createPerspective(Workbench3xImplementation.java:55) + + at +org.eclipse.ui.internal.WorkbenchPage.createPerspective(WorkbenchPage.java:1672) + + at org.eclipse.ui.internal.WorkbenchPage.init(WorkbenchPage.java:2453) + at +org.eclipse.ui.internal.WorkbenchPage.<init>(WorkbenchPage.java:563) + + at +org.eclipse.ui.internal.tweaklets.Workbench3xImplementation.createWorkbenchPage(Workbench3xImplementation.java:39) + + at +org.eclipse.ui.internal.WorkbenchWindow.busyOpenPage(WorkbenchWindow.java:768) + + at +org.eclipse.ui.internal.Workbench$23.runWithException(Workbench.java:1221) + + at +org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at +org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803) + + at +org.eclipse.ui.internal.Workbench$31.runWithException(Workbench.java:1567) + + at +org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:179) + at +org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:150) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4282) + at +org.eclipse.ui.internal.StartupThreading.runWithoutExceptions(StartupThreading.java:94) + + at org.eclipse.ui.internal.Workbench.init(Workbench.java:1562) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2567) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at +org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115) + + at +org.eclipse.tycho.surefire.osgibooter.UITestApplication.runApplication(UITestApplication.java:31) + + at +org.eclipse.tycho.surefire.osgibooter.AbstractUITestApplication.run(AbstractUITestApplication.java:114) + + at +org.eclipse.tycho.surefire.osgibooter.UITestApplication.start(UITestApplication.java:37) + + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) +!SUBENTRY 1 org.eclipse.ui 4 0 2011-05-31 18:30:35.327 +!MESSAGE View descriptor not found: +org.eclipse.ui.navigator.ProjectExplorer</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=138#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-18 09:45:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=138#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-18 09:45:25 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=72" name="attach_72" title="mylyn/context/zip">attachment 72</a> <a href="https://54.195.32.3/attachment.cgi?id=72&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=139">139</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">"Evaluate Constant Expression" output shows set with duplicate elements</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Chris Newcombe <chris.newcombe></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA Tools</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows 7</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=139#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Chris Newcombe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-05 23:21:20 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Toolbox: 32-bit build of Version 1.3.1 +of 5 April 2011 (also happens with Version 1.2.1 of 29 September +2010) +Running on: Windows 7 Enterprise Edition, 64-bit. + +In ‘Evaluate Constant Expression’: + + TCRecur({<<a, b>>, <<b, c>>}) + +Produces this output; a value that claims to be a set (as intended), +but which has duplicate elements: + + {<<a, b>>, <<b, c>>, <<a, c>>, +<<a, b>>, <<b, c>>, <<a, c>>} + +The model has one constant, with the model value: + +Univ <- {a, b, c, d, e, f} + +The spec is an attempt to constructively define a transitive closure +operator on binary relations modeled as 2-tuples: + +------------------------- MODULE TransitiveClosure +------------------------- +CONSTANT Univ + +MissingJoinTuples(r1,r2) == {<<x, z>> \in (Univ \X Univ) : + /\ <<x, z>> \notin r1 + /\ <<x, z>> \notin r2 + /\ \E y \in Univ : <<x, y>> +\in r1 /\ <<y, z>> \in r2} + +TCRecur(r) == LET RECURSIVE selfJoin(_) + selfJoin(r1) == + LET mjt == MissingJoinTuples(r1, r1) + IN IF mjt = {} THEN r1 (* have reached least +fixpoint, so this must be transitive closure *) + ELSE LET bigger == r1 \union mjt + IN bigger \union selfJoin(bigger) + IN selfJoin(r) +=============================================================================</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=139#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-22 18:23:40 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This is a TLC bug in PrintT (and presumably + in Print as well). For example, PrintT({"a", "a"}) prints {"a", "a"}. + The method that puts a value into canonical form should be called +before printing the value, but that requires hunting through the TLC +code to find the appropriate method.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=139#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-22 18:55:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This seems to be trivial to fix, so I fixed + it. However, I haven't heard from Yuan that the fix is OK, so I'll +leave this open until I do.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=140">140</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Fingerprint server incorrectly retrieved with call by value instead of call by ref</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=43">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=140#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-07 15:34:27 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The fingerprint server is intended to be a shared (RMI) resource and thus must be accessed with call by reference semantics.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=140#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-07 15:34:53 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=140#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-07 15:34:54 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=43" name="attach_43" title="mylyn/context/zip">attachment 43</a> <a href="https://54.195.32.3/attachment.cgi?id=43&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=141">141</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">UniqueString has to be created by TLCServer in distributed mode</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=44">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=141#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-07 17:09:33 UTC + </span> + </div> + + + +<pre class="bz_comment_text">If TLC is run in distributed mode (RMI) on a + spec that uses the concat operator (\o), UniqueString instances have to + be created centrally by the server. Otherwise the same String value +might result in different internal unique identifiers.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=141#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-07 17:12:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD, UniqueString creation is now delegated to the central TLCServer (bottleneck).</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=141#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-07 17:12:02 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=44" name="attach_44" title="mylyn/context/zip">attachment 44</a> <a href="https://54.195.32.3/attachment.cgi?id=44&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=142">142</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLCServer fails due to missing fingerprint file on worker connect</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + INVALID + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Linux</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=142#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-08 10:35:53 UTC + </span> + </div> + + + +<pre class="bz_comment_text">java.io.FileNotFoundException: /tmp/spec/states/11-06-08-08-32-07/MC.fp (No such file or directory) + at java.io.RandomAccessFile.open(Native Method) + at java.io.RandomAccessFile.<init>(RandomAccessFile.java:212) + at tlc2.util.RandomAccessFile.<init>(RandomAccessFile.java:24) + at tlc2.util.BufferedRandomAccessFile.<init>(BufferedRandomAccessFile.java:111) + at tlc2.util.BufferedRandomAccessFile.<init>(BufferedRandomAccessFile.java:124) + at tlc2.tool.fp.DiskFPSet.addThread(DiskFPSet.java:195) + at tlc2.tool.distributed.TLCServer.registerWorker(TLCServer.java:145) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) + at sun.rmi.transport.Transport$1.run(Transport.java:159) + at java.security.AccessController.doPrivileged(Native Method) + at sun.rmi.transport.Transport.serviceCall(Transport.java:155) + at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) + at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) + at java.lang.Thread.run(Thread.java:662) + at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255) + at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233) + at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142) + at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178) + at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132) + at $Proxy0.registerWorker(Unknown Source) + at tlc2.tool.distributed.TLCWorker.main(TLCWorker.java:144)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=142#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-08 11:30:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Caused by g5k deployment script</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=143">143</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLCWorkers may wait for TLCServer to come online</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=45">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=143#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-09 09:25:42 UTC + </span> + </div> + + + +<pre class="bz_comment_text">If a TLCWorker fails to connect to the +TLCServer instance at startup it exists the process. This has proven +impractical for a distributed system. Hence, TLCWorkers may wait for the + server to come online by repeatedly trying to connect (with increasing +wait times).</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=143#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-09 09:29:17 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=143#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-09 09:29:18 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=45" name="attach_45" title="mylyn/context/zip">attachment 45</a> <a href="https://54.195.32.3/attachment.cgi?id=45&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=144">144</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Collect and report performance statistics for RMI distributed TLC</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=46">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=144#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-09 09:30:36 UTC + </span> + </div> + + + +<pre class="bz_comment_text">In order to improve distributed TLC, reproducable statistics have to be collected during runtime.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=144#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-09 11:58:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=144#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-09 11:58:07 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=46" name="attach_46" title="mylyn/context/zip">attachment 46</a> <a href="https://54.195.32.3/attachment.cgi?id=46&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=145">145</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox not reporting a TLC error</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td><a class="bz_bug_link + bz_status_NEW " title="NEW - Toolbox not reporting TLC error." href="https://54.195.32.3/show_bug.cgi?id=220">220</a> + </td> +<td> </td> + <td> </td> + </tr> + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=47">a zip file + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=145#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-09 18:51:02 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The console log shows that running a model +caused a TLC error (as it should have), but the Toolbox reported no +error or any other result for the run. The Toolbox ran TLC correctly on + a clone of the model. Below is a copy of the Eclipse console output +produced by the incorrect run. The model will be attached below. + +-------- + +footFileName = +C:\lamport\books\hyper-tla\specs\Channel\FGBoundedBuffer.tla +Writing files to: Model_1\ +---- + +Skipping resource: Model_1/FGBoundedBuffer.tla +Skipping resource: Model_1/MC.tla +Skipping resource: Model_1/PCalBoundedChannel.tla +---- + +Found algorithm definition in PCalBoundedChannel.tla +Found algorithm definition in FGBoundedBuffer.tla +entering removeModelProblemMarkers() on FGBoundedBuffer___Model_1 with +markerType set to org.lamport.tla.toolbox.tlc.modelErrorSANY +Final check for the modelcheck mode. The result of the check is true +--------------------------- +TLC ARGUMENTS: +--------------------------- +-checkpoint +3 +-config +MC.cfg +-coverage +3 +-workers +1 +-tool +-metadir +C:\lamport\books\hyper-tla\specs\Channel\FGBoundedBuffer.toolbox\Model_1 +MC +--------------------------- +END TLC ARGUMENTS +--------------------------- +entering removeModelProblemMarkers() on FGBoundedBuffer___Model_1 with +markerType set to org.lamport.tla.toolbox.tlc.modelErrorTLC +TLCOutputSourceRegistry for model checking maintains 4 sources. +The source FGBoundedBuffer___Model_1.launch has 4 prio and 1 listeners +The source BPConProof___Model_1.launch has 4 prio and 1 listeners +The source FGBoundedBuffer___Model_1_Copy.launch has 4 prio and 1 +listeners +The source PCalBoundedBuffer___Model_2.launch has 4 prio and 1 listeners +---- + +---- + +Found algorithm definition in PCalBoundedChannel.tla +Found algorithm definition in FGBoundedBuffer.tla + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2011-06-09 09:41:15.170 +!MESSAGE Error broadcasting the message +!STACK 0 +java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 1 + at java.util.Vector.get(Vector.java:694) + at +org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.createError(TLCModelLaunchDataProvider.java:586) + + at +org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.onOutput(TLCModelLaunchDataProvider.java:273) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:92) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:59) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:225) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:604) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:731) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:712) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:697) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:762) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1157) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1176) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:315) + + at +org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:25) + + at +org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + + at java.lang.Thread.run(Thread.java:619) + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2011-06-09 09:41:15.171 +!MESSAGE Error broadcasting the message +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: null argument:The +state encountered without the error describing the reason for it. This +is a bug. + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at +org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.onOutput(TLCModelLaunchDataProvider.java:245) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:92) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:59) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:225) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:604) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:731) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:712) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:697) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:762) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1157) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1176) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:315) + + at +org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:25) + + at +org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + + at java.lang.Thread.run(Thread.java:619) + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2011-06-09 09:41:15.202 +!MESSAGE Error broadcasting the message +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: null argument:The +state encountered without the error describing the reason for it. This +is a bug. + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at +org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.onOutput(TLCModelLaunchDataProvider.java:245) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:92) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:59) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:225) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:604) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:731) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:712) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:697) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:762) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1157) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1176) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:315) + + at +org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:25) + + at +org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + + at java.lang.Thread.run(Thread.java:619) + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2011-06-09 09:41:15.218 +!MESSAGE Error broadcasting the message +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: null argument:The +state encountered without the error describing the reason for it. This +is a bug. + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at +org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.onOutput(TLCModelLaunchDataProvider.java:245) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:92) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:59) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:225) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:604) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:731) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:712) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:697) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:762) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1157) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1176) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:315) + + at +org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:25) + + at +org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + + at java.lang.Thread.run(Thread.java:619) + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2011-06-09 09:41:15.233 +!MESSAGE Error broadcasting the message +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: null argument:The +state encountered without the error describing the reason for it. This +is a bug. + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at +org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.onOutput(TLCModelLaunchDataProvider.java:245) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:92) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:59) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:225) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:604) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:731) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:712) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:697) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:762) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1157) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1176) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:315) + + at +org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:25) + + at +org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + + at java.lang.Thread.run(Thread.java:619) + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2011-06-09 09:41:15.514 +!MESSAGE Error broadcasting the message +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: null argument:The +state encountered without the error describing the reason for it. This +is a bug. + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at +org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.onOutput(TLCModelLaunchDataProvider.java:245) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:92) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:59) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:225) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:604) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:731) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:712) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:697) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:762) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1157) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1176) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:315) + + at +org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:25) + + at +org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + + at java.lang.Thread.run(Thread.java:619) + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2011-06-09 09:41:15.545 +!MESSAGE Error broadcasting the message +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: null argument:The +state encountered without the error describing the reason for it. This +is a bug. + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at +org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.onOutput(TLCModelLaunchDataProvider.java:245) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:92) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:59) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:225) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:604) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:731) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:712) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:697) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:762) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1157) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1176) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:315) + + at +org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:25) + + at +org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + + at java.lang.Thread.run(Thread.java:619) + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2011-06-09 09:41:15.561 +!MESSAGE Error broadcasting the message +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: null argument:The +state encountered without the error describing the reason for it. This +is a bug. + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at +org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.onOutput(TLCModelLaunchDataProvider.java:245) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:92) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:59) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:225) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:604) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:731) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:712) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:697) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:762) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1157) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1176) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:315) + + at +org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:25) + + at +org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + + at java.lang.Thread.run(Thread.java:619) +---- + +---- + +Found algorithm definition in PCalBoundedChannel.tla +Found algorithm definition in FGBoundedBuffer.tla +Job 'TLC run for Model_1' terminated with status: { Done }</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=145#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-09 18:53:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=47" name="attach_47" title="a zip file">attachment 47</a> <a href="https://54.195.32.3/attachment.cgi?id=47&action=edit" title="a zip file">[details]</a></span> +a zip file + +The model in question is Model_1. The clone Model_1_Copy worked.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=146">146</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Deleting a model from one spec seems to delete models with the same name from all specs</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P2">P2 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=48">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=146#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-10 07:01:15 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Add a model named Foo to one spec. Close +that spec. Add a model named Foo to a second spec. Close that spec. +Re-open the first spec and delete the model named Foo. It will be +deleted from the second spec too. + +It's pretty amazing that I never noticed this before.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=146#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-10 07:26:03 UTC + </span> + </div> + + + +<pre class="bz_comment_text">It looks like the problem is in +DeleteModelHandler.java, which I presume is the handler for the Delete +Model command. The execute command has a loop that gets a list of +launch configurations and deletes any that have the right name. +However, instead of comparing the complete model name, which begins with + the spec name + "____", the comparison is against +ModelHelper.getModelName(...), which strips that stuff away. I presume +Simon thought that the list of launch configurations were only ones from + the current spec and they are from all specs, but I haven't tried +debugging to check this.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=146#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-10 19:46:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD + +- Simplified implementation by cutting out the middle man^delegate +- Multi-selection support added +- Decoupled delete operation from UI thread +-- Canceled +-- Progress +- Delete gets delegated to Workspace +-- Undo trivial to implement + +Unit/Func. tests pending... (manually tested on Linux and Mac)</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=146#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-10 19:46:56 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=48" name="attach_48" title="mylyn/context/zip">attachment 48</a> <a href="https://54.195.32.3/attachment.cgi?id=48&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=146#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 19:50:42 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Resolving as fixed, no unit tests have been written.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=147">147</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">NumberFormatException for input "2262 @!@!@java.lang.IllegalArgumentException: URI is not" during startup</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=49">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=147#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-10 14:20:30 UTC + </span> + </div> + + + +<pre class="bz_comment_text">!ENTRY org.eclipse.text 4 2 2011-06-10 +14:18:45.147 +!MESSAGE Problems occurred when invoking code from plug-in: +"org.eclipse.text". +!STACK 0 +java.lang.NumberFormatException: For input string: "2262 +@!@!@java.lang.IllegalArgumentException: URI is not" + at +java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) + + at java.lang.Integer.parseInt(Integer.java:458) + at java.lang.Integer.parseInt(Integer.java:499) + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCAnalyzer.getMessageCode(TagBasedTLCAnalyzer.java:295) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCAnalyzer.processTag(TagBasedTLCAnalyzer.java:132) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCAnalyzer.addTagEnd(TagBasedTLCAnalyzer.java:82) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:216) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:611) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:755) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:736) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:721) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:796) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1191) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1210) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:315) + + at +org.lamport.tla.toolbox.tool.tlc.output.LogFileReader.read(LogFileReader.java:52) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TLCOutputSourceRegistry.connect(TLCOutputSourceRegistry.java:163) + + at +org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.connectToSourceRegistry(TLCModelLaunchDataProvider.java:744) + + at +org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.<init>(TLCModelLaunchDataProvider.java:130) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TLCOutputSourceRegistry.getProvider(TLCOutputSourceRegistry.java:218) + + at +org.lamport.tla.toolbox.tool.tlc.ui.editor.page.ResultPage.loadData(ResultPage.java:231) + + at +org.lamport.tla.toolbox.tool.tlc.ui.editor.page.BasicFormPage.createFormContent(BasicFormPage.java:276) + + at org.eclipse.ui.forms.editor.FormPage$1.run(FormPage.java:152) + at +org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at +org.eclipse.ui.forms.editor.FormPage.createPartControl(FormPage.java:150) + + at +org.lamport.tla.toolbox.tool.tlc.ui.editor.ModelEditor.addPages(ModelEditor.java:478) + + at +org.eclipse.ui.forms.editor.FormEditor.createPages(FormEditor.java:138) + at +org.eclipse.ui.part.MultiPageEditorPart.createPartControl(MultiPageEditorPart.java:348) + + at +org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + + at +org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + + at +org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + + at +org.eclipse.ui.internal.EditorManager$5.runWithException(EditorManager.java:953) + + at +org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at +org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803) + + at +org.eclipse.ui.internal.Workbench$31.runWithException(Workbench.java:1567) + + at +org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2548) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) +TLCOutputSourceRegistry for model checking maintains 1 sources. +The source Test___Model_1.launch has 1 prio and 1 listeners</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=147#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-14 09:04:14 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=147#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-14 09:04:17 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=49" name="attach_49" title="mylyn/context/zip">attachment 49</a> <a href="https://54.195.32.3/attachment.cgi?id=49&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=148">148</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">util.SimpleFilenameToStream.getInstallationBasePath() + occasionally fails to lookup the StandardModules/ path because +java.lang.ClassLoader.getResource(String) returns in jar resource</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Linux</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=50">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=148#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-14 09:10:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">java.lang.ClassLoader.getResource(String) +does not behave deterministically WRT the resource it returns. This +causes util.SimpleFilenameToStream.getInstallationBasePath() to randomly + fail because it finds the StandardModules inside the "jar:file:" scheme + (URL) and not "file:". + +There are several ways to address this issue: +a) make resource loading deterministic +b) support loading from file: as well as jar:file: +c) derive an RCPSimpleFilenameToStream resolver that gets used by the +Toolbox</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=148#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-20 13:27:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Added b) in jar loading to util.SimpleFilenameToStream</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=148#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-20 13:27:37 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=50" name="attach_50" title="mylyn/context/zip">attachment 50</a> <a href="https://54.195.32.3/attachment.cgi?id=50&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=149">149</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Specs with no behavior specification don't work until you add and remove a behavior spec</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + WORKSFORME + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P2">P2 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=149#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-20 17:28:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">In the Toolbox, create a new spec whose +root module is + +------ Test ------- +ASSUME TRUE +=========== + +Create a model and run TLC on it. The Toolbox claims that TLC produces +the mysterious error %1%. + +Add the statement + + VARIABLE x + +but don't change the model. (It will still specify "no behavior +specification".) Running TLC produces the error + + The configuration file did not specify the initial state predicate. + +In both these cases, the TLC Console shows that TLC found no error, and +running TLC on the MC spec outside the Toolbox produces no error. + +Now add the definition + + Spec == x=0 /\ [][x'=x]_x + +to the module. Change the model to use Spec as the behavior +specification. Then (without running TLC) select "No behavior +Specification" +and run the model. It runs fine. Delete Spec from the behavior +specification field and select "No Behavior Specification". Again, the +model +runs fine. Delete the VARIABLE statement and the definition of Spec. +Again the model runs fine.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=149#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-20 17:37:55 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Correction: The error + + The configuration file did not specify the initial state predicate. + + actually was produced by TLC, even when running the MC file from outside the Toolbox.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=149#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-21 12:40:45 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The problem seems to have gone away when I restarted the Toolbox. I can no longer produce it.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=150">150</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox not asking for approval to run TLC when spec has been modified</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P5">P5 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=70">mylyn/context/zip + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=76">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=150#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-20 17:54:56 UTC + </span> + </div> + + + +<pre class="bz_comment_text">If you tried to run a model after modifying + the spec without saving the modifications, the Toolbox used to ask if +you wanted to save those modifications. It no longer does, but it +should. (You don't want to make a change, forget to save it, and then +start a model running before going home for the weekend.)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=150#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-14 17:41:15 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=150#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-14 17:41:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=70" name="attach_70" title="mylyn/context/zip">attachment 70</a> <a href="https://54.195.32.3/attachment.cgi?id=70&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=150#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-20 11:04:21 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Model editors should be saved implicitly. Only a dirty spec editor should raise a save dialog.</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=150#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-20 11:51:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD +(Raise save dialog for dirty spec editor)</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=150#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-20 11:51:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=76" name="attach_76" title="mylyn/context/zip">attachment 76</a> <a href="https://54.195.32.3/attachment.cgi?id=76&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=151">151</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser does not scale for large output</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>lamport, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=53">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=151#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-20 21:13:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Parsing ~70k lines of TLC output takes hours.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=151#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 19:48:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed and released to HEAD + +- Set VIRTUAL bit for coverage table to only create table items on +demand +- Group user content in console parser in a single token instead of a +token per char (breaks incomplete line support though) +- Buffer parser input up to complete lines (a complete has a line +ending)</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=151#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 19:48:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=53" name="attach_53" title="mylyn/context/zip">attachment 53</a> <a href="https://54.195.32.3/attachment.cgi?id=53&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=151#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 20:16:41 UTC + </span> + </div> + + + +<pre class="bz_comment_text">*** <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED DUPLICATE - Performance problem reading any non-trivial amount of TLC output" href="https://54.195.32.3/show_bug.cgi?id=90">Bug 90</a> has been marked as a duplicate of this bug. ***</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=152">152</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Improve keyboard experience</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=56">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=152#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-21 08:16:53 UTC + </span> + </div> + + + +<pre class="bz_comment_text">F11: Launch currently active model check</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=152#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-05 15:23:26 UTC + </span> + </div> + + + +<pre class="bz_comment_text">F11 added</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=152#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-05 15:23:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=56" name="attach_56" title="mylyn/context/zip">attachment 56</a> <a href="https://54.195.32.3/attachment.cgi?id=56&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=153">153</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Turn tla2tool.jar into OSGi bundle</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA Tools</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=51">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=153#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-22 17:16:36 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The Toolbox nests tla2tools.jar inside +bundle org.lamport.tla.toolbox. This workaround requires an extra build +cycle (manually triggering tlatoolbox's ant build) during development +every time a change is done to tlatoolbox/. + +To avoid this overhead, tlatools should be turned into a first class +OSGi citizen by converting it into a bundle. This adds no overhead to +non-OSGi usage.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=153#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-22 22:32:57 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=153#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-22 22:32:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=51" name="attach_51" title="mylyn/context/zip">attachment 51</a> <a href="https://54.195.32.3/attachment.cgi?id=51&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=154">154</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Platform specific bundles [net/filesystem] missing in distribution</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Release Toolbox 1.3.2 or 1.4" href="https://54.195.32.3/show_bug.cgi?id=157">157</a> + </td> +<td> </td> + <td> </td> + </tr> + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=86">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=154#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-23 11:02:37 UTC + </span> + </div> + + + +<pre class="bz_comment_text">All distribution bundles on <a href="http://research.microsoft.com/en-us/um/people/lamport/tla/toolbox.html">http://research.microsoft.com/en-us/um/people/lamport/tla/toolbox.html</a> + miss platform specific bundles for .net and .filesystem. This means +that the toolbox will use the less efficient platform independent +versions.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=154#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-01 16:04:36 UTC + </span> + </div> + + + +<pre class="bz_comment_text">.filesystem. has been added to the build. Marking as fixed. Tested on Mac, Win and Linux.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=154#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-01 16:04:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=86" name="attach_86" title="mylyn/context/zip">attachment 86</a> <a href="https://54.195.32.3/attachment.cgi?id=86&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=155">155</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Obscure PlusCal translator's command-line options don't work from inside Toolbox</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA Tools</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>ASSIGNED + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_trivial">trivial + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Priority:</th> + <td class="bz_P5">P5 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=155#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-28 12:59:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The PlusCal translator options -spec, +-myspec, -spec2, -myspec2, and -writeAST write the file AST.tla; the +first four read that AST.tla file to perform the translation. This file + is always written to and read from the directory from which the +translator is run. The Toolbox runs the translator from some obscure +directory somewhere, specifying the module name with a path. This works + all right, except for the -writeAST, since the user presumably wants to + see the AST.tla file. Not a big deal. Moreover, since these option +were broken in Version 1.5 and work only with the -version 1.4 option, + this bug is even less worth fixing. However, it's recorded here for +future reference. If these options are ever made to work again, it +would be a good idea to modify the translator to write the AST.tla file +in the same directory as the module containing the algorithm.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=156">156</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Trace Explorer exploration fails with stack overflow</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=52">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=156#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-30 10:11:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Running a trace exploration on the FindOp error trace reveals a stack overflow in SANY. + +Reproduce: +a) Model check FindOp with an invariant who causes an error trace (pc # "Done") +b) Add <<delim, leftTok>> to error trace exploration and hit explore</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=156#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-30 10:55:54 UTC + </span> + </div> + + + +<pre class="bz_comment_text">see tla2sany.drivers.<a class="bz_bug_link + bz_status_NEW " title="NEW - Trace Explorer exploration fails with stack overflow" href="https://54.195.32.3/show_bug.cgi?id=156">Bug156</a>TEStackOverflowTest.testFrontEndParse() for a test case showing this behavior.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=156#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-30 10:55:56 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=52" name="attach_52" title="mylyn/context/zip">attachment 52</a> <a href="https://54.195.32.3/attachment.cgi?id=52&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=156#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-30 10:56:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">LL: "The two different errors depending on +how much heap space SANY is given suggests that it might be caused by +the Toolbox putting some sort of weirdness into the TE.tla file."</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=156#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-06-30 11:24:57 UTC + </span> + </div> + + + +<pre class="bz_comment_text">TE.tla is written in +org.lamport.tla.toolbox.tool.tlc.launch.TraceExplorerDelegate.buildForLaunch(ILaunchConfiguration, + String, IProgressMonitor) starting in line #388.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=157">157</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Release Toolbox 1.3.2 or 1.4</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - NullPointerException when using spaces in application path (path to TLC java process)" href="https://54.195.32.3/show_bug.cgi?id=111">111</a>, <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Toolbox fails to detect default VM installation on first run" href="https://54.195.32.3/show_bug.cgi?id=125">125</a>, <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Platform specific bundles [net/filesystem] missing in distribution" href="https://54.195.32.3/show_bug.cgi?id=154">154</a>, <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Add distributed TLC documentation to HTML Toolbox help" href="https://54.195.32.3/show_bug.cgi?id=192">192</a>, <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Add Toolbox update site to support updating a Toolbox to the next release" href="https://54.195.32.3/show_bug.cgi?id=193">193</a> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr> + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=157#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 20:07:27 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This bug is intended as an umbrella bug for the next Toolbox release (it's either 1.3.2 or 1.4).</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=157#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 20:08:50 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix for <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Eclipse buttons don't work on Linux ubuntu 9.10" href="https://54.195.32.3/show_bug.cgi?id=10">bug #10</a> makes the comment on the website [0] obsolete. + +[0] <a href="http://research.microsoft.com/en-us/um/people/lamport/tla/toolbox.html#downloading">http://research.microsoft.com/en-us/um/people/lamport/tla/toolbox.html#downloading</a></pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=157#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 20:14:26 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Adding release stoppers</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=157#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-17 14:11:27 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Done already</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=158">158</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Run distributed TLC from Toolbox</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=158#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-01 20:33:30 UTC + </span> + </div> + + + +<pre class="bz_comment_text">It should be possible to run the +distributed TLC server instance from within the Toolbox. This makes it +easier for user because they don't have to start the server process +manually. Obviously it won't support larger experiments where the server + and the toolbox have to be separated (e.g. network topology and/or +hardware...).</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=158#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-06 20:54:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=159">159</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">NPE in NewSpecWizard job</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=57">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=159#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-06 10:03:44 UTC + </span> + </div> + + + +<pre class="bz_comment_text">!ENTRY org.eclipse.core.jobs 4 2 2011-07-06 10:02:11.580 +!MESSAGE An internal error occurred during: "NewSpecWizard job". +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: null argument: + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:73) + at org.eclipse.core.runtime.Path.initialize(Path.java:577) + at org.eclipse.core.runtime.Path.<init>(Path.java:163) + at org.lamport.tla.toolbox.ui.handler.NewSpecHandler$1.run(NewSpecHandler.java:90) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=159#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-06 10:07:03 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD +(check for valid rootfilename before running job)</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=159#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-06 10:07:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=57" name="attach_57" title="mylyn/context/zip">attachment 57</a> <a href="https://54.195.32.3/attachment.cgi?id=57&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=160">160</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">java.lang.ArithmeticException: / by zero in Graph window when column value is 0</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=160#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-06 12:16:57 UTC + </span> + </div> + + + +<pre class="bz_comment_text">!ENTRY org.eclipse.ui 4 0 2011-07-06 12:15:38.200 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.ArithmeticException: / by zero) + at org.eclipse.swt.SWT.error(SWT.java:4083) + at org.eclipse.swt.SWT.error(SWT.java:3998) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) +Caused by: java.lang.ArithmeticException: / by zero + at org.lamport.tla.toolbox.tool.tlc.ui.editor.page.ResultPage$DataDisplay$1.paintControl(ResultPage.java:997) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:223) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1282) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1267) + at org.eclipse.swt.widgets.Control.gtk_expose_event(Control.java:2783) + at org.eclipse.swt.widgets.Composite.gtk_expose_event(Composite.java:701) + at org.eclipse.swt.widgets.Canvas.gtk_expose_event(Canvas.java:167) + at org.eclipse.swt.widgets.Shell.gtk_expose_event(Shell.java:1204) + at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:1739) + at org.eclipse.swt.widgets.Control.windowProc(Control.java:4796) + at org.eclipse.swt.widgets.Display.windowProc(Display.java:4360) + at org.eclipse.swt.internal.gtk.OS._gtk_main_do_event(Native Method) + at org.eclipse.swt.internal.gtk.OS.gtk_main_do_event(OS.java:8189) + at org.eclipse.swt.widgets.Display.eventProc(Display.java:1238) + at org.eclipse.swt.internal.gtk.OS._gdk_window_process_updates(Native Method) + at org.eclipse.swt.internal.gtk.OS.gdk_window_process_updates(OS.java:5366) + at org.eclipse.swt.widgets.Control.update(Control.java:4755) + at org.eclipse.swt.widgets.Shell.setVisible(Shell.java:2004) + at org.eclipse.swt.widgets.Shell.open(Shell.java:1410) + at org.lamport.tla.toolbox.tool.tlc.ui.editor.page.ResultPage$DataDisplay.run(ResultPage.java:1033) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + ... 23 more</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=160#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-07 00:18:41 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This occurs when trying to graph a column +all of whose values are 0. Added a little hack to suppress the +overflow. It also seems to suppress the graph, but it's not worth +trying to fix that.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=161">161</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Serve TLCWorker via Java Webstart</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=59">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=161#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-06 18:05:13 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Making the TLCWorker app available via Java Webstart simplifies deployment in (user) scripts.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=161#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-06 20:50:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=161#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-06 20:50:49 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=59" name="attach_59" title="mylyn/context/zip">attachment 59</a> <a href="https://54.195.32.3/attachment.cgi?id=59&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=162">162</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Bootstrap JRE via Java Webstart</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=162#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-06 22:37:09 UTC + </span> + </div> + + + +<pre class="bz_comment_text">On Windows systems the browser can be used to bootstrap a JRE.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=162#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-07 14:04:02 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Accessing <a href="http://$toolbox_host:10996/">http://$TOOLBOX_HOST:10996/</a> + will now automatically check for an installed JRE and prompt the user +to install it if now JRE could be found. An initial search turns up +empty for unattended installation (it's probably a security feature +anyway)</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=163">163</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">NPE in SimpleFilenameToStream resolver when run from inside signed jar (required by web start)</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=60">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=163#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-07 10:52:43 UTC + </span> + </div> + + + +<pre class="bz_comment_text">java.lang.ExceptionInInitializerError + at tlc2.tool.distributed.TLCWorker.main(TLCWorker.java:161) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at com.sun.javaws.Launcher.executeApplication(Launcher.java:1804) + at com.sun.javaws.Launcher.executeMainClass(Launcher.java:1750) + at com.sun.javaws.Launcher.doLaunchApp(Launcher.java:1512) + at com.sun.javaws.Launcher.run(Launcher.java:130) + at java.lang.Thread.run(Thread.java:662) +Caused by: java.lang.NullPointerException + at util.SimpleFilenameToStream.getInstallationBasePath(SimpleFilenameToStream.java:61) + at util.SimpleFilenameToStream.<clinit>(SimpleFilenameToStream.java:45) + ... 10 more +Error: Failed to start worker at coconut for server coconut.local. +null</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=163#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-07 15:51:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD +(Lesson confirmed: never ever use File in your application, use InputStream instead)</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=163#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-07 15:51:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=60" name="attach_60" title="mylyn/context/zip">attachment 60</a> <a href="https://54.195.32.3/attachment.cgi?id=60&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=164">164</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Add custom system properties to TLCServer process launched from within Toolbox</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=61">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=164#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-07 11:14:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">In some scenarios the TLCServer process +requires extra system properties (e.g. java.rmi.server.hostname, +java.rmi.server.useLocalHostname, ... [0]). + +[0] <a href="http://download.oracle.com/javase/1.4.2/docs/guide/rmi/javarmiproperties.html">http://download.oracle.com/javase/1.4.2/docs/guide/rmi/javarmiproperties.html</a></pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=164#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-08 09:56:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=164#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-08 09:56:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=61" name="attach_61" title="mylyn/context/zip">attachment 61</a> <a href="https://54.195.32.3/attachment.cgi?id=61&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=165">165</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Startup exception/crash due to invalid thread access</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Linux</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=81">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=165#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-07 12:09:27 UTC + </span> + </div> + + + +<pre class="bz_comment_text">org.osgi.framework.BundleException: +Exception in org.eclipse.ui.internal.editors.text.EditorsPlugin.start() +of bundle org.eclipse.ui.editors. + at +org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:806) + + at +org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:755) + + at +org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:370) + + at +org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:284) + + at +org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:417) + + at +org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:265) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:106) + + at +org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:453) + + at +org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) + + at +org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:393) + + at +org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:33) + + at +org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:466) + + at +org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422) + + at +org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410) + + at +org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) + + at java.lang.ClassLoader.loadClass(ClassLoader.java:248) + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.visit(PCalDetectingBuilder.java:82) + + at +org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:112) + at +org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:64) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127) + + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:74) + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:110) + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:94) + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder.build(PCalDetectingBuilder.java:58) + + at +org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) + + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) + + at +org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) + + at +org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) + + at +org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) + + at +org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) + + at +org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=165#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-25 14:38:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=165#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-25 14:39:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=81" name="attach_81" title="mylyn/context/zip">attachment 81</a> <a href="https://54.195.32.3/attachment.cgi?id=81&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=166">166</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Interesting Obligations view: Could not create the view: Subclassing not allowed</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Loïc FEJOZ <loic></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_blocker">blocker + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 32-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Linux</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=69">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=166#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Loïc FEJOZ</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-07 15:39:26 UTC + </span> + </div> + + + +<pre class="bz_comment_text">In version 1.3.1 of 5 April 2011 running +under Linux, launching proof manager on an invalid proof raise the +following error. + +org.eclipse.swt.SWTException: Subclassing not allowed + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.SWT.error(SWT.java:3770) + at org.eclipse.swt.widgets.Widget.error(Widget.java:450) + at +org.eclipse.swt.widgets.ExpandItem.checkSubclass(ExpandItem.java:120) + at org.eclipse.swt.widgets.Widget.<init>(Widget.java:205) + at org.eclipse.swt.widgets.Item.<init>(Item.java:63) + at org.eclipse.swt.widgets.ExpandItem.<init>(ExpandItem.java:114) + at +org.lamport.tla.toolbox.tool.prover.ui.view.ObligationsView$InterestingObligationExpandItem.<init>(ObligationsView.java:564) + + at +org.lamport.tla.toolbox.tool.prover.ui.view.ObligationsView.updateItem(ObligationsView.java:336) + + at +org.lamport.tla.toolbox.tool.prover.ui.view.ObligationsView.fillFromCurrentSpec(ObligationsView.java:237) + + at +org.lamport.tla.toolbox.tool.prover.ui.view.ObligationsView.createPartControl(ObligationsView.java:167) + + at +org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:367) + + at +org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:226) + at +org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + + at org.eclipse.ui.internal.Perspective.showView(Perspective.java:2229) + at +org.eclipse.ui.internal.WorkbenchPage.busyShowView(WorkbenchPage.java:1067) + + at +org.eclipse.ui.internal.WorkbenchPage$20.run(WorkbenchPage.java:3816) + at +org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at +org.eclipse.ui.internal.WorkbenchPage.showView(WorkbenchPage.java:3813) + at +org.eclipse.ui.internal.WorkbenchPage.showView(WorkbenchPage.java:3789) + at org.lamport.tla.toolbox.util.UIHelper.openView(UIHelper.java:179) + at +org.lamport.tla.toolbox.tool.prover.ui.view.ObligationsView.updateObligationView(ObligationsView.java:271) + + at +org.lamport.tla.toolbox.tool.prover.ui.util.ProverHelper$3.run(ProverHelper.java:1094) + + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3468) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3115) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=166#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-14 16:05:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=166#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-14 16:05:39 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=69" name="attach_69" title="mylyn/context/zip">attachment 69</a> <a href="https://54.195.32.3/attachment.cgi?id=69&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=167">167</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">User defined block size in TLC distributed mode</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=62">mylyn/context/zip + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=67">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=167#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-09 15:51:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">A user may wish to define a custom block size for the amount of states that are assigned a worker in distributed mode.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=167#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-09 17:43:54 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Functor like API added for user defined code.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=167#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-09 17:43:56 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=62" name="attach_62" title="mylyn/context/zip">attachment 62</a> <a href="https://54.195.32.3/attachment.cgi?id=62&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=167#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-11 15:32:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Scriptable BlockSizeSelector (e.g. JavaScript) + +-Dtlc2.tool.distributed.selector.factory=tlc2.tool.distributed.selector.ScriptableBlockSelectorFactory +-Dtlc2.tool.distributed.selector.script=/path/to/ExampleScript.javascript + +---- ExampleScript.javascript ---- +function getBlocks(stateQueue, worker) { + var size = stateQueue.size(); + var blockSize = getBlockSize(size); + var states = stateQueue.sDequeue(blockSize); + return states; +} +function getBlockSize(size) { + var workerCount = tlcServer.getWorkerCount(); + var factor = 1.0 / workerCount; + return size * factor; +} +---- ExampleScript.javascript ----</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=167#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-14 10:44:00 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=167#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-14 10:44:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=67" name="attach_67" title="mylyn/context/zip">attachment 67</a> <a href="https://54.195.32.3/attachment.cgi?id=67&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=168">168</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Statistics in distributed mode show incorrect values</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=63">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=168#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-11 14:59:49 UTC + </span> + </div> + + + +<pre class="bz_comment_text">StatesGenerated does not show correct value.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=168#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-11 15:08:22 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=168#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-11 15:08:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=63" name="attach_63" title="mylyn/context/zip">attachment 63</a> <a href="https://54.195.32.3/attachment.cgi?id=63&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=169">169</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">States transfered might exceed RMI's maximum transferable size causing EOFException during unmarshalling</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=66">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=169#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-12 10:24:44 UTC + </span> + </div> + + + +<pre class="bz_comment_text">In cases with few workers a single worker may get assigned to many states at once.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=169#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-14 10:42:19 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD (<a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Assign block size (=new states) dynamically" href="https://54.195.32.3/show_bug.cgi?id=171">bug #171</a> makes it even less likely)</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=169#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-14 10:42:20 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=66" name="attach_66" title="mylyn/context/zip">attachment 66</a> <a href="https://54.195.32.3/attachment.cgi?id=66&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=170">170</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Handling disconnecting workers should not exit model checking</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA Tools</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=170#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-12 20:02:39 UTC + </span> + </div> + + + +<pre class="bz_comment_text">If a workers disconnects for whatever +reason during model checking, the server tries to: + +a) assign the corresponding server side thread to another (known) worker +b) exists the server if no other server are available + +a) causes twice the load on the worker as the worker will be busy +handling its original thread already +b) is suboptimal if all workers just get disconnected for a short period + of time. The server should simply wait for a new worker to connect. +TODO: find out if the server at least writes a checkpoint before it +shuts down.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=170#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-08 20:40:37 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed in HEAD</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=171">171</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Assign block size (=new states) dynamically</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=64">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=171#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-13 11:16:50 UTC + </span> + </div> + + + +<pre class="bz_comment_text">LL: "From the user's perspective, the queue + is not the particular data structure that the server is maintaining. +It's the set of states that have been found but not yet examined to find + their successor states. Maintaining the exact size of this queue would + require that the workers report the result of examining each state, +which is clearly a bad idea. The obvious approximation is to define the + queue to be the set of states in the server's queue plus all the states + it has sent to the workers for which it has not yet received a reply. +Since the queue size is a useful indicator of progress, we want it to +report to the user the most accurate value we can without degrading +performance. Accuracy is obtained by having the server send states to +the workers in small batches. That's why we want to send states in the +smallest batches that we can without degrading performance. I don't +want the maximum number of states to send to be a user-settable property + because the user will have no idea how to set it. The penalty for +sending states in smaller batches is using more (shorter) messages to +send the same amount of data. If we can get some not terribly +inaccurate data on how much bandwidth overhead is added by each separate + message (presumably, roughly the bandwidth taken by an empty message), +then the server can dynamically determine the number of states to send +per message from the average time it takes a worker to process a state +and the amount of bandwidth overhead we're willing to add."</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=171#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-14 09:39:30 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=171#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-14 09:39:33 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=64" name="attach_64" title="mylyn/context/zip">attachment 64</a> <a href="https://54.195.32.3/attachment.cgi?id=64&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=172">172</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">[UI] Use system locale to format start/end time and show duration as tooltip</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=65">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=172#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-14 10:23:46 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The "model checking results" tab does not +format start or end time according to the systems current locale. Nor +does it show the duration.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=172#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-14 10:28:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=172#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-14 10:28:29 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=65" name="attach_65" title="mylyn/context/zip">attachment 65</a> <a href="https://54.195.32.3/attachment.cgi?id=65&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=173">173</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Webserver used to serve jnlp webstart worker file +should select port dynamically or fall back to alternative if 10996 is +bound already</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=173#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-18 10:23:07 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The Jetty webserver used by the Toolbox to +serve worker.jnlp (distributed TLC) binds to port 10996 (set by system +property in .product file). This wouldn't be a problem since 10996 isn't + likely to be bound by another program. Unless the other program is +another instance of the Toolbox (running on the same machine) which +happens e.g. if the user works on two specs simultaneously.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=174">174</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">[UI] Better report distributed model run</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=73">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=174#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-19 13:44:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">A distributed model should report status on the model checker page</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=174#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-19 13:48:57 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=174#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-19 13:48:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=73" name="attach_73" title="mylyn/context/zip">attachment 73</a> <a href="https://54.195.32.3/attachment.cgi?id=73&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=175">175</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Deadlock in DiskStateQueue if subset of workers die (disconnect) during model run</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>REOPENED + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=92">mylyn/context/zip + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=94">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=175#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-19 21:20:09 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Deadlock in DiskStateQueue if subset of workers die (disconnect) during model run</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=175#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-03 16:02:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">All TLCServerThreads are stuck with the +following stack trace: + +Daemon System Thread [TLCServerThread-[rmi://coconut:33691]] (Suspended) + + waiting for: tlc2.tool.queue.DiskStateQueue (id=79) + java.lang.Object.wait(long) line: not available [native method] + tlc2.tool.queue.DiskStateQueue(java.lang.Object).wait() line: 485 +[local variables unavailable] + tlc2.tool.queue.DiskStateQueue(tlc2.tool.queue.StateQueue).isAvail() +line: 129 + +tlc2.tool.queue.DiskStateQueue(tlc2.tool.queue.StateQueue).sDequeue(int) + line: 86 + +tlc2.tool.distributed.selector.StatisticalBlockSelector(tlc2.tool.distributed.selector.BlockSelector).getBlocks(tlc2.tool.queue.StateQueue, + tlc2.tool.distributed.TLCWorkerRMI) line: 47 + tlc2.tool.distributed.TLCServerThread.run() line: 88</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=175#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-03 17:31:57 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The root cause is in +tlc2.tool.distributed.TLCServerThread.run(). If a remote worker +disconnects and the TLCServerThread obj cannot be reassigned to a new +worker, the states removed from the stateQueue, but for which the +successor states have not yet computed, are never returned into the +stateQueue.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=175#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-03 17:37:40 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=175#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-03 17:37:41 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=92" name="attach_92" title="mylyn/context/zip">attachment 92</a> <a href="https://54.195.32.3/attachment.cgi?id=92&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=175#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-03 18:21:18 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Argh, not done yet.</pre> + </div><div id="c6" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=175#c6">Comment 6</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-03 18:46:57 UTC + </span> + </div> + + + +<pre class="bz_comment_text">If tlc2.tool.distributed.TLCServerThread is + in the waiting state (due to tlc2.tool.queue.StateQueue.isAvail()) and +the remote worker disconnects, tlc2.TLCGlobals.getNumWorkers() is never +decremented.</pre> + </div><div id="c7" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=175#c7">Comment 7</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-03 22:11:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text">To fix the issue noted in <a href="https://54.195.32.3/show_bug.cgi?id=175#c6">comment #6</a>, + subsequent remote workers will be reused to wake up stuck +TLCServerThreads (in TLCServerThread) when they initially connect +TLCServer. This implicitly assumes that there are remote workers +(re-)connecting. +A more complete fix would be to spawn a timer thread that periodically +checks remote workers and cleans up if a worker is gone.</pre> + </div><div id="c8" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=175#c8">Comment 8</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-11 09:10:09 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Implemented the timer thread mentioned in <a href="https://54.195.32.3/show_bug.cgi?id=175#c7">comment #7</a>.</pre> + </div><div id="c9" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=175#c9">Comment 9</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-11 09:10:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=94" name="attach_94" title="mylyn/context/zip">attachment 94</a> <a href="https://54.195.32.3/attachment.cgi?id=94&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=176">176</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">NegativeArraySizeException with StateQueue</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=74">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=176#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-20 10:38:45 UTC + </span> + </div> + + + +<pre class="bz_comment_text">java.lang.NegativeArraySizeException + at tlc2.tool.queue.StateQueue.sDequeue(StateQueue.java:78) + at tlc2.tool.distributed.selector.BlockSelector.getBlocks(BlockSelector.java:45) + at tlc2.tool.distributed.TLCServerThread.run(TLCServerThread.java:82)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=176#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-20 10:47:43 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=176#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-20 10:47:44 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=74" name="attach_74" title="mylyn/context/zip">attachment 74</a> <a href="https://54.195.32.3/attachment.cgi?id=74&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=177">177</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Diameter statistics/TLCTrace#getLevel() non deterministic with workers > 1 or with distributed model checking</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>lamport, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=75">screenshot of the model result page showing non-monoton diameter + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=87">Adds a depth field to _each_ state to store the states height in the state tree. + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=88">A state tree of height 8 where TLCTrace#getLevel() correctly reports the level. + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=89">A state tree of height 7 where TLCTrace#getLevel() incorrectly reports the level to be 5. + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=177#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-20 10:51:53 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The diameter statistic is broken in distributed mode.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=177#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-20 10:52:50 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=75" name="attach_75" title="screenshot of the model result page showing non-monoton diameter">attachment 75</a> <a href="https://54.195.32.3/attachment.cgi?id=75&action=edit" title="screenshot of the model result page showing non-monoton diameter">[details]</a></span> +screenshot of the model result page showing non-monoton diameter</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=177#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-20 12:38:03 UTC + </span> + </div> + + + +<pre class="bz_comment_text">LL: "Here’s what I got running 12 workers +on the same model. Note that it reports a diameter of 16 instead of the + correct value of 19. However, the all the other final statistics are +correct. I got the same result running 24 workers (12 machines)."</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=177#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-25 15:39:42 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Another example of non-monotonicity with 8 (local) workers: + +Finished computing initial states: 1 distinct state(s) generated. +TLC server at orange is ready (2011-07-25 15:24:45) +Progress(4) at 2011-07-25 15:25:45: 65 states generated, 15 distinct states found, 8 states left on queue. +Progress(10) at 2011-07-25 15:26:46: 13745 states generated, 300 distinct states found, 153 states left on queue. +Progress(14) at 2011-07-25 15:27:47: 26102 states generated, 526 distinct states found, 230 states left on queue. +Progress(14) at 2011-07-25 15:28:47: 161977 states generated, 1601 distinct states found, 605 states left on queue. +Progress(15) at 2011-07-25 15:29:47: 307949 states generated, 1724 distinct states found, 620 states left on queue. +Progress(18) at 2011-07-25 15:31:01: 444191 states generated, 2157 distinct states found, 642 states left on queue. +Progress(18) at 2011-07-25 15:32:07: 543780 states generated, 2398 distinct states found, 581 states left on queue. +Progress(18) at 2011-07-25 15:33:08: 694574 states generated, 2958 distinct states found, 500 states left on queue. +Progress(16) at 2011-07-25 15:34:09: 812710 states generated, 3333 distinct states found, 460 states left on queue. +Progress(20) at 2011-07-25 15:35:22: 970293 states generated, 3562 distinct states found, 0 states left on queue.</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=177#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-26 16:51:44 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The same behavior can be observed on a non distributed model checking run (with checkpointing activated): + +Progress(10) at 2011-07-26 16:45:20: 3152 states generated, 1170 distinct states found, 640 states left on queue. +Progress(18) at 2011-07-26 16:46:20: 302525 states generated, 65095 distinct states found, 14670 states left on queue. +Progress(18) at 2011-07-26 16:47:20: 631070 states generated, 124622 distinct states found, 19439 states left on queue. +Progress(26) at 2011-07-26 16:48:21: 950979 states generated, 176805 distinct states found, 18304 states left on queue. +Progress(24) at 2011-07-26 16:49:21: 1273683 states generated, 224880 distinct states found, 12596 states left on queue. +The depth of the complete state graph search is 43.</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=177#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-27 14:10:07 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Enabling checkpoints does not appear to be +causing a broken trace, but might increase its likelihood. At least +disabling checkpoints in distributed mode has no effect on the +occurrence of a broken trace.</pre> + </div><div id="c6" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=177#c6">Comment 6</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-27 15:29:08 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Two questions come up... + +a) TLCTrace#getTrace() must under no condition violate the monotonicity? +b) Two states A and B with different fingerprints do not share the same TLCState#uid?</pre> + </div><div id="c7" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=177#c7">Comment 7</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-28 15:15:08 UTC + </span> + </div> + + + +<pre class="bz_comment_text">TLCTrace data structure does not work to +contain the distinct state tree in parallel mode (either multiple +threads or workers). In parallel mode TLCTrace#lastPtr (last state +written to file) -logically the tail of TLCTrace - does not reflect the +longest path in the distinct state tree. This is due to the case that +TLC generally does not explorer the distinct state tree breadth-first +wise in parallel mode. If TLCTrace#getLevel() produces correct results +in depth-first search even in single threaded mode is questionable. + +The trace itself (used for trace exploration if an invariant is +violated) is, in all modes, correctly displayed as it is constructed +starting from the _known_ violating (end-)state. It does not use +TLCTrace#lastPtr. However, TLC does not necessarily find the shortest +trace path in parallel mode. + +On a technical side: TLCTrace doesn't do paging. It is therefore growing + indefinitely, posing a technical limitation on the maximum amount of +states depending on the file system max file size limit. It is however +part of checkpointing.</pre> + </div><div id="c8" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=177#c8">Comment 8</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-02 10:32:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=87" name="attach_87" title="Adds a depth field to _each_ state to store the states height in the state tree.">attachment 87</a> <a href="https://54.195.32.3/attachment.cgi?id=87&action=edit" title="Adds a depth field to _each_ state to store the states height in the state tree.">[details]</a></span> +Adds a depth field to _each_ state to store the states height in the state tree.</pre> + </div><div id="c9" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=177#c9">Comment 9</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-02 10:35:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=88" name="attach_88" title="A state tree of height 8 where TLCTrace#getLevel() correctly reports the level.">attachment 88</a> <a href="https://54.195.32.3/attachment.cgi?id=88&action=edit" title="A state tree of height 8 where TLCTrace#getLevel() correctly reports the level.">[details]</a></span> +A state tree of height 8 where TLCTrace#getLevel() correctly reports the level.</pre> + </div><div id="c10" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=177#c10">Comment 10</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-02 10:36:46 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=89" name="attach_89" title="A state tree of height 7 where TLCTrace#getLevel() incorrectly reports the level to be 5.">attachment 89</a> <a href="https://54.195.32.3/attachment.cgi?id=89&action=edit" title="A state tree of height 7 where TLCTrace#getLevel() incorrectly reports the level to be 5.">[details]</a></span> +A state tree of height 7 where TLCTrace#getLevel() incorrectly reports +the level to be 5. + +Both screenshots were created with the same spec/model (just different +invocations of _non-distributed_ TLC with 4 workers on a dual core +machine.</pre> + </div><div id="c11" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=177#c11">Comment 11</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-03 10:59:56 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Added TLCTrace#getLevelForReporting() to assure level reported monotonically increments</pre> + </div><div id="c12" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=177#c12">Comment 12</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-03 14:36:56 UTC + </span> + </div> + + + +<pre class="bz_comment_text">tlc2.tool.ModelChecker.runTLCContinueDoing(int, + int) uses the level to determine its isDone state (control flow). It +has to be checked, +what the effects of tlc2.tool.TLCTrace.getLevel() WRT to control flow in + runTLCContinueDoing are.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=178">178</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLCServer cancellation or crash in distributed mode does not kill/exit remote TLCWorkers</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=82">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=178#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-20 10:54:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">LL: "I’ve found that hitting “cancel” on a +distributed TLC job does not kill the worker processes. They appear to +finish working on the states they’ve been given and then sit waiting for + something to happen."</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=178#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-26 12:45:39 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD + +TLCWorker need to handle a crashed server -> Periodically check server aliveness (keep alive timer) +Cancellation is a variant of a server crash -> Handled by TLCWorker keep alive timer +Additionally try to eagerly exit workers from inside a server VM shutdown hook.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=178#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-26 12:45:43 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=82" name="attach_82" title="mylyn/context/zip">attachment 82</a> <a href="https://54.195.32.3/attachment.cgi?id=82&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=179">179</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Out of memory exception in TLCServer with many workers</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>lamport, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=179#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-20 10:56:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Exception in thread "RMI TCP Connection(idle)" java.lang.OutOfMemoryError: Java heap space + at java.lang.String.valueOf(String.java:2840) + at java.lang.Thread.getName(Thread.java:1061) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:644) + at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) + at java.lang.Thread.run(Thread.java:619) + +Java heap space +java.lang.OutOfMemoryError: Java heap space + at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1943) + at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) + at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) + at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) + at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667) + at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323) + at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) + at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) + at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) + at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) + at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) + at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) + at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) + at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) + at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667) + at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323) + at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) + at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) + at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) + at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) + at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) + at tlc2.tool.TLCStateVec.readObject(TLCStateVec.java:55) + at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) + at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) + at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) + at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) + at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667) + at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323) + at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=179#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-03 14:22:18 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The user has the chance to increase the +heap size on the main model editor page. The default for non-distributed + mode is set to 500mb. Maybe this default is too low for distributed +mode and should be raised accordingly.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=179#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-03 14:23:27 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Adding Leslie for input on <a href="https://54.195.32.3/show_bug.cgi?id=179#c1">comment #1</a></pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=180">180</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLCServer exists immediately reporting success when multiple workers connect simultaneously</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_critical">critical + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=77">mylyn/context/zip + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=78">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=180#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-20 15:45:33 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When multiple workers start at once, the +first one will empty the state queue causing other workers to signal the + server that all work is done. Thus synchronization has to include +outstanding results.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=180#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-20 19:26:08 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=180#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-20 19:26:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=77" name="attach_77" title="mylyn/context/zip">attachment 77</a> <a href="https://54.195.32.3/attachment.cgi?id=77&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=180#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-21 09:17:33 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Turns out this is a regression caused by <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - NegativeArraySizeException with StateQueue" href="https://54.195.32.3/show_bug.cgi?id=176">bug #176</a>, thus reverting.</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=180#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-21 09:17:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=78" name="attach_78" title="mylyn/context/zip">attachment 78</a> <a href="https://54.195.32.3/attachment.cgi?id=78&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=181">181</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLC error messages not shown in Toolbox</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - TLC user output not shown in Toolbox" href="https://54.195.32.3/show_bug.cgi?id=182">182</a> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr> + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=181#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-21 09:59:11 UTC + </span> + </div> + + + +<pre class="bz_comment_text">LL: "I have not been able to get the +Toolbox to display any TLC error message in the place in the TLC Errors +window where it’s supposed to. For example, the TLC output below causes + the Toolbox to raise an Error window with no message. Also, if an +invariant is violated, the Toolbox displays the trace but doesn’t say +that the invariant is violated."</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=181#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-21 09:59:22 UTC + </span> + </div> + + + +<pre class="bz_comment_text">@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.03 of 20 July 2011 +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running in Model-Checking mode. +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file MC.tla +Parsing file Test.tla +Parsing file C:\lamport\tla\newtools\tla2-inria\tlatools\class\tla2sany\StandardModules\TLC.tla +Parsing file C:\lamport\tla\newtools\tla2-inria\tlatools\class\tla2sany\StandardModules\Naturals.tla +Parsing file C:\lamport\tla\newtools\tla2-inria\tlatools\class\tla2sany\StandardModules\Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Sequences +Semantic processing of module TLC +Semantic processing of module Test +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2011-07-20 14:48:02) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2105:1 @!@!@ +Evaluating assumption line 4, col 8 to line 4, col 36 of module Test failed. +!@!@STARTMSG 2154:0 @!@!@ +Attempted to apply the operator overridden by the Java method +public static tlc2.value.IntValue tlc2.module.Naturals.Plus(tlc2.value.IntValue,tlc2.value.IntValue), +but it produced the following error: +@!@!@STARTMSG 2178:0 @!@!@ +Overflow when computing 2147400000+2147400000 +@!@!@ENDMSG 2178 @!@!@ +@!@!@ENDMSG 2154 @!@!@ +@!@!@ENDMSG 2105 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished. (2011-07-20 14:48:02) +@!@!@ENDMSG 2186 @!@!@</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=181#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-25 12:39:15 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed in HEAD</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=182">182</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLC user output not shown in Toolbox</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - TLC error messages not shown in Toolbox" href="https://54.195.32.3/show_bug.cgi?id=181">181</a> + </td> +<td> </td> + <td> </td> + </tr> + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=79">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=182#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-21 14:16:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">-------------------------------- MODULE +Test -------------------------------- +EXTENDS TLC +ASSUME PrintT(99) +================== + +Note the TLC output lines + 99 + <<"$!@$!@$!@$!@$!", 999>> + + +the first being produced by the PrintT statement, the second by the 999 +in the “Evaluate Constant Expression” field of the Model Checking +Results page. Neither of them appears where they belong on the Results +page.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=182#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-21 14:20:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD + +Enhancement <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser does not scale for large output" href="https://54.195.32.3/show_bug.cgi?id=151">bug #151</a> unveiled a one-offset bug in TagBasedTLCAnalyzer.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=182#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-21 14:20:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=79" name="attach_79" title="mylyn/context/zip">attachment 79</a> <a href="https://54.195.32.3/attachment.cgi?id=79&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=183">183</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Startup exception due to invalid thread access</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=80">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=183#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-25 11:22:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">LL: "I wasn't doing anything unusual when +the Toolbox got into this state. Here's the console output when I +restarted the Toolbox. The last two exceptions are apparently caused by + the Toolbox trying to re-open the spec that was last open. They are +what I get when I try to open any spec." + +!ENTRY org.eclipse.ui.workbench 4 0 2011-07-24 14:03:47.583 +!MESSAGE Unable to create view ID +org.lamport.tla.toolbox.tool.prover.ui.rejectedObligations: Invalid +thread access +!STACK 0 +org.eclipse.swt.SWTException: Invalid thread access + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.SWT.error(SWT.java:3770) + at org.eclipse.swt.widgets.Widget.error(Widget.java:463) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:355) + at org.eclipse.swt.widgets.Widget.checkParent(Widget.java:275) + at org.eclipse.swt.widgets.Widget.<init>(Widget.java:146) + at org.eclipse.swt.widgets.Control.<init>(Control.java:105) + at org.eclipse.swt.widgets.Scrollable.<init>(Scrollable.java:75) + at org.eclipse.swt.widgets.Composite.<init>(Composite.java:95) + at +org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:362) + + at +org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:226) + at +org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + + at +org.eclipse.ui.internal.ViewReference.getView(ViewReference.java:195) + at +org.eclipse.ui.internal.WorkbenchPage.findView(WorkbenchPage.java:1907) + at org.lamport.tla.toolbox.util.UIHelper.findView(UIHelper.java:199) + at +org.lamport.tla.toolbox.tool.prover.ui.view.ObligationsView.refreshObligationView(ObligationsView.java:197) + + at +org.lamport.tla.toolbox.tool.prover.ui.util.ProverSpecLifecycleParticipant.eventOccured(ProverSpecLifecycleParticipant.java:52) + + at +org.lamport.tla.toolbox.util.SpecLifecycleManager$1.invoke(SpecLifecycleManager.java:31) + + at +org.lamport.tla.toolbox.util.SpecLifecycleManager.sendEventWithVeto(SpecLifecycleManager.java:87) + + at +org.lamport.tla.toolbox.util.SpecLifecycleManager.sendEvent(SpecLifecycleManager.java:68) + + at +org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.setSpecLoaded(WorkspaceSpecManager.java:228) + + at +org.lamport.tla.toolbox.ui.handler.OpenSpecHandler$1.run(OpenSpecHandler.java:69) + + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55) + +!ENTRY org.eclipse.core.jobs 4 2 2011-07-24 14:03:47.615 +!MESSAGE An internal error occurred during: "OpenSpecHandler is parsing +spec...". +!STACK 0 +org.eclipse.swt.SWTException: Invalid thread access + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.SWT.error(SWT.java:3770) + at org.eclipse.swt.widgets.Widget.error(Widget.java:463) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:355) + at org.eclipse.swt.widgets.Widget.checkParent(Widget.java:275) + at org.eclipse.swt.widgets.Widget.<init>(Widget.java:146) + at org.eclipse.swt.widgets.Control.<init>(Control.java:105) + at org.eclipse.swt.widgets.Scrollable.<init>(Scrollable.java:75) + at org.eclipse.swt.widgets.Composite.<init>(Composite.java:95) + at +org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:270) + at +org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + + at +org.eclipse.ui.internal.ViewReference.getView(ViewReference.java:195) + at +org.eclipse.ui.internal.WorkbenchPage.findView(WorkbenchPage.java:1907) + at org.lamport.tla.toolbox.util.UIHelper.findView(UIHelper.java:199) + at +org.lamport.tla.toolbox.tool.prover.ui.view.ObligationsView.refreshObligationView(ObligationsView.java:197) + + at +org.lamport.tla.toolbox.tool.prover.ui.util.ProverSpecLifecycleParticipant.eventOccured(ProverSpecLifecycleParticipant.java:52) + + at +org.lamport.tla.toolbox.util.SpecLifecycleManager$1.invoke(SpecLifecycleManager.java:31) + + at +org.lamport.tla.toolbox.util.SpecLifecycleManager.sendEventWithVeto(SpecLifecycleManager.java:87) + + at +org.lamport.tla.toolbox.util.SpecLifecycleManager.sendEvent(SpecLifecycleManager.java:68) + + at +org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.setSpecLoaded(WorkspaceSpecManager.java:228) + + at +org.lamport.tla.toolbox.ui.handler.OpenSpecHandler$1.run(OpenSpecHandler.java:69) + + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=183#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-25 11:23:13 UTC + </span> + </div> + + + +<pre class="bz_comment_text">LL: "Here's the recipe for reproducing the +problem. + +Create a new spec and enter + +THEOREM FALSE +OBVIOUS + +Run the prover on the theorem. (Put the cursor on the theorem and type +Ctl+g Ctl+g.) This will raise an error window. Close the spec and try +to reopen it. + +--- + +I forgot to mention that the problem happens only if I close the spec +with the prover's error window open. If I close that window before +closing the spec, there seems to be no problem."</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=183#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-25 13:13:02 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=183#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-25 13:13:03 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=80" name="attach_80" title="mylyn/context/zip">attachment 80</a> <a href="https://54.195.32.3/attachment.cgi?id=80&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=183#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-26 09:33:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The root cause for this kind of exceptions +is missing synchronization between daemon/backend and the UI thread. A +backend thread must not access the UI resources outside of the UI thread + [0]. +In this specific case, the backend recreated the prover UI at startup, +but failed to join the UI thread to do so. + +[0] <a href="http://www.eclipse.org/swt/faq.php#uithread">http://www.eclipse.org/swt/faq.php#uithread</a></pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=184">184</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Trying to open a TLC model while the prover is running crashes the Toolbox</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows 7</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=184#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-27 00:46:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Twice I tried to open a TLC model while the + Toolbox was running a TLAPS proof, and twice the Toolbox stopped +responding. It would be fine for the Toolbox to disable the TLC Model +Checker menu items while TLAPS is being run, but crashing is inelegant.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=184#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-27 13:54:53 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I fail to reproduce this on either Win, Mac or Linux. Leslie please outline the steps and attach the corresponding spec/model.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=184#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2014-01-27 22:29:50 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This is a test comment.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=185">185</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLCServer does not accept -checkpoint parameter</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=83">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=185#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-28 19:32:51 UTC + </span> + </div> + + + +<pre class="bz_comment_text">TLCServer/TLCApp does not know about the -checkpoint parameter and thus only supports checkpointing every 30 minutes.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=185#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-28 19:35:21 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=185#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-28 19:35:22 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=83" name="attach_83" title="mylyn/context/zip">attachment 83</a> <a href="https://54.195.32.3/attachment.cgi?id=83&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=186">186</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">[Build] No source enconding set causing Maven to complain about build being platform dependent</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=186#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-29 09:32:06 UTC + </span> + </div> + + + +<pre class="bz_comment_text"><a href="http://maven.apache.org/general.html#encoding-warning">http://maven.apache.org/general.html#encoding-warning</a></pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=186#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-07-29 09:36:17 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=187">187</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox ignores states/ subfolder used by TLCServer to store checkpoint data</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=84">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=187#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-01 11:33:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Checkpoint data written by distributed TLC cannot be selected in Toolbox (unless manually copied from subfolder).</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=187#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-01 12:05:30 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD + +The "-metadir" parameter has been added to TLCServer to better comply +with TLC non-distributed command line arguments. This allows the Toolbox + to pass a custom path to the nested process.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=187#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-01 12:05:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=84" name="attach_84" title="mylyn/context/zip">attachment 84</a> <a href="https://54.195.32.3/attachment.cgi?id=84&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=188">188</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Distributed TLC incorrectly reports states recovered</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=85">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=188#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-01 12:03:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Recovering from a checkpoint yields the +following output: + +@!@!@STARTMSG 2198:0 @!@!@ +Recovery completed. -- Recovery completed. 157308 distinct states found. + 18093 states on queue. states examined. %2% states on queue. +@!@!@ENDMSG 2198 @!@!@</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=188#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-01 13:03:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD +(changed tlc2.output.MP.printMessage(int, String) parameters)</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=188#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-01 13:03:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=85" name="attach_85" title="mylyn/context/zip">attachment 85</a> <a href="https://54.195.32.3/attachment.cgi?id=85&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=189">189</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Run user script prior to TLC model checker</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=90">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=189#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-02 13:33:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The model checker should support running a +custom user script prior to launching the model checker. This is +especially useful in distributed mode, where remote workers have to be +started.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=189#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-03 08:36:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">context/changes for UI part: +An additional editable input text box with an optional file chooser dialog</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=189#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-03 08:36:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=90" name="attach_90" title="mylyn/context/zip">attachment 90</a> <a href="https://54.195.32.3/attachment.cgi?id=90&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=189#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-03 12:01:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Some random thoughts... + +- Catchy name for "pre-flight" script (current working title)? +- Check box to easily deactivate startup script (e.g. if remote workers are already running after TLCServer startup crash) +- Sequential vs. parallel execution of script? +-- Check script return value in sequential execution prior to launching TLCServer?</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=189#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-03 12:03:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Both jobs +org.lamport.tla.toolbox.tool.prover.job.ProverJob as well as the new +ScriptrunnerJob need a shell interpreter to execute. Thus, a common base + class should be refactored out of ProverJob. +Btw. ProverJob makes the implicit assumption that Cygwin is installed to + the C: drive which is not necessarily the case.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=190">190</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Startup NPE in TokenSpec.findTokenSpecs()</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>REOPENED + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows Vista</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=91">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=190#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-03 11:15:14 UTC + </span> + </div> + + + +<pre class="bz_comment_text">!ENTRY org.eclipse.ui 4 0 2011-07-28 +15:47:24.765 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NullPointerException + at +org.lamport.tla.toolbox.editor.basic.tla.TokenSpec.findTokenSpecs(TokenSpec.java:287) + + at +org.lamport.tla.toolbox.editor.basic.tla.TokenSpec.findCurrentTokenSpec(TokenSpec.java:134) + + at +org.lamport.tla.toolbox.editor.basic.tla.TLAHyperlinkDetector.detectHyperlinks(TLAHyperlinkDetector.java:97) + + at +org.eclipse.ui.texteditor.HyperlinkDetectorRegistry$HyperlinkDetectorDelegate.detectHyperlinks(HyperlinkDetectorRegistry.java:80) + + at +org.eclipse.jface.text.hyperlink.HyperlinkManager.findHyperlinks(HyperlinkManager.java:263) + + at +org.eclipse.jface.text.hyperlink.HyperlinkManager.mouseMove(HyperlinkManager.java:439) + + at +org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:199) + + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3910) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3503) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=190#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-03 14:13:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text"> Added null check in +org.lamport.tla.toolbox.editor.basic.tla.TokenSpec.findTokenSpecs(String, + int) to prevent NPE from happening (does not fix the root cause). +Leaving bug open until root cause is found though.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=190#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-03 14:13:54 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=91" name="attach_91" title="mylyn/context/zip">attachment 91</a> <a href="https://54.195.32.3/attachment.cgi?id=91&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=191">191</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Remove useless preferences from preference page</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=93">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=191#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-05 08:06:50 UTC + </span> + </div> + + + +<pre class="bz_comment_text">These preferences are currently useless/meaningless in the scope of the Toolbox: + +General > Compare/Patch +General > Appearance > Colors and Fonts > Text Compare</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=191#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-05 13:02:22 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed by implementing a filter in +org.lamport.tla.toolbox.ApplicationWorkbenchWindowAdvisor.postWindowOpen(). + A much better fix is to completely exclude bundle +"org.eclipse.compare". However, this appears to be impractical with +current Maven capabilities.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=191#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-05 13:02:26 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=93" name="attach_93" title="mylyn/context/zip">attachment 93</a> <a href="https://54.195.32.3/attachment.cgi?id=93&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=191#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-08 14:24:57 UTC + </span> + </div> + + + +<pre class="bz_comment_text">After some more investigation it turns out that: + +a) "org.eclipse.compare" is required by the update manager and thus cannot be excluded +b) "General > Compare/Patch" can be excluded with the method mentioned in <a href="https://54.195.32.3/show_bug.cgi?id=191#c1">comment #1</a> +c) "General > Appearance > Colors and Fonts > Text compare" +cannot be excluded easily. The only viable solution would be "Equinox +Transforms" (<a href="http://wiki.eclipse.org/Equinox_Transforms">http://wiki.eclipse.org/Equinox_Transforms</a>). Opening that can of worms isn't worth it though.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=192">192</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Add distributed TLC documentation to HTML Toolbox help</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Release Toolbox 1.3.2 or 1.4" href="https://54.195.32.3/show_bug.cgi?id=157">157</a> + </td> +<td> </td> + <td> </td> + </tr> + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=192#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-05 10:06:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Add distributed TLC documentation to HTML Toolbox help</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=192#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-17 14:10:54 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Done a while ago</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=193">193</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Add Toolbox update site to support updating a Toolbox to the next release</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Release Toolbox 1.3.2 or 1.4" href="https://54.195.32.3/show_bug.cgi?id=157">157</a> + </td> +<td> </td> + <td> </td> + </tr> + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=99">mylyn/context/zip + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=100">To +prevent an error popping up (help > check for updates), due to +missing p2 meta-data at http://lamport.org/tlatoolbox, the attached +content.xml dummy file should be placed there. + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=193#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-05 10:08:24 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Update site location has be decided on prior to the next release. The update site doesn't have to be created though.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=193#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-16 10:54:25 UTC + </span> + </div> + + + +<pre class="bz_comment_text">- Added check for updates command to help menu +- Added ...p2.inf, which defines the location of the <a href="http://lamport.org/tlatoolbox">http://lamport.org/tlatoolbox</a> update site +- Fixed feature license, description and label</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=193#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-16 10:54:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=99" name="attach_99" title="mylyn/context/zip">attachment 99</a> <a href="https://54.195.32.3/attachment.cgi?id=99&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=193#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-16 12:23:02 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=100" name="attach_100" title="To prevent an error popping up (help > check for updates), due to missing p2 meta-data at http://lamport.org/tlatoolbox, the attached content.xml dummy file should be placed there.">attachment 100</a> <a href="https://54.195.32.3/attachment.cgi?id=100&action=edit" title="To prevent an error popping up (help > check for updates), due to missing p2 meta-data at http://lamport.org/tlatoolbox, the attached content.xml dummy file should be placed there.">[details]</a></span> +To prevent an error popping up (help > check for updates), due to missing p2 meta-data at <a href="http://lamport.org/tlatoolbox">http://lamport.org/tlatoolbox</a>, the attached content.xml dummy file should be placed there.</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=193#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-16 12:23:12 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=194">194</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Trusted SSL certificate needed to sign bundles for Java webstart</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=194#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-05 10:12:19 UTC + </span> + </div> + + + +<pre class="bz_comment_text">In order to remotely execute the +tla2tools.jar with Java webstart via e.g. psexec, a trusted SSL +certificate is needed. A self signed certificate causes a prompt to be +shown, that requires the user to accept the self signed certificate. +While this is acceptable for small machine numbers, it causes notable +work with large numbers of machine. A user has to connect to each +machine and accept the certificate. + +An alternative would be to manually add the self signed certificate to +the trust store of each machine (which might be better supported by +remote management/administration tools).</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=195">195</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">startup deadlock while determining spec size</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Deadlock in startup code when WorkspaceSpecManager initialization and spec parser create cyclic wait graph" href="https://54.195.32.3/show_bug.cgi?id=260">260</a> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr> + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=95">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=195#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-11 17:14:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Hi Markus, + +I finally caught the Toolbox hanging when I started it in debug mode. I + believe I was running it from the configuration I made from the +...product.product.product launch file. Appended below are the Eclipse +console log, the full stack trace, and the contents of the .log file. I + tried starting the same Eclipse four more times, twice in debug mode +and twice normally, and it hung each time. On the fifth try (not in +debug mode) it started up. Once again, the spec it was trying to open +was the last "footFileName" it had printed before it hung. + +Leslie + +================ + +Here's the Eclipse console log: + + +osgi> !SESSION 2011-08-10 15:06:46.559 +----------------------------------------------- +eclipse.buildId=unknown +java.version=1.6.0_21 +java.vendor=Sun Microsystems Inc. +BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US +Framework arguments: -product +org.lamport.tla.toolbox.product.standalone.product +Command-line arguments: -product +org.lamport.tla.toolbox.product.standalone.product -data +C:\lamport\tla\newtools\tla2-inria/../runtime-org.lamport.tla.toolbox.product.product.product + -dev +file:C:/lamport/tla/newtools/tla2-inria/.metadata/.plugins/org.eclipse.pde.core/org.lamport.tla.toolbox.product.product.product/dev.properties + -os win32 -ws win32 -arch x86_64 -console -consolelog + +!ENTRY org.eclipse.osgi 2 0 2011-08-10 15:06:48.502 +!MESSAGE The following is a complete list of bundles which are not +resolved, see the prior log entry for the root cause if it exists: +!SUBENTRY 1 org.eclipse.osgi 2 0 2011-08-10 15:06:48.502 +!MESSAGE Bundle +org.eclipse.equinox.security.win32.x86_1.0.100.v20090520-1800 [23] was +not resolved. +!SUBENTRY 2 org.eclipse.equinox.security.win32.x86 2 0 2011-08-10 +15:06:48.502 +!MESSAGE Platform filter did not match: (& (osgi.os=win32) +(osgi.arch=x86)) +!SUBENTRY 1 org.eclipse.osgi 2 0 2011-08-10 15:06:48.503 +!MESSAGE Bundle org.eclipse.core.resources.win32.x86_3.5.0.v20081020 +[39] was not resolved. +!SUBENTRY 2 org.eclipse.core.resources.win32.x86 2 0 2011-08-10 +15:06:48.503 +!MESSAGE Platform filter did not match: (& (osgi.os=win32) +(osgi.arch=x86)) +!SUBENTRY 1 org.eclipse.osgi 2 0 2011-08-10 15:06:48.503 +!MESSAGE Bundle org.eclipse.swt.win32.win32.x86_3.5.2.v3557f [71] was +not resolved. +!SUBENTRY 2 org.eclipse.swt.win32.win32.x86 2 0 2011-08-10 15:06:48.503 +!MESSAGE Platform filter did not match: (& (osgi.ws=win32) +(osgi.os=win32) (osgi.arch=x86)) +!SUBENTRY 1 org.eclipse.osgi 2 0 2011-08-10 15:06:48.504 +!MESSAGE Bundle +org.eclipse.core.filesystem.win32.x86_1.1.0.v20080604-1400 [92] was not +resolved. +!SUBENTRY 2 org.eclipse.core.filesystem.win32.x86 2 0 2011-08-10 +15:06:48.504 +!MESSAGE Platform filter did not match: (& (osgi.os=win32) +(osgi.arch=x86)) +TLA+ Toolbox started without arguments. + +!ENTRY org.eclipse.core.resources 2 10035 2011-08-10 15:06:48.829 +!MESSAGE The workspace exited with unsaved changes in the previous +session; refreshing workspace to recover changes. +footFileName = C:\lamport\books\hyper-tla\specs\euclid\PCalEuclid.tla +footFileName = +C:\lamport\books\hyper-tla\specs\euclid\PCalEuclid_question.tla +footFileName = C:\lamport\papers\paxos\simple\byztla\PConProof.tla + +====================================== +Here's the full stack trace: + + +org.lamport.tla.toolbox.product.product.product [Eclipse Application] + org.eclipse.equinox.launcher.Main at localhost:58677 (Suspended) + Daemon System Thread [Attach Listener] (Suspended) + Daemon System Thread [Signal Dispatcher] (Suspended) + Daemon System Thread [Finalizer] (Suspended) + waiting for: ReferenceQueue$Lock (id=46) + Object.wait(long) line: not available [native method] + ReferenceQueue<T>.remove(long) line: 118 + ReferenceQueue<T>.remove() line: 134 + Finalizer$FinalizerThread.run() line: 159 + Daemon System Thread [Reference Handler] (Suspended) + waiting for: Reference$Lock (id=47) + Object.wait(long) line: not available [native method] + Reference$Lock(Object).wait() line: 485 + Reference$ReferenceHandler.run() line: 116 + Thread [main] (Suspended) + owns: Class<T> (org.lamport.tla.toolbox.Activator) (id=49) + waited by: Thread [Worker-2] (Suspended) + owns: RunnableLock (id=50) + waited by: Thread [Thread-6] (Suspended) + owns: RunnableLock (id=51) + waited by: Thread [Thread-5] (Suspended) + waiting for: Object (id=48) + Object.wait(long) line: not available [native method] + ThreadJob.joinRun(IProgressMonitor) line: 187 + ImplicitJobs.begin(ISchedulingRule, IProgressMonitor, boolean) line: +87 + JobManager.beginRule(ISchedulingRule, IProgressMonitor) line: 232 + WorkManager.checkIn(ISchedulingRule, IProgressMonitor) line: 117 + Workspace.prepareOperation(ISchedulingRule, IProgressMonitor) line: +1747 + Project.touch(IProgressMonitor) line: 1107 + Spec.setLastModified() line: 194 + WorkspaceSpecManager.setSpecLoaded(Spec) line: 235 + WorkspaceSpecManager.<init>() line: 97 + Activator.getSpecManager() line: 303 + SizeControlContribution.updateSize() line: 90 + SizeControlContribution.createControl(Composite) line: 78 + SizeControlContribution(ControlContribution).fill(ToolBar, int) line: + 97 + ToolBarManager.update(boolean) line: 353 + ToolBarManager.createControl(Composite) line: 111 + TrimContributionManager$ToolBarTrimProxy.dock(int) line: 88 + TrimContributionManager.update(boolean, boolean) line: 232 + WorkbenchWindow.updateLayoutDataForContents() line: 3785 + WorkbenchWindow.setLayoutDataForContents() line: 3796 + WorkbenchWindow.createDefaultContents(Shell) line: 1114 + WorkbenchWindowConfigurer.createDefaultContents(Shell) line: 625 + +ApplicationWorkbenchWindowAdvisor(WorkbenchWindowAdvisor).createWindowContents(Shell) + line: 268 + WorkbenchWindow.createContents(Composite) line: 1000 + WorkbenchWindow(Window).create() line: 431 + Workbench$60.runWithException() line: 3363 + Workbench$60(StartupThreading$StartupRunnable).run() line: 31 + RunnableLock.run() line: 35 + UISynchronizer(Synchronizer).runAsyncMessages(boolean) line: 134 + Display.runAsyncMessages(boolean) line: 3885 + Display.readAndDispatch() line: 3506 + ApplicationWorkbenchAdvisor(WorkbenchAdvisor).openWindows() line: 803 + + Workbench$28.runWithException() line: 1384 + Workbench$28(StartupThreading$StartupRunnable).run() line: 31 + RunnableLock.run() line: 35 + UISynchronizer(Synchronizer).runAsyncMessages(boolean) line: 134 + Display.runAsyncMessages(boolean) line: 3885 + Display.readAndDispatch() line: 3506 + Workbench.runUI() line: 2316 + Workbench.access$4(Workbench) line: 2221 + Workbench$5.run() line: 500 + Realm.runWithDefault(Realm, Runnable) line: 332 + Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 493 + PlatformUI.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 149 + + Application.start(IApplicationContext) line: 42 + EclipseAppHandle.run(Object) line: 194 + EclipseAppLauncher.runApplication(Object) line: 110 + EclipseAppLauncher.start(Object) line: 79 + EclipseStarter.run(Object) line: 368 + EclipseStarter.run(String[], Runnable) line: 179 + NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not +available [native method] + NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 + DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 + Method.invoke(Object, Object...) line: 597 + Main.invokeFramework(String[], URL[]) line: 559 + Main.basicRun(String[]) line: 514 + Main.run(String[]) line: 1311 + Main.main(String[]) line: 1287 + Thread [OSGi Console] (Suspended) + Thread.sleep(long) line: not available [native method] + FrameworkConsole.console() line: 270 + FrameworkConsole.run() line: 224 + Thread.run() line: 619 + Daemon Thread [State Data Manager] (Suspended) + Thread.sleep(long) line: not available [native method] + StateManager.run() line: 306 + Thread.run() line: 619 + Daemon Thread [Framework Event Dispatcher] (Suspended) + waiting for: EventManager$EventThread (id=22) + Object.wait(long) line: not available [native method] + EventManager$EventThread(Object).wait() line: 485 + EventManager$EventThread.getNextEvent() line: 397 + EventManager$EventThread.run() line: 333 + Daemon Thread [Start Level Event Dispatcher] (Suspended) + waiting for: EventManager$EventThread (id=25) + Object.wait(long) line: not available [native method] + EventManager$EventThread(Object).wait() line: 485 + EventManager$EventThread.getNextEvent() line: 397 + EventManager$EventThread.run() line: 333 + Thread [643357997@qtp-1619519236-1 - Acceptor0 <a href="mailto:SelectChannelConnector@0.0.0.0">SelectChannelConnector@0.0.0.0</a>:10996] (Suspended) + owns: WindowsSelectorImpl (id=54) + owns: Collections$UnmodifiableSet<E> (id=55) + owns: Util$1 (id=56) + WindowsSelectorImpl$SubSelector.poll0(long, int, int[], int[], int[], long) line: not available [native method] + WindowsSelectorImpl$SubSelector.poll() line: 273 + WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl$SubSelector) line: 255 + WindowsSelectorImpl.doSelect(long) line: 136 + WindowsSelectorImpl(SelectorImpl).lockAndDoSelect(long) line: 69 + WindowsSelectorImpl(SelectorImpl).select(long) line: 80 + SelectorManager$SelectSet.doSelect() line: 432 + SelectChannelConnector$1(SelectorManager).doSelect(int) line: 185 + SelectChannelConnector.accept(int) line: 124 + AbstractConnector$Acceptor.run() line: 707 + QueuedThreadPool$PoolThread.run() line: 520 + Thread [255194190@qtp-1619519236-0] (Suspended) + waiting for: QueuedThreadPool$PoolThread (id=27) + Object.wait(long) line: not available [native method] + QueuedThreadPool$PoolThread.run() line: 563 + Daemon Thread [Timer-0] (Suspended) + waiting for: TaskQueue (id=57) + Object.wait(long) line: not available [native method] + TimerThread.mainLoop() line: 509 + TimerThread.run() line: 462 + Thread [Worker-0] (Suspended) + waiting for: Object (id=48) + Object.wait(long) line: not available [native method] + ThreadJob.joinRun(IProgressMonitor) line: 187 + ImplicitJobs.begin(ISchedulingRule, IProgressMonitor, boolean) line: 87 + JobManager.beginRule(ISchedulingRule, IProgressMonitor) line: 232 + StringPoolJob.run(IProgressMonitor) line: 99 + Worker.run() line: 55 + Thread [Thread-5] (Suspended) + waiting for: RunnableLock (id=51) + Object.wait(long) line: not available [native method] + RunnableLock(Object).wait() line: 485 + UISynchronizer(Synchronizer).syncExec(Runnable) line: 186 + UISynchronizer.syncExec(Runnable) line: 150 + Display.syncExec(Runnable) line: 4342 + StartupThreading.runWithoutExceptions(StartupThreading$StartupRunnable) line: 94 + Workbench.init() line: 1379 + Workbench.access$32(Workbench) line: 1296 + Workbench$58.run() line: 2304 + Thread [Thread-6] (Suspended) + waiting for: RunnableLock (id=50) + Object.wait(long) line: not available [native method] + RunnableLock(Object).wait() line: 485 + UISynchronizer(Synchronizer).syncExec(Runnable) line: 186 + UISynchronizer.syncExec(Runnable) line: 150 + Display.syncExec(Runnable) line: 4342 + StartupThreading.runWithoutExceptions(StartupThreading$StartupRunnable) line: 94 + Workbench.doRestoreState(IMemento, MultiStatus) line: 3359 + Workbench.access$30(Workbench, IMemento, MultiStatus) line: 3328 + Workbench$54.run() line: 2114 + Workbench.runStartupWithProgress(int, Runnable) line: 1827 + Workbench.restoreState(IMemento) line: 2112 + Workbench.access$28(Workbench, IMemento) line: 2083 + Workbench$49.run() line: 1946 + SafeRunner.run(ISafeRunnable) line: 42 + Workbench.restoreState() line: 1890 + WorkbenchConfigurer.restoreState() line: 183 + WorkbenchAdvisor$1.run() line: 781 + Thread [Worker-1] (Suspended) + waiting for: WorkerPool (id=127) + Object.wait(long) line: not available [native method] + WorkerPool.sleep(long) line: 185 + WorkerPool.startJob(Worker) line: 217 + Worker.run() line: 51 + Daemon Thread [Java indexing] (Suspended) + waiting for: IndexManager (id=128) + Object.wait(long) line: not available [native method] + IndexManager(Object).wait() line: 485 + IndexManager(JobManager).run() line: 381 + Thread.run() line: 619 + Thread [Worker-2] (Suspended) + waiting for: Class<T> (org.lamport.tla.toolbox.Activator) (id=49) + Activator.getSpecManager() line: 301 + TLAParsingBuilder.build(int, Map, IProgressMonitor) line: 52 + BuildManager$2.run() line: 627 + SafeRunner.run(ISafeRunnable) line: 42 + BuildManager.basicBuild(int, IncrementalProjectBuilder, Map, MultiStatus, IProgressMonitor) line: 170 + BuildManager.basicBuild(IProject, int, ICommand[], MultiStatus, IProgressMonitor) line: 201 + BuildManager$1.run() line: 253 + SafeRunner.run(ISafeRunnable) line: 42 + BuildManager.basicBuild(IProject, int, MultiStatus, IProgressMonitor) line: 256 + BuildManager.basicBuildLoop(IProject[], IProject[], int, MultiStatus, IProgressMonitor) line: 309 + BuildManager.build(int, IProgressMonitor) line: 341 + AutoBuildJob.doBuild(IProgressMonitor) line: 140 + AutoBuildJob.run(IProgressMonitor) line: 238 + Worker.run() line: 55 + Thread [Worker-3] (Suspended) + waiting for: WorkerPool (id=127) + Object.wait(long) line: not available [native method] + WorkerPool.sleep(long) line: 185 + WorkerPool.startJob(Worker) line: 217 + Worker.run() line: 51 + C:\Program Files\Java\jdk1.6.0_21\bin\javaw.exe (Aug 10, 2011 3:06:46 PM)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=195#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-11 17:17:12 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Released thread decoupling to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=195#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-11 17:17:13 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=95" name="attach_95" title="mylyn/context/zip">attachment 95</a> <a href="https://54.195.32.3/attachment.cgi?id=95&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=195#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-25 22:14:18 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Solved (a while ago)</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=196">196</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Simplify IDE workspace provisioning</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=96">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=196#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-11 17:18:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Setting up and keeping a local development +workspace in sync should take as little work as possible. A first step +is to use a .target as a common base to declare 3rd party dependencies.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=196#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-11 17:22:33 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Released .target to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=196#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-11 17:22:33 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=96" name="attach_96" title="mylyn/context/zip">attachment 96</a> <a href="https://54.195.32.3/attachment.cgi?id=96&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=196#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-16 11:59:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed in HEAD</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=197">197</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">java.lang.NumberFormatException: in WorkspaceSpecManager.getMostRecentlyOpenedSpec</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=97">mylyn/context/zip + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=98">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=197#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-13 18:17:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">LL: I just discovered the following bug. +When I click + + File > Open Spec > Add New Spec + +and then click Browse on the popped up dialog, it works fine if I'm +doing it with a spec open, but it does nothing if I do it with no spec +open. + +The problem seems to be caused by something weird in the workspace. It +happens (and is repeatable) when I run the Toolbox from Eclipse with the + current workspace, but not when I run either the Eclipse-generated +release or the Maven-generated release, or when I run the Toolbox from +Eclipse with a fresh workspace. + +Appended below is the log. As you can see, the problem is a +NumberFormatException at WorkspaceSpecManager.java:468. Simply adding +another catch clause to catch and ignore the exception seems to solve +the problem. However, I thought you should look at it and see if that +sounds like a reasonable thing to do. + +Leslie + + +!SESSION 2011-08-12 18:19:49.456 +----------------------------------------------- +eclipse.buildId=unknown +java.version=1.6.0_21 +java.vendor=Sun Microsystems Inc. +BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US +Framework arguments: -product +org.lamport.tla.toolbox.product.standalone.product +Command-line arguments: -product +org.lamport.tla.toolbox.product.standalone.product -data +C:\lamport\tla\newtools\tla2-inria-workspace/../runtime-org.lamport.tla.toolbox.product.product.product + -dev +file:C:/lamport/tla/newtools/tla2-inria-workspace/.metadata/.plugins/org.eclipse.pde.core/org.lamport.tla.toolbox.product.product.product/dev.properties + -os win32 -ws win32 -arch x86_64 -consoleLog + +!ENTRY org.eclipse.core.resources 2 10035 2011-08-12 18:20:52.466 +!MESSAGE The workspace exited with unsaved changes in the previous +session; refreshing workspace to recover changes. + +!ENTRY org.eclipse.ui 4 4 2011-08-12 18:21:13.958 +!MESSAGE Plugin org.lamport.tla.toolbox, extension +org.eclipse.ui.perspectiveExtensions, id +toolbox.view.ToolboxWelcomeView: Attribute 'relative' not defined. This + attribute is required when relationship="left". + +!ENTRY org.eclipse.ui 4 4 2011-08-12 18:21:13.962 +!MESSAGE Unable to process element: view in perspective extension: null + +!ENTRY org.eclipse.ui 4 0 2011-08-12 18:21:20.509 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NumberFormatException: null + at java.lang.Long.parseLong(Unknown Source) + at java.lang.Long.parseLong(Unknown Source) + at +org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.getMostRecentlyOpenedSpec(WorkspaceSpecManager.java:468) + + at +org.lamport.tla.toolbox.ui.wizard.NewSpecWizardPage.handleBrowse(NewSpecWizardPage.java:186) + + at +org.lamport.tla.toolbox.ui.wizard.NewSpecWizardPage$2.widgetSelected(NewSpecWizardPage.java:95) + + at +org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234) + + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at +org.lamport.tla.toolbox.ui.handler.NewSpecHandler.execute(NewSpecHandler.java:59) + + at +org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + + at +org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at +org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + + at +org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + + at +org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + + at +org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820) + + at +org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806) + + at +org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796) + + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) + +!ENTRY org.eclipse.ui 4 0 2011-08-12 18:22:00.543 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NumberFormatException: null + at java.lang.Long.parseLong(Unknown Source) + at java.lang.Long.parseLong(Unknown Source) + at +org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.getMostRecentlyOpenedSpec(WorkspaceSpecManager.java:468) + + at +org.lamport.tla.toolbox.ui.wizard.NewSpecWizardPage.handleBrowse(NewSpecWizardPage.java:186) + + at +org.lamport.tla.toolbox.ui.wizard.NewSpecWizardPage$2.widgetSelected(NewSpecWizardPage.java:95) + + at +org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234) + + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at +org.lamport.tla.toolbox.ui.handler.NewSpecHandler.execute(NewSpecHandler.java:59) + + at +org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + + at +org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at +org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + + at +org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + + at +org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + + at +org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820) + + at +org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806) + + at +org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796) + + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) + +!ENTRY org.eclipse.ui 4 0 2011-08-12 18:22:28.872 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NumberFormatException: null + at java.lang.Long.parseLong(Unknown Source) + at java.lang.Long.parseLong(Unknown Source) + at +org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.getMostRecentlyOpenedSpec(WorkspaceSpecManager.java:468) + + at +org.lamport.tla.toolbox.ui.wizard.NewSpecWizardPage.handleBrowse(NewSpecWizardPage.java:186) + + at +org.lamport.tla.toolbox.ui.wizard.NewSpecWizardPage$2.widgetSelected(NewSpecWizardPage.java:95) + + at +org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234) + + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at +org.lamport.tla.toolbox.ui.handler.NewSpecHandler.execute(NewSpecHandler.java:59) + + at +org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + + at +org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at +org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + + at +org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + + at +org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + + at +org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820) + + at +org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806) + + at +org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796) + + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) + +!ENTRY org.eclipse.ui 4 0 2011-08-12 18:22:55.268 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NumberFormatException: null + at java.lang.Long.parseLong(Unknown Source) + at java.lang.Long.parseLong(Unknown Source) + at +org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.getMostRecentlyOpenedSpec(WorkspaceSpecManager.java:468) + + at +org.lamport.tla.toolbox.ui.wizard.NewSpecWizardPage.handleBrowse(NewSpecWizardPage.java:186) + + at +org.lamport.tla.toolbox.ui.wizard.NewSpecWizardPage$2.widgetSelected(NewSpecWizardPage.java:95) + + at +org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234) + + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at +org.lamport.tla.toolbox.ui.handler.NewSpecHandler.execute(NewSpecHandler.java:59) + + at +org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + + at +org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at +org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + + at +org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + + at +org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + + at +org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820) + + at +org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806) + + at +org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796) + + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=197#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-15 10:24:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Made +org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.getRecentlyOpened() + more robust against NPE and CoreExceptions. + +NPE indicates a more severe problem though which will cause problems on +various ends. +org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.specStorage +must not contain invalid (null) entries. Investigation pending...</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=197#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-15 10:24:50 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=97" name="attach_97" title="mylyn/context/zip">attachment 97</a> <a href="https://54.195.32.3/attachment.cgi?id=97&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=197#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-15 11:24:26 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Scratch <a href="https://54.195.32.3/show_bug.cgi?id=197#c1">comment #1</a>, + fix released to HEAD which reuses +org.lamport.tla.toolbox.util.compare.SpecComparator. SpecComparator +accounts for a null close date. + +The reason that the spec under question has no close date set in the +first place, can probably be explained by an unclean Toolbox shutdown/ a + crash.</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=197#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-15 11:24:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=98" name="attach_98" title="mylyn/context/zip">attachment 98</a> <a href="https://54.195.32.3/attachment.cgi?id=98&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=198">198</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">"Error while loading manipulator" when trying to update Toolbox on Mac</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Mac OS</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=198#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-16 17:12:18 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Other platforms work fine. OSx however +throws the following exception. + +!ENTRY org.eclipse.equinox.p2.touchpoint.eclipse 4 0 2011-08-16 +17:01:34.587 +!MESSAGE Error while loading manipulator. +!STACK 0 +java.lang.IllegalStateException: The framework persistent data location +(/opt/toolbox/toolbox.app/Contents/MacOS/configuration) is not the same +as the framework configuration location (/opt/toolbox/configuration). + at +org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxManipulatorImpl.checkConsistencyOfFwConfigLocAndFwPersistentDataLoc(EquinoxManipulatorImpl.java:65) + + at +org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxManipulatorImpl.loadWithoutFwPersistentData(EquinoxManipulatorImpl.java:348) + + at +org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxManipulatorImpl.load(EquinoxManipulatorImpl.java:319) + + at +org.eclipse.equinox.internal.p2.touchpoint.eclipse.LazyManipulator.loadDelegate(LazyManipulator.java:54) + + at +org.eclipse.equinox.internal.p2.touchpoint.eclipse.LazyManipulator.getLauncherData(LazyManipulator.java:117) + + at +org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.SetLauncherNameAction.setLauncher(SetLauncherNameAction.java:44) + + at +org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.SetLauncherNameAction.execute(SetLauncherNameAction.java:30) + + at +org.eclipse.equinox.internal.p2.engine.ParameterizedProvisioningAction.execute(ParameterizedProvisioningAction.java:35) + + at +org.eclipse.equinox.internal.p2.engine.Phase.mainPerform(Phase.java:149) + at +org.eclipse.equinox.internal.p2.engine.Phase.perform(Phase.java:78) + at +org.eclipse.equinox.internal.p2.engine.PhaseSet.perform(PhaseSet.java:44) + + at +org.eclipse.equinox.internal.p2.engine.Engine.perform(Engine.java:73) + at +org.eclipse.equinox.internal.p2.engine.Engine.perform(Engine.java:44) + at +org.eclipse.equinox.p2.operations.ProvisioningSession.performProvisioningPlan(ProvisioningSession.java:174) + + at +org.eclipse.equinox.p2.operations.ProfileModificationJob.runModal(ProfileModificationJob.java:79) + + at +org.eclipse.equinox.p2.operations.ProvisioningJob.run(ProvisioningJob.java:177) + + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +!ENTRY org.eclipse.equinox.p2.engine 4 4 2011-08-16 17:01:34.599 +!MESSAGE An error occurred while unconfiguring the items to uninstall +!SUBENTRY 1 org.eclipse.equinox.p2.engine 4 0 2011-08-16 17:01:34.599 +!MESSAGE session context was:(profile=DefaultProfile, +phase=org.eclipse.equinox.internal.p2.engine.phases.Unconfigure, +operand=[R]org.lamport.tla.toolbox.product.product.executable.cocoa.macosx.x86_64.toolbox + 1.3.2.201108161358 --> null, +action=org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.SetLauncherNameAction). +!SUBENTRY + 1 org.eclipse.equinox.p2.engine 4 0 2011-08-16 17:01:34.599 +!MESSAGE Error while loading manipulator. +!STACK 0 +java.lang.IllegalStateException: Error while loading manipulator. + at +org.eclipse.equinox.internal.p2.touchpoint.eclipse.LazyManipulator.loadDelegate(LazyManipulator.java:58) + + at +org.eclipse.equinox.internal.p2.touchpoint.eclipse.LazyManipulator.getLauncherData(LazyManipulator.java:117) + + at +org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.SetLauncherNameAction.setLauncher(SetLauncherNameAction.java:44) + + at +org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.SetLauncherNameAction.execute(SetLauncherNameAction.java:30) + + at +org.eclipse.equinox.internal.p2.engine.ParameterizedProvisioningAction.execute(ParameterizedProvisioningAction.java:35) + + at +org.eclipse.equinox.internal.p2.engine.Phase.mainPerform(Phase.java:149) + at +org.eclipse.equinox.internal.p2.engine.Phase.perform(Phase.java:78) + at +org.eclipse.equinox.internal.p2.engine.PhaseSet.perform(PhaseSet.java:44) + + at +org.eclipse.equinox.internal.p2.engine.Engine.perform(Engine.java:73)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=198#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-16 17:18:24 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This is how this bug manifest UI-wise: + +An error occurred while unconfiguring the items to uninstall +session context was:(profile=DefaultProfile, +phase=org.eclipse.equinox.internal.p2.engine.phases.Unconfigure, +operand=[R]org.lamport.tla.toolbox.product.product.executable.cocoa.macosx.x86_64.toolbox + 1.3.2.201108161358 --> null, +action=org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.SetLauncherNameAction). +Error + while loading manipulator.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=198#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-30 19:36:03 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=199">199</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Add update scheduler to toolbox</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=101">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=199#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-24 15:33:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The Toolbox may automatically check for updates. This is fortunately provided by equinox p2 ui. + +The Toolbox will check for updates by default at startup.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=199#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-24 15:46:33 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Basic plumbing done, user documentation missing (do we need documentation for update)?</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=199#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-24 15:46:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=101" name="attach_101" title="mylyn/context/zip">attachment 101</a> <a href="https://54.195.32.3/attachment.cgi?id=101&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=199#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-30 19:34:53 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=200">200</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Build includes pom.properties files which cause filenames too long warnings on Windows</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=102">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=200#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-25 11:30:18 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The files are not needed by the Toolbox at runtime and thus should be omitted from the zip files.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=200#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-25 12:59:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed in HEAD +pom.properties (and pom.xml) are omitted from zip files.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=200#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-25 12:59:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=102" name="attach_102" title="mylyn/context/zip">attachment 102</a> <a href="https://54.195.32.3/attachment.cgi?id=102&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=201">201</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Remove javacc build step from ant build</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_trivial">trivial + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=103">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=201#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-25 13:33:18 UTC + </span> + </div> + + + +<pre class="bz_comment_text">LL: "The parser should never be regenerated + automatically with javacc. Depending on the changes, manual editing of + some of the generated files may be necessary. Please remove anything +from the build file that could conceivably cause it to be done. (I have + some files explaining what needs to be done. I should add them to the +repository.)"</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=201#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-25 13:34:48 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Removed in HEAd</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=201#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-25 13:34:49 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=103" name="attach_103" title="mylyn/context/zip">attachment 103</a> <a href="https://54.195.32.3/attachment.cgi?id=103&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=202">202</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Optional dependencies broken in recent Tycho build</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=105">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=202#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-27 14:03:19 UTC + </span> + </div> + + + +<pre class="bz_comment_text"><a href="https://bugs.eclipse.org/355947">https://bugs.eclipse.org/355947</a></pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=202#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-27 14:06:11 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed in HEAD as per <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=355947#c4">https://bugs.eclipse.org/bugs/show_bug.cgi?id=355947#c4</a></pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=202#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-27 14:06:12 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=105" name="attach_105" title="mylyn/context/zip">attachment 105</a> <a href="https://54.195.32.3/attachment.cgi?id=105&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=203">203</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Rename Maven build output zip files to include version name</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=107">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=203#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-30 10:12:20 UTC + </span> + </div> + + + +<pre class="bz_comment_text">rename org.lamport.tla.toolbox.product.product-linux...zip to TLAToolbox-1.3.2-linux...zip</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=203#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-30 19:33:37 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed in HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=203#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-30 19:33:43 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=107" name="attach_107" title="mylyn/context/zip">attachment 107</a> <a href="https://54.195.32.3/attachment.cgi?id=107&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=204">204</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Add refresh command to sync spec/model with filesystem</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=106">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=204#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-30 18:26:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">If a Toolbox file is changed on the file +system layer, the Toolbox does not automatically detect the change. +Thus, refresh functionality is needed. This will be done as a "Refresh" +context menu entry in the spec explorer.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=204#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-30 18:46:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=204#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-08-30 18:46:12 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=106" name="attach_106" title="mylyn/context/zip">attachment 106</a> <a href="https://54.195.32.3/attachment.cgi?id=106&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=205">205</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLC stops if Queue Size grows to more than 2^31</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Chris Newcombe <chris.newcombe></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_blocker">blocker + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=108">screenshot after TLC stopped + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=111">mylyn/context/zip + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=113">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=205#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Chris Newcombe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-10 20:26:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=108" name="attach_108" title="screenshot after TLC stopped">attachment 108</a> <a href="https://54.195.32.3/attachment.cgi?id=108&action=edit" title="screenshot after TLC stopped">[details]</a></span> +screenshot after TLC stopped + +Version 1.2.1 of 29 September 2010 +(toolbox-1.2.1.win32.win32.x86_64) + +OS is Windows Server 2003 data center edition, service pack 2 (2007). + +I have a model-checking job that fails after 2 or 3 days (on a good 8-core +machine). + +TLC just stops with no error. + +It's pretty clear from the output that it's because Queue Size grows larger +than 2^31. I've pasted the end of the TLC console log below, and attached a +screenshot. + +I tried pasting the spec below as well, but bugzilla rejected it as comments +cannot be larger than 64KB. It is the 'textbookSnapshotIsolation.tla' spec +that I sent to Leslie in an email last week. + +Comments at the start of the spec show how to configure TLC (2 model values in +set Key, and 4 model values in set TxnId). +The invariant I was checking was + + ~ ReadOnlyAnomaly(history) + +This is an attempt to confirm that the above invariant is violated in a way +reported in a recent published paper (see end of spec for details). +I know from some experimentation that TLC gets close to finding the violation I +am looking for -- but it runs into the overflow bug before doing so. + +thanks, + +Chris + +… snip +@!@!@STARTMSG 2221:0 @!@!@ + line 8, col 38 to line 8, col 52 of module textbookSnapshotIsolation: +1242532628 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(14) at 2011-09-10 02:19:53: 4968408451 states generated, -1005007939 +distinct states found, -2147483642 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +4968408451 states generated, -1005007939 distinct states found, -2147483642 +states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2194:0 @!@!@ +The depth of the complete state graph search is 14. +@!@!@ENDMSG 2194 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished. (2011-09-10 02:21:24) +@!@!@ENDMSG 2186 @!@!@</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=205#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-12 17:25:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Hi Chris, + +Leslie is currently traveling. Can you send +textbookSnapshotIsolation.tla to bugzilla.tlaplus.net <at> +lemmster <dot> de too? + +Thanks +Markus + +P.S.: How many TLC worker threads do you use?</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=205#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-13 15:34:03 UTC + </span> + </div> + + + +<pre class="bz_comment_text">tlc2.tool.queue.StateQueue.len has been converted from int to long.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=205#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-13 15:34:07 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=111" name="attach_111" title="mylyn/context/zip">attachment 111</a> <a href="https://54.195.32.3/attachment.cgi?id=111&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=205#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-15 20:01:41 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Hi Chris, + +I have fixed StateQueue to support more than 2^31 states. Do you wanna +test drive a recent nightly build [0] and let me know if it fixes your +problem? + +Thanks +Markus + +[0] <a href="http://tla.msr-inria.inria.fr/tlatoolbox/products/">http://tla.msr-inria.inria.fr/tlatoolbox/products/</a></pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=205#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-20 10:51:45 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Separated long running tlc2.tool.queue.DiskStateQueueTest from short/smoke tests to keep test execution time minimal.</pre> + </div><div id="c6" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=205#c6">Comment 6</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-26 17:12:11 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD. Follow up "negative seek offset" bug is tracked as <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - java.IO.Exception: negative seek offset" href="https://54.195.32.3/show_bug.cgi?id=210">bug #210</a>.</pre> + </div><div id="c7" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=205#c7">Comment 7</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-26 17:12:12 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=113" name="attach_113" title="mylyn/context/zip">attachment 113</a> <a href="https://54.195.32.3/attachment.cgi?id=113&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=206">206</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">DND does not work in TLA editor</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=109">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=206#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-12 10:25:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">DND'ing a text block in the tla editor reveals the following exception: + +!ENTRY org.eclipse.ui 4 0 2011-09-12 10:24:39.779 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NullPointerException + at org.eclipse.ui.internal.EditorSiteDragAndDropServiceImpl$1.dragLeave(EditorSiteDragAndDropServiceImpl.java:107) + at org.eclipse.swt.dnd.DNDListener.handleEvent(DNDListener.java:70) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1282) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1267) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1061) + at org.eclipse.swt.dnd.DropTarget.drag_leave(DropTarget.java:430) + at org.eclipse.swt.dnd.DropTarget.Drag_Leave(DropTarget.java:264) + at org.eclipse.swt.internal.gtk.OS._gtk_main_do_event(Native Method) + at org.eclipse.swt.internal.gtk.OS.gtk_main_do_event(OS.java:8189) + at org.eclipse.swt.widgets.Display.eventProc(Display.java:1238) + at org.eclipse.swt.internal.gtk.OS._g_main_context_iteration(Native Method) + at org.eclipse.swt.internal.gtk.OS.g_main_context_iteration(OS.java:2237) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3159) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:592) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=206#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-12 11:11:36 UTC + </span> + </div> + + + +<pre class="bz_comment_text">A side effect of this bug causes the editor to crash if: + +0) An editor text block has been moved (causing the aforementioned exception) +1) Cut & Paste is used on the (full) editor content + +!ENTRY org.eclipse.ui 4 0 2011-09-07 17:55:06.195 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.IllegalArgumentException: Index out of bounds + at org.eclipse.swt.SWT.error(SWT.java:4064) + at org.eclipse.swt.SWT.error(SWT.java:3998) + at org.eclipse.swt.SWT.error(SWT.java:3969) + at org.eclipse.swt.custom.StyledText.getLocationAtOffset(StyledText.java:4329) + at org.eclipse.swt.custom.StyledTextDropTargetEffect$1.handleEvent(StyledTextDropTargetEffect.java:71) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062) + at org.eclipse.swt.widgets.Composite.WM_PAINT(Composite.java:1454) + at org.eclipse.swt.widgets.Control.windowProc(Control.java:4218) + at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341) + at org.eclipse.swt.widgets.Display.windowProc(Display.java:4886) + at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method) + at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2459) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3655) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) + at org.eclipse.jface.dialogs.MessageDialog.open(MessageDialog.java:334) + at org.eclipse.ui.internal.EditorManager.saveAll(EditorManager.java:1176) + at org.eclipse.ui.internal.Workbench$19.run(Workbench.java:1181) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.ui.internal.Workbench.saveAllEditors(Workbench.java:1130) + at org.eclipse.ui.internal.Workbench.busyClose(Workbench.java:1048) + at org.eclipse.ui.internal.Workbench.access$15(Workbench.java:1032) + at org.eclipse.ui.internal.Workbench$25.run(Workbench.java:1276) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.Workbench.close(Workbench.java:1274) + at org.eclipse.ui.internal.Workbench.close(Workbench.java:1246) + at org.eclipse.ui.internal.WorkbenchWindow.busyClose(WorkbenchWindow.java:731) + at org.eclipse.ui.internal.WorkbenchWindow.access$0(WorkbenchWindow.java:710) + at org.eclipse.ui.internal.WorkbenchWindow$5.run(WorkbenchWindow.java:832) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchWindow.close(WorkbenchWindow.java:830) + at org.eclipse.jface.window.Window.handleShellCloseEvent(Window.java:741) + at org.eclipse.jface.window.Window$3.shellClosed(Window.java:687) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:98) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062) + at org.eclipse.swt.widgets.Decorations.closeWidget(Decorations.java:308) + at org.eclipse.swt.widgets.Decorations.WM_CLOSE(Decorations.java:1665) + at org.eclipse.swt.widgets.Control.windowProc(Control.java:4164) + at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341) + at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1598) + at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2038) + at org.eclipse.swt.widgets.Display.windowProc(Display.java:4873) + at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method) + at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2454) + at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java:497) + at org.eclipse.swt.widgets.Control.windowProc(Control.java:4253) + at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341) + at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1598) + at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2038) + at org.eclipse.swt.widgets.Display.windowProc(Display.java:4873) + at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method) + at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2454) + at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java:497) + at org.eclipse.swt.widgets.Control.windowProc(Control.java:4253) + at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341) + at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1598) + at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2038) + at org.eclipse.swt.widgets.Display.windowProc(Display.java:4873) + at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method) + at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2459) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3655) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384)</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=206#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-12 11:12:22 UTC + </span> + </div> + + + +<pre class="bz_comment_text"><a href="https://bugs.eclipse.org/287486#c5">https://bugs.eclipse.org/287486#c5</a> outlines a viable fix.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=206#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-12 11:15:24 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=206#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-12 11:15:25 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=109" name="attach_109" title="mylyn/context/zip">attachment 109</a> <a href="https://54.195.32.3/attachment.cgi?id=109&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=207">207</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Linear growth factor in MemStateQueue quickly exceeds heap space</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=110">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=207#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-12 12:38:07 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Linearly doubling the state queue size +exceeds the Java head space quickly. If the queue size reaches a certain + size, doubling makes little sense anyway, since the new states found +does not follow this growth rate.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=207#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-12 17:23:02 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The capacity of MemStateQueue has be change to grow with (oldLength * 4) / 3 + 1).</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=207#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-12 17:23:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=110" name="attach_110" title="mylyn/context/zip">attachment 110</a> <a href="https://54.195.32.3/attachment.cgi?id=110&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=208">208</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Bug at ResourceHelper line 1477</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>lamport, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=208#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-19 10:52:39 UTC + </span> + </div> + + + +<pre class="bz_comment_text">osgi> TLA+ Toolbox started without +arguments. +!SESSION 2011-09-18 08:57:03.414 +----------------------------------------------- +eclipse.buildId=unknown +java.version=1.6.0_26 +java.vendor=Sun Microsystems Inc. +BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US Framework +arguments: -product org.lamport.tla.toolbox.product.standalone.product +Command-line arguments: -product +org.lamport.tla.toolbox.product.standalone.product -data +C:\lamport\tla\newtools\tla2-inria-workspace/../runtime-org.lamport.tla.toolbox.product.product.product + -dev +file:C:/lamport/tla/newtools/tla2-inria-workspace/.metadata/.plugins/org.eclipse.pde.core/org.lamport.tla.toolbox.product.product.product/dev.properties + -os win32 -ws win32 -arch x86 -console -consolelog + +!ENTRY org.eclipse.core.resources 2 10035 2011-09-18 08:57:09.530 +!MESSAGE The workspace exited with unsaved changes in the previous +session; refreshing workspace to recover changes. +footFileName = C:\lamport\papers\paxos\simple\byztla\BPConProof.tla +footFileName = C:\lamport\mytemp\BiqQueue.tla footFileName = +C:\lamport\papers\proof\Calculus.tla +footFileName = C:\lamport\mytemp\NewTest.tla footFileName = +C:\lamport\tla\newtools\tlapm\doc\vstte12\Peterson.tla +footFileName = C:\lamport\tla\newtools\tlapm\doc\vstte12\RawPeterson.tla +footFileName = C:\lamport\mytemp\Test.tla footFileName = +C:\lamport\mytemp\Test92.tla footFileName = +C:\lamport\tla\pluscal\bugs\bug_11_09_13.tla +Spec build invoked on Test ... +Added a parse result listener. +There are now 1 listeners. +Resulting status is: parsed +... build invocation finished. + +!ENTRY org.eclipse.equinox.p2.ui.sdk.scheduler 4 0 2011-09-18 +08:57:16.571 !MESSAGE The update checker service is not initialized + +!ENTRY org.eclipse.equinox.p2.ui.sdk.scheduler 4 0 2011-09-18 +08:57:16.575 !MESSAGE The update checker service is not initialized +Removed a parse result listener. +There are now 0 listeners. + +!ENTRY org.eclipse.ui 4 4 2011-09-18 08:57:31.570 !MESSAGE Plugin +org.lamport.tla.toolbox, extension org.eclipse.ui.perspectiveExtensions, + id toolbox.view.ToolboxWelcomeView: Attribute 'relative' not defined. +This attribute is required when relationship="left". + +!ENTRY org.eclipse.ui 4 4 2011-09-18 08:57:31.572 !MESSAGE Unable to +process element: view in perspective extension: null Spec build invoked +on Calculus ... +Resulting status is: parsed +... build invocation finished. +Added a parse result listener. +There are now 1 listeners. +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Opening SetOfIntervals(Calculus.tla at offset: 213, length: 14) Bug at +ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at +ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at +ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at +ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at +ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at +ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at +ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at +ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at +ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at +ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at +ResourceHelper line 1477</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=208#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-11 21:39:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">A trivial problem caused by not realizing +that an empty value could produce a zero-length array rather than a null + value in one case.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=209">209</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">tlc2.util.RandomAccessFile maintains read/write statistics which are never used</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=112">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=209#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-22 14:15:43 UTC + </span> + </div> + + + +<pre class="bz_comment_text">tlc2.util.RandomAccessFile maintains +statistics for all API methods. However, these statistics are never used + anywhere which makes them an unnecessary performance bottleneck. +Especially since all methods excessively call +System.currentTimeMillis().</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=209#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-22 14:17:43 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed by changing class hierarchy to directly inherit from java.io.RandomAccessFile instead of tlc2.util.RandomAccessFile.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=209#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-22 14:17:44 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=112" name="attach_112" title="mylyn/context/zip">attachment 112</a> <a href="https://54.195.32.3/attachment.cgi?id=112&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=210">210</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">java.IO.Exception: negative seek offset</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=114">mylyn/context/zip + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=132">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=210#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-26 17:07:25 UTC + </span> + </div> + + + +<pre class="bz_comment_text">For large models TLC crashes with a +"java.IO.Exception: negative seek offset" exception while accessing the +fingerprint disk storage (file "MC_0.fp"). No stack trace is shown nor +written to any log.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=210#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-26 17:42:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The precise error is: + +Error: accessing file +D:\textbookSnapshotIsolation.toolbox\ReadOnlyAnomaly (real not forced +history), 2 keys 4 txns\11-09-17-19-02-13\MC_1.fp java.io.IOException: +Negative seek offset + +This indicates that the exception occurs in +tlc2.tool.fp.DiskFPSet.diskLookup(long). One potential cause might be +the platform specific max file size limit.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=210#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-26 20:40:37 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Example output of when the index turns negative. + +Warning: MidEntry turned negative: -1 +(Use the -nowarning option to disable this warning.) +Error: DiskGraph.toString() +java.io.IOException: Negative seek offset + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:207) + at tlc2.tool.fp.DiskFPSet.diskLookup(DiskFPSet.java:437) + at tlc2.tool.fp.DiskFPSet.put(DiskFPSet.java:229) + at tlc2.tool.fp.DiskFPSetTest.testMaxDiskFPSetSize(DiskFPSetTest.java:56)</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=210#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-27 15:44:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Added -fpbits parameter to externally +configure tlc2.tool.fp.MultiFPSet.fpbits at startup. This determines the + amount of nested tlc2.tool.fp.DiskFPSet.DiskFPSet(int) used at runtime. + A DiskFPSet is constrained by a) the file systems max file size and b) a + long overflow when addressing the disk backing storage. +Increasing -fpbits does not prevent a) or b), it just makes both less +likely/happen later.</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=210#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-27 15:45:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=114" name="attach_114" title="mylyn/context/zip">attachment 114</a> <a href="https://54.195.32.3/attachment.cgi?id=114&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=210#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-10 09:56:41 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Chris Newcombe: + +New information, possibly related to the older 'negative seek' bug. + +I've been running a non-distributed test on an 8-core box for 7 days 19 +hours. It's generated quite a lot of states. +It just gave this error, which I have not seen before: + + DiskFPSet.mergeNewEntries: 9223367739864457495 is already on +disk. + +There isn't a stack trace. +The "Running TLC model checker" window is still still open +But all of the CPUs are pretty much idle. + +End of log, containing the error: + +Checkpointing of run +D:\serializableSnapshotIsolation.toolbox\serializable, 2 keys 4 txns +FULL symmetry\11-10-01-22-25-12 +@!@!@ENDMSG 2195 @!@!@ +@!@!@STARTMSG 2196:0 @!@!@ +Checkpointing completed at (2011-10-09 17:47:10) +@!@!@ENDMSG 2196 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(19) at 2011-10-09 17:47:10: 5481360968 states generated, +31649964 distinct states found, 2574512565 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(19) at 2011-10-09 17:48:10: 5481979264 states generated, +32156610 distinct states found, 2574851100 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(19) at 2011-10-09 17:49:10: 5482633400 states generated, +32691779 distinct states found, 2575200301 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2195:0 @!@!@ +Checkpointing of run +D:\serializableSnapshotIsolation.toolbox\serializable, 2 keys 4 txns +FULL symmetry\11-10-01-22-25-12 +@!@!@ENDMSG 2195 @!@!@ +@!@!@STARTMSG 2196:0 @!@!@ +Checkpointing completed at (2011-10-09 17:50:11) +@!@!@ENDMSG 2196 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(19) at 2011-10-09 17:50:11: 5483254957 states generated, +33193657 distinct states found, 2575520845 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2011-10-09 17:50:11 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 128, col 14 to line 128, col 20 of module +serializableSnapshotIsolation: 598320930 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 128, col 23 to line 128, col 35 of module +serializableSnapshotIsolation: 598320930 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 128, col 38 to line 128, col 52 of module +serializableSnapshotIsolation: 598320930 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 128, col 55 to line 128, col 64 of module +serializableSnapshotIsolation: 598320930 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 128, col 67 to line 128, col 77 of module +serializableSnapshotIsolation: 598320930 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 128, col 80 to line 128, col 97 of module +serializableSnapshotIsolation: 598320930 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 399, col 8 to line 399, col 93 of module +serializableSnapshotIsolation: 1683759288 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 400, col 8 to line 400, col 60 of module +serializableSnapshotIsolation: 1683759288 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 401, col 8 to line 401, col 66 of module +serializableSnapshotIsolation: 1683759288 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 406, col 8 to line 406, col 63 of module +serializableSnapshotIsolation: 1683759288 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 407, col 8 to line 407, col 64 of module +serializableSnapshotIsolation: 1683759288 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 408, col 8 to line 408, col 68 of module +serializableSnapshotIsolation: 1683759288 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 417, col 8 to line 417, col 66 of module +serializableSnapshotIsolation: 5722859 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 418, col 20 to line 418, col 32 of module +serializableSnapshotIsolation: 5722859 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 418, col 35 to line 418, col 49 of module +serializableSnapshotIsolation: 5722859 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 418, col 52 to line 418, col 61 of module +serializableSnapshotIsolation: 5722859 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 418, col 64 to line 418, col 74 of module +serializableSnapshotIsolation: 5722859 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 418, col 77 to line 418, col 94 of module +serializableSnapshotIsolation: 5722859 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 468, col 19 to line 468, col 114 of module +serializableSnapshotIsolation: 1123037941 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 469, col 19 to line 471, col 79 of module +serializableSnapshotIsolation: 1123037941 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 472, col 19 to line 474, col 81 of module +serializableSnapshotIsolation: 1123037941 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 475, col 19 to line 477, col 76 of module +serializableSnapshotIsolation: 1123037941 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 478, col 19 to line 480, col 77 of module +serializableSnapshotIsolation: 1123037941 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 481, col 19 to line 483, col 84 of module +serializableSnapshotIsolation: 1123037941 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 565, col 20 to line 566, col 92 of module +serializableSnapshotIsolation: 666571768 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 567, col 32 to line 567, col 44 of module +serializableSnapshotIsolation: 666571768 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 567, col 47 to line 567, col 61 of module +serializableSnapshotIsolation: 666571768 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 571, col 20 to line 571, col 92 of module +serializableSnapshotIsolation: 666571768 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 611, col 23 to line 613, col 72 of module +serializableSnapshotIsolation: 666571768 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 617, col 25 to line 617, col 73 of module +serializableSnapshotIsolation: 272119505 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 618, col 35 to line 618, col 45 of module +serializableSnapshotIsolation: 394452263 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 681, col 8 to line 681, col 87 of module +serializableSnapshotIsolation: 678019497 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 682, col 8 to line 682, col 72 of module +serializableSnapshotIsolation: 678019497 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 683, col 8 to line 683, col 66 of module +serializableSnapshotIsolation: 678019497 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 741, col 16 to line 743, col 68 of module +serializableSnapshotIsolation: 130798841 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 748, col 16 to line 748, col 64 of module +serializableSnapshotIsolation: 130798841 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 750, col 26 to line 750, col 43 of module +serializableSnapshotIsolation: 130798841 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 763, col 24 to line 763, col 33 of module +serializableSnapshotIsolation: 547220656 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 763, col 36 to line 763, col 46 of module +serializableSnapshotIsolation: 547220656 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 763, col 49 to line 763, col 66 of module +serializableSnapshotIsolation: 547220656 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 834, col 16 to line 834, col 71 of module +serializableSnapshotIsolation: 371070760 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 835, col 28 to line 835, col 34 of module +serializableSnapshotIsolation: 371070760 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 835, col 37 to line 835, col 49 of module +serializableSnapshotIsolation: 371070760 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 835, col 52 to line 835, col 61 of module +serializableSnapshotIsolation: 371070760 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 835, col 64 to line 835, col 74 of module +serializableSnapshotIsolation: 371070760 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 835, col 77 to line 835, col 94 of module +serializableSnapshotIsolation: 371070760 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 844, col 20 to line 844, col 127 of module +serializableSnapshotIsolation: 87685200 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 848, col 24 to line 848, col 74 of module +serializableSnapshotIsolation: 43842600 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 849, col 36 to line 849, col 50 of module +serializableSnapshotIsolation: 43842600 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 867, col 24 to line 867, col 81 of module +serializableSnapshotIsolation: 43842600 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 868, col 24 to line 869, col 87 of module +serializableSnapshotIsolation: 43842600 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 870, col 20 to line 870, col 80 of module +serializableSnapshotIsolation: 87685200 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 871, col 20 to line 871, col 81 of module +serializableSnapshotIsolation: 87685200 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 872, col 20 to line 872, col 85 of module +serializableSnapshotIsolation: 87685200 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 891, col 12 to line 891, col 126 of module +serializableSnapshotIsolation: 269066713 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 892, col 12 to line 892, col 67 of module +serializableSnapshotIsolation: 269066713 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 893, col 12 to line 893, col 67 of module +serializableSnapshotIsolation: 269066713 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 894, col 12 to line 894, col 68 of module +serializableSnapshotIsolation: 269066713 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 895, col 12 to line 895, col 72 of module +serializableSnapshotIsolation: 269066713 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 896, col 24 to line 896, col 38 of module +serializableSnapshotIsolation: 269066713 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2195:0 @!@!@ +Checkpointing of run +D:\serializableSnapshotIsolation.toolbox\serializable, 2 keys 4 txns +FULL symmetry\11-10-01-22-25-12 +@!@!@ENDMSG 2195 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +@!@!@STARTMSG 2166:0 @!@!@ +DiskFPSet.mergeNewEntries: 9223367739864457495 is already on disk. + +@!@!@ENDMSG 2166 @!@!@ +@!@!@ENDMSG 1000 @!@!@ +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: <Initial predicate> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) +/\ history = <<>> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 + :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: <Action line 416, col 5 to line 418, col 96 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) +/\ history = <<[op |-> "begin", txnid |-> T0]>> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 + :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: <Action line 876, col 5 to line 903, col 48 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {K0} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) +/\ history = <<[op |-> "begin", txnid |-> T0], [op |-> +"write", txnid |-> T0, key |-> K0]>> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 + :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +4: <Action line 876, col 5 to line 903, col 48 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {K0, K1} @@ T1 :> {} @@ T2 :> {} @@ +T3 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 + :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +5: <Action line 518, col 5 to line 618, col 45 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {K0, K1} @@ T1 :> {} @@ T2 :> {} @@ +T3 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0] +>> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {} @@ +T3 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +6: <Action line 422, col 5 to line 483, col 84 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0] >> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {} @@ +T3 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +7: <Action line 416, col 5 to line 418, col 96 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1] >> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {} @@ +T3 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +8: <Action line 416, col 5 to line 418, col 96 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2] >> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {} @@ +T3 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +9: <Action line 876, col 5 to line 903, col 48 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {K0} @@ T2 :> {} @@ T3 +:> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "write", txnid |-> T1, key |-> K0] >> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {} @@ +T3 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +10: <Action line 416, col 5 to line 418, col 96 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {K0} @@ T2 :> {} @@ T3 +:> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "write", txnid |-> T1, key |-> K0], + [op |-> "begin", txnid |-> T3] >> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {} @@ +T3 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +11: <Action line 518, col 5 to line 618, col 45 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {K0} @@ T2 :> {} @@ T3 +:> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "write", txnid |-> T1, key |-> K0], + [op |-> "begin", txnid |-> T3], + [op |-> "read", txnid |-> T2, key |-> K1, ver |-> T0] +>> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {K1} +@@ T3 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +12: <Action line 518, col 5 to line 618, col 45 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {K0} @@ T2 :> {} @@ T3 +:> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> TRUE @@ +T3 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "write", txnid |-> T1, key |-> K0], + [op |-> "begin", txnid |-> T3], + [op |-> "read", txnid |-> T2, key |-> K1, ver |-> T0], + [op |-> "read", txnid |-> T2, key |-> K0, ver |-> T0] +>> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {K0, +K1} @@ T3 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> TRUE @@ T2 :> FALSE @@ T3 + :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +13: <Action line 518, col 5 to line 618, col 45 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {K0} @@ T2 :> {} @@ T3 +:> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> TRUE @@ +T3 :> TRUE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "write", txnid |-> T1, key |-> K0], + [op |-> "begin", txnid |-> T3], + [op |-> "read", txnid |-> T2, key |-> K1, ver |-> T0], + [op |-> "read", txnid |-> T2, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K0, ver |-> T0] +>> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {K0, +K1} @@ T3 :> {K0}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> TRUE @@ T2 :> FALSE @@ T3 + :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +14: <Action line 518, col 5 to line 618, col 45 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {K0} @@ T2 :> {} @@ T3 +:> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> TRUE @@ +T3 :> TRUE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "write", txnid |-> T1, key |-> K0], + [op |-> "begin", txnid |-> T3], + [op |-> "read", txnid |-> T2, key |-> K1, ver |-> T0], + [op |-> "read", txnid |-> T2, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K1, ver |-> T0] +>> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {K0, +K1} @@ T3 :> {K0, K1}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> TRUE @@ T2 :> FALSE @@ T3 + :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +15: <Action line 876, col 5 to line 903, col 48 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {K0} @@ T2 :> {K1} @@ T3 +:> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> TRUE @@ +T3 :> TRUE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "write", txnid |-> T1, key |-> K0], + [op |-> "begin", txnid |-> T3], + [op |-> "read", txnid |-> T2, key |-> K1, ver |-> T0], + [op |-> "read", txnid |-> T2, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K1, ver |-> T0], + [op |-> "write", txnid |-> T2, key |-> K1] >> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {K0, +K1} @@ T3 :> {K0, K1}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> TRUE @@ T2 :> TRUE @@ T3 +:> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +16: <Action line 518, col 5 to line 618, col 45 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {K0} @@ T2 :> {K1} @@ T3 +:> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> TRUE @@ +T3 :> TRUE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "write", txnid |-> T1, key |-> K0], + [op |-> "begin", txnid |-> T3], + [op |-> "read", txnid |-> T2, key |-> K1, ver |-> T0], + [op |-> "read", txnid |-> T2, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K1, ver |-> T0], + [op |-> "write", txnid |-> T2, key |-> K1], + [op |-> "read", txnid |-> T1, key |-> K0, ver |-> T1] +>> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {K0} @@ T2 :> {K0, + K1} @@ T3 :> {K0, K1}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> TRUE @@ T2 :> TRUE @@ T3 +:> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +17: <Action line 876, col 5 to line 903, col 48 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {K0} @@ T2 :> {K1} @@ T3 +:> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> TRUE @@ +T3 :> TRUE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "write", txnid |-> T1, key |-> K0], + [op |-> "begin", txnid |-> T3], + [op |-> "read", txnid |-> T2, key |-> K1, ver |-> T0], + [op |-> "read", txnid |-> T2, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K1, ver |-> T0], + [op |-> "write", txnid |-> T2, key |-> K1], + [op |-> "read", txnid |-> T1, key |-> K0, ver |-> T1] +>> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {K0} @@ T2 :> {K0, + K1} @@ T3 :> {K0, K1}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> K1 @@ T2 :> NoLock +@@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> TRUE @@ T2 :> TRUE @@ T3 +:> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +18: <Action line 422, col 5 to line 483, col 84 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {K0} @@ T2 :> {} @@ T3 +:> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> TRUE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "write", txnid |-> T1, key |-> K0], + [op |-> "begin", txnid |-> T3], + [op |-> "read", txnid |-> T2, key |-> K1, ver |-> T0], + [op |-> "read", txnid |-> T2, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K1, ver |-> T0], + [op |-> "write", txnid |-> T2, key |-> K1], + [op |-> "read", txnid |-> T1, key |-> K0, ver |-> T1], + [ op |-> "abort", + txnid |-> T2, + reason |-> "in attempted commit, to preserve serializability" ] +>> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {K0} @@ T2 :> {} +@@ T3 :> {K0, K1}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> K1 @@ T2 :> NoLock +@@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> TRUE @@ T2 :> FALSE @@ T3 + :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2196:0 @!@!@ +Checkpointing completed at (2011-10-09 18:02:35) +@!@!@ENDMSG 2196 @!@!@</pre> + </div><div id="c6" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=210#c6">Comment 6</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-10 09:57:49 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Chris Newcombe: + +This time, it did not delete the MC*.fp file – info below. + +Of course, it didn’t hit the negative seek offset either. But another +test on a different host, running for just as long, did just hit the +negative seek offset error (and deleted its files as usual). + +So this file size might possibly be a low estimate of the size that +causes the negative seek offset error. (If it’s caused by a size +issue.) + + + +Directory of D:\serializableSnapshotIsolation.toolbox\serializable, 2 +keys 4 txns FULL symmetry\11-10-01-22-25-12 + + + +10/01/2011 10:25 PM 0 MC.st + +10/09/2011 06:02 PM 16 MC.st.chkpt + +10/09/2011 03:42 PM 17,179,869,408 MC_0.fp + +10/09/2011 05:54 PM 0 MC_0.tmp + +10/09/2011 03:45 PM 17,179,869,424 MC_1.fp + + 5 File(s) 34,359,738,848 bytes + + 0 Dir(s) 736,461,398,016 bytes free + + + +D:\serializableSnapshotIsolation.toolbox\serializable, 2 keys 4 txns +FULL symmet + +ry\11-10-01-22-25-12> + + + +The drive was not full (see attached picturePictures attached (sorry, +this is the easiest way to capture the information) + +~ 154GB of 839GB used</pre> + </div><div id="c7" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=210#c7">Comment 7</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-29 00:14:59 UTC + </span> + </div> + + + +<pre class="bz_comment_text">MidEntry turned negative: +================ +loEntry: -2147483648 +midEntry: -2147483390 +hiEntry: -2147482624 +loVal: 9223361181405976355 +hiVal: 9223365871748060008</pre> + </div><div id="c8" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=210#c8">Comment 8</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-29 17:09:00 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c9" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=210#c9">Comment 9</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-29 17:09:03 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=132" name="attach_132" title="mylyn/context/zip">attachment 132</a> <a href="https://54.195.32.3/attachment.cgi?id=132&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=211">211</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Error when looking for PlusCal algorithm</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + WONTFIX + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=115">The TLA spec + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=116">The Console output. + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=211#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-30 11:50:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Opening the spec or trivially modifying +it and saving it causes the exception in the attachment. However a new +spec that is identical to this except for the module name does not cause + the error.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=211#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-30 11:55:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=115" name="attach_115" title="The TLA spec">attachment 115</a> <a href="https://54.195.32.3/attachment.cgi?id=115&action=edit" title="The TLA spec">[details]</a></span> +The TLA spec</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=211#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-30 11:56:24 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=116" name="attach_116" title="The Console output.">attachment 116</a> <a href="https://54.195.32.3/attachment.cgi?id=116&action=edit" title="The Console output.">[details]</a></span> +The Console output.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=211#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-09-30 16:54:03 UTC + </span> + </div> + + + +<pre class="bz_comment_text">An examination of the code indicates that +this exception occurred because performing a find method call with an +offset of 0 on a FindReplaceDocumentAdapter object produced a +BadLocationException. An examination of the code of the +FindReplaceDocumentAdapter indicates that this can happen only if the +document being searched has length less than or equal to 0. If +programmers had ever heard of the concept of documentation, it might be +possible to determine if there are some valid circumstances in which a +document that is not empty can have a non-positive length. Since there +is no documentation, I will assume that the length of a non-empty +document should be positive, and therefore this is a bug in the Eclipse +infrastructure. This conclusion is supported by the fact that it was +repeatable with that particular spec, but disappeared when I deleted the + spec, closed the Toolbox, re-opened the Toolbox, and then recreated the + spec. (Closing the Toolbox was necessary to make it disappear.) + +However, there is still a bug. If the document is empty (has length 0), + then this error repeatably occurs. I would call that a bug in the find + method, but of course that method can't have any bugs because it has no + specification, and it can't fail to do what it is supposed to do if +there's nothing that it's supposed to do. In any case, since a TLA +specification file with no characters is not syntactically correct, so I + think we can live with this bug.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=212">212</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Coverage checking crashes distributed model checking + (tlc2.tool.WorkerException) after a few seconds of work with even a +single worker</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Chris Newcombe <chris.newcombe></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_blocker">blocker + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Linux</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=117">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=212#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Chris Newcombe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-04 01:56:24 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I’m trying ‘Run in distributed mode’ for the first time. +I’m using Toolbox Version 1.4.0 of 16 September 2011. (Doing ‘check for updates’ says No Updates Found). +From: <a href="https://tla.msr-inria.inria.fr/tlatoolbox/products/TLAToolbox-1.4.0-linux.gtk.x86_64.zip">https://tla.msr-inria.inria.fr/tlatoolbox/products/TLAToolbox-1.4.0-linux.gtk.x86_64.zip</a> + +I believe I have it set up correctly. I can start multiple workers on +multiple machines, and they do register and start work. + +But model-checking always exits a few seconds after starting, with this +error: + + tlc2.tool.WorkerException + at tlc2.tool.distributed.TLCWorker.getNextStates(TLCWorker.java:123) + …. (Full TLC logs are pasted below.) + +Even if I try it with a single worker, it always exits with that +exception, after checking a constant number of states. +The final number of states seems deterministic, and depends on the +specification. It does not seem to depend on which single worker does + the checking. +e.g. +- For one specification (serializableSnapshotIsolation) the number of +states is 25374 +- For another specification (textbookSnapshotIsolation.tla) the number +of states is 21618 + +I have not yet looked for patterns when using more than one worker. + +I’ll paste TLC logs first (master and single worker). +After that, I’ll describe how I created the nodes (which OS etc). +If necessary we I could create a set of EC2 nodes and give you direct +SSH access, if you need to examine this in situ. Let me know. + +Regards, + +Chris + +-- + +The TLC console log from the master: (the worker’s log is after this) + +TLC Server Version 2.03 of 20 July 2011 +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /mnt/serializableSnapshotIsolation.toolbox/serializable, 2 +keys, 4 txns, FULL symmetry/MC.tla +Parsing file /mnt/serializableSnapshotIsolation.toolbox/serializable, 2 +keys, 4 txns, FULL symmetry/serializableSnapshotIsolation.tla +Parsing file +/mnt/toolbox/plugins/org.lamport.tlatools_1.0.0.201109181126/tla2sany/StandardModules/TLC.tla +Parsing + file +/mnt/toolbox/plugins/org.lamport.tlatools_1.0.0.201109181126/tla2sany/StandardModules/Integers.tla +Parsing + file +/mnt/toolbox/plugins/org.lamport.tlatools_1.0.0.201109181126/tla2sany/StandardModules/Sequences.tla +Parsing + file +/mnt/toolbox/plugins/org.lamport.tlatools_1.0.0.201109181126/tla2sany/StandardModules/FiniteSets.tla +Parsing + file +/mnt/toolbox/plugins/org.lamport.tlatools_1.0.0.201109181126/tla2sany/StandardModules/Naturals.tla +Semantic + processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module serializableSnapshotIsolation +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2011-10-03 22:58:38) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state(s) generated. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 7000:0 @!@!@ +TLC server at ip-10-167-58-139 is ready (2011-10-03 22:58:39) +@!@!@ENDMSG 7000 @!@!@ +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at +rmi://ip-10-167-25-202.us-west-1.compute.internal:53005 completed +(2011-10-03 22:58:49) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +%1% +@!@!@ENDMSG 1000 @!@!@ +tlc2.tool.WorkerException + at tlc2.tool.distributed.TLCWorker.getNextStates(TLCWorker.java:123) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) + at sun.rmi.transport.Transport$1.run(Transport.java:159) + at java.security.AccessController.doPrivileged(Native Method) + at sun.rmi.transport.Transport.serviceCall(Transport.java:155) + at +sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) + at +sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) + + at +sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) + + at +java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) + + at +java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) + + at java.lang.Thread.run(Thread.java:662) + at +sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255) + + at +sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233) + + at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142) + at +java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178) + + at +java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132) + + at $Proxy2.getNextStates(Unknown Source) + at +tlc2.tool.distributed.TLCWorkerSmartProxy.getNextStates(TLCWorkerSmartProxy.java:34) + + at tlc2.tool.distributed.TLCServerThread.run(TLCServerThread.java:120) + +The behavior up to this point is: +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: <Initial predicate> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) +/\ history = <<>> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 + :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: <Action line 416, col 5 to line 418, col 96 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) +/\ history = <<[op |-> "begin", txnid |-> T0]>> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 + :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: <Action line 422, col 5 to line 483, col 84 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) +/\ history = <<[op |-> "begin", txnid |-> T0], [op |-> +"commit", txnid |-> T0]>> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 + :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +4: <Action line 416, col 5 to line 418, col 96 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 + :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +5: <Action line 422, col 5 to line 483, col 84 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "commit", txnid |-> T1] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 + :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +6: <Action line 416, col 5 to line 418, col 96 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "commit", txnid |-> T1], + [op |-> "begin", txnid |-> T2] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 + :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +7: <Action line 422, col 5 to line 483, col 84 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "commit", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "commit", txnid |-> T2] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 + :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +8: <Action line 416, col 5 to line 418, col 96 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "commit", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "commit", txnid |-> T2], + [op |-> "begin", txnid |-> T3] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 + :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 7003:0 @!@!@ +Worker: rmi://ip-10-167-25-202.us-west-1.compute.internal:53005 Sent: +19646 Rcvd: 25338 (2011-10-03 22:59:08) +@!@!@ENDMSG 7003 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(8) at 2011-10-03 22:59:08: 25375 states generated, 19646 +distinct states found, 16644 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +25375 states generated, 19646 distinct states found, 16644 states left +on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished. (2011-10-03 22:59:08) +@!@!@ENDMSG 2186 @!@!@ + + +The worker says: + +ubuntu@ip-10-167-25-202:/mnt$ java -cp tla2tools.jar +tlc2.tool.distributed.TLCWorker +ec2-50-18-128-101.us-west-1.compute.amazonaws.com & +[1] 2906 +ubuntu@ip-10-167-25-202:/mnt$ TLC Worker Version 2.03 of 20 July 2011 +Parsing file /tmp/1317682729698/MC.tla +Parsing file /tmp/1317682729698/serializableSnapshotIsolation.tla +Parsing file /tmp/TLC.tla +Parsing file /tmp/Integers.tla +Parsing file /tmp/Sequences.tla +Parsing file /tmp/FiniteSets.tla +Parsing file /tmp/Naturals.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module serializableSnapshotIsolation +Semantic processing of module MC +Starting... (2011-10-03 22:58:50) +TLC worker ready at: Mon Oct 03 22:58:50 UTC 2011 +ip-10-167-25-202.us-west-1.compute.internal, work completed at: Mon Oct +03 22:59:09 UTC 2011 Computed: 25374 Thank you! + +----- + +How I created the master and worker machines: + +I’m testing on the Amazon EC2 cloud. I’ll be writing a blog or +mailinglist-post with these instructions when I have them working. +For now it’s probably easier if you just access the nodes I’ve created. + +The instructions below assume a little bit of familiarity with EC2 – +e.g. that you have an AWS account signed up with EC2, and have +downloaded the pk-XXX.pem and cert-XXX.pem files required to call the +public EC2 API (to create instances etc.) + +#1 Create an EC2 ssh keypair – used for both the master and the workers. + + In commands below, my keypair is called: tlakp1 + From the AWS Management console, download the private key to your +laptop/desktop machine. + +#2. Create an EC2 security group – used for both the master and the +workers. + In the commands that follow, my security group is called: tlasg + +a. Open Inbound TCP/IP port range 1024-65535 to 0.0.0.0./0 in tlasg + +Note: from: sudo netstat -lp -A inet | grep java I found that the +master listens on 10996-10997, but both the master and workers listen on + apparently random ports that change on each run. Hence the firewall +has to be almost completely open. + +#3 Create an EC2 instance that will be the master. + + I chose a recent build of Ubuntu linux because: +- We want to easily automate the workers, so really we want linux. +Ubuntu has a tool called cloud-init that +- As the workers download software from the master, presumably the +workers have to be the same OS as the master. +- The master needs a GUI with remote access. Ubuntu Server can be +easily upgraded to support a good remote GUI. + + The master needs disk-space for TLC’s state. (Seems like TLC +remote workers don’t write to their own disks.) + Empirically, TLC performs best with EC2 ‘ephemeral’ disks – i.e. +local disks, not network-attached EBS volumes. The commands below +create ephemeral local disks with a filesystem mounted as /mnt. + + The commands below create 64-bit instances in AWS region +‘us-west-1’. For AMIs that are 32-bit and/or different AWS regions, see + <a href="http://alestic.com/">http://alestic.com/</a> + + Create the master instance, with ephemeral drives: + +ec2-run-instances ami-0b6f3c4e --region us-west-1 -t m1.xlarge -n 1 -b +'/dev/sdb=ephemeral0' -b '/dev/sdc=ephemeral1' -b '/dev/sdd=ephemeral2' +-b '/dev/sde=ephemeral3' -g tlasg -k tlakp1 –K pk-MYFILE.pem -C +cert-MYFILE.pem + +Wait until the master instance is running, by repeating this command +until the new instance is in ‘running’ state: + +ec2-describe-instances --region us-west-1 -K pk-${MY_AWS_EC2_X509}.pem +-C cert-${MY_AWS_EC2_X509}.pem + + (the above command will tell you the public DNS name of the instance, +of the form: ec2-*****.us-west-1.compute.amazonaws.com) + +#4 SSH into the master server and install Sun’s JDK, and the Ubuntu +desktop, and the Free NX remote-desktop server software: + +ssh -o ServerAliveInterval=60 -i tlakp1.pem <a href="mailto:ubuntu@ec2-MYINSTANCENAME.us-west-1.compute.amazonaws.com">ubuntu@ec2-MYINSTANCENAME.us-west-1.compute.amazonaws.com</a> + +install java hotspot JDK + + sudo add-apt-repository "deb <a href="http://archive.canonical.com/">http://archive.canonical.com/</a> lucid partner" + sudo apt-get update + sudo apt-get install sun-java6-jdk + + sudo touch /etc/profile.d/java.sh + sudo sh -c "echo 'export JAVA_HOME=/usr/lib/jvm/java-6-sun' >> /etc/profile.d/java.sh" + sudo sh -c "echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile.d/java.sh" + source /etc/profile.d/java.sh +install ubuntu GUI (takes a while +export DEBIAN_FRONTEND=noninteractive +sudo -E apt-get update +sudo -E apt-get install -y ubuntu-desktop +install FreeNX server +sudo add-apt-repository ppa:freenx-team +sudo sed -i ‘s/natty/lucid/g’ /etc/apt/sources.list.d/freenx-team-ppa-natty.list +sudo apt-get update +sudo apt-get install freenx +wget <a href="https://bugs.launchpad.net/freenx-server/+bug/576359/+attachment/1378450/+files/nxsetup.tar.gz">https://bugs.launchpad.net/freenx-server/+bug/576359/+attachment/1378450/+files/nxsetup.tar.gz</a> +tar -xvf nxsetup.tar.gz +sudo cp nxsetup /usr/lib/nx/nxsetup +sudo /usr/lib/nx/nxsetup --install +(Answer ‘n’ to the question about creating a key.) +Enable password authentication on the ssh server Edit /etc/ssh/sshd_config and +sudo nano /etc/ssh/sshd_config + (set PasswordAuthentication to yes then save the file, and exit the editor) +Restart sshd process to pick up the change: +sudo /etc/init.d/ssh restart +The user for remote desktop will be ‘ubuntu’. Set a password with: +sudo passwd ubuntu +Install TLA toolbox on the /mnt drive, not the boot drive. + +sudo chown ubuntu /mnt +cd /mnt +wget '<a href="https://tla.msr-inria.inria.fr/tlatoolbox/products/TLAToolbox-1.4.0-linux.gtk.x86_64.zip">https://tla.msr-inria.inria.fr/tlatoolbox/products/TLAToolbox-1.4.0-linux.gtk.x86_64.zip</a>' +unzip TLAToolbox-1.4.0-linux.gtk.x86_64.zip +#5 On your laptop or desktop, install the free NX remote-deskstop client: +Download the client from <a href="http://www.nomachine.com/download.php">http://www.nomachine.com/download.php</a>. + +After install Click on the NX Connection wizard to setup a new +connection. Put the master’s EC2 public DNS name in the Host field. +Port is 22. The login user is ubuntu. +#6 Using the GUI via NX client from your laptop/desktop, run the Toolbox + and create the spec and model. + +#7 Set up workers, install Sun JDK, and start TLC workers by pointing +them to the master server. + +E.g. Create some workers (number is controlled with -n 2): + +ec2-run-instances ami-0b6f3c4e --region us-west-1 -t m2.4xlarge -n 2 -b +'/dev/sdb=ephemeral0' -b '/dev/sdc=ephemeral1' -g tlasg -k tlakp1 -K +pk-${MY_AWS_EC2_X509}.pem -C cert-${MY_AWS_EC2_X509}.pem + +Wait until they are running, by repeating this command until the new +instance(s) are in ‘running’ state: + +ec2-describe-instances --region us-west-1 -K pk-${MY_AWS_EC2_X509}.pem +-C cert-${MY_AWS_EC2_X509}.pem + + (the above command will tell you the public DNS name of the instance, +of the form: ec2-*****.us-west-1.compute.amazonaws.com) + +For each worker: + +ssh -o ServerAliveInterval=60 -i tlakp1.pem <a href="mailto:ubuntu@ec2-WORKER-PUBLIC-DNS-NAME.us-west-1.compute.amazonaws.com">ubuntu@ec2-WORKER-PUBLIC-DNS-NAME.us-west-1.compute.amazonaws.com</a> + + sudo add-apt-repository "deb <a href="http://archive.canonical.com/">http://archive.canonical.com/</a> lucid partner" + sudo apt-get update + sudo apt-get install sun-java6-jdk + + sudo touch /etc/profile.d/java.sh + sudo sh -c "echo 'export JAVA_HOME=/usr/lib/jvm/java-6-sun' >> /etc/profile.d/java.sh" + sudo sh -c "echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile.d/java.sh" + source /etc/profile.d/java.sh + +Connect the worker to the master, get TLC, and start the worker + +sudo chown ubuntu /mnt +cd /mnt +wget <a href="http://ec2-master-ec2-public-dns-name.us-west-1.compute.amazonaws.com:10996/files/tla2tools.jar">http://ec2-MASTER-EC2-PUBLIC-DNS-NAME.us-west-1.compute.amazonaws.com:10996/files/tla2tools.jar</a> +java -cp tla2tools.jar tlc2.tool.distributed.TLCWorker ec2-MASTER-EC2-PUBLIC-DNS-NAME.us-west-1.compute.amazonaws.com</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=212#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-04 18:06:57 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Hi Chris, + +I assume textbookSnapshotIsolation.tla specification is same spec as with <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - TLC stops if Queue Size grows to more than 2^31" href="https://54.195.32.3/show_bug.cgi?id=205">bug #205</a>? + +And does TLC get past 21618 states for textbookSnapshotIsolation in non-distributed work? + +Thanks +Markus</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=212#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-06 20:57:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Chris, + +the latest CI zips [0] contain improved exception handling that should not swallow the nested cause. Can you give it a try? + +Thanks +Markus</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=212#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-06 20:59:51 UTC + </span> + </div> + + + +<pre class="bz_comment_text">[0] <a href="https://tla.msr-inria.inria.fr/tlatoolbox/ci/products/">https://tla.msr-inria.inria.fr/tlatoolbox/ci/products/</a></pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=212#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-07 17:48:00 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Chris via direct email: + +Hi Markus, Leslie + + >>the latest CI zips [0] contain improved exception handling that should not + >>swallow the nested cause. Can you give it a try? + +I just tried the following version, with 1 remote worker and the same spec as before. + + <a href="https://tla.msr-inria.inria.fr/tlatoolbox/ci/products/">https://tla.msr-inria.inria.fr/tlatoolbox/ci/products/</a> + TLAToolbox-1.4.1-linux.gtk.x86_64.zip 06-Oct-2011 11:43 + 47216569 + +Here's the output: + +TLC Server Version 2.03 of 20 July 2011 +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /mnt/serializableSnapshotIsolation.toolbox/serializable, 2 +keys, 4 txns, FULL symmetry/MC.tla +Parsing file /mnt/serializableSnapshotIsolation.toolbox/serializable, 2 +keys, 4 txns, FULL symmetry/serializableSnapshotIsolation.tla +Parsing file +/mnt/toolbox/plugins/org.lamport.tlatools_1.0.0.201110061135/tla2sany/StandardModules/TLC.tla +Parsing + file +/mnt/toolbox/plugins/org.lamport.tlatools_1.0.0.201110061135/tla2sany/StandardModules/Integers.tla +Parsing + file +/mnt/toolbox/plugins/org.lamport.tlatools_1.0.0.201110061135/tla2sany/StandardModules/Sequences.tla +Parsing + file +/mnt/toolbox/plugins/org.lamport.tlatools_1.0.0.201110061135/tla2sany/StandardModules/FiniteSets.tla +Parsing + file +/mnt/toolbox/plugins/org.lamport.tlatools_1.0.0.201110061135/tla2sany/StandardModules/Naturals.tla +Semantic + processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module serializableSnapshotIsolation +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2011-10-07 15:28:39) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state(s) generated. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 7000:0 @!@!@ +TLC server at ip-10-167-58-139 is ready (2011-10-07 15:28:40) +@!@!@ENDMSG 7000 @!@!@ +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at +rmi://ip-10-167-25-202.us-west-1.compute.internal:40387 completed +(2011-10-07 15:28:43) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +%1% +@!@!@ENDMSG 1000 @!@!@ +tlc2.tool.WorkerException + at tlc2.tool.distributed.TLCWorker.getNextStates(TLCWorker.java:123) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) + at sun.rmi.transport.Transport$1.run(Transport.java:159) + at java.security.AccessController.doPrivileged(Native Method) + at sun.rmi.transport.Transport.serviceCall(Transport.java:155) + at +sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) + at +sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) + + at +sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) + + at +java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) + + at +java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) + + at java.lang.Thread.run(Thread.java:662) + at +sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255) + + at +sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233) + + at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142) + at +java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178) + + at +java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132) + + at $Proxy2.getNextStates(Unknown Source) + at +tlc2.tool.distributed.TLCWorkerSmartProxy.getNextStates(TLCWorkerSmartProxy.java:34) + + at tlc2.tool.distributed.TLCServerThread.run(TLCServerThread.java:120) +Caused by: java.lang.NullPointerException + at tlc2.tool.TLCStateMutSource.copy(TLCStateMutSource.java:124) + at tlc2.value.FcnLambdaValue.<init>(FcnLambdaValue.java:41) + at tlc2.tool.Tool.evalAppl(Tool.java:1585) + at tlc2.tool.Tool.eval(Tool.java:1212) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:1018) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:776) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:1021) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:878) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:715) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:878) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:975) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:776) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:1029) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:776) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:1063) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:878) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:816) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:878) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:700) + at tlc2.tool.distributed.TLCApp.getNextStates(TLCApp.java:132) + at tlc2.tool.distributed.TLCWorker.getNextStates(TLCWorker.java:76) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) + at sun.rmi.transport.Transport$1.run(Transport.java:159) + at java.security.AccessController.doPrivileged(Native Method) + at sun.rmi.transport.Transport.serviceCall(Transport.java:155) + at +sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) + at +sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) + + at +sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) + + at +java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) + + at +java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) + + at java.lang.Thread.run(Thread.java:662) + +The behavior up to this point is: +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: <Initial predicate> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) +/\ history = <<>> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 + :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: <Action line 416, col 5 to line 418, col 96 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) +/\ history = <<[op |-> "begin", txnid |-> T0]>> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 + :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: <Action line 422, col 5 to line 483, col 84 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) +/\ history = <<[op |-> "begin", txnid |-> T0], [op |-> +"commit", txnid |-> T0]>> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 + :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +4: <Action line 416, col 5 to line 418, col 96 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 + :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +5: <Action line 422, col 5 to line 483, col 84 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "commit", txnid |-> T1] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 + :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +6: <Action line 416, col 5 to line 418, col 96 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "commit", txnid |-> T1], + [op |-> "begin", txnid |-> T2] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 + :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +7: <Action line 422, col 5 to line 483, col 84 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "commit", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "commit", txnid |-> T2] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 + :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +8: <Action line 416, col 5 to line 418, col 96 of module +serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 +:> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "commit", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "commit", txnid |-> T2], + [op |-> "begin", txnid |-> T3] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 + :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> +NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ +T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 7003:0 @!@!@ +Worker: rmi://ip-10-167-25-202.us-west-1.compute.internal:40387 Sent: +19646 Rcvd: 25338 (2011-10-07 15:29:02) +@!@!@ENDMSG 7003 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(8) at 2011-10-07 15:29:02: 25375 states generated, 19646 +distinct states found, 16644 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +25375 states generated, 19646 distinct states found, 16644 states left +on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished. (2011-10-07 15:29:02) +@!@!@ENDMSG 2186 @!@!@ + + +And the console output of the single worker: + +ubuntu@ip-10-167-25-202:/mnt$ java -cp tla2tools.jar +tlc2.tool.distributed.TLCWorker +ec2-50-18-128-101.us-west-1.compute.amazonaws.com & +[1] 6990 +ubuntu@ip-10-167-25-202:/mnt$ TLC Worker Version 2.03 of 20 July 2011 +Parsing file /tmp/1318001328641/MC.tla +Parsing file /tmp/1318001328641/serializableSnapshotIsolation.tla +Parsing file /tmp/TLC.tla +Parsing file /tmp/Integers.tla +Parsing file /tmp/Sequences.tla +Parsing file /tmp/FiniteSets.tla +Parsing file /tmp/Naturals.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module serializableSnapshotIsolation +Semantic processing of module MC +Starting... (2011-10-07 15:28:49) +TLC worker ready at: Fri Oct 07 15:28:49 UTC 2011 +ip-10-167-25-202.us-west-1.compute.internal, work completed at: Fri Oct +07 15:29:08 UTC 2011 Computed: 25374 Thank you!</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=212#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-07 18:47:13 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I'm able to reproduce this locally even +with cmdline TLC. Causing the NPE is related to "coverage" checking. +Removing the coverage parameter on the cmdline, makes the NPE +disappear.</pre> + </div><div id="c6" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=212#c6">Comment 6</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-07 18:54:54 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Coverage has been remove from the +parameters that are passed to TLCServer until the root cause for the NPE + is found. The next CI build will include this change.</pre> + </div><div id="c7" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=212#c7">Comment 7</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-07 18:54:55 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=117" name="attach_117" title="mylyn/context/zip">attachment 117</a> <a href="https://54.195.32.3/attachment.cgi?id=117&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=213">213</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">DiskFPSet memory lookup fails to look up 0 (zero) or Long.MIN_VALUE</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=213#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-04 15:10:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">A bucket used by DiskFPSet to store +fingerprints in memory marks unused positions with zeros. Thus +DiskFPSet#memLookup(long) cannot lookup a fingerprint which happens to +be either 0 or Long.MIN_VALUE (zeroing Long.MIN_VALUE msb turns it into +0).</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=213#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-04 15:11:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text">FWIW: No code appears to exist that guards TLC from using 0/zero as a valid fingerprint</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=213#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-04 15:21:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fromn the moment when the in-memory storage + is flushed to disk, zero is correctly handled by +DiskFPSet#diskLookup(long). This means that the behavior for 0 and +Long.Min_Value depends on DiskFPSets internal state.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=213#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-06 20:57:45 UTC + </span> + </div> + + + +<pre class="bz_comment_text">[0] <a href="https://tla.msr-inria.inria.fr/tlatoolbox/ci/products/">https://tla.msr-inria.inria.fr/tlatoolbox/ci/products/</a></pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=214">214</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Performance bottleneck in checkpointing and .fp file roll-over</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=214#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-09 10:35:12 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Creating a checkpoint and/or rolling over +the fingerprint (.fp) disk backing store essentially stalls TLC for +"larger" models. A larger model is one with millions of states and multi + GB disk files. Checkpointing or rolling over causes the complete file +to be copied taking most + +In distributed mode, this has the extra problem of disconnecting +TLCWorkers because TLCServer stops responding for too long. Obviously we + could make TLCWorkers more robust WRT timeouts, but it doesn't solve +the underlying problem.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=214#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-14 21:10:54 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This bottleneck might be the cause for tlc2.tool.fp.DiskFPSet.beginChkpt() not doing any checkpointing</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=215">215</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Make -fpbits parameter available in HowToRun section of model editor</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=118">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=215#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-09 11:32:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Add UI for the newly added fpbits parameter (see <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - java.IO.Exception: negative seek offset" href="https://54.195.32.3/show_bug.cgi?id=210">bug #210</a>).</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=215#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-09 12:00:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=215#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-09 12:00:48 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=118" name="attach_118" title="mylyn/context/zip">attachment 118</a> <a href="https://54.195.32.3/attachment.cgi?id=118&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=216">216</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">"-1 workers registered" in TLC distributed mode</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=137">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=216#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-10 10:02:00 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Chris Newcombe: + +Is the count of remote workers supposed to be accurate? + +I have 6 worker hosts, with 8 workers (cores) each. +I started all workers (after restoring from a checkpoint), and it only +reached 40 workers, not 48. I don’t know why. +So I killed all workers, intending to restart them. +I noticed that after I killed them, the master says there are -1 workers + (see partial screenshot, below/attached) + +I then tried restarting workers, but won’t go higher than 4. I suspect +the server has stopped, although the workers don’t complain on their +side. +The tail end of the TLC log on the master says the following. + + java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + +Tail of long master log: +… +@!@!@STARTMSG 1000:1 @!@!@ +%1% +@!@!@ENDMSG 1000 @!@!@ +java.lang.NullPointerException + at +tlc2.tool.distributed.TLCServer.getNewStates(TLCServer.java:485) + at +tlc2.tool.distributed.TLCServer.modelCheck(TLCServer.java:422) + at +tlc2.tool.distributed.TLCServer.main(TLCServer.java:554) +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at +rmi://ip-10-166-53-61.us-west-1.compute.internal:60641 completed +(2011-10-10 05:23:43) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at +rmi://ip-10-166-53-61.us-west-1.compute.internal:56161 completed +(2011-10-10 05:23:44) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at +rmi://ip-10-166-53-61.us-west-1.compute.internal:49840 completed +(2011-10-10 05:23:46) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at +rmi://ip-10-166-53-61.us-west-1.compute.internal:56686 completed +(2011-10-10 05:23:48) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at +rmi://ip-10-166-53-61.us-west-1.compute.internal:51983 completed +(2011-10-10 05:23:49) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 2129:1 @!@!@ +DiskGraph.toString() +@!@!@ENDMSG 2129 @!@!@ +java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + at +tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:207) + + at tlc2.tool.fp.DiskFPSet.diskLookup(DiskFPSet.java:458) + at tlc2.tool.fp.DiskFPSet.contains(DiskFPSet.java:287) + at tlc2.tool.fp.FPSet.containsBlock(FPSet.java:110) + at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown +Source) + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + + at java.lang.reflect.Method.invoke(Method.java:597) + at +sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) + at sun.rmi.transport.Transport$1.run(Transport.java:159) + at java.security.AccessController.doPrivileged(Native +Method) + at +sun.rmi.transport.Transport.serviceCall(Transport.java:155) + at +sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) + at +sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) + + at +sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) + + at +java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) + + at +java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) + + at java.lang.Thread.run(Thread.java:662)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=216#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-06 20:01:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=216#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-06 20:01:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=137" name="attach_137" title="mylyn/context/zip">attachment 137</a> <a href="https://54.195.32.3/attachment.cgi?id=137&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=217">217</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Deactivate "Model Overview" worker count if distributed is on</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=217#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-10 10:06:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Worker count has no effect in distributed TLC, thus it should be deactivated if distributed mode is turned on.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=218">218</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">NPE in TLCWorker KeepAlive Timer task</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=119">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=218#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-13 15:58:00 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Exception in thread "TLCWorker KeepAlive Timer" java.lang.NullPointerException + at tlc2.tool.queue.StateQueue.sEnqueue(StateQueue.java:66) + at tlc2.tool.distributed.TLCServerThread.handleRemoteWorkerLost(TLCServerThread.java:210) + at tlc2.tool.distributed.TLCServerThread.access$3(TLCServerThread.java:208) + at tlc2.tool.distributed.TLCServerThread$TLCTimerTask.run(TLCServerThread.java:278) + at java.util.TimerThread.mainLoop(Timer.java:512) + at java.util.TimerThread.run(Timer.java:462)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=218#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-13 15:59:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=218#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-13 15:59:24 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=119" name="attach_119" title="mylyn/context/zip">attachment 119</a> <a href="https://54.195.32.3/attachment.cgi?id=119&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=219">219</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">NPE in TLCServer when TLCWorker disconnect unexpectedly</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=120">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=219#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-13 16:00:29 UTC + </span> + </div> + + + +<pre class="bz_comment_text">java.lang.NullPointerException + at tlc2.tool.distributed.TLCServer.getNewStates(TLCServer.java:485) + at tlc2.tool.distributed.TLCServer.modelCheck(TLCServer.java:422) + at tlc2.tool.distributed.TLCServer.main(TLCServer.java:554)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=219#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-13 21:37:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=219#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-13 21:37:41 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=120" name="attach_120" title="mylyn/context/zip">attachment 120</a> <a href="https://54.195.32.3/attachment.cgi?id=120&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=220">220</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox not reporting TLC error.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows Vista</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td><a class="bz_bug_link + bz_status_NEW " title="NEW - Toolbox not reporting a TLC error" href="https://54.195.32.3/show_bug.cgi?id=145">145</a> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr> + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=121">The .toolbox directory + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=122">The relevant part of the Eclipse console. + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=123">the Toolbox's TLC Console + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=220#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-17 12:17:24 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I ran TLC and the Console showed an error +while the Toolbox showed just a starting time, no ending time, and the +status "not running". The Eclipse console output shows six instances +of an assertion failure at TLCModelLaunchDataProvider.java:249. If +Bugzilla lets me, I will attach the relevant files and output below.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=220#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-17 12:19:37 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=121" name="attach_121" title="The .toolbox directory">attachment 121</a> <a href="https://54.195.32.3/attachment.cgi?id=121&action=edit" title="The .toolbox directory">[details]</a></span> +The .toolbox directory</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=220#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-17 12:21:00 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=122" name="attach_122" title="The relevant part of the Eclipse console.">attachment 122</a> <a href="https://54.195.32.3/attachment.cgi?id=122&action=edit" title="The relevant part of the Eclipse console.">[details]</a></span> +The relevant part of the Eclipse console. + +I was running the Toolbox under Eclipse</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=220#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-17 12:22:03 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=123" name="attach_123" title="the Toolbox's TLC Console">attachment 123</a> <a href="https://54.195.32.3/attachment.cgi?id=123&action=edit" title="the Toolbox's TLC Console">[details]</a></span> +the Toolbox's TLC Console</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=220#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-17 12:24:36 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This has happened before but wasn't +reproducible. It now seems to be reproducible. I'm attaching the TLA+ +input below just in case the version saved in the .toolbox directory is +corrupted. + +-------------------------------- MODULE Test +-------------------------------- +EXTENDS Integers, TLAPS + +R==42 + +\*a \leq b == IF a = b THEN TRUE ELSE a < b + +THEOREM 4+5=9 +BY SMT + +THEOREM ASSUME \A a, b \in R : (a \leq b) = (IF a = b THEN TRUE ELSE a +< b) + PROVE \A a, b \in R : + a < b => + {r \in R : a \leq r /\ r \leq b} = + {r \in R : a < r /\ r < b} \union {a, b} +OBVIOUS + +VARIABLE x, y +Init == x = 0 /\ y = 0 +Next == x'=(x+1) /\ y' = y + + + +=============================================================================</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=220#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-17 12:31:49 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Sorry, not completely reproducible. +Closing the Toolbox and restarting it fixes things. So the Toolbox's +data structures had somehow gotten into a bad state, and I failed to +save them. Anyway, I hope that the location of the failed assertion +will allow some kind of patch that will allow the Toolbox to do +something reasonable despite the assertion not holding.</pre> + </div><div id="c6" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=220#c6">Comment 6</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-17 15:10:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Hi, + +this appears to be a duplicate of <a class="bz_bug_link + bz_status_NEW " title="NEW - Toolbox not reporting a TLC error" href="https://54.195.32.3/show_bug.cgi?id=145">bug #145</a>. Both stack traces look the same. Thus, marking as a depends.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=221">221</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLC trace and exception output gets mixed in distributed mode causing parsing problems in the Toolbox</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Hide certain error codes from TLC errors view" href="https://54.195.32.3/show_bug.cgi?id=229">229</a> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr> + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=124">Toolbox Screenshot + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=130">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=221#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-17 14:01:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">CN: "The state in the pane below +… + +/\ logStreamB = << [seq |-> 1, type |-> "EpochChange", lock |-> 1, pel |-> 0, epoch |-> 1], + [seq |-> 2, java.rmi.ConnectException: Connection refused to host: 10.167.25.202; nested exception is: + java.net.ConnectException: Connection refused +type |-> "Data", lock |-> 1, epoch |-> 1], + [seq |-> 3, type |-> "Data", lock |-> 1, epoch |-> 1] > +<span class="quote">>…</span> + + +The ascii value of that variable from the previous state in the trace + +<< [seq |-> 1, type |-> "EpochChange", lock |-> 1, pel |-> 0, epoch |-> 1], + [seq |-> 2, type |-> "Data", lock |-> 1, epoch |-> 1], + [seq |-> 3, type |-> "Data", lock |-> 1, epoch |-> 1] >> +"</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=221#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-17 14:02:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=124" name="attach_124" title="Toolbox Screenshot">attachment 124</a> <a href="https://54.195.32.3/attachment.cgi?id=124&action=edit" title="Toolbox Screenshot">[details]</a></span> +Toolbox Screenshot</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=221#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-17 14:03:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">LL: "I don’t know how the Java runtime is +supposed to handle concurrent print statements. If it allows the output + to be mixed, then calls to the print method should be synchronized. +It’s unlikely that all of them are—especially ones reporting an +exception. If the runtime is supposed to interleave calls to the print +method, then it’s a Java problem."</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=221#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-17 14:17:29 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I wonder if the ConnectionException should +even be printed to the console (System.out|System.err). What about +logging non-functional errors/warnings to a dedicated logging facility? +That would make it easier for users to distinguish real model checking +errors.</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=221#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-23 20:45:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Concurrent writes to ToolIO.out and ToolIO.err are not synchronized and will be interleaved randomly.</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=221#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-24 00:10:44 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Released a change to HEAD that makes all console writes go to ToolIO.out. This prevents interleaved output.</pre> + </div><div id="c6" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=221#c6">Comment 6</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-24 00:10:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=130" name="attach_130" title="mylyn/context/zip">attachment 130</a> <a href="https://54.195.32.3/attachment.cgi?id=130&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c7" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=221#c7">Comment 7</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-28 23:57:06 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=222">222</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">java.io.IOException: Bad file descriptor in distributed mode</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Linux</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=222#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-17 14:08:11 UTC + </span> + </div> + + + +<pre class="bz_comment_text">@!@!@STARTMSG 7002:0 @!@!@ +TLC worker rmi://ip-10-166-191-183.us-west-1.compute.internal:42289 disconnected (2011-10-12 22:58:55) +@!@!@ENDMSG 7002 @!@!@ +@!@!@STARTMSG 2196:0 @!@!@ +Checkpointing completed at (2011-10-12 22:58:55) +@!@!@ENDMSG 2196 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +%1% +@!@!@ENDMSG 1000 @!@!@ +java.lang.NullPointerException + at tlc2.tool.distributed.TLCServer.getNewStates(TLCServer.java:485) + at tlc2.tool.distributed.TLCServer.modelCheck(TLCServer.java:422) + at tlc2.tool.distributed.TLCServer.main(TLCServer.java:554) +@!@!@STARTMSG 1000:1 @!@!@ +Bad file descriptor +@!@!@ENDMSG 1000 @!@!@ +java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.flushBuffer(BufferedRandomAccessFile.java:173) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:203) + at tlc2.util.BufferedRandomAccessFile.write(BufferedRandomAccessFile.java:308) + at java.io.RandomAccessFile.writeLong(RandomAccessFile.java:1001) + at tlc2.tool.TLCTrace.writeState(TLCTrace.java:69) + at tlc2.tool.TLCTrace.writeState(TLCTrace.java:56) + at tlc2.tool.distributed.TLCServerThread.run(TLCServerThread.java:171) +@!@!@STARTMSG 2129:1 @!@!@ +DiskGraph.toString() +@!@!@ENDMSG 2129 @!@!@ +java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:207) + at tlc2.tool.fp.DiskFPSet.diskLookup(DiskFPSet.java:458) + at tlc2.tool.fp.DiskFPSet.put(DiskFPSet.java:232) + at tlc2.tool.fp.FPSet.putBlock(FPSet.java:96) + at tlc2.tool.distributed.FPSetManager.putBlock(FPSetManager.java:150) + at tlc2.tool.distributed.TLCServerThread.run(TLCServerThread.java:160) +@!@!@STARTMSG 2129:1 @!@!@ +DiskGraph.toString() +@!@!@ENDMSG 2129 @!@!@ +java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:207) + at tlc2.tool.fp.DiskFPSet.diskLookup(DiskFPSet.java:458) + at tlc2.tool.fp.DiskFPSet.contains(DiskFPSet.java:287) + at tlc2.tool.fp.FPSet.containsBlock(FPSet.java:110) + at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) + at sun.rmi.transport.Transport$1.run(Transport.java:159) + at java.security.AccessController.doPrivileged(Native Method) + at sun.rmi.transport.Transport.serviceCall(Transport.java:155) + at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) + at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) + at java.lang.Thread.run(Thread.java:662) +@!@!@STARTMSG 2129:1 @!@!@ +DiskGraph.toString() +@!@!@ENDMSG 2129 @!@!@ +java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:207) + at tlc2.tool.fp.DiskFPSet.diskLookup(DiskFPSet.java:458) + at tlc2.tool.fp.DiskFPSet.contains(DiskFPSet.java:287) + at tlc2.tool.fp.FPSet.containsBlock(FPSet.java:110) + at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) + at sun.rmi.transport.Transport$1.run(Transport.java:159) + at java.security.AccessController.doPrivileged(Native Method) + at sun.rmi.transport.Transport.serviceCall(Transport.java:155) + at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) + at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) + at java.lang.Thread.run(Thread.java:662) +@!@!@STARTMSG 2129:1 @!@!@ +DiskGraph.toString() +@!@!@ENDMSG 2129 @!@!@ +java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:207) + at tlc2.tool.fp.DiskFPSet.diskLookup(DiskFPSet.java:458) + at tlc2.tool.fp.DiskFPSet.put(DiskFPSet.java:232) + at tlc2.tool.fp.FPSet.putBlock(FPSet.java:96) + at tlc2.tool.distributed.FPSetManager.putBlock(FPSetManager.java:150) + at tlc2.tool.distributed.TLCServerThread.run(TLCServerThread.java:160) +@!@!@STARTMSG 2129:1 @!@!@ +DiskGraph.toString() +@!@!@ENDMSG 2129 @!@!@ +java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:207) + at tlc2.tool.fp.DiskFPSet.diskLookup(DiskFPSet.java:458) + at tlc2.tool.fp.DiskFPSet.put(DiskFPSet.java:232) + at tlc2.tool.fp.FPSet.putBlock(FPSet.java:96) + at tlc2.tool.distributed.FPSetManager.putBlock(FPSetManager.java:150) + at tlc2.tool.distributed.TLCServerThread.run(TLCServerThread.java:160) +@!@!@STARTMSG 2129:1 @!@!@ +DiskGraph.toString() +@!@!@ENDMSG 2129 @!@!@ +java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:207) + at tlc2.tool.fp.DiskFPSet.diskLookup(DiskFPSet.java:458) + at tlc2.tool.fp.DiskFPSet.contains(DiskFPSet.java:287) + at tlc2.tool.fp.FPSet.containsBlock(FPSet.java:110) + at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) + at sun.rmi.transport.Transport$1.run(Transport.java:159) + at java.security.AccessController.doPrivileged(Native Method) + at sun.rmi.transport.Transport.serviceCall(Transport.java:155) + at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) + at java.lang.Thread.run(Thread.java:662)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=222#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-07 17:18:43 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Master and workers are: + Ubuntu 11.04 Natty Narwhal + Sun Java SE 1.6.0_26.b03 + Java HotSpot 20.1-b02 mixed-mode</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=222#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-07 17:20:06 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Stack copied over from <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - "-1 workers registered" in TLC distributed mode" href="https://54.195.32.3/show_bug.cgi?id=216">bug #216</a> (deals with counter turning negative): + +I then tried restarting workers, but won’t go higher than 4. I suspect the +server has stopped, although the workers don’t complain on their side. +The tail end of the TLC log on the master says the following. + + java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + +Tail of long master log: +… +@!@!@STARTMSG 1000:1 @!@!@ +%1% +@!@!@ENDMSG 1000 @!@!@ +java.lang.NullPointerException + at +tlc2.tool.distributed.TLCServer.getNewStates(TLCServer.java:485) + at +tlc2.tool.distributed.TLCServer.modelCheck(TLCServer.java:422) + at tlc2.tool.distributed.TLCServer.main(TLCServer.java:554) +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at +rmi://ip-10-166-53-61.us-west-1.compute.internal:60641 completed (2011-10-10 +05:23:43) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at +rmi://ip-10-166-53-61.us-west-1.compute.internal:56161 completed (2011-10-10 +05:23:44) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at +rmi://ip-10-166-53-61.us-west-1.compute.internal:49840 completed (2011-10-10 +05:23:46) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at +rmi://ip-10-166-53-61.us-west-1.compute.internal:56686 completed (2011-10-10 +05:23:48) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at +rmi://ip-10-166-53-61.us-west-1.compute.internal:51983 completed (2011-10-10 +05:23:49) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 2129:1 @!@!@ +DiskGraph.toString() +@!@!@ENDMSG 2129 @!@!@ +java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + at +tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:207) + at tlc2.tool.fp.DiskFPSet.diskLookup(DiskFPSet.java:458) + at tlc2.tool.fp.DiskFPSet.contains(DiskFPSet.java:287) + at tlc2.tool.fp.FPSet.containsBlock(FPSet.java:110) + at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source) + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at +sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) + at sun.rmi.transport.Transport$1.run(Transport.java:159) + at java.security.AccessController.doPrivileged(Native Method) + at sun.rmi.transport.Transport.serviceCall(Transport.java:155) + at +sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) + at +sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) + at +sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) + at +java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) + at +java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) + at java.lang.Thread.run(Thread.java:662)</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=223">223</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Garbage in the error message shown in Toolbox console</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=125">spec + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=126">Screenshot + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=223#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-20 11:02:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=125" name="attach_125" title="spec">attachment 125</a> <a href="https://54.195.32.3/attachment.cgi?id=125&action=edit" title="spec">[details]</a></span> +spec + +In the screen shot below, note the garbage in the error message. Further below +is the Toolbox console output. The problem repeats when I close the spec and +stop and restart the Toolbox. My guess is that the code is getting confused +because the location of the error is in the MC file, and this should be easy to +fix. The Eclipse console shows no error. + +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.03 of 20 July 2011 +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running in Model-Checking mode. +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file MC.tla +Parsing file Test.tla +Parsing file +C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\TLC.tla +Parsing file +C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Integers.tla +Parsing file TLAPS.tla +Parsing file +C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\FiniteSets.tla +Parsing file +C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Naturals.tla +Parsing file +C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module TLAPS +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module Test +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2011-10-18 04:37:59) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2105:1 @!@!@ +Evaluating assumption line 10, col 8 to line 10, col 65 of module MC failed. +Attempted to compare string "a" with non-string: +1 +@!@!@ENDMSG 2105 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished. (2011-10-18 04:37:59) +@!@!@ENDMSG 2186 @!@!@</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=223#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-20 11:03:08 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=126" name="attach_126" title="Screenshot">attachment 126</a> <a href="https://54.195.32.3/attachment.cgi?id=126&action=edit" title="Screenshot">[details]</a></span> +Screenshot</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=224">224</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Add reusable TLCWorker process (based on OSGi)</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=224#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-24 13:51:37 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Missing support for re-initialization makes + the TLCWorker process unusable for multiple invocations with different +models. However, from a users perspective, reusing a TLCWorker process +for multiple different model checker runs is desirable.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=225">225</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Minor problem in Toolbox reporting of "Current status"</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>ASSIGNED + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows Vista</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=225#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-10-29 10:11:33 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I started a TLC run a couple of hours ago. + The Toolbox reports the correct start time, but reports the current +status as "not running". This is an unusual spec because it causes TLC +to run forever computing the values of constants, before doing any +actual checking. Here's the relevant part of the console output. + +TLC2 Version 2.03 of 20 July 2011 +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running in Model-Checking mode. +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file MC.tla +Parsing file CarTalkPuzzle.tla +... +Semantic processing of module Naturals +... +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2011-10-28 22:57:47) +@!@!@ENDMSG 2185 @!@!@</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=226">226</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Proof obligation line height calculation broken on Mac OSx Lion 10.7</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>Other</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Mac OS</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - [releng] Define 3rd party (OSGi) dependencies in .target definition file only" href="https://54.195.32.3/show_bug.cgi?id=235">235</a> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr> + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=127">Screenshot + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=140">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=226#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-13 13:22:20 UTC + </span> + </div> + + + +<pre class="bz_comment_text">On Mac OSx Lion the proof obligation view is small hiding the lower part of the proof making it unreadable. +The attached image shows the problem.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=226#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-13 13:22:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text"><a href="https://bugs.eclipse.org/353503">https://bugs.eclipse.org/353503</a> tracks the underlying issue upstream. Unfortunately, it has only been fixed in Eclipse 3.7.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=226#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-13 13:23:37 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=127" name="attach_127" title="Screenshot">attachment 127</a> <a href="https://54.195.32.3/attachment.cgi?id=127&action=edit" title="Screenshot">[details]</a></span> +Screenshot</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=226#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-14 16:58:33 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=226#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-14 16:58:48 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=140" name="attach_140" title="mylyn/context/zip">attachment 140</a> <a href="https://54.195.32.3/attachment.cgi?id=140&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=227">227</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Canceling change to assignment of value to CONSTANT does not cancel</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows 7</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=128">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=227#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-22 05:51:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Create a spec with a CONSTANT parameter A. + Let A have the value 22. Then edit the assignment to A, change the 22 +to 33, but click Cancel instead of Finish. The value 22 is displayed. +Then run TLC on the model. The spec will be run with, and the model +editor will then show, the assignment of 33 to A. + +This sure looks like an Eclipse bug.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=227#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-22 20:39:09 UTC + </span> + </div> + + + +<pre class="bz_comment_text">It is a Toolbox bug. The problem is that +org.lamport.tla.toolbox.tool.tlc.ui.wizard.AssignmentWizardPage.dispose() + is setting the Assignment object to the typed value regardless of +whether Finish or Cancel was typed. This same problem probably occurs +with the various other fields that use this dispose() method.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=227#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-22 23:43:19 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD + +Check canceled flag in org.lamport.tla.toolbox.tool.tlc.ui.wizard.AssignmentWizardPage.dispose()</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=227#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-22 23:43:21 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=128" name="attach_128" title="mylyn/context/zip">attachment 128</a> <a href="https://54.195.32.3/attachment.cgi?id=128&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=228">228</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Adding variables and a behavioral spec to a constant spec causes existing models to produce a spurious error.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows 7</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=129">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=228#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-22 22:01:12 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Step 1. Create a new spec with nothing in +it. Create a new model. Put 22 in the "Evaluate Constant Expression" +field (probably unnecessary) and run TLC on the model. + +Step 2. Add the following to the spec: + +EXTENDS Integers +VARIABLE y +Init == y = 0 +Next == y' = (y+1)%5 + +and edit the model to use Init and Next as the initial predicate and +next-state action. Run TLC on the model. The Toolbox produces the +following in the error window: + +231594371 +While working on the initial state: +y = 0 + +The error occurred when TLC was evaluating the nested +expressions at the following positions: + The error call stack is empty. + +The MC.tla and MC.cfg files seem to be fine; TLC runs them correctly +from outside the Toolbox. + +A new model may (or perhaps may not) run TLC fine. The old model always + produces the same error.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=228#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-23 00:53:21 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The changing of the spec was a red herring. + This is a problem triggered by the introduction of the fpbits +parameter that Markus will soon fix.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=228#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-23 18:42:39 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD + +If fpBits equals 0, a DiskFPSet will be used. Else if fpBits > 0, a MultiFPSet.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=228#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-23 18:42:44 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=129" name="attach_129" title="mylyn/context/zip">attachment 129</a> <a href="https://54.195.32.3/attachment.cgi?id=129&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=229">229</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Hide certain error codes from TLC errors view</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - TLC trace and exception output gets mixed in distributed mode causing parsing problems in the Toolbox" href="https://54.195.32.3/show_bug.cgi?id=221">221</a> + </td> +<td> </td> + <td> </td> + </tr> + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=131">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=229#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-28 22:58:46 UTC + </span> + </div> + + + +<pre class="bz_comment_text">With <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - TLC trace and exception output gets mixed in distributed mode causing parsing problems in the Toolbox" href="https://54.195.32.3/show_bug.cgi?id=221">bug #221</a>, + network errors are logged like regular TLC errors. To not confuse the +user, these errors must not show up in either the TLC Errors nor user +output.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=229#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-28 23:55:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=229#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-28 23:55:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=131" name="attach_131" title="mylyn/context/zip">attachment 131</a> <a href="https://54.195.32.3/attachment.cgi?id=131&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=230">230</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox not handling multiple errors reported by PlusCal in a single message.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>ASSIGNED + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows 7</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=230#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-29 21:05:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The methods in the PlusCal class PcalSymTab + accumulate multiple errors in the String errorReport and then report +them as a single error. After I fixed these error messages, the Toolbox + puts an error marker on, and sets the PCal Translation Error window to +be a link to, the location reported for the first of those errors. + +The error marker is added by the call of +TLAMarkerHelper.installProblemMarker in the Toolbox's TranslatorJob +module's runInWorkspace method (currently at line 136). It should be +easy to recode this to detect and add multiple markers, by putting that +call inside a loop and modifying the module's detectLocation method to +take an argument saying where to start looking for a location and +returning a value indicating where to look in the message for the next +location. I presume that the magic that removes those error markers +when the translator is called will remove all of them, but I haven't +tried it. + +It would be nice if the window could have links to each of the errors. + However, I suspect that if we want that, the best approach is to +create separate PCal Translator Error subwindows for each of the parser +errors. It is impossible to figure out from the Toolbox code how to do +that. The The subwindow is created by a call to the createPartControl +method in ProblemView, which got there as the result of a call to +UIHelper.openView, which was called by a runnable launched by +Activator.resourceChanged, which was called from the bowels of Eclipse. + But the code is so inscrutable it would take me weeks to figure out how + it actually works and how one could make the PCal translator and the +Toolbox work together to produce the separate error subwindows.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=231">231</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLCWorker handles OutOfMemoryError like a model exception</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=139">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=231#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-11-29 22:48:06 UTC + </span> + </div> + + + +<pre class="bz_comment_text">If a TLCWorker dies due to an +OutOfMemoryError, the error ripples through to the server like a +WorkerException (e.g. invariant violation). This effectively terminates +model checking right away. +Thus, an OOM error should be wrapped in a RemoteException. This +additionally allows the TLCServer to reduce the amount of new states +send for the worker to calculate the next states.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=231#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-06 22:08:11 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=231#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-06 22:08:13 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=139" name="attach_139" title="mylyn/context/zip">attachment 139</a> <a href="https://54.195.32.3/attachment.cgi?id=139&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=232">232</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Unexport all remotly available UnicastRemoteObjs to gracefully shutdown TLCServer</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=133">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=232#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-01 22:16:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">With the change to use a MultiFPSet instead of a more simple DiskFPSet in TLCServer (<a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Make -fpbits parameter available in HowToRun section of model editor" href="https://54.195.32.3/show_bug.cgi?id=215">bug #215</a>), unexporting nested FPSets becomes necessary. The TLCServer process does not shutdown gracefully anymore otherwise.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=232#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-01 22:17:54 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=133" name="attach_133" title="mylyn/context/zip">attachment 133</a> <a href="https://54.195.32.3/attachment.cgi?id=133&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=233">233</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Find Uses command throwing a null pointer exception</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows Vista</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=134">The offending spec + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=135">Determine ExprNode array size depending on otherarm case + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=136">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=233#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-02 23:09:08 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Trying to run the Find Uses command (F6) on + any token in the spec to be attached does nothing because of a null +pointer exception at + + at +org.lamport.tla.toolbox.util.ResourceHelper.innerGetUsesOfSymbol(ResourceHelper.java:1526)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=233#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-02 23:10:39 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=134" name="attach_134" title="The offending spec">attachment 134</a> <a href="https://54.195.32.3/attachment.cgi?id=134&action=edit" title="The offending spec">[details]</a></span> +The offending spec</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=233#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-03 00:39:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Here's the full ST. + +java.lang.NullPointerException + at org.lamport.tla.toolbox.util.ResourceHelper.innerGetUsesOfSymbol(ResourceHelper.java:1526) + at org.lamport.tla.toolbox.util.ResourceHelper.innerGetUsesOfSymbol(ResourceHelper.java:1528) + at org.lamport.tla.toolbox.util.ResourceHelper.innerGetUsesOfSymbol(ResourceHelper.java:1528) + at org.lamport.tla.toolbox.util.ResourceHelper.innerGetUsesOfSymbol(ResourceHelper.java:1528) + at org.lamport.tla.toolbox.util.ResourceHelper.innerGetUsesOfSymbol(ResourceHelper.java:1528) + at org.lamport.tla.toolbox.util.ResourceHelper.innerGetUsesOfSymbol(ResourceHelper.java:1528) + at org.lamport.tla.toolbox.util.ResourceHelper.innerGetUsesOfSymbol(ResourceHelper.java:1528) + at org.lamport.tla.toolbox.util.ResourceHelper.getUsesOfSymbol(ResourceHelper.java:1366) + at org.lamport.tla.toolbox.editor.basic.handlers.ShowUsesHandler.execute(ShowUsesHandler.java:406) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:468) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:786) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:885) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:567) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:508) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:123) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1262) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1052) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062) + at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1104) + at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1100) + at org.eclipse.swt.widgets.Widget.wmKeyDown(Widget.java:1809) + at org.eclipse.swt.widgets.Control.WM_KEYDOWN(Control.java:4892) + at org.eclipse.swt.widgets.Control.windowProc(Control.java:4560) + at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341) + at org.eclipse.swt.widgets.Display.windowProc(Display.java:4985) + at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method) + at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2531) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3752) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:601) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) + at org.eclipse.equinox.launcher.Main.main(Main.java:1386)</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=233#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-03 00:57:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Here's a simpler example that produces the bug: + + ------ MODULE Test ---- + Foo == CASE TRUE -> TRUE [] + OTHER -> FALSE + ============================ + + Just try the Find Uses command on Foo. The bug seems to be in handling the OTHER clause in the CASE</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=233#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-03 01:40:05 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=135" name="attach_135" title="Determine ExprNode array size depending on otherarm case">attachment 135</a> <a href="https://54.195.32.3/attachment.cgi?id=135&action=edit" title="Determine ExprNode array size depending on otherarm case">[details]</a></span> +Determine ExprNode array size depending on otherarm case</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=233#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-03 01:40:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=136" name="attach_136" title="mylyn/context/zip">attachment 136</a> <a href="https://54.195.32.3/attachment.cgi?id=136&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c6" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=233#c6">Comment 6</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-03 18:35:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Here's how +org.lamport.tla.toolbox.util.ResourceHelper.innerGetUsesOfSymbol(SymbolNode, + SemanticNode, Vector<SemanticNode>) line 1524 to 1530 adds an +extra null check to avoid the NPE. + + for (int i = 0; i < children.length; i++) + { + final SemanticNode sn = children[i]; + if (sn != null && +node.getLocation().source().equals(sn.getLocation().source())) { + innerGetUsesOfSymbol(symbol, sn, found); + } + } + return;</pre> + </div><div id="c7" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=233#c7">Comment 7</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-04 20:28:24 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed, essentially as indicated by Markus's preceding comment. See the comments in the code for an explanation of the bug.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=234">234</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Potential race condition in StateQueue synchronization</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=138">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=234#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-06 21:59:36 UTC + </span> + </div> + + + +<pre class="bz_comment_text">In valid cases +tlc2.tool.distributed.TLCServerThread.handleRemoteWorkerLost(StateQueue) + is executed multiple times for a single worker. Thus, all methods +executed by this method have to be idempotent to not cause havoc. +Calling tlc2.TLCGlobals.incNumWorkers(int) is such a method and thus +needs proper guarding against multiple invocations.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=234#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-06 22:06:50 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=234#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-06 22:06:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=138" name="attach_138" title="mylyn/context/zip">attachment 138</a> <a href="https://54.195.32.3/attachment.cgi?id=138&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=235">235</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">[releng] Define 3rd party (OSGi) dependencies in .target definition file only</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Proof obligation line height calculation broken on Mac OSx Lion 10.7" href="https://54.195.32.3/show_bug.cgi?id=226">226</a> + </td> +<td> </td> + <td> </td> + </tr> + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=141">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=235#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-13 20:29:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">So far we've been using two separate +definitions of 3rd party dependencies (.target def file and +<repository> def in parent pom). The .target def file should +become the only definition used by both the Maven Tycho build as well as + the Eclipse IDE.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=235#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-14 17:00:45 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=235#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-14 17:00:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=141" name="attach_141" title="mylyn/context/zip">attachment 141</a> <a href="https://54.195.32.3/attachment.cgi?id=141&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=236">236</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Overflow in tlc2.tool.ModelChecker.reportSuccess() causing negative "calculated" probability</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=142">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=236#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-16 18:24:59 UTC + </span> + </div> + + + +<pre class="bz_comment_text">With big models, the amount of states +causes an overflow in lc2.tool.ModelChecker.reportSuccess(FPSet, long) +resulting in a negative probability for a hash collision reported.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=236#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-16 21:50:06 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Released to master</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=236#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-16 21:50:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=142" name="attach_142" title="mylyn/context/zip">attachment 142</a> <a href="https://54.195.32.3/attachment.cgi?id=142&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=237">237</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Expose TLC's "-fp" parameter in Toolbox</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=143">mylyn/context/zip + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=144">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=237#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-19 21:43:53 UTC + </span> + </div> + + + +<pre class="bz_comment_text">TLC's "-fp" parameter is currently not +supported by the Toolbox. Hence, it should be exposed on the advanced +tab of the Toolbox's model editor page.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=237#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-19 23:12:00 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Released (preliminary) version to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=237#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-19 23:12:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=143" name="attach_143" title="mylyn/context/zip">attachment 143</a> <a href="https://54.195.32.3/attachment.cgi?id=143&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=237#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-20 00:32:17 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Reworked with spinner instead of input box, marking as fixed</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=237#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-20 00:32:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=144" name="attach_144" title="mylyn/context/zip">attachment 144</a> <a href="https://54.195.32.3/attachment.cgi?id=144&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=238">238</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Add missing TLC parameters to Toolbox UI (dump, gzip, nowarning, terse)</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=238#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-20 18:44:30 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The Toolbox does not provide support for the following TLC command line parameters: + +-dump file + dump all the states into file + +-gzip + control if gzip is applied to value input/output stream. Defaults + to use gzip + +-terse + do not expand values in Print statement. Defaults to expand value if + not specified + +-nowarning + disable all the warnings. Defaults to report warnings if not specified</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=239">239</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Add back and forward navigation to Toolbox</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=145">mylyn/context/zip + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=146">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=239#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-20 20:58:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text"><a href="http://wiki.eclipse.org/FAQ_How_do_I_hook_my_editor_to_the_Back_and_Forward_buttons%3F">http://wiki.eclipse.org/FAQ_How_do_I_hook_my_editor_to_the_Back_and_Forward_buttons%3F</a></pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=239#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-20 21:02:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Released change for TLAEditor</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=239#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-20 21:02:03 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=145" name="attach_145" title="mylyn/context/zip">attachment 145</a> <a href="https://54.195.32.3/attachment.cgi?id=145&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=239#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-22 21:23:57 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Released support for FormPages to HEAD</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=239#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-22 21:24:19 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=146" name="attach_146" title="mylyn/context/zip">attachment 146</a> <a href="https://54.195.32.3/attachment.cgi?id=146&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=240">240</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Add scale to ModelEditor to adjust physical system memory used by nested TLC process</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA Tools</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=158">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=240#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-23 18:12:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The Toolbox's tuning options for the TLC +model checker are limited. The "How to run" section of the "Model +Overview" page only comes with with text input for the JVM heap size. + +To better aid the user with tuning the TLC model checker, a slider +should allow users to select the amount of memory allocated to the +nested JVM from the available physical system memory. Storing this as a +ratio rather than absolute values prevents the model from becoming +machine dependent.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=240#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-23 18:19:37 UTC + </span> + </div> + + + +<pre class="bz_comment_text">s/slider/scale</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=240#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-14 21:01:12 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Enhancement released to HEAD (a while ago)</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=240#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-14 21:01:15 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=158" name="attach_158" title="mylyn/context/zip">attachment 158</a> <a href="https://54.195.32.3/attachment.cgi?id=158&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=241">241</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Please add keyboard command "Go to matching bracket"</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Chris Newcombe <chris.newcombe></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=241#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Chris Newcombe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-29 02:21:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I've started writing PlusCal in the +toolbox. + +I immediately *really* miss the "Go to matching bracket" key in Eclipse. +This is normally bound to 'Ctrl Shift P'. +I tried adding it via File ... Preferences ... General ... Keys, but the + function isn't even listed, so I can't bind it to a key. + +Other modern Eclipse features are already supported by the toolbox +editor (e.g. 'Alt Shift A' toggles between selecting a range of lines +and selecting a block of columns, allowing easy bulk indent/outdent of +multiple lines). + +Please could we have the 'Go to matching bracket function too'? + +many thanks, + +Chris</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=241#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-26 18:57:14 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed by LL</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=242">242</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">int overflow with tlc2.tool.fp.DiskFPSet.maxTblCnt when maxMem for DiskFPSet reaches 2^31</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_critical">critical + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=147">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=242#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2011-12-30 02:19:42 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This overflow causes the in-memory DiskFPSet storage to be flushed to disk on every put call and heavily degrades performance.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=242#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-03 17:42:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=242#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-03 17:42:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=147" name="attach_147" title="mylyn/context/zip">attachment 147</a> <a href="https://54.195.32.3/attachment.cgi?id=147&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=243">243</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Add -fpMemRatio parameter to set percentage of RAM dedicated to fingerprint sets</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td><a class="bz_bug_link + bz_status_NEW " title="NEW - Add new TLC parameter Maximum Fingerprint Memory Size" href="https://54.195.32.3/show_bug.cgi?id=79">79</a> + </td> +<td> </td> + <td> </td> + </tr> + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=149">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=243#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-03 16:15:53 UTC + </span> + </div> + + + +<pre class="bz_comment_text">-fpmem takes an absolute value for how much + RAM is allocated to FPs which makes this parameter machine dependent. + +Additionally, it also depends on how much memory has been dedicated to +the JVM via -Vmx in the first place. A user might miss that though. And +-fpmem handling doesn't take into account that what the users passes +with -Vmx isn't what Runtime.maxMemory() returns (not all heap mem is +available). This means that the user allocates 75% heap mem to FPs even +if one doesn't want to. + +The existing -fpMem option is going to stay. It will be removed from +the documentation. If a user sets both parameters simultaneously an +error with be returned.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=243#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-04 17:29:55 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Enhancement released to HEAD +(No documentation referring to old fpmem found)</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=243#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-04 17:29:59 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=149" name="attach_149" title="mylyn/context/zip">attachment 149</a> <a href="https://54.195.32.3/attachment.cgi?id=149&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=244">244</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Expose TLC statistics via Java management extensions (MXBeans)</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=148">mylyn/context/zip + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=150">mylyn/context/zip + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=151">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=244#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-03 16:34:14 UTC + </span> + </div> + + + +<pre class="bz_comment_text">In order to understand (and enhance) the +runtime behavior of TLC with large models (billion of states) and/or in +distributed mode, detailed statistics about TLC's internals become +important. + +Java management extension [0][1] provides a framework for Java +applications to expose such kind of statistics will little code changes. + Building on JMX also has the advantage, that existing Java monitoring +tools (e.g. jconsole) will support TLC statistics automatically. + +[0] <a href="http://docs.oracle.com/javase/tutorial/jmx/mbeans/mxbeans.html">http://docs.oracle.com/javase/tutorial/jmx/mbeans/mxbeans.html</a> +[1] <a href="https://en.wikipedia.org/wiki/Java_Management_Extensions">https://en.wikipedia.org/wiki/Java_Management_Extensions</a></pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=244#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-03 23:32:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Started with stats for DiskFPSet</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=244#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-03 23:32:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=148" name="attach_148" title="mylyn/context/zip">attachment 148</a> <a href="https://54.195.32.3/attachment.cgi?id=148&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=244#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-04 21:43:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Added ModelChecker metrics showing: + +tlc2.tool:type=ModelChecker + +with +- distinct states generated +- distinct states generated per min +- states generated +- states generated per min +- progress</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=244#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-04 21:43:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=150" name="attach_150" title="mylyn/context/zip">attachment 150</a> <a href="https://54.195.32.3/attachment.cgi?id=150&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=244#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-05 07:17:14 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Changed collecting stats to accept dirty +reads on distinct generated states counter if FPSet backing store is +DiskFPSet implementation to reduce lock contention.</pre> + </div><div id="c6" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=244#c6">Comment 6</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-05 07:17:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=151" name="attach_151" title="mylyn/context/zip">attachment 151</a> <a href="https://54.195.32.3/attachment.cgi?id=151&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c7" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=244#c7">Comment 7</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-07 03:27:13 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Add worker count + +tlc2.tool.ModelCheccker#workerCount</pre> + </div><div id="c8" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=244#c8">Comment 8</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-14 20:25:50 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Figured need lock (contention) statistics for: + +- StateQueue +- DiskFPSet or tlc2.util.ReadersWriterLock in general</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=245">245</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Add -fpmem parameter to TLCServer</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows 7</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=152">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=245#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-07 01:43:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">tlc2.tool.distributed.TLCServer is missing +support for the -fpmem parameter. This is how it can be used (also with +non-distributed tlc2.TLC): + + // -fpmem can be used in two ways: + // a) to set the relative memory to be used for +fingerprints (being machine independent) + // b) to set the absolute memory to be used for +fingerprints + // + // In order to set memory relatively, a value in +the domain [0.0, 1.0] is interpreted as a fraction. + // A value in the [2, Double.MaxValue] domain +allocates memory absolutely. + // + // Independently of relative or absolute mem allocation, + // a user cannot allocate more than JVM heap space + // available. Conversely there is the lower hard limit +TLC#MinFpMemSize.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=245#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-07 02:24:51 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=245#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-07 02:24:57 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=152" name="attach_152" title="mylyn/context/zip">attachment 152</a> <a href="https://54.195.32.3/attachment.cgi?id=152&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=246">246</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Error: Requested array size exceeds VM limit in DiskFPSet</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Linux</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=155">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=246#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-07 16:41:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Error: Requested array size exceeds VM limit +java.lang.OutOfMemoryError: Requested array size exceeds VM limit + at tlc2.tool.fp.DiskFPSet.flushTable(DiskFPSet.java:606) + at tlc2.tool.fp.DiskFPSet.put(DiskFPSet.java:326) + at tlc2.tool.fp.FPSet.putBlock(FPSet.java:130) + at tlc2.tool.distributed.FPSetManager.putBlock(FPSetManager.java:150) + at tlc2.tool.distributed.TLCServerThread.run(TLCServerThread.java:181)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=246#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-07 17:28:53 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This happened exactly when DiskFPSet +flushed the in-memory cache to disk the first time. MC.fp has never been + written successfully: + +kuppe@domU-12-31-39-18-15-75:~/git/tla/general/performance/states/12-01-07-01-04-57$ + ls -la MC* +-rw-rw-r-- 1 kuppe kuppe 0 2012-01-07 01:04 MC.fp +-rw-rw-r-- 1 kuppe kuppe 32722883156 2012-01-07 12:15 MC.st +-rw-rw-r-- 1 kuppe kuppe 16 2012-01-07 12:08 MC.st.chkpt + +Corresponding runtime statistics can be found at <a href="https://tla.msr-inria.inria.fr/rrdtool/domU-12-31-39-18-15-75/www/">https://tla.msr-inria.inria.fr/rrdtool/domU-12-31-39-18-15-75/www/</a></pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=246#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-07 17:38:15 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Exact same exception at same moment got thrown by <a href="https://tla.msr-inria.inria.fr/rrdtool/ip-10-218-65-156">https://tla.msr-inria.inria.fr/rrdtool/ip-10-218-65-156</a> + +A similar looking behavior could be observed by a non-distributed TLC last week.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=246#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-14 20:09:19 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The root cause for the previously observed +behavior comes from a refactoring in +tlc2.tool.ModelChecker.ModelChecker(String, String, String, boolean, +String, FilenameToStream, SpecObj, long, int). The code used to divide +the long parameter (which represents memInBytes) by 20. This was done +due to DiskFPSet's runtime memory requirements. It allocates auxiliary +storage (temporary buffer used in tlc2.tool.fp.DiskFPSet.flushTable() + + tlc2.tool.fp.DiskFPSet.index) which exceeds 50% of its dedicated +memory. + +Reintroducing the auxiliary storage reserve makes the OOM exception +disappear.</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=246#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-14 20:23:59 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed in HEAD</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=246#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-14 20:24:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=155" name="attach_155" title="mylyn/context/zip">attachment 155</a> <a href="https://54.195.32.3/attachment.cgi?id=155&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=247">247</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Push TLCRuntime down into tlatools/src/util package</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=153">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=247#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-09 19:20:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">TLCRuntime should be pushed down from the Toolbox code into tlatools/src/util.TLCRuntime.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=247#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-09 19:25:13 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=247#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-09 19:25:15 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=153" name="attach_153" title="mylyn/context/zip">attachment 153</a> <a href="https://54.195.32.3/attachment.cgi?id=153&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=248">248</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Make TLC print stacktraces when programming error</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=154">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=248#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-10 17:52:20 UTC + </span> + </div> + + + +<pre class="bz_comment_text">TLC tends to swallow stacktraces even with +-debug enabled. This makes it impossible to diagnose error cases when +TLC isn't run in a debugger. Thus, with -debug present, stacktraces +should always be logged.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=248#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-10 18:05:59 UTC + </span> + </div> + + + +<pre class="bz_comment_text">As part of this ticket, -debug is going to be added to TLCServer#main(String[]).</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=248#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-10 20:06:00 UTC + </span> + </div> + + + +<pre class="bz_comment_text">It turns out that -debug activates +functionality that is more commonly referred to as tracing. Thus, for +the moment, only those catch stmts will additionally log the stack that +indicate a bug in TLC (and not in the user model) to regular +MP.printError(...).</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=248#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-10 20:06:03 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=154" name="attach_154" title="mylyn/context/zip">attachment 154</a> <a href="https://54.195.32.3/attachment.cgi?id=154&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=249">249</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Link PlusCal code (via TLA+ to PlusCal mapper) in Toolbox UI</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA Tools</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">1.4.2</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=159">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=249#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-14 19:51:24 UTC + </span> + </div> + + + +<pre class="bz_comment_text">LL: "Anyplace where clicking now takes us +to a region of the spec, we want Alt-Click (actually, I think +Shift-Click would be better unless you have a reason for preferring +Alt-Click) to take us to the region obtained by calling +TLAtoPCalMapping.ApplyMapping with that region and the most recent +TLAtoPCalMapping produced by the translator as arguments. (If the call +returns null, then it takes us to the same region as an ordinary click.) + The places I can think of where that applies are: + + - A TLA+ Parsing Error in the Parsing Error window. + (As I said earlier, it doesn't matter if that's also done on + a PCal translation error, since ApplyMapping will return + null in that case.) + - The TLC Error window. + - An action line in the TLC error trace window. (Since in this + case double-clicking takes you to the spec, it should be Alt + or Shift double-click.) + - A location entry in the coverage information."</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=249#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-17 21:35:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">First step is to persistently store the pcal mapping as part of the spec</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=249#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-18 00:21:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The persistent mapping will not survive spec filename (corresponding .tla) renames.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=249#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-19 00:14:11 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Persistent mapping storage considered done</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=249#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-19 00:14:14 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=159" name="attach_159" title="mylyn/context/zip">attachment 159</a> <a href="https://54.195.32.3/attachment.cgi?id=159&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=249#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-19 01:13:37 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I ran a translation, closed the spec, +reopened it, and the mapping still worked. I then closed the spec, +closed the Toolbox, then restarted the Toolbox. The console log, +appended below, reported a relevant exception. When I opened the spec, +the mapping no longer worked. + + +osgi> TLA+ Toolbox started without arguments. +!SESSION 2012-01-18 16:07:14.627 +----------------------------------------------- +eclipse.buildId=unknown +java.version=1.6.0_29 +java.vendor=Sun Microsystems Inc. +BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US +Framework arguments: -product +org.lamport.tla.toolbox.product.standalone.product +Command-line arguments: -product +org.lamport.tla.toolbox.product.standalone.product -data +C:\lamport\tla\newtools\tla2-inria-workspace/../runtime-org.lamport.tla.toolbox.product.product.product + -dev +file:C:/lamport/tla/newtools/tla2-inria-workspace/.metadata/.plugins/org.eclipse.pde.core/org.lamport.tla.toolbox.product.product.product/dev.properties + -os win32 -ws win32 -arch x86 -console -consolelog + +!ENTRY org.eclipse.core.resources 2 10035 2012-01-18 16:07:15.759 +!MESSAGE The workspace exited with unsaved changes in the previous +session; refreshing workspace to recover changes. +footFileName = +C:\lamport\tla\newtools\tlapm\examples\bySMT\Allocator.tla +footFileName = C:\lamport\papers\paxos\simple\byztla\BPConProof.tla +footFileName = +C:\lamport\books\hyper-tla\specs\Channel\BoundedBuffer.tla +footFileName = +C:\lamport\books\hyper-tla\specs\Channel\BoundedBuffer2.tla +footFileName = +C:\lamport\books\hyper-tla\specs\Channel\BoundedChannel.tla +footFileName = C:\lamport\papers\proof\Calculus.tla +footFileName = C:\lamport\reviews\vonneumann\CandidateRanking.tla +footFileName = +C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\examples\CarTalkPuzzle\CarTalkPuzzle.tla +footFileName + = C:\lamport\books\hyper-tla\specs\cookbook\CookBook.tla +footFileName = C:\lamport\talks\pluscal\FastMutex.tla +footFileName = C:\lamport\talks\lada12\LevelSpec.tla +footFileName = +C:\lamport\tla\newtools\tlapm\examples\NaturalsInduction.tla +footFileName = C:\lamport\talks\lada12\specs\P2TCommit.tla +footFileName = C:\lamport\talks\lada12\specs\P2TwoPhase.tla +footFileName = +C:\lamport\books\hyper-tla\specs\Channel\PCalBoundedBuffer.tla +footFileName = C:\lamport\talks\lada12\specs\PTCommit.tla +footFileName = C:\lamport\talks\lada12\specs\PTwoPhase.tla +footFileName = C:\lamport\tla\newtools\tlapm\doc\vstte12\Peterson.tla +footFileName = C:\lamport\mytemp\SumAndMax.tla +footFileName = +C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\general\docs\TLAToPCal.tla +footFileName + = C:\lamport\mytemp\Test.tla +footFileName = C:\lamport\mytemp\Test2.tla +footFileName = C:\lamport\mytemp\Test_Bug.tla +footFileName = C:\lamport\mytemp\Test_PM.tla +footFileName = +C:\lamport\tla\newtools\tlapm\examples\WellFoundedInduction.tla +footFileName = +C:\lamport\tla\newtools\tlapm\examples\WellFoundedOpInduction.tla +footFileName = C:\lamport\tla\pluscal\bugs\bug_11_09_13.tla +java.io.WriteAbortedException: writing aborted; +java.io.NotSerializableException: pcal.TLAtoPCalMapping + at java.io.ObjectInputStream.readObject0(Unknown Source) + at java.io.ObjectInputStream.readObject(Unknown Source) + at +org.lamport.tla.toolbox.util.ResourceHelper.readTLAtoPCalMapping(ResourceHelper.java:1648) + + at org.lamport.tla.toolbox.spec.Spec.getTpMapping(Spec.java:452) + at +org.lamport.tla.toolbox.spec.Spec.initProjectProperties(Spec.java:198) + at org.lamport.tla.toolbox.spec.Spec.<init>(Spec.java:123) + at +org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.<init>(WorkspaceSpecManager.java:77) + + at org.lamport.tla.toolbox.Activator.getSpecManager(Activator.java:303) + at +org.lamport.tla.toolbox.spec.nature.TLAParsingBuilder.build(TLAParsingBuilder.java:52) + + at +org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) + + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) + + at +org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) + + at +org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) + + at +org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) + + at +org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) + + at +org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +Caused by: java.io.NotSerializableException: pcal.TLAtoPCalMapping + at java.io.ObjectOutputStream.writeObject0(Unknown Source) + at java.io.ObjectOutputStream.writeObject(Unknown Source) + at +org.lamport.tla.toolbox.util.ResourceHelper.writeTLAtoPCalMapping(ResourceHelper.java:1676) + + at org.lamport.tla.toolbox.spec.Spec.setTpMapping(Spec.java:500) + at +org.lamport.tla.toolbox.job.TranslatorJob.runInWorkspace(TranslatorJob.java:130) + + at +org.lamport.tla.toolbox.job.TranslatorJob$1.run(TranslatorJob.java:169) + at +org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121) + +!ENTRY + org.eclipse.equinox.p2.ui.sdk.scheduler 4 0 2012-01-18 16:07:18.024 +!MESSAGE The update checker service is not initialized + +!ENTRY org.eclipse.equinox.p2.ui.sdk.scheduler 4 0 2012-01-18 +16:07:18.024 +!MESSAGE The update checker service is not initialized +ERROR: Duplicate alias. Failed to register resource for [alias="/", +contributor="org.eclipse.help.webapp[83]"] +Spec build invoked on Test ... +Resulting status is: parsed +... build invocation finished. +Added a parse result listener. +There are now 1 listeners.</pre> + </div><div id="c6" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=249#c6">Comment 6</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-19 02:10:14 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I cannot reproduce this in my local workspace with the step you mentioned, can you? If yes, please send me your spec.</pre> + </div><div id="c7" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=249#c7">Comment 7</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-16 20:01:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix a while ago</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=250">250</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">StackOverflow in org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree) during Toolbox startup</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA Tools</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>ASSIGNED + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=156">The Eclipse .log file. The stackoverflow is at the end of the file. + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=157">The output of ls -la for the Toolbox metadata directory + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=250#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-14 20:41:18 UTC + </span> + </div> + + + +<pre class="bz_comment_text">A dialog pops up at startup showing: + +JVM terminated. Exit code=1 +/usr/bin/java +-Xmx1000m +-Dorg.eclipse.equinox.http.jetty.http.port=10996 +-jar +/tlc_master/toolbox/plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar +-os + linux +-ws gtk +-arch x86_64 +-showsplash +-launcher /tlc_master/toolbox/toolbox +-name Toolbox +--launcher.library +/tlc_master/toolbox/plugins/rg.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.2.R36x_v20101019_1345/eclipse_1310.so +-startup + +/tlc_master/toolbox/plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar +-exitdata + 8000e +-vm /usr/bin/java +-vmargs +-Xmx1000m +-Dorg.eclipse.equinox.http.jetty.http.port=10996 +-jar +/tlc_master/toolbox/plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=250#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-14 20:44:30 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=156" name="attach_156" title="The Eclipse .log file. The stackoverflow is at the end of the file.">attachment 156</a> <a href="https://54.195.32.3/attachment.cgi?id=156&action=edit" title="The Eclipse .log file. The stackoverflow is at the end of the file.">[details]</a></span> +The Eclipse .log file. The stackoverflow is at the end of the file. + +The BadLocation exception and assertion errors at the beginning of the +log appear to be a red herring in the context of the stackoverflow. They + have to be analyzed separatetly.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=250#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-14 20:47:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=157" name="attach_157" title="The output of ls -la for the Toolbox metadata directory">attachment 157</a> <a href="https://54.195.32.3/attachment.cgi?id=157&action=edit" title="The output of ls -la for the Toolbox metadata directory">[details]</a></span> +The output of ls -la for the Toolbox metadata directory</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=251">251</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">The default FPSet tlc2.tool.fp.DiskFPSet.DiskFPSet +never creates a checkpoint unless used through +tlc2.tool.distributed.FPSetManager</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + DUPLICATE + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_critical">critical + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=251#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-15 16:57:14 UTC + </span> + </div> + + + +<pre class="bz_comment_text">TLC's default FPSet implementation +tlc2.tool.fp.DiskFPSet.DiskFPSet turns tlc2.tool.fp.FPSet.beginChkpt() +and tlc2.tool.fp.FPSet.commitChkpt() into a no-op. This results in no +checkpoints ever written for non-distributed and distributed TLC (unless + the distributed FPSetManager facade is used). + +There is no indication or explanation given as to why both methods are +no-ops. One possible reason might be performance degradation (see <a class="bz_bug_link + bz_status_NEW " title="NEW - Performance bottleneck in checkpointing and .fp file roll-over" href="https://54.195.32.3/show_bug.cgi?id=214">bug #214</a>) if DiskFPSet flushes to disk to excessively. + +All mem-based FPSet implementation delegate from no-arg beginChkpt/commitChkpt to their String-arg method implementation.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=251#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-15 18:35:18 UTC + </span> + </div> + + + +<pre class="bz_comment_text"> +*** This bug has been marked as a duplicate of <a class="bz_bug_link + bz_status_NEW " title="NEW - The default FPSet tlc2.tool.fp.DiskFPSet.DiskFPSet never creates a checkpoint unless used through tlc2.tool.distributed.FPSetManager" href="https://54.195.32.3/show_bug.cgi?id=252">bug 252</a> ***</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=252">252</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">The default FPSet tlc2.tool.fp.DiskFPSet.DiskFPSet +never creates a checkpoint unless used through +tlc2.tool.distributed.FPSetManager</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_critical">critical + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=252#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-15 16:57:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">TLC's default FPSet implementation +tlc2.tool.fp.DiskFPSet.DiskFPSet turns tlc2.tool.fp.FPSet.beginChkpt() +and tlc2.tool.fp.FPSet.commitChkpt() into a no-op. This results in no +checkpoints ever written for non-distributed and distributed TLC (unless + the distributed FPSetManager facade is used). + +There is no indication or explanation given as to why both methods are +no-ops. One possible reason might be performance degradation (see <a class="bz_bug_link + bz_status_NEW " title="NEW - Performance bottleneck in checkpointing and .fp file roll-over" href="https://54.195.32.3/show_bug.cgi?id=214">bug #214</a>) if DiskFPSet flushes to disk too excessively. + +All mem-based FPSet implementation delegate from no-arg beginChkpt/commitChkpt to their String-arg method implementation.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=252#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-15 18:35:18 UTC + </span> + </div> + + + +<pre class="bz_comment_text">*** <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED DUPLICATE - The default FPSet tlc2.tool.fp.DiskFPSet.DiskFPSet never creates a checkpoint unless used through tlc2.tool.distributed.FPSetManager" href="https://54.195.32.3/show_bug.cgi?id=251">Bug 251</a> has been marked as a duplicate of this bug. ***</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=252#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-17 19:19:42 UTC + </span> + </div> + + + +<pre class="bz_comment_text">In non-distributed TLC, +tlc2.tool.fp.DiskFPSet.recover() does not recovery from its +corresponding MC.fp. It recreates the DiskFPSet state from the TLCTrace +file.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=253">253</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Default for memory slider should make a better initial suggestion than 50%</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA Tools</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">1.4.2</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=181">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=253#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-17 21:01:08 UTC + </span> + </div> + + + +<pre class="bz_comment_text">LL: "When I create a new TLC model on my +laptop and open the "How to run" section, I find that it has set the +memory allocation to 50% (1 Gbyte), which is colored bright red. I +don't know if 1G is really too big on a 4G machine, but the default +should not be a value that the Toolbox tells the user is too big."</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=253#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-16 22:17:05 UTC + </span> + </div> + + + +<pre class="bz_comment_text">New default is 25% which should not exceed +what a 32bit VM can handle (otherwise it dies with a "Could now create +java virtual machine").</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=253#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-16 22:17:07 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=181" name="attach_181" title="mylyn/context/zip">attachment 181</a> <a href="https://54.195.32.3/attachment.cgi?id=181&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=254">254</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Enablement of handlers causes NPE if executed on unparsed spec/not fully initialized editor</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">1.4.2</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=168">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=254#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-19 02:48:30 UTC + </span> + </div> + + + +<pre class="bz_comment_text">!ENTRY org.eclipse.ui 4 0 2012-01-18 17:19:59.512 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NullPointerException + at org.lamport.tla.toolbox.ui.handler.PCalTranslateModuleHandler.execute(PCalTranslateModuleHandler.java:43) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820) + at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806) + at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:601) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=254#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-25 22:58:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The root cause of this bug is how the Toolbox ignores the API contract of +org.eclipse.ui.IWorkbenchPage.getActiveEditor(). Javadoc states that null is a valid return value if no editor is active.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=254#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-25 23:06:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD by not enabling handlers if no active editor could be found.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=254#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-25 23:06:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=168" name="attach_168" title="mylyn/context/zip">attachment 168</a> <a href="https://54.195.32.3/attachment.cgi?id=168&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=255">255</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Release Toolbox/TLC/PlusCal 1.4.1 release</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=160">mylyn/context/zip + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=164">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=255#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-19 17:53:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">- Increment Toolbox versions in: + +/general/docs/microsoft-release.txt +/org.lamport.tla.toolbox/welcome/welcomeView.html +/org.lamport.tla.toolbox.product.product/org.lamport.tla.toolbox.product.product.product +/org.lamport.tla.toolbox.product.standalone/plugin.xml + +- TLC + +/tlatools/src/tlc2/ tlc2.TLCGlobals.versionOfTLC</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=255#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-19 17:55:36 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=160" name="attach_160" title="mylyn/context/zip">attachment 160</a> <a href="https://54.195.32.3/attachment.cgi?id=160&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=255#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-20 20:14:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Done</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=255#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-20 20:14:30 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=164" name="attach_164" title="mylyn/context/zip">attachment 164</a> <a href="https://54.195.32.3/attachment.cgi?id=164&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=256">256</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Running PlusCal translation on a dirty editor throws NPE due to uninitialized progress dialog</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.3</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=161">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=256#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-19 20:52:12 UTC + </span> + </div> + + + +<pre class="bz_comment_text">!ENTRY org.eclipse.ui 4 0 2012-01-19 11:43:23.451 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NullPointerException + at org.eclipse.jface.dialogs.ProgressMonitorDialog$ProgressMonitor.done(ProgressMonitorDialog.java:192) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2356) + at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:118) + at org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:75) + at org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:65) + at org.eclipse.ui.editors.text.TextFileDocumentProvider.executeOperation(TextFileDocumentProvider.java:456) + at org.eclipse.ui.editors.text.TextFileDocumentProvider.saveDocument(TextFileDocumentProvider.java:772) + at org.eclipse.ui.texteditor.AbstractTextEditor.performSave(AbstractTextEditor.java:5048) + at org.eclipse.ui.texteditor.AbstractTextEditor.doSave(AbstractTextEditor.java:4837) + at org.lamport.tla.toolbox.editor.basic.TLAEditor.doSave(TLAEditor.java:502) + at org.lamport.tla.toolbox.editor.basic.TLAEditorAndPDFViewer.doSave(TLAEditorAndPDFViewer.java:121) + at org.lamport.tla.toolbox.ui.handler.PCalTranslateModuleHandler.execute(PCalTranslateModuleHandler.java:50) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:468) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:786) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:885) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:567) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:508) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:123) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1262) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1052) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062) + at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1104) + at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1100) + at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1509) + at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:4640) + at org.eclipse.swt.widgets.Canvas.WM_CHAR(Canvas.java:345) + at org.eclipse.swt.widgets.Control.windowProc(Control.java:4528) + at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341) + at org.eclipse.swt.widgets.Display.windowProc(Display.java:4972) + at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method) + at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2531) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3752) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:592) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) + at org.eclipse.equinox.launcher.Main.main(Main.java:1386) +Spec build invoked on Semantics ...</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=256#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-19 20:59:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=256#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-19 20:59:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=161" name="attach_161" title="mylyn/context/zip">attachment 161</a> <a href="https://54.195.32.3/attachment.cgi?id=161&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=257">257</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Move fpbits input from "How to run" section on main model editor page to advanced page</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=162">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=257#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-19 21:09:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">fpbits logically belongs together with the +fingerprint index. The best known place to be to date is under TLC +options on the advanced model page.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=257#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-19 22:44:30 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=257#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-19 22:44:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=162" name="attach_162" title="mylyn/context/zip">attachment 162</a> <a href="https://54.195.32.3/attachment.cgi?id=162&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=258">258</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Replace worker input field with spinner</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">1.4.1</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=163">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=258#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-20 00:06:11 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Replace worker input field with spinner on +main moduleditor page to prevent the user from entering non-numerical +characters. This saves some load during validation.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=258#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-20 19:24:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=258#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-20 19:24:41 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=163" name="attach_163" title="mylyn/context/zip">attachment 163</a> <a href="https://54.195.32.3/attachment.cgi?id=163&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=259">259</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Prompt user to save spec first when translate to PlusCal is executed on dirty editor</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">1.4.2</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=167">mylyn/context/zip + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=169">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=259#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-20 20:16:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">If the user does not save the dirty editor +before running the PlusCal translation, the Toolbox saves the spec +automatically without raising a modal dialog confirming this action. +This should be aligned how the editor generally behaves.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=259#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-25 23:00:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD for all handlers that need an active editor to be present</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=259#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-25 23:00:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=167" name="attach_167" title="mylyn/context/zip">attachment 167</a> <a href="https://54.195.32.3/attachment.cgi?id=167&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=259#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-25 23:02:46 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Arg, meant to close <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Enablement of handlers causes NPE if executed on unparsed spec/not fully initialized editor" href="https://54.195.32.3/show_bug.cgi?id=254">bug #254</a> instead of this one!</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=259#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-26 00:54:54 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=259#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-26 00:54:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=169" name="attach_169" title="mylyn/context/zip">attachment 169</a> <a href="https://54.195.32.3/attachment.cgi?id=169&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=260">260</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Deadlock in startup code when WorkspaceSpecManager initialization and spec parser create cyclic wait graph</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">1.4.2</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - ProverUI uses foreign preference store causing activation of foreign bundle" href="https://54.195.32.3/show_bug.cgi?id=261">261</a> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - startup deadlock while determining spec size" href="https://54.195.32.3/show_bug.cgi?id=195">195</a> + </td> +<td> </td> + <td> </td> + </tr> + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=166">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=260#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-24 18:37:07 UTC + </span> + </div> + + + +<pre class="bz_comment_text">A TLA spec parser +(org.lamport.tla.toolbox.spec.nature.TLAParsingBuilder.build(int, Map, +IProgressMonitor)) requires to retrieve the WorkspaceSpecManager from +org.lamport.tla.toolbox.Activator.getSpecManager() once scheduled by the + org.eclipse.core.internal.jobs.JobManager. However, this call might +block if another thread (e.g. +org.lamport.tla.toolbox.ui.contribution.SizeControlContribution) has +acquired the mutex already and is now itself waiting to be schedule by +the JobManager.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=260#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-25 22:26:20 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed, the WorkspaceSpecManager (WSM) is +now eagerly initialized right after the .toolbox bundle has finished its + OSGi life cycle change to either RESOLVED or ACTIVE (classloading +succeeds in both states) and before a +org.lamport.tla.toolbox.spec.nature.TLAParsingBuilder can scheduled.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=260#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-25 22:26:21 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=166" name="attach_166" title="mylyn/context/zip">attachment 166</a> <a href="https://54.195.32.3/attachment.cgi?id=166&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=261">261</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">ProverUI uses foreign preference store causing activation of foreign bundle</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">1.4.2</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td><a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Deadlock in startup code when WorkspaceSpecManager initialization and spec parser create cyclic wait graph" href="https://54.195.32.3/show_bug.cgi?id=260">260</a> + </td> +<td> </td> + <td> </td> + </tr> + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=165">mylyn/context/zip + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=178">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=261#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-25 17:47:24 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The ProverUI bundle stores its preferences +in the org.eclipse.ui.editors' bundle preference store. This action is +performed as part of ProverUI's bundle activation which in turn triggers + activation of bundle org.eclipse.ui.editors.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=261#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-25 22:19:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">WONTFIX right now as I have found a way to work around it to address <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Deadlock in startup code when WorkspaceSpecManager initialization and spec parser create cyclic wait graph" href="https://54.195.32.3/show_bug.cgi?id=260">bug #260</a>.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=261#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-25 22:19:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=165" name="attach_165" title="mylyn/context/zip">attachment 165</a> <a href="https://54.195.32.3/attachment.cgi?id=165&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=261#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-14 16:46:22 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Unfortunately we cannot get away with it, because it is creating a cyclic wait graph intermittently.</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=261#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-14 21:04:41 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=261#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-14 21:04:48 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=178" name="attach_178" title="mylyn/context/zip">attachment 178</a> <a href="https://54.195.32.3/attachment.cgi?id=178&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=262">262</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">java.io.IOEXception: Stream Closed exceptions when clients call TLCTrace#getLevel() after model checking has finished</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">1.4.1</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=170">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=262#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-26 18:48:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text">1, + 0, + 0, + 0, + 0, + 1, + 0 >> + +Error: The error occurred when TLC was evaluating the nested +expressions at the following positions: + The error call stack is empty. + +5275343700 states generated, 375321149 distinct states found, 215462328 states left on queue. +The depth of the complete state graph search is 14. +java.io.IOException: Stream Closed + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:207) + at tlc2.tool.TLCTrace.getPrev(TLCTrace.java:78) + at tlc2.tool.TLCTrace.getLevel(TLCTrace.java:143) + at tlc2.tool.TLCTrace.getLevelForReporting(TLCTrace.java:109) + at tlc2.tool.management.ModelCheckerMXWrapper.getProgress(ModelCheckerMXWrapper.java:76) + at sun.reflect.GeneratedMethodAccessor46.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:111) + at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:45) + at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:226) + at com.sun.jmx.mbeanserver.PerInterface.getAttribute(PerInterface.java:83) + at com.sun.jmx.mbeanserver.MBeanSupport.getAttribute(MBeanSupport.java:205) + at javax.management.StandardMBean.getAttribute(StandardMBean.java:372) + at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:683) + at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:672) + at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1427) + at javax.management.remote.rmi.RMIConnectionImpl.access$200(RMIConnectionImpl.java:90) + at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1285) + at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1383) + at javax.management.remote.rmi.RMIConnectionImpl.getAttribute(RMIConnectionImpl.java:619) + at sun.reflect.GeneratedMethodAccessor20.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322) + at sun.rmi.transport.Transport$1.run(Transport.java:177) + at java.security.AccessController.doPrivileged(Native Method) + at sun.rmi.transport.Transport.serviceCall(Transport.java:173) + at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) + at java.lang.Thread.run(Thread.java:679) +Finished. (2012-01-16 13:05:17)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=262#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-26 20:35:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=262#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-26 20:36:01 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=170" name="attach_170" title="mylyn/context/zip">attachment 170</a> <a href="https://54.195.32.3/attachment.cgi?id=170&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=263">263</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">InvalidThreadAccess exception when installing markers during startup</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Linux</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">1.4.2</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=171">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=263#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-27 23:48:42 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Restarting Toolbox with Parsing Errors View + open causes Exception at next startup: + +osgi> TLA+ Toolbox started without arguments. +!SESSION 2012-01-27 14:46:14.410 +----------------------------------------------- +eclipse.buildId=unknown +java.version=1.6.0_26 +java.vendor=Sun Microsystems Inc. +BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US +Framework arguments: -product +org.lamport.tla.toolbox.product.standalone.product +Command-line arguments: -product +org.lamport.tla.toolbox.product.standalone.product -data +/usr/local/src/eclipse/tlatoolbox/../newTLAToolbox -dev +file:/usr/local/src/eclipse/tlatoolbox/.metadata/.plugins/org.eclipse.pde.core/TLAToolbox/dev.properties + -os linux -ws gtk -arch x86_64 -consoleLog -console -clean + +!ENTRY org.eclipse.core.resources 2 10035 2012-01-27 14:46:19.704 +!MESSAGE The workspace exited with unsaved changes in the previous +session; refreshing workspace to recover changes. +footFileName = /usr/local/src/models/3-acc-2-ballots/PConProof.tla +footFileName = /usr/local/src/models/Semantics/Semantics.tla +footFileName = +/usr/local/src/models/ConcatSequenceUniqueStringTest/Test.tla +Spec build invoked on Semantics ... + +!ENTRY org.eclipse.osgi 4 0 2012-01-27 14:46:21.171 +!MESSAGE An error occurred while automatically activating bundle +org.eclipse.ui.editors (105). +!STACK 0 +org.osgi.framework.BundleException: Exception in +org.eclipse.ui.internal.editors.text.EditorsPlugin.start() of bundle +org.eclipse.ui.editors. + at +org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734) + + at +org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) + + at +org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) + + at +org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:299) + + at +org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440) + + at +org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:268) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107) + + at +org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:462) + + at +org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) + + at +org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400) + + at +org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35) + + at +org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:473) + + at +org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429) + + at +org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417) + + at +org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) + + at java.lang.ClassLoader.loadClass(ClassLoader.java:247) + at +org.lamport.tla.toolbox.util.TLAMarkerHelper$1.run(TLAMarkerHelper.java:145) + + at +org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) + at +org.lamport.tla.toolbox.util.TLAMarkerHelper.installProblemMarker(TLAMarkerHelper.java:186) + + at +org.lamport.tla.toolbox.util.TLAMarkerHelper.installProblemMarkers(TLAMarkerHelper.java:364) + + at +org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:104) + + at +org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:57) + + at +org.lamport.tla.toolbox.spec.parser.SpecificationParserLauncher.parseSpecification(SpecificationParserLauncher.java:38) + + at +org.lamport.tla.toolbox.spec.nature.ParserHelper$2.run(ParserHelper.java:75) + + at +org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) + at +org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2326) + at +org.lamport.tla.toolbox.spec.nature.ParserHelper.rebuildSpec(ParserHelper.java:81) + + at +org.lamport.tla.toolbox.spec.nature.TLAParsingBuilder.build(TLAParsingBuilder.java:69) + + at +org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + + at +org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + + at +org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + + at +org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + + at +org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + + at +org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +Caused by: org.eclipse.swt.SWTException: Invalid thread access + at org.eclipse.swt.SWT.error(SWT.java:4282) + at org.eclipse.swt.SWT.error(SWT.java:4197) + at org.eclipse.swt.SWT.error(SWT.java:4168) + at org.eclipse.swt.widgets.Display.error(Display.java:1210) + at org.eclipse.swt.widgets.Display.checkDevice(Display.java:752) + at org.eclipse.swt.widgets.Display.disposeExec(Display.java:1187) + at +org.eclipse.jface.resource.ColorRegistry.hookDisplayDispose(ColorRegistry.java:268) + + at +org.eclipse.jface.resource.ColorRegistry.<init>(ColorRegistry.java:123) + + at +org.eclipse.jface.resource.ColorRegistry.<init>(ColorRegistry.java:106) + + at +org.eclipse.ui.internal.themes.WorkbenchThemeManager.<init>(WorkbenchThemeManager.java:98) + + at +org.eclipse.ui.internal.themes.WorkbenchThemeManager.getInstance(WorkbenchThemeManager.java:58) + + at +org.eclipse.ui.internal.Workbench.getThemeManager(Workbench.java:3449) + at +org.eclipse.ui.internal.editors.text.EditorsPlugin.start(EditorsPlugin.java:214) + + at +org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) + + at java.security.AccessController.doPrivileged(Native Method) + at +org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) + + ... 39 more +Root exception: +org.eclipse.swt.SWTException: Invalid thread access + at org.eclipse.swt.SWT.error(SWT.java:4282) + at org.eclipse.swt.SWT.error(SWT.java:4197) + at org.eclipse.swt.SWT.error(SWT.java:4168) + at org.eclipse.swt.widgets.Display.error(Display.java:1210) + at org.eclipse.swt.widgets.Display.checkDevice(Display.java:752) + at org.eclipse.swt.widgets.Display.disposeExec(Display.java:1187) + at +org.eclipse.jface.resource.ColorRegistry.hookDisplayDispose(ColorRegistry.java:268) + + at +org.eclipse.jface.resource.ColorRegistry.<init>(ColorRegistry.java:123) + + at +org.eclipse.jface.resource.ColorRegistry.<init>(ColorRegistry.java:106) + + at +org.eclipse.ui.internal.themes.WorkbenchThemeManager.<init>(WorkbenchThemeManager.java:98) + + at +org.eclipse.ui.internal.themes.WorkbenchThemeManager.getInstance(WorkbenchThemeManager.java:58) + + at +org.eclipse.ui.internal.Workbench.getThemeManager(Workbench.java:3449) + at +org.eclipse.ui.internal.editors.text.EditorsPlugin.start(EditorsPlugin.java:214) + + at +org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) + + at java.security.AccessController.doPrivileged(Native Method) + at +org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) + + at +org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) + + at +org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) + + at +org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:299) + + at +org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440) + + at +org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:268) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107) + + at +org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:462) + + at +org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) + + at +org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400) + + at +org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35) + + at +org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:473) + + at +org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429) + + at +org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417) + + at +org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) + + at java.lang.ClassLoader.loadClass(ClassLoader.java:247) + at +org.lamport.tla.toolbox.util.TLAMarkerHelper$1.run(TLAMarkerHelper.java:145) + + at +org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) + at +org.lamport.tla.toolbox.util.TLAMarkerHelper.installProblemMarker(TLAMarkerHelper.java:186) + + at +org.lamport.tla.toolbox.util.TLAMarkerHelper.installProblemMarkers(TLAMarkerHelper.java:364) + + at +org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:104) + + at +org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:57) + + at +org.lamport.tla.toolbox.spec.parser.SpecificationParserLauncher.parseSpecification(SpecificationParserLauncher.java:38) + + at +org.lamport.tla.toolbox.spec.nature.ParserHelper$2.run(ParserHelper.java:75) + + at +org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) + at +org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2326) + at +org.lamport.tla.toolbox.spec.nature.ParserHelper.rebuildSpec(ParserHelper.java:81) + + at +org.lamport.tla.toolbox.spec.nature.TLAParsingBuilder.build(TLAParsingBuilder.java:69) + + at +org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + + at +org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + + at +org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + + at +org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + + at +org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + + at +org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +!ENTRY org.eclipse.core.resources 4 2 2012-01-27 14:46:21.203 +!MESSAGE Problems occurred when invoking code from plug-in: +"org.eclipse.core.resources". +!STACK 0 +java.lang.NoClassDefFoundError: +org/eclipse/ui/editors/text/FileDocumentProvider + at +org.lamport.tla.toolbox.util.TLAMarkerHelper$1.run(TLAMarkerHelper.java:145) + + at +org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) + at +org.lamport.tla.toolbox.util.TLAMarkerHelper.installProblemMarker(TLAMarkerHelper.java:186) + + at +org.lamport.tla.toolbox.util.TLAMarkerHelper.installProblemMarkers(TLAMarkerHelper.java:364) + + at +org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:104) + + at +org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:57) + + at +org.lamport.tla.toolbox.spec.parser.SpecificationParserLauncher.parseSpecification(SpecificationParserLauncher.java:38) + + at +org.lamport.tla.toolbox.spec.nature.ParserHelper$2.run(ParserHelper.java:75) + + at +org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) + at +org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2326) + at +org.lamport.tla.toolbox.spec.nature.ParserHelper.rebuildSpec(ParserHelper.java:81) + + at +org.lamport.tla.toolbox.spec.nature.TLAParsingBuilder.build(TLAParsingBuilder.java:69) + + at +org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + + at +org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + + at +org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + + at +org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + + at +org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + + at +org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +Caused by: +org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter$TerminatingClassNotFoundException: + An error occurred while automatically activating bundle +org.eclipse.ui.editors (105). + at +org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:122) + + at +org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:462) + + at +org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) + + at +org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400) + + at +org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35) + + at +org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:473) + + at +org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429) + + at +org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417) + + at +org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) + + at java.lang.ClassLoader.loadClass(ClassLoader.java:247) + ... 24 more +Caused by: org.osgi.framework.BundleException: Exception in +org.eclipse.ui.internal.editors.text.EditorsPlugin.start() of bundle +org.eclipse.ui.editors. + at +org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734) + + at +org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) + + at +org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) + + at +org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:299) + + at +org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440) + + at +org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:268) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107) + + ... 33 more +Caused by: org.eclipse.swt.SWTException: Invalid thread access + at org.eclipse.swt.SWT.error(SWT.java:4282) + at org.eclipse.swt.SWT.error(SWT.java:4197) + at org.eclipse.swt.SWT.error(SWT.java:4168) + at org.eclipse.swt.widgets.Display.error(Display.java:1210) + at org.eclipse.swt.widgets.Display.checkDevice(Display.java:752) + at org.eclipse.swt.widgets.Display.disposeExec(Display.java:1187) + at +org.eclipse.jface.resource.ColorRegistry.hookDisplayDispose(ColorRegistry.java:268) + + at +org.eclipse.jface.resource.ColorRegistry.<init>(ColorRegistry.java:123) + + at +org.eclipse.jface.resource.ColorRegistry.<init>(ColorRegistry.java:106) + + at +org.eclipse.ui.internal.themes.WorkbenchThemeManager.<init>(WorkbenchThemeManager.java:98) + + at +org.eclipse.ui.internal.themes.WorkbenchThemeManager.getInstance(WorkbenchThemeManager.java:58) + + at +org.eclipse.ui.internal.Workbench.getThemeManager(Workbench.java:3449) + at +org.eclipse.ui.internal.editors.text.EditorsPlugin.start(EditorsPlugin.java:214) + + at +org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) + + at java.security.AccessController.doPrivileged(Native Method) + at +org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) + + ... 39 more + +!ENTRY org.eclipse.core.resources 4 75 2012-01-27 14:46:21.434 +!MESSAGE Errors occurred during the build. +!SUBENTRY 1 org.lamport.tla.toolbox 4 75 2012-01-27 14:46:21.435 +!MESSAGE Errors running builder 'TLA+ Syntax Parser' on project +'Semantics'. +!STACK 0 +java.lang.NoClassDefFoundError: +org/eclipse/ui/editors/text/FileDocumentProvider + at +org.lamport.tla.toolbox.util.TLAMarkerHelper$1.run(TLAMarkerHelper.java:145) + + at +org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) + at +org.lamport.tla.toolbox.util.TLAMarkerHelper.installProblemMarker(TLAMarkerHelper.java:186) + + at +org.lamport.tla.toolbox.util.TLAMarkerHelper.installProblemMarkers(TLAMarkerHelper.java:364) + + at +org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:104) + + at +org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:57) + + at +org.lamport.tla.toolbox.spec.parser.SpecificationParserLauncher.parseSpecification(SpecificationParserLauncher.java:38) + + at +org.lamport.tla.toolbox.spec.nature.ParserHelper$2.run(ParserHelper.java:75) + + at +org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) + at +org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2326) + at +org.lamport.tla.toolbox.spec.nature.ParserHelper.rebuildSpec(ParserHelper.java:81) + + at +org.lamport.tla.toolbox.spec.nature.TLAParsingBuilder.build(TLAParsingBuilder.java:69) + + at +org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + + at +org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + + at +org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + + at +org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + + at +org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + + at +org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +Caused by: +org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter$TerminatingClassNotFoundException: + An error occurred while automatically activating bundle +org.eclipse.ui.editors (105). + at +org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:122) + + at +org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:462) + + at +org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) + + at +org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400) + + at +org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35) + + at +org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:473) + + at +org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429) + + at +org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417) + + at +org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) + + at java.lang.ClassLoader.loadClass(ClassLoader.java:247) + ... 24 more +Caused by: org.osgi.framework.BundleException: Exception in +org.eclipse.ui.internal.editors.text.EditorsPlugin.start() of bundle +org.eclipse.ui.editors. + at +org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734) + + at +org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) + + at +org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) + + at +org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:299) + + at +org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440) + + at +org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:268) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107) + + ... 33 more +Caused by: org.eclipse.swt.SWTException: Invalid thread access + at org.eclipse.swt.SWT.error(SWT.java:4282) + at org.eclipse.swt.SWT.error(SWT.java:4197) + at org.eclipse.swt.SWT.error(SWT.java:4168) + at org.eclipse.swt.widgets.Display.error(Display.java:1210) + at org.eclipse.swt.widgets.Display.checkDevice(Display.java:752) + at org.eclipse.swt.widgets.Display.disposeExec(Display.java:1187) + at +org.eclipse.jface.resource.ColorRegistry.hookDisplayDispose(ColorRegistry.java:268) + + at +org.eclipse.jface.resource.ColorRegistry.<init>(ColorRegistry.java:123) + + at +org.eclipse.jface.resource.ColorRegistry.<init>(ColorRegistry.java:106) + + at +org.eclipse.ui.internal.themes.WorkbenchThemeManager.<init>(WorkbenchThemeManager.java:98) + + at +org.eclipse.ui.internal.themes.WorkbenchThemeManager.getInstance(WorkbenchThemeManager.java:58) + + at +org.eclipse.ui.internal.Workbench.getThemeManager(Workbench.java:3449) + at +org.eclipse.ui.internal.editors.text.EditorsPlugin.start(EditorsPlugin.java:214) + + at +org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) + + at java.security.AccessController.doPrivileged(Native Method) + at +org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) + + ... 39 more</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=263#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-28 00:30:17 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=263#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-28 00:30:20 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=171" name="attach_171" title="mylyn/context/zip">attachment 171</a> <a href="https://54.195.32.3/attachment.cgi?id=171&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=264">264</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Make TLC bound on cardinality of a set settable by user.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>bugzilla.tlaplus.net, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows 7</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=184">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=264#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-01-31 18:38:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Make the setBound parameter in the +TLCGlobals class user-settable, which requires adding a command-line +option to set it and modifying the Toolbox to allow the user to set it. + This parameter, which is the maximum cardinality of a set that TLC will + allow, also limits the number of initial states. Allowing the user to +increase it will make it possible to check inductive invariance on +larger models.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=264#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-16 00:29:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text">*** <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED DUPLICATE - Add TLA+ set upper bound command line parameter and Toolbox UI" href="https://54.195.32.3/show_bug.cgi?id=274">Bug 274</a> has been marked as a duplicate of this bug. ***</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=264#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-03-08 12:54:02 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Enhancement released to HEAD ++ -maxSetSize parameter for TLC ++ UI on advanced model page (UI probably needs rewording)</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=264#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-03-08 12:54:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=184" name="attach_184" title="mylyn/context/zip">attachment 184</a> <a href="https://54.195.32.3/attachment.cgi?id=184&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=264#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-03-22 01:23:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This feature is stable and will be released in Version 1.4.3.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=265">265</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">UI enablement broken after spec open leaving actions and handler in disabled state</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">1.4.2</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=172">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=265#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-01 00:26:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Opening a spec does not correctly updates +the Toolbox enablement state. This causes several actions and handlers +to be disabled. + +As a workaround, the user can manually triggering the re-evaluation of +the enablement state by cycling the active workbench page (e.g. opening +spec explorer).</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=265#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-01 00:33:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Committed a workaround that cycles +workbench page activation to cause a selection changed event to occur +that triggers the re-evaluation of the workbench's enablement state.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=265#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-01 00:33:40 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=172" name="attach_172" title="mylyn/context/zip">attachment 172</a> <a href="https://54.195.32.3/attachment.cgi?id=172&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=266">266</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Add (general) preference page to set TLC library path</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">1.4.2</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=173">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=266#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-01 17:59:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">A new (general) preference page is needed +for the user to set extra TLC library/module lookup paths. Additionally, + the path vars have to be passed to TLC as a system property.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=266#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-02 17:36:14 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Enhancement released to HEAD + +Project specific library path replaces the global preference. Additionally to TLC, the path variable is set for SANY.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=266#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-02 17:36:17 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=173" name="attach_173" title="mylyn/context/zip">attachment 173</a> <a href="https://54.195.32.3/attachment.cgi?id=173&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=267">267</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">AssertionFailedException: null argument:Found a plus + cal assertion failed location without a TLC error location with the +module name.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows Vista</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">1.4.2</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=174">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=267#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-03 21:59:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">footFileName = +C:\lamport\talks\lada12\RemoveRedundantParens.tla +Writing files to: Model_1\ +Skipping resource: Model_1/MC.tla +Skipping resource: Model_1/RemoveRedundantParens.tla +Final check for the modelcheck mode. The result of the check is true +TLC ARGUMENTS: [-checkpoint, 3, -fpbits, 0, -fp, 0, -config, MC.cfg, +-coverage, 3, -workers, 1, -tool, -metadir, +C:\lamport\talks\lada12\RemoveRedundantParens.toolbox\Model_1, MC] + +!ENTRY org.lamport.tla.toolbox.tool.tlc.ui 1 0 2012-02-03 12:34:13.120 +!MESSAGE TLCOutputSourceRegistry for model checking maintains 2 sources. + +!ENTRY org.lamport.tla.toolbox.tool.tlc.ui 1 0 2012-02-03 12:34:13.120 +!MESSAGE The source RemoveRedundantParens___Model_1.launch has 4 prio +and 1 listeners + +!ENTRY org.lamport.tla.toolbox.tool.tlc.ui 1 0 2012-02-03 12:34:13.120 +!MESSAGE The source Test2___Model_2.launch has 4 prio and 1 listeners + +!ENTRY org.eclipse.ui 4 0 2012-02-03 12:34:15.165 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable +(org.eclipse.core.runtime.AssertionFailedException: null argument:Found a + plus cal assertion failed location without a TLC error location with +the module name.) + at org.eclipse.swt.SWT.error(SWT.java:4083) + at org.eclipse.swt.SWT.error(SWT.java:3998) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4041) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3660) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) +Caused by: org.eclipse.core.runtime.AssertionFailedException: null +argument:Found a plus cal assertion failed location without a TLC error +location with the module name. + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at +org.lamport.tla.toolbox.tool.tlc.ui.util.TLCUIHelper.setTLCLocationHyperlinks(TLCUIHelper.java:117) + + at +org.lamport.tla.toolbox.tool.tlc.ui.view.TLCErrorView.fill(TLCErrorView.java:221) + + at +org.lamport.tla.toolbox.tool.tlc.ui.view.TLCErrorView.updateErrorView(TLCErrorView.java:632) + + at +org.lamport.tla.toolbox.tool.tlc.ui.editor.page.ResultPage$2.run(ResultPage.java:232) + + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + + ... 23 more + +!ENTRY org.eclipse.text 4 2 2012-02-03 12:34:16.112 +!MESSAGE Problems occurred when invoking code from plug-in: +"org.eclipse.text". +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: null argument:The +state encountered without the error describing the reason for it. This +is a bug. + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at +org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.onOutput(TLCModelLaunchDataProvider.java:249) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:89) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:57) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:226) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:611) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:755) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:736) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:721) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:796) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1191) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1210) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:324) + + at +org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.addIncrement(ParsingTLCOutputSink.java:47) + + at +org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:39) + + at +org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + + at java.lang.Thread.run(Unknown Source) +Job 'TLC run for Model_1' terminated with status: { Done }</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=267#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-04 01:56:20 UTC + </span> + </div> + + + +<pre class="bz_comment_text">TLC process output causing this bug: + + +TLC2 Version 2.04 of 19 January 2012 +Running in Model-Checking mode. +Parsing file MC.tla +Parsing file RemoveRedundantParens.tla +Parsing file +/usr/local/src/tla/tlatools/class/tla2sany/StandardModules/TLC.tla +Parsing file +/usr/local/src/tla/tlatools/class/tla2sany/StandardModules/Integers.tla +Parsing file +/usr/local/src/tla/tlatools/class/tla2sany/StandardModules/Sequences.tla +Parsing file +/usr/local/src/tla/tlatools/class/tla2sany/StandardModules/Naturals.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module TLC +Semantic processing of module RemoveRedundantParens +Semantic processing of module MC +Starting... (2012-02-03 16:51:38) +Computing initial states... +Finished computing initial states: 1374 distinct states generated. +Progress(3) at 2012-02-03 16:51:44: 4120 states generated (4120 s/min), +4120 distinct states found (4120 ds/min), 1372 states left on queue. +Progress(3) at 2012-02-03 16:52:44: 4120 states generated (0 s/min), +4120 distinct states found (0 ds/min), 1372 states left on queue. +Progress(3) at 2012-02-03 16:53:44: 4120 states generated (0 s/min), +4120 distinct states found (0 ds/min), 1372 states left on queue. +Progress(3) at 2012-02-03 16:54:44: 4120 states generated (0 s/min), +4120 distinct states found (0 ds/min), 1372 states left on queue. +Error: Attempted to apply the operator overridden by the Java method +public static tlc2.value.Value +tlc2.module.TLC.Assert(tlc2.value.Value,tlc2.value.Value), +but it produced the following error: +The first argument of Assert evaluated to FALSE; the second argument +was: +"Failure of assertion at line 150, column 5." +tlc2.tool.EvalException: Attempted to apply the operator overridden by +the Java method +public static tlc2.value.Value +tlc2.module.TLC.Assert(tlc2.value.Value,tlc2.value.Value), +but it produced the following error: +The first argument of Assert evaluated to FALSE; the second argument +was: +"Failure of assertion at line 150, column 5." + at tlc2.value.MethodValue.apply(MethodValue.java:62) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:849) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:776) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:862) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:878) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:975) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:878) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:975) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:776) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:1029) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:878) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:700) + at tlc2.tool.ModelChecker.doNext(ModelChecker.java:404) + at tlc2.tool.Worker.run(Worker.java:75) +Error: The behavior up to this point is: +State 1: <Initial predicate> +/\ out = <<>> +/\ unmatchedLeft = <<>> +/\ lastMatchedLeft = -1 +/\ i = 1 +/\ in = << >> +/\ lastAddedRight = -1 +/\ pc = "Lbl_1"</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=267#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-04 01:57:08 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Error: The error occurred when TLC was evaluating the nested +expressions at the following positions: +0. Line 169, column 13 to line 169, column 24 in RemoveRedundantParens +1. Line 170, column 13 to line 200, column 53 in RemoveRedundantParens +2. Line 189, column 24 to line 195, column 38 in RemoveRedundantParens +3. Line 195, column 35 to line 195, column 38 in RemoveRedundantParens +4. Line 196, column 24 to line 197, column 76 in RemoveRedundantParens + + +4120 states generated, 4120 distinct states found, 1372 states left on queue. +The depth of the complete state graph search is 3. +Finished. (2012-02-03 16:56:39)</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=267#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-06 21:13:12 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Correctly parsed output: + +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.04 of 19 January 2012 +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running in Model-Checking mode. +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file MC.tla +Parsing file Test.tla +Parsing file +C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\TLC.tla +Parsing + file +C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Integers.tla +Parsing + file +C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Sequences.tla +Parsing + file +C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Naturals.tla +Semantic + processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module TLC +Semantic processing of module Test +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2012-02-06 10:35:52) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +Attempted to check equality of integer 2 with non-integer: +"3" +@!@!@ENDMSG 1000 @!@!@ +java.lang.RuntimeException: Attempted to check equality of integer 2 +with non-integer: +"3" + at util.Assert.fail(Assert.java:25) + at tlc2.value.IntValue.equals(IntValue.java:64) + at tlc2.tool.Tool.evalAppl(Tool.java:1803) + at tlc2.tool.Tool.eval(Tool.java:1212) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:1010) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:776) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:1021) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:776) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:1029) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:878) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:700) + at tlc2.tool.ModelChecker.doNext(ModelChecker.java:404) + at tlc2.tool.Worker.run(Worker.java:75) +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: <Initial predicate> +/\ var = defaultInitValue +/\ qvar = <<defaultInitValue, defaultInitValue, +defaultInitValue>> +/\ xx = defaultInitValue +/\ zz = <<defaultInitValue, defaultInitValue, +defaultInitValue>> +/\ x = defaultInitValue +/\ y = defaultInitValue +/\ pc = <<"lab", "lab", "lab">> + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2103:1 @!@!@ +The error occurred when TLC was evaluating the nested +expressions at the following positions: +0. Line 39, column 17 to line 39, column 32 in Test +1. Line 40, column 17 to line 40, column 23 in Test +2. Line 41, column 17 to line 41, column 23 in Test + + +@!@!@ENDMSG 2103 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2012-02-06 10:35:52 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 12 to line 25, col 12 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 15 to line 25, col 16 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 19 to line 25, col 19 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 22 to line 25, col 24 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 27 to line 25, col 28 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 31 to line 25, col 34 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 37 to line 25, col 38 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 40, col 17 to line 40, col 23 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 42, col 17 to line 42, col 50 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 43, col 30 to line 43, col 31 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 43, col 34 to line 43, col 34 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 43, col 37 to line 43, col 39 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 43, col 42 to line 43, col 45 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 43, col 48 to line 43, col 49 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(1) at 2012-02-06 10:35:52: 1 states generated (638 s/min), 1 +distinct states found (638 ds/min), 0 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +1 states generated, 1 distinct states found, 0 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2194:0 @!@!@ +The depth of the complete state graph search is 1. +@!@!@ENDMSG 2194 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished. (2012-02-06 10:35:52) +@!@!@ENDMSG 2186 @!@!@</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=267#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-06 21:13:41 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Output making the Toolbox choke: + +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.04 of 19 January 2012 +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running in Model-Checking mode. +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file MC.tla +Parsing file Test.tla +Parsing file +C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\TLC.tla +Parsing + file +C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Integers.tla +Parsing + file +C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Sequences.tla +Parsing + file +C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Naturals.tla +Semantic + processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module TLC +Semantic processing of module Test +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2012-02-06 10:36:45) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +@!@!@STARTMSG 2154:0 @!@!@ +Attempted to apply the operator overridden by the Java method +public static tlc2.value.Value +tlc2.module.TLC.Assert(tlc2.value.Value,tlc2.value.Value), +but it produced the following error: +@!@!@STARTMSG 2132:0 @!@!@ +The first argument of Assert evaluated to FALSE; the second argument +was: +"Failure of assertion." +@!@!@ENDMSG 2132 @!@!@ +@!@!@ENDMSG 2154 @!@!@ +@!@!@ENDMSG 1000 @!@!@ +tlc2.tool.EvalException: @!@!@STARTMSG 2154:0 @!@!@ +Attempted to apply the operator overridden by the Java method +public static tlc2.value.Value +tlc2.module.TLC.Assert(tlc2.value.Value,tlc2.value.Value), +but it produced the following error: +@!@!@STARTMSG 2132:0 @!@!@ +The first argument of Assert evaluated to FALSE; the second argument +was: +"Failure of assertion." +@!@!@ENDMSG 2132 @!@!@ +@!@!@ENDMSG 2154 @!@!@ + at tlc2.value.MethodValue.apply(MethodValue.java:62) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:849) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:776) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:1021) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:776) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:1029) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:878) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:700) + at tlc2.tool.ModelChecker.doNext(ModelChecker.java:404) + at tlc2.tool.Worker.run(Worker.java:75) +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: <Initial predicate> +/\ var = defaultInitValue +/\ qvar = <<defaultInitValue, defaultInitValue, +defaultInitValue>> +/\ xx = defaultInitValue +/\ zz = <<defaultInitValue, defaultInitValue, +defaultInitValue>> +/\ x = defaultInitValue +/\ y = defaultInitValue +/\ pc = <<"lab", "lab", "lab">> + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2103:1 @!@!@ +The error occurred when TLC was evaluating the nested +expressions at the following positions: +0. Line 39, column 17 to line 39, column 32 in Test +1. Line 40, column 17 to line 40, column 23 in Test +2. Line 41, column 17 to line 41, column 54 in Test + + +@!@!@ENDMSG 2103 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2012-02-06 10:36:45 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 12 to line 25, col 12 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 15 to line 25, col 16 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 19 to line 25, col 19 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 22 to line 25, col 24 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 27 to line 25, col 28 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 31 to line 25, col 34 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 37 to line 25, col 38 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 40, col 17 to line 40, col 23 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 42, col 17 to line 42, col 50 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 43, col 30 to line 43, col 31 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 43, col 34 to line 43, col 34 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 43, col 37 to line 43, col 39 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 43, col 42 to line 43, col 45 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 43, col 48 to line 43, col 49 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(1) at 2012-02-06 10:36:45: 1 states generated (483 s/min), 1 +distinct states found (483 ds/min), 0 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +1 states generated, 1 distinct states found, 0 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2194:0 @!@!@ +The depth of the complete state graph search is 1. +@!@!@ENDMSG 2194 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished. (2012-02-06 10:36:45) +@!@!@ENDMSG 2186 @!@!@</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=267#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-07 17:32:53 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Added test case</pre> + </div><div id="c6" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=267#c6">Comment 6</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-07 17:32:56 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=174" name="attach_174" title="mylyn/context/zip">attachment 174</a> <a href="https://54.195.32.3/attachment.cgi?id=174&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c7" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=267#c7">Comment 7</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-07 17:59:55 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The offending text in the output is: + +@!@!@STARTMSG 2154:0 @!@!@ +Attempted to apply the operator overridden by the Java method +public static tlc2.value.Value tlc2.module.TLC.Assert(tlc2.value.Value,tlc2= +.value.Value), +but it produced the following error: +@!@!@STARTMSG 2132:0 @!@!@ +The first argument of Assert evaluated to FALSE; the second argument was: +"Failure of assertion." +@!@!@ENDMSG 2132 @!@!@ +@!@!@ENDMSG 2154 @!@!@</pre> + </div><div id="c8" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=267#c8">Comment 8</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-14 16:23:31 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=268">268</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">GotoMatchingParen markers override ShowUses markers</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4.1</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">1.4.2</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=176">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=268#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-07 23:45:21 UTC + </span> + </div> + + + +<pre class="bz_comment_text">LL: "Also, I've encountered a mysterious bug. The markers which are added +by the ShowUses command used to get the color specified by an +annotationType entry in a plugin.xml file that I defined for that +command. When I added the GotoMatchingParen command, I defined a +different annotationType entry for the marker it displays. The +markers added by the ShowUses command now have the color specified by +the annotationType I created for the GotoMatchingParen command. Do +you understand markers well enough to be able to figure this out +easily?"</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=268#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-08 21:25:37 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=268#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-08 21:25:41 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=176" name="attach_176" title="mylyn/context/zip">attachment 176</a> <a href="https://54.195.32.3/attachment.cgi?id=176&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=269">269</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Hyperlink (StyledRange) in TLC error view go to a subrange dependning on where the users clicks</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4.1</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">1.4.2</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=175">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=269#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-07 23:47:28 UTC + </span> + </div> + + + +<pre class="bz_comment_text">LL: "Another weird thing I observe is that if I click (or Control-click) +on location number 0, depending on where I click, it highlights +either the entire TLA+ formula + +pc = "Lbl_1" + +or just the last double-quote. + +The Eclipse console shows nothing when I do the clicking."</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=269#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-08 17:03:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Bug got most probably introduces with +revision 17310 - Added hyperlinking of failed assertion locations +printed by the PlusCal translator.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=269#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-08 17:04:08 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed in HEAD</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=269#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-08 17:04:11 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=175" name="attach_175" title="mylyn/context/zip">attachment 175</a> <a href="https://54.195.32.3/attachment.cgi?id=175&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=270">270</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Spec#rootfile initializes to null, causing NPE in Spec.initProjectProperties and failing Toolbox to start</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4.1</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">1.4.2</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=177">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=270#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-13 17:31:46 UTC + </span> + </div> + + + +<pre class="bz_comment_text">!ENTRY org.eclipse.core.jobs 4 2 2012-02-12 23:20:31.690 +!MESSAGE An internal error occurred during: "Calculating specification size...". +!STACK 0 +java.lang.NullPointerException + at org.lamport.tla.toolbox.spec.Spec.initProjectProperties(Spec.java:200) + at org.lamport.tla.toolbox.spec.Spec.<init>(Spec.java:125) + at org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.<init>(WorkspaceSpecManager.java:77) + at org.lamport.tla.toolbox.Activator.getSpecManager(Activator.java:303) + at org.lamport.tla.toolbox.ui.contribution.ParseStatusContributionItem$1.run(ParseStatusContributionItem.java:85) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +!ENTRY org.lamport.tla.toolbox 4 0 2012-02-12 23:20:31.752 +!MESSAGE A spec did not load correctly, probably because it was modified outside the Toolbox. + Error occurred in toolbox/spec/Spec.initProjectProperties()</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=270#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-13 17:34:36 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD by safeguarding against NPE +(proper fix would IMO guard against Spec#rootFile becoming null in the first place)</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=270#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-13 17:34:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=177" name="attach_177" title="mylyn/context/zip">attachment 177</a> <a href="https://54.195.32.3/attachment.cgi?id=177&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=271">271</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Unify Toolbox logging to use .log file</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4.1</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">1.4.2</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=271#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-14 16:18:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">In many places the Toolbox logs to +System.out instead of .metadata/.log. This means one has to search two +different locations log output with System.out being hidden when the +Toolbox runs in default mode (without "-console" parameter).</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=271#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-16 19:54:26 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=272">272</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Add common superclass to TLC domain specific exceptions</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4.1</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=272#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-14 16:25:43 UTC + </span> + </div> + + + +<pre class="bz_comment_text">All TLC domain specific exceptions should +be superclassed with a common TLCException to easily distinguish domain +exception from regular Java programming exceptions. <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - AssertionFailedException: null argument:Found a plus cal assertion failed location without a TLC error location with the module name." href="https://54.195.32.3/show_bug.cgi?id=267">Bug #267</a> shows the usefulness.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=273">273</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLC model editor memory slides has to handle pre-existing model values</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4.1</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">1.4.2</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=180">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=273#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-14 16:27:29 UTC + </span> + </div> + + + +<pre class="bz_comment_text">LL: "When I open an existing model created +before the addition of the way to specify the fraction of memory +allocated to TLC was added, that value appears as 99%. This is not +good, because if someone updates and then goes to rerun an existing +model, he’s not likely to open up the “How to Run” field to check if +something has changed. If this can’t be fixed, then we’ll have to warn +users of this."</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=273#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-16 00:20:55 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD that raises a warning if legacy value is detected.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=273#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-16 00:20:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=180" name="attach_180" title="mylyn/context/zip">attachment 180</a> <a href="https://54.195.32.3/attachment.cgi?id=180&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=274">274</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Add TLA+ set upper bound command line parameter and Toolbox UI</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + DUPLICATE + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4.1</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=274#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-14 16:36:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">tlc2.TLCGlobals.setBound defines an upper +bound for the size of a TLA+ set. Currently this value is hard coded to +1.000.000. +Some models require a larger upper bound though, and thus a command line + parameter as well as corresponding Toolbox UI becomes necessary.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=274#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-16 00:29:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text"> +*** This bug has been marked as a duplicate of <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Make TLC bound on cardinality of a set settable by user." href="https://54.195.32.3/show_bug.cgi?id=264">bug 264</a> ***</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=275">275</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Set eclipse.buildId at build time to log Toolbox version in .log file</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4.1</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=275#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-14 16:45:07 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Set eclipse.buildId at build time to log +Toolbox version in .log file. This is done by setting the system +property "eclipse.buidId" in the .product file. To avoid hard coding the + build value, a version bump to Tycho 0.14.x is necessary.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=276">276</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Nested TLC VM might differ from Toolbox VM</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4.1</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">1.4.2</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=179">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=276#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-15 22:48:29 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Due to the way the Toolbox creates the +nested JVM (used to launch the TLC model checker), it might use a +different one (e.g. 64bit Toolbox vs. 32bit nested JVM). This can cause +errors if for example the heap space has been calculated on 64bit and +does not work on 32bit.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=276#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-15 22:57:00 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=276#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-15 22:57:02 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=179" name="attach_179" title="mylyn/context/zip">attachment 179</a> <a href="https://54.195.32.3/attachment.cgi?id=179&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=277">277</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLC does not seem to terminate on SAT problem</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Michael Leuschel <leuschel></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + INVALID + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>lamport, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4.1</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Mac OS</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=277#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Michael Leuschel</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-25 09:43:25 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Background: For experimentation purposes I +have encoded a few SAT problems in TLA+ and wanted to check how TLC +performs on them (also compared to ProB with our new TLA2B converter; of + course if one has a pure SAT problem one is better off using a pure SAT + solver; but the idea is that in TLA+ or B one can of course mix the SAT + problem with other types of constraints). + +Problem Description: +If I use Init == TypeInv /\ Sol then I was not able to find a solution +with TLC (after 5 hours). I hence tried to provide part of a solution +with the OneSol definition. +In the specification below, if I change OneSol to: + +OneSol == (~x1 /\ ~x2 /\ ~x3 /\ ~x4 /\ ~x5 /\ + ~x6 /\ x7 /\ x8 /\ ~x9 /\ ~x10 /\ + ~x11 /\ ~x12 /\ ~x13 /\ x14 /\ x15 /\ + x16 (* /\ ~x17/\ ~x18 /\ x19 /\ ~x20 *)) (* encode part of + first solution found by ProB *) + +and perform model checking with TLC (toolbox 1.4.1 64 bit on Mac OS X +10.7.3) TLC runs for about a second and then I get the message "Too many + possible next states for the last state in the trace.". +I don't understand why this message appears. +Have I encoded something badly in TLA+ ? + +If I use the version of OneSol provided below, TLC does not seem to +terminate. +OneSol == (~x1 /\ ~x2 /\ ~x3 /\ ~x4 /\ ~x5 /\ + ~x6 /\ x7 /\ x8 /\ ~x9 /\ ~x10 /\ + ~x11 /\ ~x12 /\ ~x13 /\ x14 /\ x15 (* /\ + x16 /\ ~x17/\ ~x18 /\ x19 /\ ~x20 *)) (* encode part of +first solution found by ProB *) + +I am not sure what is going wrong here; there should only be 2^5 = 32 +possibilities to try out? +Probably I did something wrong in my TLA+ encoding of the SAT problem ?? + +----- MODULE uf20_02_partial ----- +(* CNF Translated to TLA *) +(* ProB can find all 29 solutions in much less than a second *) +(* TLC says either with partial or full Sol provided: "Too many possible + next states for the last state in the trace." *) +(* this works for up to 4 remaining variables; with 5 remaining +variables x16-x20 to be found: at least 35 min runtime *) +VARIABLES +x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, +x17, x18, x19, x20 +TypeInv == + x1\in BOOLEAN /\ x2\in BOOLEAN /\ x3\in BOOLEAN /\ x4\in BOOLEAN /\ +x5\in BOOLEAN /\ + x6\in BOOLEAN /\ x7\in BOOLEAN /\ x8\in BOOLEAN /\ x9\in BOOLEAN /\ +x10\in BOOLEAN /\ + x11\in BOOLEAN /\ x12\in BOOLEAN /\ x13\in BOOLEAN /\ x14\in BOOLEAN +/\ x15\in BOOLEAN /\ + x16\in BOOLEAN /\ x17\in BOOLEAN /\ x18\in BOOLEAN /\ x19\in BOOLEAN +/\ x20\in BOOLEAN + Sol == + ( ~x10 \/ ~x16 \/ x5 ) /\ + ( x16 \/ ~x6 \/ x5 ) /\ + ( ~x17 \/ ~x14 \/ ~x18 ) /\ + ( ~x10 \/ ~x15 \/ x19 ) /\ + ( ~x1 \/ ~x9 \/ ~x18 ) /\ + ( x3 \/ x7 \/ ~x6 ) /\ + ( ~x13 \/ x1 \/ x6 ) /\ + ( ~x2 \/ ~x16 \/ ~x20 ) /\ + ( x7 \/ x8 \/ x18 ) /\ + ( ~x7 \/ x10 \/ ~x20 ) /\ + ( x2 \/ ~x14 \/ ~x17 ) /\ + ( x2 \/ x1 \/ x19 ) /\ + ( x7 \/ ~x20 \/ ~x1 ) /\ + ( ~x11 \/ x1 \/ ~x17 ) /\ + ( x3 \/ ~x12 \/ x19 ) /\ + ( ~x3 \/ ~x13 \/ x6 ) /\ + ( ~x13 \/ x3 \/ ~x12 ) /\ + ( x5 \/ ~x7 \/ ~x12 ) /\ + ( x20 \/ x8 \/ ~x16 ) /\ + ( ~x13 \/ ~x6 \/ x19 ) /\ + ( ~x5 \/ x1 \/ x14 ) /\ + ( x9 \/ ~x5 \/ x18 ) /\ + ( ~x12 \/ ~x17 \/ ~x1 ) /\ + ( ~x20 \/ ~x16 \/ x19 ) /\ + ( x12 \/ x10 \/ ~x11 ) /\ + ( x6 \/ ~x7 \/ ~x2 ) /\ + ( x13 \/ ~x10 \/ x17 ) /\ + ( ~x20 \/ x8 \/ ~x16 ) /\ + ( ~x10 \/ ~x1 \/ ~x8 ) /\ + ( ~x7 \/ ~x3 \/ x19 ) /\ + ( x19 \/ ~x1 \/ ~x6 ) /\ + ( x19 \/ ~x2 \/ x13 ) /\ + ( ~x2 \/ x20 \/ ~x9 ) /\ + ( ~x8 \/ ~x20 \/ x16 ) /\ + ( ~x13 \/ ~x1 \/ x11 ) /\ + ( x15 \/ ~x12 \/ ~x6 ) /\ + ( ~x17 \/ ~x19 \/ x9 ) /\ + ( x19 \/ ~x18 \/ x16 ) /\ + ( x7 \/ ~x8 \/ ~x19 ) /\ + ( ~x3 \/ ~x7 \/ ~x1 ) /\ + ( x7 \/ ~x17 \/ ~x16 ) /\ + ( ~x2 \/ ~x14 \/ x1 ) /\ + ( ~x18 \/ ~x10 \/ ~x8 ) /\ + ( ~x16 \/ x5 \/ x8 ) /\ + ( x4 \/ x8 \/ x10 ) /\ + ( ~x20 \/ ~x11 \/ ~x19 ) /\ + ( x8 \/ ~x16 \/ ~x6 ) /\ + ( x18 \/ x12 \/ x8 ) /\ + ( ~x5 \/ ~x20 \/ ~x10 ) /\ + ( x16 \/ x17 \/ x3 ) /\ + ( x7 \/ ~x1 \/ ~x17 ) /\ + ( x17 \/ ~x4 \/ x7 ) /\ + ( x20 \/ ~x9 \/ ~x13 ) /\ + ( x13 \/ x18 \/ x16 ) /\ + ( ~x16 \/ ~x6 \/ x5 ) /\ + ( x5 \/ x17 \/ x7 ) /\ + ( ~x12 \/ ~x17 \/ ~x6 ) /\ + ( ~x20 \/ x19 \/ ~x5 ) /\ + ( x9 \/ ~x19 \/ x16 ) /\ + ( ~x13 \/ ~x16 \/ x11 ) /\ + ( ~x4 \/ ~x19 \/ ~x18 ) /\ + ( ~x13 \/ x10 \/ ~x15 ) /\ + ( x16 \/ ~x7 \/ ~x14 ) /\ + ( ~x19 \/ ~x7 \/ ~x18 ) /\ + ( ~x20 \/ x5 \/ x13 ) /\ + ( x12 \/ ~x6 \/ x4 ) /\ + ( x7 \/ x9 \/ ~x13 ) /\ + ( x16 \/ x3 \/ x7 ) /\ + ( x9 \/ ~x1 \/ x12 ) /\ + ( ~x3 \/ x14 \/ x7 ) /\ + ( x1 \/ x15 \/ x14 ) /\ + ( ~x8 \/ ~x11 \/ x18 ) /\ + ( x19 \/ ~x9 \/ x7 ) /\ + ( ~x10 \/ x6 \/ x2 ) /\ + ( x14 \/ x18 \/ ~x11 ) /\ + ( ~x9 \/ ~x16 \/ x14 ) /\ + ( x1 \/ x11 \/ ~x20 ) /\ + ( x11 \/ x12 \/ ~x4 ) /\ + ( x13 \/ ~x11 \/ ~x14 ) /\ + ( x17 \/ ~x12 \/ x9 ) /\ + ( x14 \/ x9 \/ x1 ) /\ + ( x8 \/ x19 \/ x4 ) /\ + ( x6 \/ ~x13 \/ ~x20 ) /\ + ( ~x2 \/ ~x13 \/ x11 ) /\ + ( x14 \/ ~x13 \/ x17 ) /\ + ( x9 \/ ~x11 \/ x18 ) /\ + ( ~x13 \/ ~x6 \/ x5 ) /\ + ( x5 \/ x19 \/ ~x18 ) /\ + ( ~x4 \/ x10 \/ x11 ) /\ + ( ~x18 \/ ~x19 \/ ~x20 ) /\ + ( x3 \/ ~x9 \/ x8 ) /\ + TRUE +OneSol == (~x1 /\ ~x2 /\ ~x3 /\ ~x4 /\ ~x5 /\ + ~x6 /\ x7 /\ x8 /\ ~x9 /\ ~x10 /\ + ~x11 /\ ~x12 /\ ~x13 /\ x14 /\ x15 (* /\ + x16 /\ ~x17/\ ~x18 /\ x19 /\ ~x20 *)) (* encode part of +first solution found by ProB *) +FullSol == (~x1 /\ ~x2 /\ ~x3 /\ ~x4 /\ ~x5 /\ + ~x6 /\ x7 /\ x8 /\ ~x9 /\ ~x10 /\ + ~x11 /\ ~x12 /\ ~x13 /\ x14 /\ x15 /\ + x16 /\ ~x17 /\ ~x18 /\ x19 /\ ~x20) (* encode first solution + found by ProB *) +Init == TypeInv /\ OneSol /\ Sol +DLK == 1=2 /\ x1'=x1 (* always deadlocks *) +Next == DLK + =======================</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=277#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-25 16:17:22 UTC + </span> + </div> + + + +<pre class="bz_comment_text">To compute the set of initial states from +your initial predicate + + TypeInv /\ OneSol /\ Sol + +TLC first finds all states satisfying TypeInv and then throws away ones +not satisfying OneSol or Sol. There are 2^20 states satisfying TypeInv, + which is more than TLC will handle. Currently, TLC will handle at most + 10^6 states; we intend to make that a settable parameter. However, the + parameter will have to be small enough so all the states will fit in +memory. + +Explicit-state and SAT-based model checking are inherently different and + can do different things. You have discovered one thing that SAT +solvers are better at. If you try running TLC on hundreds of machines, +you'll see what explicit-state model checking is better at. + +A number of years ago a preliminary version of a SAT-solver based model +checker for TLA+, called BTLC, was implemented as a summer project. It +was promising, but we have never found anyone to finish it.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=278">278</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLC reports error when asked to print a function whose domain is a Cartesian product</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows 7</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=278#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-02-29 19:16:27 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Having the Toolbox evaluate the expression + + [i \in (1..2) \X (1..2) |-> TRUE] + +causes TLC to report an error in the Java method + + public static tlc2.value.Value tlc2.module.TLC.PrintT(tlc2.value.Value) + +This seems to happen on any function whose domain is a Cartesian product.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=278#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-03-07 21:04:20 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This was caused by a NullPointerException +in tlc2/value/FcnLambdaValue.deepCopy(). Fixed by simply testing for a +null value and not performing the operation that the method was trying +to do if the value is null. + +This bug is mysterious because it was not present in the pre-tlc2 +version, and I don't think there have been any changes to the code since + then that would have caused it. Moreover, I think that a couple of +times when debugging the problem, the exception did not occur on the +input that was producing it. (But I may be mistaken about that.)</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=279">279</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLC bug caused by TLC's not preserving the semantics of CHOOSE</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>ASSIGNED + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows 7</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=182">Spec exhibiting the bug + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=183">Configuration file for running outside Toolbox + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=279#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-03-08 00:26:08 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Running TLC on the spec written by Tom +Rodeheffer that I will attach finds a deadlock (as it should) and then +produces the following error when trying to generate the error trace: + + Failed to recover the initial state from its fingerprint. + This is probably a TLC bug(2). + +The problem occurs because the value that TLC computes for a CHOOSE +depends on TLC's internal representation of its argument. To compute +the 2nd state of the trace, TLC sets the variables 'set' and 'fun' to S1 + and Ch(S1), respectively, where Ch(S1) equals CHOOSE of an expression +containing S1. Fingerprinting that state causes TLC to canonicalize +the representation of the value of 'set', changing its representation of + the value of S1. When TLC constructs the error trace, it must +re-execute the spec to get the states in the trace. When it tries to +compute the 2nd state of the trace, it uses the canonicalized +representation of S1, causing it to compute a different value of +variable 'set' than it did the first time, so it doesn't find a state +with the correct fingerprint as the next state of the trace. (Note that + the error message is misleading, since it's not the intiial state that +TLC fails to recover.) + +There seem to be two possible fixes. The first is to canonicalize the +argument of CHOOSE whenever it is evaluated. The second is to create a +separate deep copy of the state before fingerprinting it. The first +seems like the best solution, since I can't think of any practical case +in which this would cause performance problems. However, I will consult + with Yuan Yu before doing anything about this.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=279#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-03-08 00:27:59 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=182" name="attach_182" title="Spec exhibiting the bug">attachment 182</a> <a href="https://54.195.32.3/attachment.cgi?id=182&action=edit" title="Spec exhibiting the bug">[details]</a></span> +Spec exhibiting the bug</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=279#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-03-08 00:28:39 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=183" name="attach_183" title="Configuration file for running outside Toolbox">attachment 183</a> <a href="https://54.195.32.3/attachment.cgi?id=183&action=edit" title="Configuration file for running outside Toolbox">[details]</a></span> +Configuration file for running outside Toolbox</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=279#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-03-08 00:30:22 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Reassigning it to me.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=280">280</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">"Additional Definitions" entry being put in wrong part of MC.tla file</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4.2</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=280#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-03-17 21:05:22 UTC + </span> + </div> + + + +<pre class="bz_comment_text">A model's user-specified definitions are +being put in the MC.tla file after the definitions for the CONSTANT +parameters. This makes it impossible for the values substituted for +CONSTANT parameters to contain operators defined in those user-specified + definitions. The user-specified definitions should go immediately +after the EXTENDS statement in the MC.tla file.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=280#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-03-17 22:55:20 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The user-specified definitions should +actually be added to the MC.tla file after the section containing the +CONSTANT declarations for the model values (which come from declarations + on the Advanced Model page and from substitutions of a set of model +values for a declared CONSTANT) and before the section containing the +definitions that define new symbols equal to the values substituted for +CONSTANT parameters. The MC.tla file is written in the buildForLaunch +method in the TLCModelLaunchDelegate class. These two sections are +added to the file by the call of writer.addConstants, and the +user-specified definitions are added by the call of +writer.addFormulaList in that same class. Thus, the writer.addConstants + method needs to be broken into two separate methods with the +writer.addFormulaList call coming between them. + +It looks like the same change has to be made in the writeModelInfo +method of the TraceExplorerDelegate module.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=280#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-03-17 23:21:30 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Whoops, it's more complicated than I +thought. The Writer.addConstants method also adds definitions for the +SYMMETRY declarations for a CONSTANT instantiated with a symmetry set of + model values. Those definitions have to come after the definitions for + the values of CONSTANT parameters. + +It looks like the addConstants method should be broken into two pieces, +the first adding +a section containing the CONSTANT declarations for the model values and +the definitions for declared CONSTANTS that are instantiated by a set of + model values, and the second adding a section containing the +definitions for declared CONSTANTS that are instantiated by expressions +(ordinary values).</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=280#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-03-19 01:04:26 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Change made. TLC regression tests passed, as well as PlusCal regression tests.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=281">281</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Apparent race condition between saving spec and running TLC</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + WORKSFORME + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4.2</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows Vista</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=281#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-03-19 04:56:03 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I got the following anomalous behavior, +which was repeatable. However, when I closed the Toolbox and reran it, +the behavior disappeared. I am therefore going to submit this and then +immediately close the bug report, so there will be a record of this in +case it happens again. + +I am running TLC on a spec with no behavior spec, only evaluating a +constant expression. If I run TLC with the spec not saved, I get a +popup asking if I want to save it. I click OK, and one of three things +may happen. + +1. It runs TLC correctly. + +2. It pops up an error window saying something like the model can't be +checked because the spec is unparsed. If I click OK, it the proceeds to + run TLC. + +3. It runs TLC, but reports bogus errors in the expression I'm trying to + evaluate--possibly because it's reading a really old MC.tla file. If I + hit run again it sometimes gets another similar error, and it sometimes + runs TLC correctly. If I hit run a third time, it runs TLC correctly. + +The behavior is locally repeatable--that is, if one of these things +happens, I make a trivial modification to the spec and run TLC again, +the same thing probably happens. If I wait a while, I can get a +different behavior.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=281#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-03-19 04:57:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">As promised, I'm now closing the report.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=282">282</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">The F5 menu (Find Definition or Declaration) doesn't handle infix operator symbols properly.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows 7</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=282#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-03-28 23:47:46 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Typing into the F5 menu should restrict the + choices to ones whose prefix has been typed. However, this doesn't +work for the symbols ** and \succ, and presumably not for other symbols +that are not all letters or numbers.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=282#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-03-30 00:47:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">A trivial fix.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=283">283</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">java.lang.ClassFormatError: tlc2/util/Sort</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Steve Glaser <bugs></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + INVALID + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>lamport, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4.2</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows 7</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=283#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Steve Glaser</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-04-10 20:27:21 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Running on Windows 7 64 bit Enterprise, +trying to check my first model (OneBitClock). +On MacOS / Lion, this works perfectly. + +On Windows, I get the following in the User Output panel under "TLC +output generated by evaluating Print and PrintT expressions". + +java.lang.ClassFormatError: tlc2/util/Sort + at tlc2.tool.fp.DiskFPSet.flushTable(DiskFPSet.java:725) + at tlc2.tool.fp.DiskFPSet.checkFPs(DiskFPSet.java:932) + at tlc2.tool.ModelChecker.reportSuccess(ModelChecker.java:756) + at tlc2.tool.ModelChecker.modelCheck(ModelChecker.java:217) + at tlc2.TLC.process(TLC.java:661) + at tlc2.TLC.main(TLC.java:168) + +Model is: + +---------------------------- MODULE OneBitClock +---------------------------- +VARIABLE b + +Init1 == (b=0) \/ (b=1) + +Next1 == \/ /\ (b = 0) + /\ (b' = 1) + \/ /\ (b = 1) + /\ (b' = 0) + +============================================================================= +\* + Modification History +\* Last modified Tue Apr 10 10:52:12 PDT 2012 by sglaser +\* Created Mon Apr 09 20:04:20 PDT 2012 by sglaser + +Initial predicate is "Init1", Next prediate is "Next1", Invariant is "b +\in {0, 1}"</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=283#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-04-11 01:23:02 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The problem turned out to be corrupted files, and it went away when the Toolbox was downloaded again.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=284">284</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox not handling TLC error message properly.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows 7</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=284#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-04-24 23:23:45 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Create this spec + + VARIABLES F + Init == F \in BOOLEAN + Next == F' \in BOOLEAN + +Create a model that asks TLC to check the Property + + []<>[]F <=> <>[]F + +TLC produces this error message + +@!@!@STARTMSG 1000:1 @!@!@ +TLC threw the unexpected exception + java.lang.RuntimeException: @!@!@STARTMSG 2213:0 @!@!@ +TLC cannot handle the temporal formula line 14, col 1 to line 14, col 17 + of module MC +@!@!@ENDMSG 2213 @!@!@ +This was probably caused by an error in the spec or model. +See the TLC Console for clues to what happened. +@!@!@ENDMSG 1000 @!@!@ + +which causes the Toolbox to throw an exception. I thought this might be + a TLC bug for not starting message 2213:0 on a new line, but the +Toolbox throws the same exception even if the @!@!@STARTMSG 2213:0 @!@!@ + begins on a new line. The exception the Toolbox is throwing is: + +java.lang.IllegalArgumentException: Bug parsing the regions + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCAnalyzer.processTag(TagBasedTLCAnalyzer.java:189) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCAnalyzer.addTagEnd(TagBasedTLCAnalyzer.java:82) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:217) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:611) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:755) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:736) + + at +org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:721) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:796) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1191) + + at +org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1210) + + at +org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:324) + + at +org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.addIncrement(ParsingTLCOutputSink.java:47) + + at +org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:39) + + at +org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + + at +org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + + at java.lang.Thread.run(Unknown Source)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=284#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-04-24 23:26:54 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I should have mentioned that this happens +with one other error that TLC throws on a Property it can't check. I +imagine there are a whole bunch of TLC error reports that will generate +the same exception, which is thrown by a case that Simon decided not to +handle.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=284#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-04-25 01:23:45 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The problem turned out to be that in my +recent changes to make the miscellaneous EC.GENERAL class of error +messages more helpful, I inadvertently created a class of TLC nested +error message that the Toolbox's parser for TLC output was not expected. + This was an error message whose body consisted of: raw text followed +by an error message with BEGIN and END tags followed by raw text. The +error seems to be fixed by combining the second raw text item with the +first. The correction will appear in the next minor release.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=285">285</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox occasionally chooses old TLC version after software upgrade</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=185">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=285#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-05-21 12:36:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">A software upgrade can install a newer TLC +version into the Toolbox. This can lead to undefined behavior when model + checking, because the classpath might still refer to the classes of the + old model checker. Hence, the code needs to verify it only loads the +latest TLC model checker version installed by the upgrade.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=285#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-05-23 17:46:04 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to HEAD</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=285#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-05-23 17:46:06 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=185" name="attach_185" title="mylyn/context/zip">attachment 185</a> <a href="https://54.195.32.3/attachment.cgi?id=185&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=286">286</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Out of bounds array exception thrown when loading a spec</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + WORKSFORME + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows Vista</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=186">The Spec File + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=286#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-06-05 11:25:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When loading the spec that I will attach +when Bugzilla lets me, the Toolbox throws an exception and leaves the +editor in a state where, starting around line 160 and extending to the +next comment, it colors everything as a comment. This fixes itself when + the spec is modified and saved. Below is the relevant part of the +console log. + +!ENTRY org.eclipse.ui 4 4 2012-06-05 02:13:03.818 +!MESSAGE Plugin org.lamport.tla.toolbox, extension +org.eclipse.ui.perspectiveExtensions, id +toolbox.view.ToolboxWelcomeView: Attribute 'relative' not defined. This + attribute is required when relationship="left". + +!ENTRY org.eclipse.ui 4 4 2012-06-05 02:13:03.820 +!MESSAGE Unable to process element: view in perspective extension: null + +!ENTRY org.lamport.tla.toolbox 1 -1 2012-06-05 02:13:04.198 +!MESSAGE Spec build invoked on AtomicBakeryGInitialized ... + +!ENTRY org.lamport.tla.toolbox 1 -1 2012-06-05 02:13:08.568 +!MESSAGE Resulting status is: parsed +... build invocation finished. +Detailed state of 'BufferedDocumentScanner:' + fOffset= 760 + fBufferOffset= 27000 + fBufferLength= 760 + fRangeOffset= 0 + fRangeLength= 27760 +!ENTRY org.eclipse.core.resources 4 566 2012-06-05 02:13:10.121 +!MESSAGE An error occurred while traversing resources. +!STACK 0 +java.lang.ArrayIndexOutOfBoundsException: 1000 + at +org.lamport.tla.toolbox.editor.basic.util.BufferedDocumentScanner.read(BufferedDocumentScanner.java:106) + + at +org.lamport.tla.toolbox.editor.basic.TLAPartitionScanner.nextToken(TLAPartitionScanner.java:96) + + at +org.eclipse.jface.text.rules.FastPartitioner.documentChanged2(FastPartitioner.java:388) + + at +org.eclipse.jface.text.AbstractDocument.updateDocumentStructures(AbstractDocument.java:696) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:793) + + at +org.eclipse.jface.text.AbstractDocument.set(AbstractDocument.java:1237) + at +org.eclipse.core.internal.filebuffers.SynchronizableDocument.set(SynchronizableDocument.java:219) + + at +org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.setDocumentContent(ResourceTextFileBuffer.java:575) + + at +org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.initializeFileBufferContent(ResourceTextFileBuffer.java:286) + + at +org.eclipse.core.internal.filebuffers.ResourceFileBuffer.create(ResourceFileBuffer.java:245) + + at +org.eclipse.core.internal.filebuffers.TextFileBufferManager.connect(TextFileBufferManager.java:112) + + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.getDocument(PCalDetectingBuilder.java:119) + + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.visit(PCalDetectingBuilder.java:75) + + at +org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:112) + at +org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:64) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127) + + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:74) + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:110) + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:94) + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder.build(PCalDetectingBuilder.java:56) + + at +org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) + + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) + + at +org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) + + at +org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) + + at +org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) + + at +org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) + + at +org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +!ENTRY org.eclipse.core.resources 4 2 2012-06-05 02:13:10.208 +!MESSAGE Problems occurred when invoking code from plug-in: +"org.eclipse.core.resources". +!STACK 1 +org.eclipse.core.internal.resources.ResourceException(/AtomicBakeryGInitialized)[566]: + java.lang.ArrayIndexOutOfBoundsException: 1000 + at +org.lamport.tla.toolbox.editor.basic.util.BufferedDocumentScanner.read(BufferedDocumentScanner.java:106) + + at +org.lamport.tla.toolbox.editor.basic.TLAPartitionScanner.nextToken(TLAPartitionScanner.java:96) + + at +org.eclipse.jface.text.rules.FastPartitioner.documentChanged2(FastPartitioner.java:388) + + at +org.eclipse.jface.text.AbstractDocument.updateDocumentStructures(AbstractDocument.java:696) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:793) + + at +org.eclipse.jface.text.AbstractDocument.set(AbstractDocument.java:1237) + at +org.eclipse.core.internal.filebuffers.SynchronizableDocument.set(SynchronizableDocument.java:219) + + at +org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.setDocumentContent(ResourceTextFileBuffer.java:575) + + at +org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.initializeFileBufferContent(ResourceTextFileBuffer.java:286) + + at +org.eclipse.core.internal.filebuffers.ResourceFileBuffer.create(ResourceFileBuffer.java:245) + + at +org.eclipse.core.internal.filebuffers.TextFileBufferManager.connect(TextFileBufferManager.java:112) + + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.getDocument(PCalDetectingBuilder.java:119) + + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.visit(PCalDetectingBuilder.java:75) + + at +org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:112) + at +org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:64) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127) + + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:74) + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:110) + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:94) + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder.build(PCalDetectingBuilder.java:56) + + at +org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) + + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) + + at +org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) + + at +org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) + + at +org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) + + at +org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) + + at +org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +!SUBENTRY 1 org.eclipse.core.resources 4 566 2012-06-05 02:13:10.251 +!MESSAGE An error occurred while traversing resources. +!STACK 0 +java.lang.ArrayIndexOutOfBoundsException: 1000 + at +org.lamport.tla.toolbox.editor.basic.util.BufferedDocumentScanner.read(BufferedDocumentScanner.java:106) + + at +org.lamport.tla.toolbox.editor.basic.TLAPartitionScanner.nextToken(TLAPartitionScanner.java:96) + + at +org.eclipse.jface.text.rules.FastPartitioner.documentChanged2(FastPartitioner.java:388) + + at +org.eclipse.jface.text.AbstractDocument.updateDocumentStructures(AbstractDocument.java:696) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:793) + + at +org.eclipse.jface.text.AbstractDocument.set(AbstractDocument.java:1237) + at +org.eclipse.core.internal.filebuffers.SynchronizableDocument.set(SynchronizableDocument.java:219) + + at +org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.setDocumentContent(ResourceTextFileBuffer.java:575) + + at +org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.initializeFileBufferContent(ResourceTextFileBuffer.java:286) + + at +org.eclipse.core.internal.filebuffers.ResourceFileBuffer.create(ResourceFileBuffer.java:245) + + at +org.eclipse.core.internal.filebuffers.TextFileBufferManager.connect(TextFileBufferManager.java:112) + + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.getDocument(PCalDetectingBuilder.java:119) + + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.visit(PCalDetectingBuilder.java:75) + + at +org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:112) + at +org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:64) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127) + + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:74) + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:110) + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:94) + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder.build(PCalDetectingBuilder.java:56) + + at +org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) + + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) + + at +org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) + + at +org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) + + at +org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) + + at +org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) + + at +org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +!SUBENTRY 1 org.eclipse.core.resources 4 566 2012-06-05 02:13:10.272 +!MESSAGE An error occurred while traversing resources. +!STACK 0 +java.lang.ArrayIndexOutOfBoundsException: 1000 + at +org.lamport.tla.toolbox.editor.basic.util.BufferedDocumentScanner.read(BufferedDocumentScanner.java:106) + + at +org.lamport.tla.toolbox.editor.basic.TLAPartitionScanner.nextToken(TLAPartitionScanner.java:96) + + at +org.eclipse.jface.text.rules.FastPartitioner.documentChanged2(FastPartitioner.java:388) + + at +org.eclipse.jface.text.AbstractDocument.updateDocumentStructures(AbstractDocument.java:696) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:793) + + at +org.eclipse.jface.text.AbstractDocument.set(AbstractDocument.java:1237) + at +org.eclipse.core.internal.filebuffers.SynchronizableDocument.set(SynchronizableDocument.java:219) + + at +org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.setDocumentContent(ResourceTextFileBuffer.java:575) + + at +org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.initializeFileBufferContent(ResourceTextFileBuffer.java:286) + + at +org.eclipse.core.internal.filebuffers.ResourceFileBuffer.create(ResourceFileBuffer.java:245) + + at +org.eclipse.core.internal.filebuffers.TextFileBufferManager.connect(TextFileBufferManager.java:112) + + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.getDocument(PCalDetectingBuilder.java:119) + + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.visit(PCalDetectingBuilder.java:75) + + at +org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:112) + at +org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:64) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127) + + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:74) + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:110) + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:94) + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder.build(PCalDetectingBuilder.java:56) + + at +org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) + + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) + + at +org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) + + at +org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) + + at +org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) + + at +org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) + + at +org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +!ENTRY org.eclipse.core.resources 4 75 2012-06-05 02:13:10.291 +!MESSAGE Errors occurred during the build. +!SUBENTRY 1 org.lamport.tla.toolbox 4 75 2012-06-05 02:13:10.291 +!MESSAGE Errors running builder 'PCal Algorthim Definition Detecting +Builder' on project 'AtomicBakeryGInitialized'. +!STACK 1 +org.eclipse.core.internal.resources.ResourceException(/AtomicBakeryGInitialized)[566]: + java.lang.ArrayIndexOutOfBoundsException: 1000 + at +org.lamport.tla.toolbox.editor.basic.util.BufferedDocumentScanner.read(BufferedDocumentScanner.java:106) + + at +org.lamport.tla.toolbox.editor.basic.TLAPartitionScanner.nextToken(TLAPartitionScanner.java:96) + + at +org.eclipse.jface.text.rules.FastPartitioner.documentChanged2(FastPartitioner.java:388) + + at +org.eclipse.jface.text.AbstractDocument.updateDocumentStructures(AbstractDocument.java:696) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:793) + + at +org.eclipse.jface.text.AbstractDocument.set(AbstractDocument.java:1237) + at +org.eclipse.core.internal.filebuffers.SynchronizableDocument.set(SynchronizableDocument.java:219) + + at +org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.setDocumentContent(ResourceTextFileBuffer.java:575) + + at +org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.initializeFileBufferContent(ResourceTextFileBuffer.java:286) + + at +org.eclipse.core.internal.filebuffers.ResourceFileBuffer.create(ResourceFileBuffer.java:245) + + at +org.eclipse.core.internal.filebuffers.TextFileBufferManager.connect(TextFileBufferManager.java:112) + + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.getDocument(PCalDetectingBuilder.java:119) + + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.visit(PCalDetectingBuilder.java:75) + + at +org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:112) + at +org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:64) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127) + + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:74) + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:110) + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:94) + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder.build(PCalDetectingBuilder.java:56) + + at +org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) + + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) + + at +org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) + + at +org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) + + at +org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) + + at +org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) + + at +org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +!SUBENTRY 2 org.eclipse.core.resources 4 566 2012-06-05 02:13:10.291 +!MESSAGE An error occurred while traversing resources. +!STACK 0 +java.lang.ArrayIndexOutOfBoundsException: 1000 + at +org.lamport.tla.toolbox.editor.basic.util.BufferedDocumentScanner.read(BufferedDocumentScanner.java:106) + + at +org.lamport.tla.toolbox.editor.basic.TLAPartitionScanner.nextToken(TLAPartitionScanner.java:96) + + at +org.eclipse.jface.text.rules.FastPartitioner.documentChanged2(FastPartitioner.java:388) + + at +org.eclipse.jface.text.AbstractDocument.updateDocumentStructures(AbstractDocument.java:696) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:793) + + at +org.eclipse.jface.text.AbstractDocument.set(AbstractDocument.java:1237) + at +org.eclipse.core.internal.filebuffers.SynchronizableDocument.set(SynchronizableDocument.java:219) + + at +org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.setDocumentContent(ResourceTextFileBuffer.java:575) + + at +org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.initializeFileBufferContent(ResourceTextFileBuffer.java:286) + + at +org.eclipse.core.internal.filebuffers.ResourceFileBuffer.create(ResourceFileBuffer.java:245) + + at +org.eclipse.core.internal.filebuffers.TextFileBufferManager.connect(TextFileBufferManager.java:112) + + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.getDocument(PCalDetectingBuilder.java:119) + + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.visit(PCalDetectingBuilder.java:75) + + at +org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:112) + at +org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:64) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127) + + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:74) + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:110) + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:94) + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder.build(PCalDetectingBuilder.java:56) + + at +org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) + + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) + + at +org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) + + at +org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) + + at +org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) + + at +org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) + + at +org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +!SUBENTRY 1 org.eclipse.core.resources 4 566 2012-06-05 02:13:10.292 +!MESSAGE An error occurred while traversing resources. +!STACK 0 +java.lang.ArrayIndexOutOfBoundsException: 1000 + at +org.lamport.tla.toolbox.editor.basic.util.BufferedDocumentScanner.read(BufferedDocumentScanner.java:106) + + at +org.lamport.tla.toolbox.editor.basic.TLAPartitionScanner.nextToken(TLAPartitionScanner.java:96) + + at +org.eclipse.jface.text.rules.FastPartitioner.documentChanged2(FastPartitioner.java:388) + + at +org.eclipse.jface.text.AbstractDocument.updateDocumentStructures(AbstractDocument.java:696) + + at +org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:793) + + at +org.eclipse.jface.text.AbstractDocument.set(AbstractDocument.java:1237) + at +org.eclipse.core.internal.filebuffers.SynchronizableDocument.set(SynchronizableDocument.java:219) + + at +org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.setDocumentContent(ResourceTextFileBuffer.java:575) + + at +org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.initializeFileBufferContent(ResourceTextFileBuffer.java:286) + + at +org.eclipse.core.internal.filebuffers.ResourceFileBuffer.create(ResourceFileBuffer.java:245) + + at +org.eclipse.core.internal.filebuffers.TextFileBufferManager.connect(TextFileBufferManager.java:112) + + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.getDocument(PCalDetectingBuilder.java:119) + + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.visit(PCalDetectingBuilder.java:75) + + at +org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:112) + at +org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:64) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86) + + at +org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127) + + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:74) + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:110) + at +org.eclipse.core.internal.resources.Resource.accept(Resource.java:94) + at +org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder.build(PCalDetectingBuilder.java:56) + + at +org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) + + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) + + at +org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) + + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) + + at +org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) + + at +org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) + + at +org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) + + at +org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +!ENTRY org.lamport.tla.toolbox 1 -1 2012-06-05 02:13:10.384 +!MESSAGE Added a parse result listener.There are now 1 listeners. + +!ENTRY org.lamport.tla.toolbox 1 -1 2012-06-05 02:14:10.304 +!MESSAGE Spec build invoked on AtomicBakeryGInitialized ... + +!ENTRY org.lamport.tla.toolbox 1 -1 2012-06-05 02:14:14.880 +!MESSAGE Resulting status is: parsed +... build invocation finished. + +!ENTRY org.lamport.tla.toolbox 1 -1 2012-06-05 02:15:54.097 +!MESSAGE Removed a parse result listener.There are now 0 listeners. + +!ENTRY org.eclipse.ui 4 4 2012-06-05 02:15:54.231 +!MESSAGE Plugin org.lamport.tla.toolbox, extension +org.eclipse.ui.perspectiveExtensions, id +toolbox.view.ToolboxWelcomeView: Attribute 'relative' not defined. This + attribute is required when relationship="left". + +!ENTRY org.eclipse.ui 4 4 2012-06-05 02:15:54.238 +!MESSAGE Unable to process element: view in perspective extension: null + +!ENTRY org.lamport.tla.toolbox 1 -1 2012-06-05 02:16:01.042 +!MESSAGE Spec build invoked on AtomicBakeryGInitialized ... + +!ENTRY org.lamport.tla.toolbox 1 -1 2012-06-05 02:16:04.170 +!MESSAGE Resulting status is: parsed +... build invocation finished. + +!ENTRY org.lamport.tla.toolbox 1 -1 2012-06-05 02:16:04.573 +!MESSAGE Added a parse result listener.There are now 1 listeners.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=286#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-06-05 11:27:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=186" name="attach_186" title="The Spec File">attachment 186</a> <a href="https://54.195.32.3/attachment.cgi?id=186&action=edit" title="The Spec File">[details]</a></span> +The Spec File</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=286#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-06-06 14:01:05 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Hi Leslie, + +I cannot reproduce the behavior (exception) with the steps outlined in <a href="https://54.195.32.3/show_bug.cgi?id=286#c1">comment #1</a>. No matter what I try, it (the spec) always loads fine (on Linux/64bit). + +Markus</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=286#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-06-06 14:34:07 UTC + </span> + </div> + + + +<pre class="bz_comment_text">After closing the Toolbox, rebooting my +system, getting a good night's sleep, and cleaning the screen, the error + has disappeared for me too. Just another of the imponderables of +Eclipse.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=287">287</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Issues when TLC reports, "The variable x was changed while it is specified as UNCHANGED at %1"</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Chris Newcombe <chris.newcombe></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=287#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Chris Newcombe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-06-10 16:48:30 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This is Version 1.4.3.b of 24 April 2012 +and includes: + - SANY Version 2.1 of 20 July 2011 + - TLC Version 2.05 of 24 April 2012 + - PlusCal Version 1.8 of 30 March 2012 + - TLATeX Version .9 of 19 September 2007 + +Running on Windows 7 32-bit + +I'm writing a specification with about 10 variables and lots of complex +nested if/then rules about when various subsets of the variables change. + Each branch of each if/then contains an conjunct for UNCHANGED +<<some list of vars>>. There's little commonality between +them. + +If we make a mistake writing one of the UNCHANGED conjuncts, TLC will +report an error like this:, + + The variable q_ingress_south was changed while it is specified as +UNCHANGED at %1 + +There are 2 problems: + + - The error doesn't report the line number (it literally reports +"%1") + - TLC doesn't stop when it reports the error, so we don't see the +actions and states that caused it. + +So to find the cause of the errors, we have to do a 'binary search' by +commenting out actions and parts of actions, and re-running the model +checker to see if the error still happens. This is very tedious and +takes quite a lot of time. + +Please could the above problem be fixed? + +thanks, + +Chris</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=287#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-06-10 17:11:17 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This bug was fixed on 18 May 2012. The fix will appear in the next release.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=288">288</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">FPSetManager reports negative distinct states due to int overflow</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=187">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=288#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-06-25 18:41:14 UTC + </span> + </div> + + + +<pre class="bz_comment_text">FPSetManager reports negative distinct +states due to a 2^31 int overflow in +tlc2.tool.distributed.FPSetManager.size(). The method implementation +incorrectly uses an int variable to store an intermediate result.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=288#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-06-25 18:42:37 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fix released to repo</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=288#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-06-25 18:42:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=187" name="attach_187" title="mylyn/context/zip">attachment 187</a> <a href="https://54.195.32.3/attachment.cgi?id=187&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=289">289</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">apparent TLC DiskFPSet out of memory when maxTblCnt is Integer MAX_VALUE</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Tom Rodeheffer <tomr></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA Tools</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows 7</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=289#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tom Rodeheffer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-07-06 00:48:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I was running TLC 2.05 on a machine with +128 GB of physical memory. The Java heap size was set to 117 GB +(command line option -Xmx117955m) and the TLC fpbits option was set to +0. + +I do not know what the toolbox uses for fpmem when invoking TLC, but +assuming that TLC takes the default of fpMemSize = -1, +TLCRuntime.getInstance().getFPMemSize would turn this into 0.25 * +Runtime.getRuntime().maxMemory(). Now I don’t know for sure what that +last routine does, but I assume it returns the maximum Java heap size. +This would cause fpMemSize to be 29488 MB. + +Then ModelChecker calls FPSet.getFPSet(fpBits, fpMemSizeInBytes). +FPSet.getFPSet converts from fpMemSizeInBytes to fpMemSizeInFPs by +dividing by the size of a long, which would result in fpMemSizeInFPs = +3686 M. + +To get its maxMemCnt, DiskFPSet divides its maxInMemoryCapacity by its +AuxiliaryStorageRequirement, which it has set at 2.5. So maxMemCnt = +1474 M. This results in computing logMaxMemCnt = 31. (Note that the +computation of logMaxMemCnt rounds up.) + +Since logMaxMemCnt = 31, the truncation logic in the DiskFPSet +constructor gives us maxTblCnt = Integer.MAX_VALUE. + + +Anyway, my TLC job ran for many hours never calling DiskFPSet.flushTable + until finally it reached Integer.MAX_VALUE distinct fingerprints. I +know that it never called flushTable because the MC.fp file was zero +bytes long. I know that the number of distinct fingerprints was near +Integer.MAX_VALUE because the last progress report on the console gave a + number of distinct states found that was getting close to +Integer.MAX_VALUE. + +Then my TLC job died with a Java "Out of Memory" exception. This error +was reproducible: I ran the job a second time and (many hours later) got + the same error. + + +I suspect that the call new long[this.tblCnt] in DiskFPSet.flushTable +caused Java to raise its "Out of Memory" exception. Although *why* it +would do so is a mystery, since it only needed 16 GB and presumably it +still had plenty of room on its heap, since it was only at a commit size + of 71 GB and its heap was supposed to be 117 GB. + +However, perhaps Java does not like to create an array that large.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=289#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-07-10 15:45:48 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Hi Tom, + +platform says 64bit, but is this also true for the JVM that you use? + +Btw. in Java a 2D array is actually an array of array objects. Not a +simple matrix like in C. Thus you have to add 12+4 bytes for each +first-level row for the object header and the length of the nested +array. Assuming tblCnt get close to Integer.MAX_VALUE you end up with +significant overhead.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=289#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-07-11 12:01:45 UTC + </span> + </div> + + + +<pre class="bz_comment_text">For the record, here is Tom's response: + +"...the answer is, yes, I was using a 64bit JVM."</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=289#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-10-19 09:51:57 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Memory allocated for DiskFPSets has been +changed to prevent it from exceeding the allocation limit. This should +put an end to OOMs. + +For the space overhead observed, new DiskFPSet implementations show +better characteristics.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=290">290</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLC getFPSet and MultiFPSet disagree on storage unit</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Tom Rodeheffer <tomr></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA Tools</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>bugzilla.tlaplus.net + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=290#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tom Rodeheffer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-07-06 01:02:19 UTC + </span> + </div> + + + +<pre class="bz_comment_text">TLC version 2.05. + +FPSet.getFPSet() takes its fpMemSize parameter in bytes. When there is +no custom factory and fpBits > 0, getFPSet invokes the MultiFPSet +constructor with an fpMemSize parameter in FPs (having divided by the +size of a long, i.e. 8). + +The MultiFPSet constructor divides its fpMemSize by the number of +subsidiary fingerprint sets, and calls FPSet.getFPSet to create each of +them. However, the MultiFPSet constructor fails to convert from FPs +back to bytes, as expected by FPSet.getFPSet. + + +The result of this bug is that only 1/8th of the specified fingerprint +memory is allocated when fpBits > 0. + +One easy fix to this bug would be to change the line in FPSet.getFPSet +which currently reads + + set = new MultiFPSet(fpBits, fpMemSizeInFPs); + +to read instead + + set = new MultiFPSet(fpBits, fpMemSizeInBytes);</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=290#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-07-07 10:28:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed in HEAD as suggest in <a href="https://54.195.32.3/show_bug.cgi?id=290#c0">comment #0</a></pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=291">291</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLC MultiFPSet computes size as int</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Tom Rodeheffer <tomr></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA Tools</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>bugzilla.tlaplus.net + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=291#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tom Rodeheffer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-07-06 01:36:09 UTC + </span> + </div> + + + +<pre class="bz_comment_text">TLC version 2.05. + +When using fpbits > 0, assuming no custom factory, the top-level +FPSet is a MultiFPSet. + +In TLC's statistics summary or in a progress report, when it prints the +number of distinct states found, the value it prints comes from +theFPSet.size(). + +Note that FPSet.size() is declared to return a long, so that a correct +number of fingerprints can be returned for models that have 2**31 or +more distinct states. + +For MultiFPSet, the implementation of size() just sums up the sizes of +each of its subsidiary fingerprint sets. Unfortunately, the variable +"sum" that MultiFPSet.size uses to accumulate the sum is declared as an +*int*. + +This means that when using fpbits > 0, the number of distinct states +is reported incorrectly for models that have 2**31 or more distinct +states. + + +An easy fix for this bug is to replace the line in MultiFPSet.size that +reads + + int sum = 0; + +with a line that reads + + long sum = 0;</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=291#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-07-06 09:36:59 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Thx, I have fixed this separately already.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=292">292</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">PlusCal macro expansion clobbers local variables</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>michael.deardeuff</td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>lamport, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Mac OS</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=292#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard">michael.deardeuff +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-08-09 07:59:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text">PlusCal macro expansion clobbers local +variables of the same name. + + +With the given macro + + macro SendUDP(from, to, msg) \* has parameter named msg + begin + udp[channel(from, to)] := udp[channel(from, to)] \cup {msg}; + end macro + + +I'd expect this line + + \* has local variable named msg which is *not* passed as parameter +to macro + SendUDP(self, {PrevNode(self, msg.newConfig)}, [type |-> +"listen"]); + +to compile to + + \* the local variable msg stays intact + udp' = [udp EXCEPT + ![channel(self, ({PrevNode(self, msg.newConfig)}))] = + udp[channel(self, ({PrevNode(self, msg.newConfig)}))] +\cup {([type |-> "listen"])}] + + +but what I get instead is + + \* the local variable msg is replaced with the macro's idea of "msg" + udp' = [udp EXCEPT + ![channel(self, ({PrevNode(self, ([type |-> +"listen"]).newConfig)}))] = + udp[channel(self, ({PrevNode(self, ([type |-> +"listen"]).newConfig)}))] \cup {([type |-> "listen"])}] + +Notice how the local variable msg got replaced with the value of msg +according to the macro's point of view, even though 'msg' was assigned +to some other value. + +Naming the last parameter of the macro something else (newMsg, for +example) produces the expected behavior. + + + +Tool versions, as copied from About on the TLAToolbox + +This is Version 1.4.3.c of 24 May 2012 and includes: + - SANY Version 2.1 of 20 July 2011 + - TLC Version 2.05 of 18 May 2012 + - PlusCal Version 1.8 of 4 May 2012 + - TLATeX Version .9 of 19 September 2007</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=292#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-08-10 03:26:55 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The substitution of arguments for macro +parameters in the body of the macro is done one argument at a time, +instead of "simultaneously" for all arguments. The fix is a simple +matter of reprogramming the method substituteForAll(Vector, Vector, +boolean) in tlatools/src/pcal/TLAExpr.java. It will be done in the +fullness of time.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=292#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-08-11 03:40:27 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The fix will appear in the next public release, which should be within a week or three.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=293">293</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Checking liveness failed with java.io.IOException: Negative seek offsetjava.io.IOException</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Chris Newcombe <chris.newcombe></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Linux</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=293#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Chris Newcombe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-10-14 18:20:05 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Hi Markus, Leslie, + +Remember last year that I kept hitting ‘negative seek offset’ exceptions + when checking safety on huge state-spaces? You guys fixed them all. + +I just started checking liveness for the first time, and I just hit a +similar error: + +The error occurred when TLC was checking liveness. +The exception was a java.io.IOException: Negative seek +offsetjava.io.IOException: Negative seek offset + at java.io.RandomAccessFile.seek(Native Method) + at +tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:212) + + at tlc2.tool.liveness.DiskGraph.getNode(DiskGraph.java:145) + at tlc2.tool.liveness.DiskGraph.getPath(DiskGraph.java:309) + at tlc2.tool.liveness.LiveWorker.printTrace(LiveWorker.java:521) + at tlc2.tool.liveness.LiveWorker.checkComponent(LiveWorker.java:290) + at tlc2.tool.liveness.LiveWorker.checkSccs(LiveWorker.java:119) + at tlc2.tool.liveness.LiveWorker.run(LiveWorker.java:613) + +(I’ve pasted a longer piece of the TLC console log at the end of this +email.) + +I’m using Markus’ branch as of Friday October 12th. As this is a +liveness issue, I suspect that this would happen with the ‘mainline’ +version too. +(I am not adding any extra JVM command-line parameters, so I’m using the + default configuration.) + +wget <a href="http://tla.msr-inria.inria.fr/kuppe/memopt/products/TLAToolbox-1.4.3.f-linux.gtk.x86_64.zip">http://tla.msr-inria.inria.fr/kuppe/memopt/products/TLAToolbox-1.4.3.f-linux.gtk.x86_64.zip</a> + +I’m running on a x86_64 Ubuntu 12 (Precise Pangolin) machine. +The machine has 60+ GB of ram. I'm giving 93% (55730 mb) to TLC. + +In this model I’m only checking liveness, not invariants. I’m not +using a state constraint, but the state-space should still be finite as +I’m setting various CONSTANTS to be finite sets. + +It only took 15 minutes to hit this error. + +Last time we hit "negative seek offset" errors, one of the issues was +that fingerprint files were bigger than 2GB. But this time all +file-sizes are small: + +$ ls -lrt * +-rw-rw-r-- 1 ubuntu ubuntu 126944 Oct 14 05:39 GroverAbstractLSNs.tla +-rw-rw-r-- 1 ubuntu ubuntu 992 Oct 14 05:39 MC.tla +-rw-rw-r-- 1 ubuntu ubuntu 638 Oct 14 05:39 MC.cfg +-rw-rw-r-- 1 ubuntu ubuntu 18952 Oct 14 05:54 MC.out +-rw-rw-r-- 1 ubuntu ubuntu 18952 Oct 14 05:54 MC_TE.out + +12-10-14-05-39-33: +total 396856 +-rw-rw-r-- 1 ubuntu ubuntu 0 Oct 14 05:39 MC.fp +-rw-rw-r-- 1 ubuntu ubuntu 91196 Oct 14 05:39 0 +-rw-rw-r-- 1 ubuntu ubuntu 89143 Oct 14 05:40 1 +-rw-rw-r-- 1 ubuntu ubuntu 91392 Oct 14 05:40 2 +-rw-rw-r-- 1 ubuntu ubuntu 89971 Oct 14 05:40 3 +-rw-rw-r-- 1 ubuntu ubuntu 90594 Oct 14 05:40 4 +-rw-rw-r-- 1 ubuntu ubuntu 86240 Oct 14 05:40 5 +-rw-rw-r-- 1 ubuntu ubuntu 84231 Oct 14 05:40 6 +-rw-rw-r-- 1 ubuntu ubuntu 84507 Oct 14 05:41 7 +-rw-rw-r-- 1 ubuntu ubuntu 90005 Oct 14 05:41 8 +-rw-rw-r-- 1 ubuntu ubuntu 93901 Oct 14 05:41 9 +-rw-rw-r-- 1 ubuntu ubuntu 93858 Oct 14 05:41 10 +-rw-rw-r-- 1 ubuntu ubuntu 85201 Oct 14 05:41 11 +-rw-rw-r-- 1 ubuntu ubuntu 88321 Oct 14 05:41 12 +-rw-rw-r-- 1 ubuntu ubuntu 92285 Oct 14 05:42 13 +-rw-rw-r-- 1 ubuntu ubuntu 88822 Oct 14 05:42 14 +-rw-rw-r-- 1 ubuntu ubuntu 89402 Oct 14 05:42 15 +-rw-rw-r-- 1 ubuntu ubuntu 88027 Oct 14 05:42 16 +-rw-rw-r-- 1 ubuntu ubuntu 85350 Oct 14 05:42 17 +-rw-rw-r-- 1 ubuntu ubuntu 84216 Oct 14 05:43 18 +-rw-rw-r-- 1 ubuntu ubuntu 90258 Oct 14 05:43 19 +-rw-rw-r-- 1 ubuntu ubuntu 85403 Oct 14 05:43 20 +-rw-rw-r-- 1 ubuntu ubuntu 89137 Oct 14 05:43 21 +-rw-rw-r-- 1 ubuntu ubuntu 85349 Oct 14 05:43 22 +-rw-rw-r-- 1 ubuntu ubuntu 85298 Oct 14 05:43 23 +-rw-rw-r-- 1 ubuntu ubuntu 85461 Oct 14 05:43 24 +-rw-rw-r-- 1 ubuntu ubuntu 86292 Oct 14 05:43 25 +-rw-rw-r-- 1 ubuntu ubuntu 91264 Oct 14 05:44 26 +-rw-rw-r-- 1 ubuntu ubuntu 86471 Oct 14 05:44 27 +-rw-rw-r-- 1 ubuntu ubuntu 93909 Oct 14 05:44 28 +-rw-rw-r-- 1 ubuntu ubuntu 91947 Oct 14 05:44 29 +-rw-rw-r-- 1 ubuntu ubuntu 91771 Oct 14 05:44 30 +-rw-rw-r-- 1 ubuntu ubuntu 107299 Oct 14 05:45 31 +-rw-rw-r-- 1 ubuntu ubuntu 96079 Oct 14 05:45 32 +-rw-rw-r-- 1 ubuntu ubuntu 89403 Oct 14 05:45 33 +-rw-rw-r-- 1 ubuntu ubuntu 92515 Oct 14 05:45 34 +-rw-rw-r-- 1 ubuntu ubuntu 88907 Oct 14 05:45 35 +-rw-rw-r-- 1 ubuntu ubuntu 91888 Oct 14 05:45 36 +-rw-rw-r-- 1 ubuntu ubuntu 95905 Oct 14 05:46 37 +-rw-rw-r-- 1 ubuntu ubuntu 89007 Oct 14 05:46 38 +-rw-rw-r-- 1 ubuntu ubuntu 93472 Oct 14 05:46 39 +-rw-rw-r-- 1 ubuntu ubuntu 92524 Oct 14 05:46 40 +-rw-rw-r-- 1 ubuntu ubuntu 92667 Oct 14 05:47 41 +-rw-rw-r-- 1 ubuntu ubuntu 92455 Oct 14 05:47 42 +-rw-rw-r-- 1 ubuntu ubuntu 92121 Oct 14 05:47 43 +-rw-rw-r-- 1 ubuntu ubuntu 97391 Oct 14 05:47 44 +-rw-rw-r-- 1 ubuntu ubuntu 91336 Oct 14 05:47 45 +-rw-rw-r-- 1 ubuntu ubuntu 92986 Oct 14 05:48 46 +-rw-rw-r-- 1 ubuntu ubuntu 92133 Oct 14 05:48 47 +-rw-rw-r-- 1 ubuntu ubuntu 87972 Oct 14 05:48 48 +-rw-rw-r-- 1 ubuntu ubuntu 91020 Oct 14 05:48 49 +-rw-rw-r-- 1 ubuntu ubuntu 89989 Oct 14 05:48 50 +-rw-rw-r-- 1 ubuntu ubuntu 92158 Oct 14 05:48 51 +-rw-rw-r-- 1 ubuntu ubuntu 87648 Oct 14 05:49 52 +-rw-rw-r-- 1 ubuntu ubuntu 89554 Oct 14 05:49 53 +-rw-rw-r-- 1 ubuntu ubuntu 90250 Oct 14 05:49 54 +-rw-rw-r-- 1 ubuntu ubuntu 89254 Oct 14 05:49 55 +-rw-rw-r-- 1 ubuntu ubuntu 97444 Oct 14 05:49 56 +-rw-rw-r-- 1 ubuntu ubuntu 94853 Oct 14 05:49 57 +-rw-rw-r-- 1 ubuntu ubuntu 94462 Oct 14 05:50 58 +-rw-rw-r-- 1 ubuntu ubuntu 91076 Oct 14 05:50 59 +-rw-rw-r-- 1 ubuntu ubuntu 91081 Oct 14 05:50 60 +-rw-rw-r-- 1 ubuntu ubuntu 92830 Oct 14 05:50 61 +-rw-rw-r-- 1 ubuntu ubuntu 94807 Oct 14 05:50 62 +-rw-rw-r-- 1 ubuntu ubuntu 94674 Oct 14 05:51 63 +-rw-rw-r-- 1 ubuntu ubuntu 90176 Oct 14 05:51 64 +-rw-rw-r-- 1 ubuntu ubuntu 91334 Oct 14 05:51 65 +-rw-rw-r-- 1 ubuntu ubuntu 92464 Oct 14 05:51 66 +-rw-rw-r-- 1 ubuntu ubuntu 89912 Oct 14 05:51 67 +-rw-rw-r-- 1 ubuntu ubuntu 91776 Oct 14 05:51 68 +-rw-rw-r-- 1 ubuntu ubuntu 91597 Oct 14 05:52 69 +-rw-rw-r-- 1 ubuntu ubuntu 92623 Oct 14 05:52 70 +-rw-rw-r-- 1 ubuntu ubuntu 90377 Oct 14 05:52 71 +-rw-rw-r-- 1 ubuntu ubuntu 93229 Oct 14 05:52 72 +-rw-rw-r-- 1 ubuntu ubuntu 90329 Oct 14 05:52 73 +-rw-rw-r-- 1 ubuntu ubuntu 92656 Oct 14 05:52 74 +-rw-rw-r-- 1 ubuntu ubuntu 92673 Oct 14 05:53 75 +-rw-rw-r-- 1 ubuntu ubuntu 98171 Oct 14 05:53 76 +-rw-rw-r-- 1 ubuntu ubuntu 92580 Oct 14 05:53 77 +-rw-rw-r-- 1 ubuntu ubuntu 92234 Oct 14 05:53 78 +-rw-rw-r-- 1 ubuntu ubuntu 92532 Oct 14 05:53 79 +-rw-rw-r-- 1 ubuntu ubuntu 96655 Oct 14 05:54 80 +-rw-rw-r-- 1 ubuntu ubuntu 96008 Oct 14 05:54 81 +-rw-rw-r-- 1 ubuntu ubuntu 92763 Oct 14 05:54 82 +-rw-rw-r-- 1 ubuntu ubuntu 6141600 Oct 14 05:54 ptrs_6 +-rw-rw-r-- 1 ubuntu ubuntu 5982832 Oct 14 05:54 ptrs_5 +-rw-rw-r-- 1 ubuntu ubuntu 4045280 Oct 14 05:54 ptrs_4 +-rw-rw-r-- 1 ubuntu ubuntu 5661856 Oct 14 05:54 ptrs_3 +-rw-rw-r-- 1 ubuntu ubuntu 6908384 Oct 14 05:54 ptrs_2 +-rw-rw-r-- 1 ubuntu ubuntu 7586496 Oct 14 05:54 ptrs_1 +-rw-rw-r-- 1 ubuntu ubuntu 7934336 Oct 14 05:54 ptrs_0 +-rw-rw-r-- 1 ubuntu ubuntu 4045280 Oct 14 05:54 ptrs_9 +-rw-rw-r-- 1 ubuntu ubuntu 5015744 Oct 14 05:54 ptrs_8 +-rw-rw-r-- 1 ubuntu ubuntu 5775968 Oct 14 05:54 ptrs_7 +-rw-rw-r-- 1 ubuntu ubuntu 21089904 Oct 14 05:54 nodes_9 +-rw-rw-r-- 1 ubuntu ubuntu 21089904 Oct 14 05:54 nodes_4 +-rw-rw-r-- 1 ubuntu ubuntu 28015740 Oct 14 05:54 nodes_8 +-rw-rw-r-- 1 ubuntu ubuntu 35775612 Oct 14 05:54 nodes_7 +-rw-rw-r-- 1 ubuntu ubuntu 30279168 Oct 14 05:54 nodes_3 +-rw-rw-r-- 1 ubuntu ubuntu 38965260 Oct 14 05:54 nodes_6 +-rw-rw-r-- 1 ubuntu ubuntu 36855300 Oct 14 05:54 nodes_5 +-rw-rw-r-- 1 ubuntu ubuntu 36989040 Oct 14 05:54 nodes_2 +-rw-rw-r-- 1 ubuntu ubuntu 40312068 Oct 14 05:54 nodes_1 +-rw-rw-r-- 1 ubuntu ubuntu 41744676 Oct 14 05:54 nodes_0 +-rw-rw-r-- 1 ubuntu ubuntu 8314680 Oct 14 05:54 MC.st + + +A longer piece of the tail of the TLC log (i.e. this includes the end of + the log) + +… snip … +Progress(12) at 2012-10-14 05:53:37: 1175984 states generated (86,041 +s/min), 656319 distinct states found (44,641 ds/min), 420203 states left + on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2192:0 @!@!@ +Checking temporal properties for the current state space... +@!@!@ENDMSG 2192 @!@!@ +@!@!@STARTMSG 2116:1 @!@!@ +Temporal properties were violated. + +@!@!@ENDMSG 2116 @!@!@ +@!@!@STARTMSG 2264:1 @!@!@ +The following behavior constitutes a counter-example: + +@!@!@ENDMSG 2264 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +TLC threw an unexpected exception. +This was probably caused by an error in the spec or model. +The error occurred when TLC was checking liveness. +The exception was a java.io.IOException: Negative seek +offsetjava.io.IOException: Negative seek offset + at java.io.RandomAccessFile.seek(Native Method) + at +tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:212) + + at tlc2.tool.liveness.DiskGraph.getNode(DiskGraph.java:145) + at tlc2.tool.liveness.DiskGraph.getPath(DiskGraph.java:309) + at tlc2.tool.liveness.LiveWorker.printTrace(LiveWorker.java:521) + at tlc2.tool.liveness.LiveWorker.checkComponent(LiveWorker.java:290) + at tlc2.tool.liveness.LiveWorker.checkSccs(LiveWorker.java:119) + at tlc2.tool.liveness.LiveWorker.run(LiveWorker.java:613) + +@!@!@ENDMSG 1000 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2012-10-14 05:54:40 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1205, col 16 to line 1205, col 59 of module GroverAbstractLSNs: +600344 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1206, col 28 to line 1206, col 37 of module GroverAbstractLSNs: +600344 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1206, col 39 to line 1206, col 55 of module GroverAbstractLSNs: +600344 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1206, col 57 to line 1206, col 67 of module GroverAbstractLSNs: +600344 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1254, col 16 to line 1254, col 58 of module GroverAbstractLSNs: +183985 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1255, col 28 to line 1255, col 37 of module GroverAbstractLSNs: +183985 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1255, col 39 to line 1255, col 55 of module GroverAbstractLSNs: +183985 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1255, col 57 to line 1255, col 67 of module GroverAbstractLSNs: +183985 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1275, col 8 to line 1275, col 35 of module GroverAbstractLSNs: +9379 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1305, col 14 to line 1305, col 105 of module GroverAbstractLSNs: +9379 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1307, col 14 to line 1309, col 79 of module GroverAbstractLSNs: +9379 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1310, col 14 to line 1310, col 55 of module GroverAbstractLSNs: +9379 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1430, col 13 to line 1430, col 84 of module GroverAbstractLSNs: +1251836 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1431, col 13 to line 1431, col 62 of module GroverAbstractLSNs: +1251836 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 278, col 108 to line 278, col 121 of module GroverAbstractLSNs: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 278, col 14 to line 278, col 23 of module GroverAbstractLSNs: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 278, col 26 to line 278, col 35 of module GroverAbstractLSNs: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 278, col 38 to line 278, col 48 of module GroverAbstractLSNs: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 278, col 51 to line 278, col 67 of module GroverAbstractLSNs: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 278, col 70 to line 278, col 105 of module GroverAbstractLSNs: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 918, col 15 to line 924, col 69 of module GroverAbstractLSNs: +458128 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 925, col 15 to line 925, col 56 of module GroverAbstractLSNs: +458128 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 926, col 27 to line 926, col 36 of module GroverAbstractLSNs: +458128 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 926, col 38 to line 926, col 48 of module GroverAbstractLSNs: +458128 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(12) at 2012-10-14 05:54:40: 1251837 states generated (82,864 +s/min), 692890 distinct states found (45,865 ds/min), 440060 states left + on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +1251837 states generated, 692890 distinct states found, 440060 states +left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished. (2012-10-14 05:54:40) +@!@!@ENDMSG 2186 @!@!@</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=293#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2015-03-20 15:50:22 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Studying the code it occurred to me that +besides an obvious long overflow, it could also be the case that the +DiskGraph does not contain the node requested (in which case it returns +-1). Pity that the exception does not show the actual negative value.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=293#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2015-03-27 14:53:37 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The illustrated behavior graph [1] as part of Codeplex <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Add module-editor line width preference" href="https://54.195.32.3/show_bug.cgi?id=8">bug #8</a> + shows an init state (137.0) without a self loop. + +Technically this means that the state has been added to the behavior +graph via DiskGraph#addInitNode(..) only. It has not been visisted +subsequently (which would mean it gets added with +DiskGraph#addNextNode(..)) again, which is the case for all the other +init states in this behavior graph. + +Such an init state's file pointer is always -1, which would result in +the negative seek offset IOExecption reported by this bug. + +[1] <a href="https://www.codeplex.com/Download/AttachmentDownload.ashx?ProjectName=tlaplus&WorkItemId=8&FileAttachmentId=1441621">https://www.codeplex.com/Download/AttachmentDownload.ashx?ProjectName=tlaplus&WorkItemId=8&FileAttachmentId=1441621</a></pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=293#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2015-03-31 13:51:24 UTC + </span> + </div> + + + +<pre class="bz_comment_text">(In reply to Markus Alexander Kuppe from <a href="https://54.195.32.3/show_bug.cgi?id=293#c2">comment #2</a>) +<span class="quote">> The illustrated behavior graph [1] as part of Codeplex <a class="bz_bug_link + bz_status_RESOLVED bz_closed" title="RESOLVED FIXED - Add module-editor line width preference" href="https://54.195.32.3/show_bug.cgi?id=8">bug #8</a> shows an init +> state (137.0) without a self loop. +> +> Technically this means that the state has been added to the behavior graph +> via DiskGraph#addInitNode(..) only. It has not been visisted subsequently +> (which would mean it gets added with DiskGraph#addNextNode(..)) again, which +> is the case for all the other init states in this behavior graph. +> +> Such an init state's file pointer is always -1, which would result in the +> negative seek offset IOExecption reported by this bug. +> +> [1] +> <a href="https://www.codeplex.com/Download/AttachmentDownload">https://www.codeplex.com/Download/AttachmentDownload</a>. +> ashx?ProjectName=tlaplus&WorkItemId=8&FileAttachmentId=1441621</span> + + +This analysis is incorrect in that the state 137.0 has indeed been added + via DiskGraph#addNextNode() but due to its tableau index being 0 not +equipped with a self loop. The same applies to state 504.0 that is also +missing a self loop. + +The tableau particle with index 0 is: + +{<>/\ (x=2) + /\ ([]-(x=1)), + ()<>/\ (x=2) + /\ ([]-(x=1))} + +and the corresponding states to 137 and 504 are: + +/\ b = FALSE +/\ x = 0 + +and + +/\ b = FALSE +/\ x = 2</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=293#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2015-04-07 19:55:46 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The mku-liveness branch now contains a fix +[1] for the IOException. + +The IOException is throw when a model has one or more successor-less +initial states AND a counterexample has to be returned due to a +violation of a liveness property. This makes it a rare condition which +is probably why we haven't seen more reports. + +The path construction (DiskGraph#getPath(long)) starts its +(breadth-first) search from all initial states. If only one of the +initial states has no successors, its disk file pointer will be -1 and +subsequently cause the IOException. The pointer value is -1 because the +initial state has been added to the DiskGraph as an initial state only +but never "upgraded" to be a state with successors. The code writes an +initial state only to disk, if it is upgraded. + +The fix is to simply skip such initial states during the path +construction. Since the initial state has no successors, it won't be the + end of any path (except for the path with length one starting and +ending at the very initial state. This case is handled separately.). + + +[1] <a href="http://tlaplus.codeplex.com/SourceControl/changeset/070bcee9436bfac34527e6752730e86ccf4b1f56">http://tlaplus.codeplex.com/SourceControl/changeset/070bcee9436bfac34527e6752730e86ccf4b1f56</a></pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=294">294</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLC crash: ArrayIndexOutOfBoundsException: -1073741821 in tlc2.util.Sort</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Chris Newcombe <chris.newcombe></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_blocker">blocker + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=188">mylyn/context/zip + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=189">For +the record, the unit tests that reproduces the ArrayIndexOutOfBounds +exception and performance-compares with java.util.Arrays#sort + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=190">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=294#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Chris Newcombe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-10-16 18:21:48 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I was running Markus’ memopt branch, as of +around October 12th 2012. +I was running in single-machine mode, not distributed. The machine is +x86_64 running Ubuntu 12. It has 60+ GB of RAM and I gave TLC about +55GB. + +But Markus says this is likely an existing bug in TLC: + >>It appears to be caused by an int overflow in TLC's +quicksort implementation when the size of the array gets close to +Integer.MAX_VALUE. %) + +I’ve listed the number and sizes of on-disk files at the end of this +email. +The machine has 60+ GB ram, with ~ 55 GB given to TLC. I am not +passing any extra args to the JVM command-line. + +The progress stats (see snip of the tail of the TLC log) show that TLC +didn’t discover any new states in the minute or so before the crash. +It went from finding 3 million states per minute to finding 0 states per + minute, and crashed shortly after that. + +The exception was a java.lang.ArrayIndexOutOfBoundsException: +-1073741821java.lang.ArrayIndexOutOfBoundsException: -1073741821 + at tlc2.util.Sort.quickSort(Sort.java:191) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.LongArray(Sort.java:182) + at +tlc2.tool.fp.LSBDiskFPSet$LSBFlusher.prepareTable(LSBDiskFPSet.java:65) + at +tlc2.tool.fp.DiskFPSet$Flusher.flushTable(DiskFPSet.java:1209) + at tlc2.tool.fp.DiskFPSet.put(DiskFPSet.java:400) + at tlc2.tool.ModelChecker.doNext(ModelChecker.java:438) + at tlc2.tool.Worker.run(Worker.java:75) + +Snip of the tail of the TLC log: + +Progress(16) at 2012-10-14 23:21:32: 1962435307 states generated +(4,979,084 s/min), 1067311637 distinct states found (2,598,569 ds/min), +797699699 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(16) at 2012-10-14 23:22:32: 1971144096 states generated +(8,708,789 s/min), 1071850754 distinct states found (4,539,117 ds/min), +801017556 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(16) at 2012-10-14 23:23:32: 1974837733 states generated +(3,693,637 s/min), 1073741838 distinct states found (1,891,084 ds/min), +802392525 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(16) at 2012-10-14 23:24:32: 1974837733 states generated (0 +s/min), 1073741838 distinct states found (0 ds/min), 802392525 states +left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +… snip coverage statistics +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +TLC threw an unexpected exception. +This was probably caused by an error in the spec or model. +See the TLC Console for clues to what happened. +The exception was a java.lang.ArrayIndexOutOfBoundsException: +-1073741821java.lang.ArrayIndexOutOfBoundsException: -1073741821 + at tlc2.util.Sort.quickSort(Sort.java:191) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.LongArray(Sort.java:182) + at +tlc2.tool.fp.LSBDiskFPSet$LSBFlusher.prepareTable(LSBDiskFPSet.java:65) + at +tlc2.tool.fp.DiskFPSet$Flusher.flushTable(DiskFPSet.java:1209) + at tlc2.tool.fp.DiskFPSet.put(DiskFPSet.java:400) + at tlc2.tool.ModelChecker.doNext(ModelChecker.java:438) + at tlc2.tool.Worker.run(Worker.java:75) + + +$ ls –lrt * + +-rw-rw-r-- 1 ubuntu ubuntu 2493 Oct 14 19:23 MC.tla +-rw-rw-r-- 1 ubuntu ubuntu 964 Oct 14 19:23 MC.cfg +-rw-rw-r-- 1 ubuntu ubuntu 278614 Oct 14 23:26 MC.out +-rw-rw-r-- 1 ubuntu ubuntu 278614 Oct 14 23:26 MC_TE.out + +There are a lot of files in this subdirectory of the above directory: + +$ ls -lrt 12-10-14-19-23-41/ | wc -l +99700 + +Here are the most interesting ones: + +12-10-14-19-23-41: +total 26266404 +-rw-rw-r-- 1 ubuntu ubuntu 0 Oct 14 19:23 MC.fp +-rw-rw-r-- 1 ubuntu ubuntu 125957 Oct 14 20:21 31377 +-rw-rw-r-- 1 ubuntu ubuntu 126518 Oct 14 20:21 31378 +-rw-rw-r-- 1 ubuntu ubuntu 125278 Oct 14 20:21 31379 +… snip a lot of files… +-rw-rw-r-- 1 ubuntu ubuntu 127395 Oct 14 23:22 131068 +-rw-rw-r-- 1 ubuntu ubuntu 126343 Oct 14 23:22 131069 +-rw-rw-r-- 1 ubuntu ubuntu 126384 Oct 14 23:22 131070 +-rw-rw-r-- 1 ubuntu ubuntu 14291272184 Oct 14 23:23 MC.st</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=294#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-10-17 10:23:24 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Local tests show that this is indeed caused + by a bug in tlc2.util.Sort when the length of the array to be sorted +gets close to Integer.MAX_VALUE. Since (basic) performance comparison +between tlc2.util.Sort and java.util.Arrays show the JDK implementation +come out as the winner, I am going to replace tlc2.util.Sort with +java.util.Arrays in tlc2.tool.fp.LSBDiskFPSet.LSBFlusher.prepareTable(), + tlc2.tool.fp.DiskFPSet.completeRecovery() and +tlc2.tool.fp.DiskFPSet.recoverFP(long). +This fix only applies to my memopt branch. trunk probably does not +exhibit this behavior anyway as it tends to crash with OOM before +hitting the overflow in Sort. + +I am going to leave this bug open for now though. Dead code in +tlc2.util.BigSet and tlc2.util.SetOfLong still makes use of +tlc2.util.Sort. I would suggest to replace tlc2.util.Sort with +java.util.Arrays generally, but will wait for Leslie to make a decision.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=294#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-10-17 10:23:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=188" name="attach_188" title="mylyn/context/zip">attachment 188</a> <a href="https://54.195.32.3/attachment.cgi?id=188&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=294#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-10-22 11:01:15 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=189" name="attach_189" title="For the record, the unit tests that reproduces the ArrayIndexOutOfBounds exception and performance-compares with java.util.Arrays#sort">attachment 189</a> <a href="https://54.195.32.3/attachment.cgi?id=189&action=edit" title="For the record, the unit tests that reproduces the ArrayIndexOutOfBounds exception and performance-compares with java.util.Arrays#sort">[details]</a></span> +For the record, the unit tests that reproduces the ArrayIndexOutOfBounds + exception and performance-compares with java.util.Arrays#sort</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=294#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-10-23 11:09:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Replaced all tlc2.util.Sort references with + java.util.Array. (java.util.Arrays - at least down to Java 1.5 - sorts +longs (primitives) directly without any Object conversion.</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=294#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-10-23 11:09:13 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=190" name="attach_190" title="mylyn/context/zip">attachment 190</a> <a href="https://54.195.32.3/attachment.cgi?id=190&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=295">295</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Suggestion for more control over checkpoints</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Chris Newcombe <chris.newcombe></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Markus Alexander Kuppe <bugzilla.tlaplus.net></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.5</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=295#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Chris Newcombe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-11-25 23:06:37 UTC + </span> + </div> + + + +<pre class="bz_comment_text">In addition to being able to completely +disable checkpoints with '-checkpoint 0', it would be great to have an +option to disable periodic checkpoints, but write a checkpoint if an +error is encountered. + +As mentioned previously, I don’t need periodic checkpoints as a +fault-tolerance measure, and the cost is prohibitive with billions of +states. +But after an error occurs, it is sometimes possible to fix a formula in a + way that does not invalidate the existing behaviors and states. + +E.g. This just happened to me because my spec hit a deadlock that was +due to a missing case in my ‘legitimate termination’ condition. I fixed + the condition but had to restart model-checking from scratch. + +It would be important to be able to disable writing even this +checkpoint, as for huge state/behavior spaces, writing even a single +checkpoint may take too long. + +thanks, + +Chris</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=295#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-11-26 11:28:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">FWIW while working on distributed TLC, a +JMX method to forcefully create a checkpoint has been implemented. In +order to satisfy this use case, I would thus be sufficient to prompt the + user with a y/n before terminating the TLC process. The yes case is +then just a matter of calling the JMX method. + +Btw. the JMX method can either be triggered from inside the TLC process +or from the Toolbox.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=296">296</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLAPM doesn't handle complex nested EXCEPT expressions</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Stephan Merz <stephan.merz></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>lamport, Stephan.Merz + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=191">TLA+ module exhibiting the bug + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=296#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Stephan Merz</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-12-06 10:12:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=191" name="attach_191" title="TLA+ module exhibiting the bug">attachment 191</a> <a href="https://54.195.32.3/attachment.cgi?id=191&action=edit" title="TLA+ module exhibiting the bug">[details]</a></span> +TLA+ module exhibiting the bug + +The PM doesn't correctly translate EXCEPT expressions of the form + + [ [arr EXCEPT ![x][y] = foo] EXCEPT ![u][v] = bar] + +where a nested array access appears on the left-hand side of an EXCEPT. + +The corresponding expressions generated (at least) for Zenon and Isabelle are +syntactically not well-formed and lead to parse errors.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=296#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-01-09 11:35:51 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Hi Stephan, + +before I close the bug, I wanted to make sure this is the intended +normalization of the expression. It looks the right one for me and I +have added the corresponding test case which passes successfully now. + +[[arr EXCEPT ![x] = [arr[x] EXCEPT ![y] = foo]] EXCEPT ![u] = [[arr +EXCEPT ![x] = [arr[x] EXCEPT ![y] = foo]][u] EXCEPT ![v] = bar]] + +If this is the intended behaviour, please notify me so I can close the +bug. + +Best regards, +Tomer</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=296#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-01-09 13:00:08 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Normalization was approved by Stephan.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=296#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Stephan Merz</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-01-10 09:42:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Hi Tomer, + +yes, this looks like it is the right expansion. + +Thanks, +Stephan + +<span class="quote">> Hi Stephan, +> +> before I close the bug, I wanted to make sure this is the intended +> normalization of the expression. It looks the right one for me and I have added +> the corresponding test case which passes successfully now. +> +> [[arr EXCEPT ![x] = [arr[x] EXCEPT ![y] = foo]] EXCEPT ![u] = [[arr EXCEPT ![x] +> = [arr[x] EXCEPT ![y] = foo]][u] EXCEPT ![v] = bar]] +> +> If this is the intended behaviour, please notify me so I can close the bug. +> +> Best regards, +> Tomer</span></pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=297">297</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Flattening of modules generates duplicate copies</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Tomer <tomer.libal></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=297#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-12-07 15:25:52 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When the PM flatten the modules dependencies, it might add the same submodules several times. For example for: + A + / \ + B C + \ / + D + +it will add A twice as it computes recursively the flattened version of B and C. + +The above occurs also on simpler cases</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=297#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-12-07 15:28:48 UTC + </span> + </div> + + + +<pre class="bz_comment_text">First set a testing environment (choose +between Kaputt and OUnit) and add a specification tests for the required + behavior of the specific function +module/m_dep.schedule + +The required behavior is to load only one instance of each module in the + flattened version of the target modules (the ones specified in the +command line).</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=297#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-12-28 12:15:10 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Two tests were added to m_dep.mlt to assert the problem. +The issue was fixed by Damien and passes the tests</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=298">298</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Soundness bug due to error in translating EXCEPT</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Stephan Merz <stephan.merz></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_critical">critical + </td> +<th class="rightcell">CC:</th> + <td>lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=298#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Stephan Merz</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-12-09 20:51:19 UTC + </span> + </div> + + + +<pre class="bz_comment_text">A very weird bug in the translation of +EXCEPT can lead to unsoundness. Specifically, EXCEPT expressions with +multiple right-hand sides are translated incompletely. + +The PM omits the updates to record component "b" in the following +theorem, making Isabelle succeed in the proof of the truncated +expression. + +LEMMA ASSUME NEW foo, NEW bar, + foo = [a |-> 1, b |-> 2, c |-> 3], + bar = [a |-> 2, b |-> 2, c |-> 2] + PROVE [foo EXCEPT !.a = 3, + !.b = 4, + !.c = 1] + = [bar EXCEPT !.c = 1, + !.b = 5, + !.a = 3] +OBVIOUS + +The translation should indeed yield the following, which is not proved. + +LEMMA ASSUME NEW foo, NEW bar, + foo = [a |-> 1, b |-> 2, c |-> 3], + bar = [a |-> 2, b |-> 2, c |-> 2] + PROVE [[[foo EXCEPT !.a = 3] + EXCEPT !.b = 4] + EXCEPT !.c = 1] + = [[[bar EXCEPT !.c = 1] + EXCEPT !.b = 5] + EXCEPT !.a = 3] +OBVIOUS + +First observed with TLAPM 1.1.2 (svn rev. 30034).</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=298#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-01-09 11:44:16 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This bug (and others) were fixed with the help of Kaustuv and Damien. +Tests t1-t5 in e_elab.mlt pass successfully now.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=299">299</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLAPS does not accept "_" in a proof-step name.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=299#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-12-19 20:26:11 UTC + </span> + </div> + + + +<pre class="bz_comment_text">TLA+ syntax allows “_” to be used in a step name, as in <3>a_x . TLAPS doesn’t accept it. + +I don’t think anyone needs to delay their holiday plans to fix this.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=300">300</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">SMT backend loops on proof obligation</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Stephan Merz <stephan.merz></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>hernan.vanzetto</td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>lamport, tomer.libal + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=300#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Stephan Merz</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2012-12-31 16:01:30 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Launch tlapm on the attached module for lines 184-185 from the Toolbox or the command line, like so: + + $ tlapm --toolbox 184 185 TwoProcsOneBitMutexNoDeadlock.tla + +The PM goes into what seems like an infinite loop. The console output is: + +---------------------------------------------------------------------------------- +(* TLAPM version 1.1.2 (commit 30027) *) +(* launched at 2012-12-31 15:51:13 with command line: *) +(* tlapm --toolbox 184 185 TwoProcsOneBitMutexNoDeadlock.tla *) + +(* loading fingerprints in "TwoProcsOneBitMutexNoDeadlock.tlaps/fingerprints" *) +@!!BEGIN +@!!type:obligation +@!!id:60 +@!!loc:185:19:185:21 +@!!status:to be proved +@!!END + +@!!BEGIN +@!!type:obligation +@!!id:61 +@!!loc:185:22:185:24 +@!!status:to be proved +@!!END + +@!!BEGIN +@!!type:obligation +@!!id:62 +@!!loc:185:26:185:30 +@!!status:to be proved +@!!END + +@!!BEGIN +@!!type:obligation +@!!id:63 +@!!loc:185:32:185:36 +@!!status:to be proved +@!!END + +@!!BEGIN +@!!type:obligation +@!!id:64 +@!!loc:185:38:185:42 +@!!status:to be proved +@!!END + +@!!BEGIN +@!!type:obligation +@!!id:65 +@!!loc:185:44:185:48 +@!!status:to be proved +@!!END + +@!!BEGIN +@!!type:obligationsnumber +@!!count:6 +@!!END + +check_trivial = false for 60 +before expand_defs +after expand_defs +after normalize +---------------------------------------------------------------------------------- + +After interrupting one gets the following additional output: + +<span class="quote">>>> Type assignments:</span> + Next :: * + Procs :: SetOf(Int) + SafetyInv :: * + TypeInv :: * + i :: Int + pc :: (* -> *) + self :: Int + vars :: * + x :: (* -> *) +<span class="quote">>>> Unexpanded operators: SafetyInv, vars, Procs, TypeInv, Next</span> + +---------------------------------------------------------------------------------- + +Remove + "SMT" and Zenon proves the step immediately, so the problem is with the + SMT backend (the Z3 and Yices backends have the same problem). + +NB: Trying to interrupt the prover from the Toolbox has no effect, the +process must be killed from the shell. This is a separate bug (or +enhancement request). + +Bug reported by Chris Newcombe and confirmed by Stephan.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=300#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-01-02 11:21:53 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Hi Hernan, + +I re-assign the bug per Stephan's comment. +I will create another bug assigned to me with regard to terminating threads from the toolbox and will cc you.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=301">301</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">SMT backend doesn't handle CASE properly</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Stephan Merz <stephan.merz></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>hernan.vanzetto</td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>lamport, tomer.libal + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=301#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Stephan Merz</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-01-02 10:39:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Below is a TLA+ module (submitted by Chris +Newcombe) in which the initial condition contains a CASE expression for +which the SMT backend throws an exception: + +----- +<span class="quote">>>> Type assignments:</span> + Procs :: SetOf(*) + flag :: (* -> Bool) + pc :: (Int -> Str) + turn :: Int +<span class="quote">>>> Unexpanded operators: Procs</span> + +File "/Users/merz/projects/INRIA-MSR/examples/PetersonTwoProcs.tla", line 172, characters 11-15: +Error: Cannot infer type of +<<CASE >> +File "/Users/merz/projects/INRIA-MSR/examples/PetersonTwoProcs.tla", line 172, characters 11-15: +Error: SMT backend translation error. Cannot process the expression +CASE + +[SMT] Error: unknown exception in + \/ IF 0 = 1 THEN FALSE ELSE (CASE ) = "ncs0" +\/ IF 0 = 1 THEN FALSE ELSE (CASE ) = "e0a" +\/ IF 0 = 1 THEN FALSE ELSE (CASE ) = "e0b" +\/ IF 0 = 1 THEN FALSE ELSE (CASE ) = "e0c" +\/ IF 0 = 1 THEN FALSE ELSE (CASE ) = "cs0" +@!!BEGIN +@!!type:obligation +@!!id:14 +@!!loc:173:13:173:15 +@!!status:failed +@!!prover:smt3 +@!!meth:time-limit: 5 +@!!reason:SMT backend: wrong conclusion +@!!already:false +@!!obl: +ASSUME NEW VARIABLE flag, + NEW VARIABLE turn, + NEW VARIABLE pc, + flag = [p \in Procs |-> FALSE], + turn = 0, + pc = + [self \in {0} \union {1} |-> + CASE self = 0 -> "ncs0" + [] self = 1 -> "ncs1"] +PROVE pc[0] \in {"ncs0", "e0a", "e0b", "e0c", "cs0"} +----- + +Interestingly, the second arm of the CASE doesn't throw the exception. + +-------------------------- MODULE PetersonTwoProcs -------------------------- +EXTENDS TLC, TLAPS + +Procs == {0,1} + +(* +--algorithm PetersonTwoProcs { + +variables + flag = [p \in Procs |-> FALSE], + turn = 0; + +process (p0 = 0) { +ncs0: while (TRUE) { + skip; +e0a: flag[0] := TRUE; +e0b: turn := 1; +e0c: await ~(flag[1] /\ turn = 1); +cs0: skip; + flag[0] := FALSE; + } +} + +process (p1 = 1) { +ncs1: while (TRUE) { + skip; +e1a: flag[1] := TRUE; +e1b: turn := 0; +e1c: await ~(flag[0] = TRUE /\ turn = 0); +cs1: skip; + flag[1] := FALSE; + } +} + +} \* end algorithm +*) + + +\* BEGIN TRANSLATION +VARIABLES flag, turn, pc + +vars == << flag, turn, pc >> + +ProcSet == {0} \cup {1} + +Init == (* Global variables *) + /\ flag = [p \in Procs |-> FALSE] + /\ turn = 0 + /\ pc = [self \in ProcSet |-> CASE self = 0 -> "ncs0" + [] self = 1 -> "ncs1"] +(* Manual re-write of last conjunct above, to work with proofs: + /\ pc = [self \in ProcSet |-> IF self = 0 THEN "ncs0" + ELSE "ncs1"] +*) + +ncs0 == /\ pc[0] = "ncs0" + /\ TRUE + /\ pc' = [pc EXCEPT ![0] = "e0a"] + /\ UNCHANGED << flag, turn >> + +e0a == /\ pc[0] = "e0a" + /\ flag' = [flag EXCEPT ![0] = TRUE] + /\ pc' = [pc EXCEPT ![0] = "e0b"] + /\ turn' = turn + +e0b == /\ pc[0] = "e0b" + /\ turn' = 1 + /\ pc' = [pc EXCEPT ![0] = "e0c"] + /\ flag' = flag + +e0c == /\ pc[0] = "e0c" + /\ ~(flag[1] /\ turn = 1) + /\ pc' = [pc EXCEPT ![0] = "cs0"] + /\ UNCHANGED << flag, turn >> + +cs0 == /\ pc[0] = "cs0" + /\ TRUE + /\ flag' = [flag EXCEPT ![0] = FALSE] + /\ pc' = [pc EXCEPT ![0] = "ncs0"] + /\ turn' = turn + +p0 == ncs0 \/ e0a \/ e0b \/ e0c \/ cs0 + +ncs1 == /\ pc[1] = "ncs1" + /\ TRUE + /\ pc' = [pc EXCEPT ![1] = "e1a"] + /\ UNCHANGED << flag, turn >> + +e1a == /\ pc[1] = "e1a" + /\ flag' = [flag EXCEPT ![1] = TRUE] + /\ pc' = [pc EXCEPT ![1] = "e1b"] + /\ turn' = turn + +e1b == /\ pc[1] = "e1b" + /\ turn' = 0 + /\ pc' = [pc EXCEPT ![1] = "e1c"] + /\ flag' = flag + +e1c == /\ pc[1] = "e1c" + /\ ~(flag[0] = TRUE /\ turn = 0) + /\ pc' = [pc EXCEPT ![1] = "cs1"] + /\ UNCHANGED << flag, turn >> + +cs1 == /\ pc[1] = "cs1" + /\ TRUE + /\ flag' = [flag EXCEPT ![1] = FALSE] + /\ pc' = [pc EXCEPT ![1] = "ncs1"] + /\ turn' = turn + +p1 == ncs1 \/ e1a \/ e1b \/ e1c \/ cs1 + +Next == p0 \/ p1 + +Spec == Init /\ [][Next]_vars + +\* END TRANSLATION + + +InCS(i) == pc[i] = "cs" +p0Labels == {"ncs0", "e0a", "e0b", "e0c", "cs0"} +p1Labels == {"ncs1", "e1a", "e1b", "e1c", "cs1"} + +TypeInv == + /\ flag \in [Procs -> BOOLEAN] + /\ turn \in Procs + /\ pc \in [ProcSet -> p0Labels \union p1Labels] + /\ pc[0] \in p0Labels + /\ pc[1] \in p1Labels + +MutexInv == ~(InCS(0) /\ InCS(1)) + +\* Not yet inductive +InductiveInv == + /\ TypeInv + /\ MutexInv + + +USE DEF ProcSet + +Range(f) == {f[x] : x \in DOMAIN f} + +THEOREM Spec => []MutexInv + +<1>1. Init => InductiveInv +(* If I change the definition of Init generated by PlusCal to + /\ pc = [self \in ProcSet |-> IF self = 0 THEN "ncs0" + ELSE "ncs1"] + then this leaf-proof works: + BY Z3 DEF Init, InductiveInv, TypeInv, Procs, p0Labels, p1Labels, MutexInv, InCS + or the following proof also works: +*) + <2> SUFFICES ASSUME Init + PROVE InductiveInv + OBVIOUS + <2>1. TypeInv + <3>1. flag \in [Procs -> BOOLEAN] + BY DEF Init, Procs \** SMT works + <3>2. turn \in Procs + BY DEF Init, Procs \** SMT works + <3>3. pc \in [ProcSet -> p0Labels \union p1Labels] + BY DEF Init, p0Labels, p1Labels \** SMT fails +(* + <4>1. DOMAIN pc = ProcSet + BY Z3 DEF Init, p0Labels, p1Labels + <4>2. Range(pc) = {"ncs0", "ncs1"} + BY Z3 DEF Init, Range + <4>3. {"ncs0", "ncs1"} \subseteq p0Labels \union p1Labels + BY DEF p0Labels, p1Labels + <4> QED + BY Z3, <4>1, <4>2, <4>3 DEF Init, Range, p0Labels, p1Labels +*) + <3>4. pc[0] \in p0Labels + BY DEF Init, p0Labels \** SMT fails + <3>5. pc[1] \in p1Labels + BY DEF Init, p1Labels \** SMT works (?!) + <3>6. QED + BY <3>1, <3>2, <3>3, <3>4, <3>5 DEF TypeInv + <2>2. MutexInv + BY Z3 DEF Init, InductiveInv, TypeInv, Procs, p0Labels, p1Labels, MutexInv, InCS + <2>3. QED + BY <2>1, <2>2 DEF InductiveInv + +<1>2. InductiveInv /\ [Next]_vars => InductiveInv' + +<1>3. InductiveInv => MutexInv + BY DEF InductiveInv, MutexInv + +<1> QED + OMITTED \* BY <1>1, <1>2, <1>3 and rule INV1 of TLA + + +=============================================================================</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=301#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-01-02 11:42:29 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Hi Hernán, + +Per Stephan's request, I re-assign this bug to you as well. In case you +think that the problem is in the tlapm part and not in the smt-backend +part, please re-assign it to me.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=302">302</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Pressing cancel in the toolbox does not interrupt the SMT backend</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Tomer <tomer.libal></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>hernan.vanzetto, lamport, Stephan.Merz + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=302#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-01-02 11:49:05 UTC + </span> + </div> + + + +<pre class="bz_comment_text"></pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=302#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-01-02 11:52:09 UTC + </span> + </div> + + + +<pre class="bz_comment_text">[I am sorry for the partial bug report. It was sent by mistake] + +Pressing "Cancel" grays out the button, but doesn't actually kill the PM process. + +This can be tested on the example from <a class="bz_bug_link + bz_status_NEW " title="NEW - SMT backend loops on proof obligation" href="https://54.195.32.3/show_bug.cgi?id=300">bug 300</a>.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=303">303</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">An improvement to the Visitor pattern</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Tomer <tomer.libal></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>damien.doligez, lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=303#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-01-09 11:46:51 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Right now the map Visitor visits every node + and in order to override we must override the visiting function (expr). + + +It is less powerful but safer to separate the visiting from the creation + of the expressions so we will need to override only the creation of the + specific element (EXCEPT in this case). This can be achieved by either: +1) supplying the visitor with a factory method for expressions which +overrides a default factory method that creates the expressions without +any action. +2) calling a specific create (i.e. create_except) after traversing the +arguments of the expr. Then we need to override only this method in +order to normalize the expression.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=304">304</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Module dependencies not resolved correctly for external modules with standard modules names</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Tomer <tomer.libal></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=304#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-01-16 13:26:46 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When tlapm loads a module which depends on +another local modules, whose name is the same as a standard module, the +local modules is not being loaded and its members are not inserted into +the main module.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=304#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-01-16 15:52:05 UTC + </span> + </div> + + + +<pre class="bz_comment_text">now external modules are loaded even if +they have the same name as a standard module. there remains a small +problem with error propagation as I am using an exception for the +workflow but exceptions are also handled locally and therefore an error +massage will be printed. + +the fix was committed and I will make some patch for the error massage</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=304#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-01-16 17:52:26 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Hi Leslie, + +It is not that trivial to remove the error message as it is being +printed inside a signature method and I dont want to change the +signature (I am not sure who is using it). + +If you approve the bug is corrected, I will close this bug and add +another one for the printed error message of which I will consult with +Damien. + +btw, I have added unit tests for confirming that I have fixed the bug so + we can skip the approval step if you prefer (for now and for future +bugs)</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=304#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-02-12 11:37:30 UTC + </span> + </div> + + + +<pre class="bz_comment_text">m_save mli changed so load_module function, + which is not called outside of m_save, is removed. The error message +could be fixed now</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=305">305</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">tlapm hanging</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Tomer <tomer.libal></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=305#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-01-25 11:11:14 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Running the prover on the nonsense theorem +on line 21 causes tlapm to loop and not respond to kill requests. The +console output is below. This is not a problem of interacting with the +Toolbox. It hangs when run from the command line. + + +---------------- New Prover Launch -------------- + +warning: --isaprove is deprecated + + + +(* TLAPM version 1.1.4 (commit 30325) *) + +(* launched at 2013-01-25 00:06:40 with command line: *) + +(* /usr/local/bin/tlapm --toolbox 21 33 --isaprove --cleanfp -I +C:\lamport\tla\newtools\tlapm\library\ C:\lamport\mytemp\Test.tla *) + + + +(* fingerprints file "Test.tlaps/fingerprints" removed *) + +@!!BEGIN + +@!!type:obligation + +@!!id:1 + +@!!loc:33:5:33:7 + +@!!status:to be proved + +@!!END + + + +@!!BEGIN + +@!!type:obligation + +@!!id:2 + +@!!loc:33:8:33:12 + +@!!status:to be proved + +@!!END + + + +@!!BEGIN + +@!!type:obligation + +@!!id:3 + +@!!loc:33:14:33:18 + +@!!status:to be proved + +@!!END + + + +@!!BEGIN + +@!!type:obligation + +@!!id:4 + +@!!loc:25:5:25:7 + +@!!status:to be proved + +@!!END + + + +@!!BEGIN + +@!!type:obligationsnumber + +@!!count:4 + +@!!END</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=305#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-02-12 20:31:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Comment by Leslie: + +So far, I’ve only seen this bug when using numbers as formulas—something + that’s not going to be very common. It’s worth examining only to see +if it can cause hanging in more reasonable cases.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=306">306</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLAPM returns error code 0 also when not all theorems are successfully proven</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Tomer <tomer.libal></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + INVALID + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=306#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-01-30 14:18:53 UTC + </span> + </div> + + + +<pre class="bz_comment_text">is this the intended behaviour? Should it +return a specific error code in this case and reserve error code 0 for a + fully successful execution?</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=306#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-01-30 21:25:36 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Dan Ricketts points out that the +documentation for the tlapm/Toolbox interface says that tlapm can return + the following completion codes: + + 0 - successful completion + 1 - error of the pm. Normally a module parsing error. + 2 - problem reading command line arguments + 255 - tlapm interrupted</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=307">307</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Can't cancel status checking</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=307#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-02-20 23:51:51 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Hitting cancel on the Status Checking Launch dialog does nothing when running a status check.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=308">308</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">tlapm reports a bug with error code -1073741819</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=192">File SetEuclid.tla + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=308#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-02-21 03:28:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=192" name="attach_192" title="File SetEuclid.tla">attachment 192</a> <a href="https://54.195.32.3/attachment.cgi?id=192&action=edit" title="File SetEuclid.tla">[details]</a></span> +File SetEuclid.tla + +Running the prover on step <1>2 on lines 253 of the attached file produces: + +Error running tlapm. Report a bug with the error code to the developers at +<a href="http://bugzilla.tlaplus.net/">http://bugzilla.tlaplus.net/</a>. + + Error code: -1073741819</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=309">309</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">tlapm typo in definition of IsFiniteSet</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Tomer <tomer.libal></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>damien.doligez, lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=309#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-02-25 10:51:03 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The tlapm typo in the definition of +IsFiniteSet is still not fixed. I am using TLAPM version 1.1.4 (commit +30325). Try proving: + + + +EXTENDS Naturals, Sequences, FiniteSets + + + +THEOREM IsFiniteSetDef == + + \A S : IsFiniteSet(S) = \E seq \in Seq(S) : \A s \in S : \E n \in +1..Len(seq) : seq[n] = s + +BY DEF IsFiniteSet + + + +See the attached TLA file and console log. I originally reported this +problem on June 4, 2012.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=310">310</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">instance of a module that extends TLAPS confounds tlapm with SMTT(10)</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Tomer <tomer.libal></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Damien Doligez <damien.doligez></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>lamport, tomer.libal + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=310#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-02-25 10:53:59 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I have a module (SubMod.tla attached) that +extends TLAPS and contains some definitions and proofs. + + + +I have a module (BugInstanceTlaps.tla attached) that takes an instance +of SubMod and then also contains some definitions and proofs. This +module also extends TLAPS, because I want to reference some of the tlapm + pragmas in its proofs. In fact, I want to instruct tlapm to appeal to +SMT with a timeout of 10 seconds. So for this purpose I write SMTT(10) +in the BY clause on the relevant deduction. + + + +Unfortunately, it seems that tlapm gets confused about this. See the +attached console log. It seems that tlapm fails to realize that +SMTT(10) is a pragma. + + + +In this particular case, I do not actually need the timeout, so I can +just write SMT and tlapm will do the correct thing. However, I have +extracted this example from a much more complicated situation in which I + have found that SMT occasionally needs the extra time, so I have gotten + into the habit of always writing SMTT(10). And, of course, the +SMTT(10) pragma should work, anyway.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=310#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Damien Doligez</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-02-25 14:41:35 UTC + </span> + </div> + + + +<pre class="bz_comment_text">fixed in revision 31051 + +should add a regression test</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=310#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Damien Doligez</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-03-08 11:30:57 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Fixed in revision 31051.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=311">311</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">tlapm parser failure on instance with operator substitution</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Tomer <tomer.libal></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>damien.doligez, lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=311#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-02-25 10:55:48 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I have a module that takes a couple of +constant parameters: + + + +--------------------------- MODULE PartialOrders +--------------------------- + +CONSTANT S + +CONSTANT _ \preceq _ + + + +IsPartialOrder == + + /\ \A a,b \in S : (a \preceq b) \in BOOLEAN + + /\ \A a \in S : a \preceq a + + /\ \A a,b \in S : a \preceq b /\ b \preceq a => a = b + + /\ \A a,b,c \in S : a \preceq b /\ b \preceq c => a \preceq c + +============================================================================= + + + + +And I have a module that takes an instance of that module: + + + +--------------------------- MODULE BugInstanceOp +--------------------------- + +EXTENDS Integers, TLAPS + +INSTANCE PartialOrders WITH S <- Int, \preceq <- \leq + +THEOREM IsPartialOrder BY SMT + +============================================================================= + + + + +This is all proper TLA+ according to the tool box. However, when I ask +tlapm to prove the theorem, it blows up with a parse error: + + + +File "<unknown>":Error: Could not parse +"C:\\Users\\tomr\\Documents\\All Projects\\TLAPS +Bugs\\BugInstanceOp\\BugInstanceOp.tla" successfully. + +tlapm ending abnormally with Failure("Module.Parser.parse_file") + +Raised at file "pervasives.ml", line 22, characters 22-33 + +Called from file "m_save.ml", line 24, characters 16-20 + +Called from file "tlapm.ml", line 300, characters 19-92 + +Called from file "list.ml", line 74, characters 24-34 + +Called from file "tlapm.ml", line 298, characters 4-373 + +Called from file "tlapm.ml", line 334, characters 8-33 + + + +It would appear that the tlapm parser is confused by the operator +substitution in the instance statement. See attached TLA files and +console log. + + + +If this is supposed to be an unsupported language feature it is not +documented on <a href="http://msr-inria.inria.fr/%7Edoligez/tlaps/content/Download/Unsupported.html">http://msr-inria.inria.fr/~doligez/tlaps/content/Download/Unsupported.html</a></pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=311#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Damien Doligez</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-03-08 11:38:48 UTC + </span> + </div> + + + +<pre class="bz_comment_text">fixed in revision 31237.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=312">312</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Silly application of '/' (division operator), e.g. to sets, should ideally cause TLC to report an error</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Chris Newcombe <chris.newcombe></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>lamport, simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=312#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Chris Newcombe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-04-20 21:21:55 UTC + </span> + </div> + + + +<pre class="bz_comment_text">(I'm running on Windows 7 64-bit, using +32-bit Sun Java 6 update 45, and the Win32 build of the latest toolbox +release (1.4.6) -- and I also tried an older version.) + +While writing a spec, I accidentally mis-typed the set-difference +operator. +I wrote ‘/’ instead of ‘\’, in a context similar to the following: + + { "a", "b", "c" } / {"b"} + +TLC accepted that. I got strange very results when model-checking. +TLC evaluates the above expression as: + + {{"b"}, {"b", "c", "a"}} + +I then realized that TLC was only accepting the above because my spec +uses “EXTENDS Reals” because I need the definition of Infinity. I had +forgotten that the Reals module also defines ‘/’ as the division +operator, because I’ve never used division in a spec. (IIRC TLC doesn't +support reals.) + +I understand that this behavior is consistent with the untyped semantics + of TLA+[*]. But it would be nice if TLC reported this usage as an +error. + +Cheers, + +Chris + +[*] Page 347 of ‘Specifying Systems’ says that the Reals module contains + this definition for '/' : + a / b == CHOOSE c \in Real : a = b * c +So that can evaluate to any arbitrary value, for the erroneous usage +earlier.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=312#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-04-23 20:08:36 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Here is the explanation of the bug. The official standard modules +Naturals, Integers, and Reals given in "Specifying Systems" define the +semantics of the arithmetic operators, but they are of no use to any +tool. So, to speed up parsing, dummy versions of those modules are +used by the parser. The dummy versions of Naturals and Integers are +ignored by TLC and TLAPS. However, the dummy version of Reals is used +by TLC and I presume by TLAPS. The body of that module is: + + EXTENDS Integers + Real == { } + a / b == {a, b} + Infinity == 999999999 + +The question is, what should the definitions be. It's easy to make up +definitions that will cause errors when TLC tries to evaluate these +definitions. However, can we do anything that will make this module +usable by TLAPS? I don't see how, since I think we should maintain the +semantics that Int is a subset of Real and the arithemetic operators +like + and * on integers are the restrictions of the ones on reals. +But I'm open to suggestions. + +We can make TLC produce appropriate error messages when the Reals +operators are used without the use of a suitable dummy Reals module: +we can write a Java Reals class for TLC that overrides these +definitions. I'm not going to do that myself, but I'll be happy to +consider adding such a module if someone else wants to write it. +(It should be easy to figure out how it's done by searching the +source code for the Naturals.java and Integers.java classes.) + +Barring other suggestions, I will modify the dummy Reals module. I +welcome suggestions for what I should do. For example, should we keep +the current definition of Infinity? Should I change the definition of +Real so that TLC will always produce an error in evaluating exp \in +Real? Or should it evaluate -3 \in Real to TRUE? I'll move discussion of this to the Google group.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=313">313</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">tlapm bug in printing obligations</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Tomer <tomer.libal></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=313#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-05-06 13:07:38 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When printing obligations, tlapm seems to +think that + has higher precedence than % , so it prints + + + + 0 + 1 % N = 1 + + + +However, that’s not a legal TLA+ expression, since TLA+ defines + and % +to have overlapping precedences, so parentheses are required.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=314">314</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Failure to report an error</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Tomer <tomer.libal></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=314#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-05-06 13:09:23 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Leslie wrote: + +When I tell TLAPS to prove the bogus WITNESS step in + + + + THEOREM \E i \in {1, 2, 3} : TRUE + + <1> WITNESS 2 + + <1> QED + + + +I find this in the log + + + + (* TLAPM version 1.1.5 (commit 31536) *) + + (* launched at 2013-05-02 20:17:12 with command line: *) + + (* /usr/local/bin/tlapm --toolbox 11 13 --isaprove -I +C:\lamport\tla\newtools\tlapm\library\ + C:\lamport\mytemp\Test1.tla *) + + + + File "C:\\lamport\\mytemp\\Test1.tla", line 12, characters 1-13: + + Error: WITNESS argument + + 2 + + does not match pattern + + i \in {1, 2, 3} + + + +However, the Toolbox doesn’t raise an error window. My guess is that +TLAPM is not returning the error report in the right format. Please +check on that.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=315">315</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">make standard modules visible to the PM</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Stephan Merz <stephan.merz></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=315#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Stephan Merz</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-05-24 09:22:30 UTC + </span> + </div> + + + +<pre class="bz_comment_text">When attempting to prove the following +theorem in a module extending the Sequences module + +THEOREM ConcatDef == + \A s1, s2 : s1 \o s2 = + [i \in 1..(Len(s1)+Len(s2)) |-> + IF i \leq Len(s1) THEN s1[i] + ELSE s2[i-Len(s1)]] +BY DEF \o + +the definition of \o is not expanded because the definitions given in +standard modules are not available to the PM. I suggest that this be +changed, perhaps excluding the modules for Naturals, Integers, and Reals + whose definitions are arguably not useful in a proof. + +Current workaround: add theorems like the above that basically restate +the definitions, omit their proofs, and work from there.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=315#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-06-04 17:49:21 UTC + </span> + </div> + + + +<pre class="bz_comment_text">It appears that the standard modules +distributed with the Toolbox have always been the real ones, except for +the numbers modules Naturals, Integers, and Reals. (They must have been + put in the standalone distribution when the Toolbox was first released, + if they weren't already there.) Moreover, there is no Sequences.tla +file in the tlapm repository. It appears that Sequences is one of the +modules that are built into the tlapm code, with bogus definitions. We +need to check if Bags and FiniteSets are there as well.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=315#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-06-11 11:09:29 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Is fixed in the source and will fix will appear in the next release.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=316">316</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox not displaying error report by TLC</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLC Component</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=193">Specification SimpleLiveness + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=316#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-06-11 10:39:07 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=193" name="attach_193" title="Specification SimpleLiveness">attachment 193</a> <a href="https://54.195.32.3/attachment.cgi?id=193&action=edit" title="Specification SimpleLiveness">[details]</a></span> +Specification SimpleLiveness + +The spec that I will attach as soon as Bugzilla allows me to has a bad Behavior +Spec, with [Next]_vars instead of [][Next]_vars. Therefore, TLC reports an +error when it is run. However, there seem to be two Toolbox bugs: + +1. Instead of recognizing it as an error, the Toolbox thinks there's a bug. + +2. The Toolbox displays neither the error nor the bug report to the user. + +This bug is in the inscrutable code for parsing TLC errors, so it may be hard +to fix.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=316#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-10-29 18:31:07 UTC + </span> + </div> + + + +<pre class="bz_comment_text">A fix to the SANY parser makes the example +no longer parse. However, I believe it was a manifestation of a bug +that was fixed in the version of the code checked in on 23 October 2013.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=317">317</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Sometimes 'create pdf version' command fails to produce new version of pdf file</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>TLATEX Component</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P4">P4 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows 7</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=194">Suffix PDF file name with timestamp to make it unique + </a><br> + <a href="https://54.195.32.3/attachment.cgi?id=195">mylyn/context/zip + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=317#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-06-19 10:53:09 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The following behavior sometimes occurs: +When running with "Use built-in PDF viewer" preference, I have to delete + the pdf viewer window in order to create a new pdf version. If I +don't, when running under the debugger, the console log reports + +org.eclipse.core.internal.resources.ResourceException: Resource +'/SimpleSpec/SimpleSpecTrans.pdf' does not exist. + at +org.eclipse.core.internal.resources.Resource.checkExists(Resource.java:320) + + at +org.eclipse.core.internal.resources.Resource.checkAccessible(Resource.java:194) + + at +org.eclipse.core.internal.resources.Resource.checkAccessibleAndLocal(Resource.java:200) + + at +org.eclipse.core.internal.resources.Resource.touch(Resource.java:1901) + at +org.lamport.tla.toolbox.tool.tla2tex.handler.EmbeddedPDFViewerRunnable.setFile(EmbeddedPDFViewerRunnable.java:48) + + at +org.lamport.tla.toolbox.tool.tla2tex.handler.ProducePDFHandler$2.runInWorkspace(ProducePDFHandler.java:270) + + at +org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38) + + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +If I close the spec and close and reopen the Toolbox, and bow three +times to Mecca, the problem goes away. I presume this is the result of +an Eclipse feature. (Since there is no documentation explaining what +Eclipse methods are supposed to do, there are no bugs in Eclipse.)</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=317#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-06-19 21:42:59 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Hi Leslie, + +to narrow it down. Might it be somehow possible that you trigger two +concurrent PDF generator jobs? The generator job is visible to the user.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=317#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-06-19 21:49:11 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Leslie, + +try adding +"+ System.currentTimeMillis()" + +to org.lamport.tla.toolbox.tool.tla2tex.handler.ProducePDFHandler on +line 265 where it concats the filename to make the filename unique for +each job.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=317#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-06-20 11:28:53 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Hi Leslie, + +please check if my commit [1] fixes the problem for you. It forces an +Eclipse project resource refresh after creating the PDF file. My +assumption is that the filesystem and what Eclipse sees in its project +is out of sync due to the fact that the PDF does not get created through + the Eclipse resource layer. + +[1] <a href="https://tlaplus.codeplex.com/SourceControl/changeset/fa2b69324b226e7aa2589863d8c0bbfdbbc8384b">https://tlaplus.codeplex.com/SourceControl/changeset/fa2b69324b226e7aa2589863d8c0bbfdbbc8384b</a> + +PS: Suffixing the PDF filename with a timestamp has the side effect that + the built-in PDF viewer open a view for each file and does not reuse +the old one.</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=317#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-06-20 11:31:30 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=194" name="attach_194" title="Suffix PDF file name with timestamp to make it unique">attachment 194</a> <a href="https://54.195.32.3/attachment.cgi?id=194&action=edit" title="Suffix PDF file name with timestamp to make it unique">[details]</a></span> +Suffix PDF file name with timestamp to make it unique + +(just for the sake of completeness - not intended to be committed)</pre> + </div><div id="c5" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=317#c5">Comment 5</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-06-20 11:31:32 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=195" name="attach_195" title="mylyn/context/zip">attachment 195</a> <a href="https://54.195.32.3/attachment.cgi?id=195&action=edit" title="mylyn/context/zip">[details]</a></span> +mylyn/context/zip</pre> + </div><div id="c6" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=317#c6">Comment 6</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-07-20 04:07:22 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I haven't seen this bug since Markus's fix, so I will declare it resolved.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=318">318</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Sometimes Toolbox does not show TLC errors arising from 'Evaluate Constant Expression'</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Chris Newcombe <chris.newcombe></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>ASSIGNED + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=318#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Chris Newcombe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-07-14 18:13:47 UTC + </span> + </div> + + + +<pre class="bz_comment_text">(This is not terribly serious as there is a + workaround, but it's clearly a bug so I'm reporting it anyway.) + +I found a case in which the Toolbox does not show an error that is +reported by TLC when doing ‘Evaluate Constant Expression’. I suspect +this is related to the size of the error-output in the TLC console log. + +The attached module contains a dumb bug; on line 52 the definition of +the co-domain of a recursive function is too small. + +When I use TLC to ‘Evaluate Constant Expression’ on the following: +TestAllShortestDistances +then + +a. If the following values are used for constants, then the Toolbox +fails to report the error, and does not print any output in “Value” box. +MaxNumEdgeWeights = 1 +MaxNumNodes = 3 + +b. If the following smaller values are used for constants, then the +Toolbox correctly reports the error. +MaxNumEdgeWeights = 1 +MaxNumNodes = 2 + +In both cases, the TLC console log does contain the correct error. +I suspect this problem is related to the size of the error output in the + log, as in case (a) above, the error report in the TLC console log is +quite large, due to the combinatorics of this function definition. +In the extract from the log below, the “… snip lots of output ..” part +hides the large part. + +Version info + +Windows 7 Enterprise + +OS is 64-bit, but software is 32-bit. + +32-bit Oracle Java 1.7: + java version "1.7.0_25" + Java(TM) SE Runtime Environment (build 1.7.0_25-b16) + Java HotSpot(TM) Client VM (build 23.25-b01, mixed mode) + +32-bit Toolbox & TLC (TLAToolbox-1.4.7-win32.win32.x86) + + This is Version 1.4.7 of 24 April 2013 and includes: + - SANY Version 2.1 of 27 March 2013 + - TLC Version 2.05 of 24 October 2012 + - PlusCal Version 1.8 of 2 April 2013 + - TLATeX Version 1.0 of 12 April 2013 + +Chris + +Starting... (2013-07-14 08:56:53) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2105:1 @!@!@ +Evaluating assumption line 20, col 8 to line 20, col 66 of module MC +failed. +In applying the function +[args \in ({(<<1, 1>> :> 1 @@ ... snip lots of output +...} X {{}, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}}) |-> +<expression line 53, col 13 to line 66, col 62 of module +ToolboxBug_FailureToReportErrorEvaluatingConstantExpression>], +the first argument is: +<< ( <<1, 1>> :> 999999999 @@ + <<1, 2>> :> 1 @@ + <<1, 3>> :> 999999999 @@ + <<2, 1>> :> 1 @@ + <<2, 2>> :> 2 @@ + <<2, 3>> :> 999999999 @@ + <<3, 1>> :> 999999999 @@ + <<3, 2>> :> 999999999 @@ + <<3, 3>> :> 999999999 ), + {2, 3} >> +which is not in its domain.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=319">319</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Soundness bug due to coagulation or primes ignoring bound variables</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Tomer <tomer.libal></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_critical">critical + </td> +<th class="rightcell">CC:</th> + <td>damien.doligez, lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=319#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-08-02 14:11:18 UTC + </span> + </div> + + + +<pre class="bz_comment_text">The following can be proved in the toolbox: + +VARIABLE Y + +P(a,x) == IF Y THEN x ELSE x + +THEOREM 1 = 2 +<1>1. \A z : P(Y,z)' = z + BY DEF P +<1>2. QED BY <1>1 + +The primes distribution does not distribute the primes over P(Y,z)' as Y + is not constant. + +The backends of Isabelle and zenon, when encountering primes, are doing +coagulation as follows: +Given op(args)' +- if args are empty, return hash(op) +- if all args are constants, return hash(op)(args) +- if at least one arg is not a constant, return hash(op(args)) + +the result is that if some arg is a bound variable, as in the above +example, we get a coagulation based on the bound variable name. + +Fixing the bug is expected to take at most one week. For now I have +added a test for this bug in the soundness_tests.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=319#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-08-02 14:13:18 UTC + </span> + </div> + + + +<pre class="bz_comment_text">a minor correction + +The primes distribution does not distribute the primes over P(Y,z)' as P is not +constant.</pre> + </div><div id="c2" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=319#c2">Comment 2</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-08-02 14:40:27 UTC + </span> + </div> + + + +<pre class="bz_comment_text">steps to do: + +1) remove prime handling from backends and add it to an action backend. +isabelle/zenon/SMT/etc. should report an errror if encountering primes +2) remove prime distribution from backends and add it to action backend. + the action backend is a default middle-backend to normalize formulas +when we send the obligation to a fol theorem prover. +3) in the action backend, we do as follows: +3a) expend definitions of UNCHANGED, [A]_v and <<A>>_v +3b) distribute primes over constant operators +3c) for a leibniz non-constant operator op, distribute primes over +hash(op) (we treat all non-constant operators right now, see comment +below) +3d) primed atoms: constant atoms -> do nothing, else +3e) coalesce all non-leibniz operators and primed non-leibniz operators +(postponed, see comment below). + +comment: +this will be done only after we integrate the SANY parser to TLAPM as we + dont have the leibnizicy information right now in TLAPM.</pre> + </div><div id="c3" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=319#c3">Comment 3</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-08-02 14:45:08 UTC + </span> + </div> + + + +<pre class="bz_comment_text">3d) primed atoms a: constant atoms -> a, + else -> hash(a) (make sure hashing a variable name does not cause +problems to backends due to naming conventions)</pre> + </div><div id="c4" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=319#c4">Comment 4</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-08-14 12:15:55 UTC + </span> + </div> + + + +<pre class="bz_comment_text">fixed except the comment. I will add another issue for dealing with that.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=320">320</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">TLAPM doesnt handle multiple except expressions correctly</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Tomer <tomer.libal></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_major">major + </td> +<th class="rightcell">CC:</th> + <td>lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=320#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-08-14 12:21:21 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Leslie, Stephan, Damien, + + + +I have encountered an error in the TLAPS interpretation of the EXCEPT AT + construct. Namely, when you have a construct with multiple exceptions, + each with an @: + + + + [A EXCEPT ![x] = @+1, ![x] = @+2] + + + +Please refer to page 304 in Specifying Systems. A multi-EXCEPT is +interpreted as a recursive structure of single-EXCEPTs: + + + + [[A EXCEPT ![x] = @+1] EXCEPT ![x] = @+2] + + + +And then to interpret the @ in the context of each single-EXCEPT you +interpolate a local definition: + + + + LET B == + + LET @ == A[x] IN [A EXCEPT ![x] = @+1] + + IN + + LET @ == B[x] IN [B EXCEPT ![x] = @+2] + + + +In other words, each @ reflects whatever changes might have happened to +its component by any previously-applied exception clauses. + + + +But that is not how TLAPS interprets the EXCEPT AT construct. TLAPS +thinks that each @ refers to its component in the original function. + +I am using TLAPM version 1.1.5 (commit 31530) + + + +See for example the following module (ZIP attached): + + + +------------------------------- MODULE BugAt +------------------------------- + +EXTENDS Naturals, TLC, TLAPS + + + +VARIABLE A + + + +Init == A = [i \in {0} |-> 0] + +Next == IF A[0] = 0 THEN A' = [A EXCEPT ![0] = @+1, ![0] = @+2] ELSE A' = + A + + + +Inv == + + /\ A \in [{0} -> Nat] + + /\ A[0] # 3 + + + +THEOREM ThmInit == Init => Inv BY SMT DEF Init, Inv + +THEOREM ThmNext == Inv /\ Next => Inv' BY SMT DEF Inv, Next + + + +============================================================================= + + + + +TLAPS happily proves both of the theorems. Taken together, these +theorems imply that Inv is an invariant of the specification. However, +running the model checker quickly shows that the invariant is violated +after the first action. + + + +-Tom Rodeheffer</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=321">321</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">go over all regressions tests in attached file</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Tomer <tomer.libal></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=196">regerssiin tests + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=321#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-08-14 12:23:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text">and add them to the respective testing units: +- expression normalization (EXCEPT, etc.) -> unit tests +- soundness bugs -> soundness tests +- regression tests -> regression tests +- others -< try first unit tests</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=321#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-08-14 12:24:48 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=196" name="attach_196" title="regerssiin tests">attachment 196</a> <a href="https://54.195.32.3/attachment.cgi?id=196&action=edit" title="regerssiin tests">[details]</a></span> +regerssiin tests</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=322">322</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Integrate the SANY parser to TLAPM</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Tomer <tomer.libal></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td><a class="bz_bug_link + bz_status_NEW " title="NEW - finish the Action frontend" href="https://54.195.32.3/show_bug.cgi?id=323">323</a> + </td> +<td> </td> + <td> </td> + </tr> + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=322#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-08-14 12:27:42 UTC + </span> + </div> + + + +<pre class="bz_comment_text">- work has already started. Create a branch and add all changes made to the branch. + +TLAPM should use the java SANY parser in order to parser TLA specs. SANY already exports its data in an XML stream. + +TLAPM should call the SANY exporter jar correctly and parse the output XML.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=323">323</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">finish the Action frontend</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Tomer <tomer.libal></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<th class="rightcell">CC:</th> + <td>lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>All</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> +<tr> + <th>Bug Depends on:</th> + <td><a class="bz_bug_link + bz_status_NEW " title="NEW - Integrate the SANY parser to TLAPM" href="https://54.195.32.3/show_bug.cgi?id=322">322</a> + </td> +<td> </td> + <td> </td> + </tr><tr> + <th>Bug Blocks:</th> + <td> + </td> +<td> </td> + <td> </td> + </tr> + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=323#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tomer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-08-14 12:30:29 UTC + </span> + </div> + + + +<pre class="bz_comment_text">all steps below were done except those with the <a href="https://54.195.32.3/show_bug.cgi?id=323#c1">comment + +1</a>) remove prime handling from backends and add it to an action backend. +isabelle/zenon/SMT/etc. should report an errror if encountering primes +2) remove prime distribution from backends and add it to action backend. the +action backend is a default middle-backend to normalize formulas when we send +the obligation to a fol theorem prover. +3) in the action backend, we do as follows: +3a) expend definitions of UNCHANGED, [A]_v and <<A>>_v +3b) distribute primes over constant operators +3c) for a leibniz non-constant operator op, distribute primes over hash(op) (we +treat all non-constant operators right now, see comment below) +3d) primed atoms: constant atoms -> do nothing, else +3e) coalesce all non-leibniz operators and primed non-leibniz operators +(postponed, see comment below). + +comment: +this will be done only after we integrate the SANY parser to TLAPM as we dont +have the leibnizicy information right now in TLAPM.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=324">324</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">show uses fails to check inside labeled sub-expression</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Tom Rodeheffer <tomr></td> + </tr> +<tr> + <th>Component:</th> + <td>TLA+ Editor</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + FIXED + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_minor">minor + </td> +<th class="rightcell">CC:</th> + <td>simon + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + <tr> + <th>Attachments:</th> + <td colspan="3"> + <a href="https://54.195.32.3/attachment.cgi?id=197">TLA file illustrating the bug + </a> + </td> + </tr> + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=324#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Tom Rodeheffer</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-09-05 22:19:54 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Created <span class=""><a href="https://54.195.32.3/attachment.cgi?id=197" name="attach_197" title="TLA file illustrating the bug">attachment 197</a> <a href="https://54.195.32.3/attachment.cgi?id=197&action=edit" title="TLA file illustrating the bug">[details]</a></span> +TLA file illustrating the bug + +I am using version 1.4.7 of the TLA+ Toolbox. + +If I have a symbol whose only use is inside a labeled sub-expression, the +editor "Show Uses" command says that the symbol has no uses.</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=324#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-10-16 15:01:56 UTC + </span> + </div> + + + +<pre class="bz_comment_text">This was caused by a simple bug and will be fixed in the next release. Thanks for the report.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=325">325</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">The Toolbox knows what file you REALLY want.</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Leslie Lamport <lamport></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>ASSIGNED + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_normal">normal + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Priority:</th> + <td class="bz_P3">P3 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>unspecified</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>All</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows 7</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=325#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Leslie Lamport</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2013-11-19 20:13:13 UTC + </span> + </div> + + + +<pre class="bz_comment_text">I have two versions of a spec file with the + same name in two different directories. I opened one of them in the +Toolbox. I closed it and told the Toolbox to Forget the spec. I then +opened the other one. The Spec explorer said that the spec's root file +was in the new (correct) directory. However, the file opened in the +editor is the old (incorrect) one. + +Restarting the Toolbox didn't fix the problem. Re-installing the +Toolbox would probably make it forget about the original file (although +Eclipse works very hard to cache things, so I will not go out on a limb +to say that it will). Short of that, opening the new file under a new +spec name seemed to be the only way to solve the problem. + +I did the essentially the same thing on a different machine and this did + not happen. I don't expect anyone to read the 10^7 lines of Eclipse +code required to figure ot what happened. I am just filing this bug +report to document the problem.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=326">326</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Toolbox crashes with a dump</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>RWShore <rwsmob></td> + </tr> +<tr> + <th>Component:</th> + <td>Core Component</td><th class="rightcell">Assignee:</th> + <td>Leslie Lamport <lamport></td> + </tr> + + <tr> + <th>Status:</th> + <td>RESOLVED + WONTFIX + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_blocker">blocker + </td> +<th class="rightcell">CC:</th> + <td>bugzilla.tlaplus.net + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P5">P5 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.4.2</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>x86 64-bit</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Linux</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=326#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">RWShore</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2015-04-15 11:03:58 UTC + </span> + </div> + + + +<pre class="bz_comment_text">UNAME: Linux sherpa-rws 3.13.0-46-generic +#79-Ubuntu SMP Tue Mar 10 20:06:50 UTC 2015 x86_64 x86_64 x86_64 +GNU/Linux + +This is a desktop VM running in the Azure cloud. The "toolbox" command +shows the splash screen and then a crash (hs_err*.log attached). +STDOUT/ERR contains the following: + +$ ./toolbox +# +# A fatal error has been detected by the Java Runtime Environment: +# +# SIGSEGV (0xb) at pc=0x00007f6eb8e1c2a1, pid=6033, tid=140115494958848 +# +# JRE version: Java(TM) SE Runtime Environment (7.0_75-b13) (build +1.7.0_75-b13) +# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.75-b04 mixed mode +linux-amd64 compressed oops) +# Problematic frame: +# C [libsoup-2.4.so.1+0x6c2a1] soup_session_feature_detach+0x11 +# +# Failed to write core dump. Core dumps have been disabled. To enable +core dumping, try "ulimit -c unlimited" before starting Java again +# +# An error report file with more information is saved as: +# /data/extra/rwshore/TLA/toolbox/hs_err_pid6033.log +# +# If you would like to submit a bug report, please visit: +# <a href="http://bugreport.sun.com/bugreport/crash.jsp">http://bugreport.sun.com/bugreport/crash.jsp</a> +# The crash happened outside the Java Virtual Machine in native code. +# See problematic frame for where to report the bug. +# + + +NOTE: this is a headless VM (no GPU or "real" graphics adapter). I'm +accessing it in graphics mode via an RDP connection, which actually runs + VNC under the covers. Other IDEs, including J2EE Eclipse, NetBeans, and + Android Studio run fine in this environment. However, given where Java +reports the crash, I suspect that the lack of a graphics adapter is the +underlying problem</pre> + </div><div id="c1" class="bz_comment"> + + <div class="bz_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=326#c1">Comment 1</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Markus Alexander Kuppe</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2015-04-15 11:29:43 UTC + </span> + </div> + + + +<pre class="bz_comment_text">Hi, + +this is a known problem [1][2] with the Toolbox's underlying Eclipse +foundation. Please either add +"-Dorg.eclipse.swt.browser.DefaultType=mozilla" to toolbox.ini (at the +end of the file) or use the (soon to be released) Toolbox nightly build +[3]. + +I suggest to do use the nightly. + +Thanks +Markus + +[1] <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=404776">https://bugs.eclipse.org/bugs/show_bug.cgi?id=404776</a> +[2] <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=405786">https://bugs.eclipse.org/bugs/show_bug.cgi?id=405786</a> +[3] <a href="http://tla.msr-inria.inria.fr/tlatoolbox/ci/products/">http://tla.msr-inria.inria.fr/tlatoolbox/ci/products/</a></pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table><h1>Bug + <a href="https://54.195.32.3/show_bug.cgi?id=327">327</a> + </h1> + + <table class="bugfields"> + + + +<tbody><tr> + <th>Summary:</th> + <td colspan="3">Incorrect assertion proved</td> + </tr> + + <tr> + <th>Product:</th> + <td>TLA+ Toolbox + </td> +<th class="rightcell">Reporter:</th> + <td>Saksham Chand <schand></td> + </tr> +<tr> + <th>Component:</th> + <td>TLAPS</td><th class="rightcell">Assignee:</th> + <td>Tomer <tomer.libal></td> + </tr> + + <tr> + <th>Status:</th> + <td>NEW + --- + </td> +<td> </td> + <td> </td> + </tr> + + <tr> + <th>Severity:</th> + <td class="bz_enhancement">enhancement + </td> +<th class="rightcell">CC:</th> + <td>lamport + </td></tr> + + <tr> + <th>Priority:</th> + <td class="bz_P5">P5 + </td> +<td> </td> + <td> </td> + </tr> +<tr> + <th>Version:</th> + <td>1.5</td><td> </td> + <td> </td> + </tr><tr> + <th>Hardware:</th> + <td>Other</td><td> </td> + <td> </td> + </tr><tr> + <th>OS:</th> + <td>Windows</td><td> </td> + <td> </td> + </tr> + + + + + <tr><th class="field_label " id="field_label_cf_target_version"> + + + <a title="A custom Drop Down field in this installation of Bugzilla." class="field_help_link" href="https://54.195.32.3/page.cgi?id=fields.html#cf_target_version">Target Version:</a> + +</th> + <td class="field_value " id="field_container_cf_target_version">---</td> + + <th></th><td></td></tr> + + + + + + </tbody></table> + + + <br> +<script src="comments.js" type="text/javascript"> +</script> + +<script type="text/javascript"> +<!-- + /* Adds the reply text to the `comment' textarea */ + function replyToComment(id, real_id, name) { + var prefix = "(In reply to " + name + " from comment #" + id + ")\n"; + var replytext = ""; + /* pre id="comment_name_N" */ + var text_elem = document.getElementById('comment_text_'+id); + var text = getText(text_elem); + replytext = prefix + wrapReplyText(text); + + + /* <textarea id="comment"> */ + var textarea = document.getElementById('comment'); + if (textarea.value != replytext) { + textarea.value += replytext; + } + + textarea.focus(); + } +//--> +</script> + + + + +<!-- This auto-sizes the comments and positions the collapse/expand links + to the right. --> +<table class="bz_comment_table" cellpadding="0" cellspacing="0"><tbody><tr> +<td> +<div id="c0" class="bz_comment bz_first_comment"> + + <div class="bz_first_comment_head"> + + + + <span class="bz_comment_number"> + <a href="https://54.195.32.3/show_bug.cgi?id=327#c0">Description</a> + </span> + + <span class="bz_comment_user"> + <span class="vcard"><span class="fn">Saksham Chand</span> +</span> + </span> + + <span class="bz_comment_user_images"> + </span> + + <span class="bz_comment_time"> + 2015-08-25 13:56:34 UTC + </span> + </div> + + + +<pre class="bz_comment_text">TLA can verify: + +<4>21. \A x, y \in Nat \cup {-1} : x > y => x..y = {} + +However it also proves the following: + +Ballots == Nat +<4> DEFINE mm == [type |-> "1b", bal |-> m.bal, voted |-> acceptorVoted[a], from |-> a] +<4>9. \A s \in Slots : MaxVotedBallotInSlot(mm.voted, s)+1 \in Ballots +. +. +. +<4>13. \A s \in Slots, c \in Ballots : c \in MaxVotedBallotInSlot(mm.voted, s)+1..mm.bal-1 => + c > MaxVotedBallotInSlot(mm.voted, s) + <5> SUFFICES ASSUME NEW s \in Slots, NEW c \in Ballots, + c \in MaxVotedBallotInSlot(mm.voted, s)+1..mm.bal-1 + PROVE c > MaxVotedBallotInSlot(mm.voted, s) + OBVIOUS + <5>1. CASE MaxVotedBallotInSlot(mm.voted, s)+1 > mm.bal-1 + <6>0. mm.bal \in Ballots + <6>1. MaxVotedBallotInSlot(mm.voted, s)+1..mm.bal-1 # {} + BY <5>1, <6>0, <4>9, <4>21 + <6> QED BY <5>1 + <5>2. CASE MaxVotedBallotInSlot(mm.voted, s)+1 = mm.bal-1 + <6>1. c = MaxVotedBallotInSlot(mm.voted, s)+1 + BY <4>9, <5>2 + <6> QED BY <6>1, <4>11, <4>7 + <5>3. CASE MaxVotedBallotInSlot(mm.voted, s)+1 < mm.bal-1 + <5> QED + BY <5>1, <5>2, <5>3 + +And <6>1 passes through TLAPS. This I don't understand. PFA full proof.</pre> + </div> + + + + +</td> +<td> +</td> +</tr></tbody></table> + <div class="bz_query_buttons"> + <form method="post" action="buglist.cgi"> + <input name="bug_id" value="2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,86,87,88,89,90,91,92,93,94,95,96,97,98,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327" type="hidden"> + <input id="short_format" value="Short Format" type="submit"> + </form> + </div> + +</div> + + + +<div id="footer"> + <div class="intro"></div> + + + + +<ul id="useful-links"> + <li id="links-actions"><ul class="links"> + <li><a href="https://54.195.32.3/">Home</a></li> + <li><span class="separator">| </span><a href="https://54.195.32.3/enter_bug.cgi">New</a></li> + <li><span class="separator">| </span><a href="https://54.195.32.3/describecomponents.cgi">Browse</a></li> + <li><span class="separator">| </span><a href="https://54.195.32.3/query.cgi">Search</a></li> + + <li class="form"> + <span class="separator">| </span> + <form action="buglist.cgi" method="get" onsubmit="if (this.quicksearch.value == '') + { alert('Please enter one or more search terms first.'); + return false; } return true;"> + <input id="no_redirect_bottom" name="no_redirect" value="0" type="hidden"> + <script type="text/javascript"> + if (history && history.replaceState) { + var no_redirect = document.getElementById("no_redirect_bottom"); + no_redirect.value = 1; + } + </script> + <input class="txt" id="quicksearch_bottom" name="quicksearch" title="Quick Search" type="text"> + <input class="btn" value="Search" id="find_bottom" type="submit"></form> + <a href="https://54.195.32.3/page.cgi?id=quicksearch.html" title="Quicksearch Help">[?]</a></li> + + <li><span class="separator">| </span><a href="https://54.195.32.3/report.cgi">Reports</a></li> + + <li></li> + + <li> + <span class="separator">| </span> + <a href="https://54.195.32.3/docs/en/html/bug_page.html" target="_blank">Help</a> + </li> + + <li id="new_account_container_bottom"> + <span class="separator">| </span> + <a href="https://54.195.32.3/createaccount.cgi">New Account</a> + </li> + + <li id="mini_login_container_bottom"> + <span class="separator">| </span> + <a id="login_link_bottom" href="https://54.195.32.3/show_bug.cgi?format=multiple&id=2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2C30%2C31%2C32%2C33%2C34%2C35%2C36%2C37%2C38%2C39%2C40%2C41%2C42%2C43%2C44%2C45%2C46%2C47%2C48%2C49%2C50%2C51%2C52%2C53%2C54%2C55%2C56%2C57%2C58%2C59%2C60%2C61%2C62%2C63%2C64%2C66%2C67%2C68%2C69%2C70%2C71%2C72%2C73%2C74%2C75%2C76%2C77%2C78%2C79%2C80%2C81%2C82%2C83%2C86%2C87%2C88%2C89%2C90%2C91%2C92%2C93%2C94%2C95%2C96%2C97%2C98%2C100%2C101%2C102%2C103%2C104%2C105%2C106%2C107%2C108%2C109%2C110%2C111%2C112%2C113%2C114%2C115%2C116%2C117%2C118%2C119%2C120%2C121%2C122%2C123%2C124%2C125%2C126%2C127%2C128%2C129%2C130%2C131%2C132%2C133%2C134%2C135%2C136%2C137%2C138%2C139%2C140%2C141%2C142%2C143%2C144%2C145%2C146%2C147%2C148%2C149%2C150%2C151%2C152%2C153%2C154%2C155%2C156%2C157%2C158%2C159%2C160%2C161%2C162%2C163%2C164%2C165%2C166%2C167%2C168%2C169%2C170%2C171%2C172%2C173%2C174%2C175%2C176%2C177%2C178%2C179%2C180%2C181%2C182%2C183%2C184%2C185%2C186%2C187%2C188%2C189%2C190%2C191%2C192%2C193%2C194%2C195%2C196%2C197%2C198%2C199%2C200%2C201%2C202%2C203%2C204%2C205%2C206%2C207%2C208%2C209%2C210%2C211%2C212%2C213%2C214%2C215%2C216%2C217%2C218%2C219%2C220%2C221%2C222%2C223%2C224%2C225%2C226%2C227%2C228%2C229%2C230%2C231%2C232%2C233%2C234%2C235%2C236%2C237%2C238%2C239%2C240%2C241%2C242%2C243%2C244%2C245%2C246%2C247%2C248%2C249%2C250%2C251%2C252%2C253%2C254%2C255%2C256%2C257%2C258%2C259%2C260%2C261%2C262%2C263%2C264%2C265%2C266%2C267%2C268%2C269%2C270%2C271%2C272%2C273%2C274%2C275%2C276%2C277%2C278%2C279%2C280%2C281%2C282%2C283%2C284%2C285%2C286%2C287%2C288%2C289%2C290%2C291%2C292%2C293%2C294%2C295%2C296%2C297%2C298%2C299%2C300%2C301%2C302%2C303%2C304%2C305%2C306%2C307%2C308%2C309%2C310%2C311%2C312%2C313%2C314%2C315%2C316%2C317%2C318%2C319%2C320%2C321%2C322%2C323%2C324%2C325%2C326%2C327?GoAheadAndLogIn=1" onclick="return show_mini_login_form('_bottom')">Log In</a> + + + <form action="show_bug.cgi?format=multiple&id=2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2C30%2C31%2C32%2C33%2C34%2C35%2C36%2C37%2C38%2C39%2C40%2C41%2C42%2C43%2C44%2C45%2C46%2C47%2C48%2C49%2C50%2C51%2C52%2C53%2C54%2C55%2C56%2C57%2C58%2C59%2C60%2C61%2C62%2C63%2C64%2C66%2C67%2C68%2C69%2C70%2C71%2C72%2C73%2C74%2C75%2C76%2C77%2C78%2C79%2C80%2C81%2C82%2C83%2C86%2C87%2C88%2C89%2C90%2C91%2C92%2C93%2C94%2C95%2C96%2C97%2C98%2C100%2C101%2C102%2C103%2C104%2C105%2C106%2C107%2C108%2C109%2C110%2C111%2C112%2C113%2C114%2C115%2C116%2C117%2C118%2C119%2C120%2C121%2C122%2C123%2C124%2C125%2C126%2C127%2C128%2C129%2C130%2C131%2C132%2C133%2C134%2C135%2C136%2C137%2C138%2C139%2C140%2C141%2C142%2C143%2C144%2C145%2C146%2C147%2C148%2C149%2C150%2C151%2C152%2C153%2C154%2C155%2C156%2C157%2C158%2C159%2C160%2C161%2C162%2C163%2C164%2C165%2C166%2C167%2C168%2C169%2C170%2C171%2C172%2C173%2C174%2C175%2C176%2C177%2C178%2C179%2C180%2C181%2C182%2C183%2C184%2C185%2C186%2C187%2C188%2C189%2C190%2C191%2C192%2C193%2C194%2C195%2C196%2C197%2C198%2C199%2C200%2C201%2C202%2C203%2C204%2C205%2C206%2C207%2C208%2C209%2C210%2C211%2C212%2C213%2C214%2C215%2C216%2C217%2C218%2C219%2C220%2C221%2C222%2C223%2C224%2C225%2C226%2C227%2C228%2C229%2C230%2C231%2C232%2C233%2C234%2C235%2C236%2C237%2C238%2C239%2C240%2C241%2C242%2C243%2C244%2C245%2C246%2C247%2C248%2C249%2C250%2C251%2C252%2C253%2C254%2C255%2C256%2C257%2C258%2C259%2C260%2C261%2C262%2C263%2C264%2C265%2C266%2C267%2C268%2C269%2C270%2C271%2C272%2C273%2C274%2C275%2C276%2C277%2C278%2C279%2C280%2C281%2C282%2C283%2C284%2C285%2C286%2C287%2C288%2C289%2C290%2C291%2C292%2C293%2C294%2C295%2C296%2C297%2C298%2C299%2C300%2C301%2C302%2C303%2C304%2C305%2C306%2C307%2C308%2C309%2C310%2C311%2C312%2C313%2C314%2C315%2C316%2C317%2C318%2C319%2C320%2C321%2C322%2C323%2C324%2C325%2C326%2C327" method="POST" class="mini_login bz_default_hidden" id="mini_login_bottom" onsubmit="return check_mini_login_fields( '_bottom' );"> + <input id="Bugzilla_login_bottom" class="bz_login" name="Bugzilla_login" title="Login" onfocus="mini_login_on_focus('_bottom')"> + <input class="bz_password" id="Bugzilla_password_bottom" name="Bugzilla_password" title="Password" type="password"> + <input class="bz_password bz_default_hidden bz_mini_login_help" id="Bugzilla_password_dummy_bottom" value="password" title="Password" onfocus="mini_login_on_focus('_bottom')" type="text"> + <input name="Bugzilla_login_token" value="1471867003-KJgUk2ap8bFIjDRK6YDOOYOCcHnapXptMTS4WPXZqMc" type="hidden"> + <input name="GoAheadAndLogIn" value="Log in" id="log_in_bottom" type="submit"> + <script type="text/javascript"> + mini_login_constants = { + "login" : "login", + "warning" : "You must set the login and password before logging in." + }; + + if (YAHOO.env.ua.gecko || YAHOO.env.ua.ie || YAHOO.env.ua.opera) { + YAHOO.util.Event.onDOMReady(function() { + init_mini_login_form('_bottom'); + }); + } + else { + YAHOO.util.Event.on(window, 'load', function () { + window.setTimeout(function() { + init_mini_login_form('_bottom'); + }, 200); + }); + } + </script> + <a href="#" onclick="return hide_mini_login_form('_bottom')">[x]</a> + </form> +</li> +<li id="forgot_container_bottom"> + <span class="separator">| </span> + <a id="forgot_link_bottom" href="https://54.195.32.3/show_bug.cgi?format=multiple&id=2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2C30%2C31%2C32%2C33%2C34%2C35%2C36%2C37%2C38%2C39%2C40%2C41%2C42%2C43%2C44%2C45%2C46%2C47%2C48%2C49%2C50%2C51%2C52%2C53%2C54%2C55%2C56%2C57%2C58%2C59%2C60%2C61%2C62%2C63%2C64%2C66%2C67%2C68%2C69%2C70%2C71%2C72%2C73%2C74%2C75%2C76%2C77%2C78%2C79%2C80%2C81%2C82%2C83%2C86%2C87%2C88%2C89%2C90%2C91%2C92%2C93%2C94%2C95%2C96%2C97%2C98%2C100%2C101%2C102%2C103%2C104%2C105%2C106%2C107%2C108%2C109%2C110%2C111%2C112%2C113%2C114%2C115%2C116%2C117%2C118%2C119%2C120%2C121%2C122%2C123%2C124%2C125%2C126%2C127%2C128%2C129%2C130%2C131%2C132%2C133%2C134%2C135%2C136%2C137%2C138%2C139%2C140%2C141%2C142%2C143%2C144%2C145%2C146%2C147%2C148%2C149%2C150%2C151%2C152%2C153%2C154%2C155%2C156%2C157%2C158%2C159%2C160%2C161%2C162%2C163%2C164%2C165%2C166%2C167%2C168%2C169%2C170%2C171%2C172%2C173%2C174%2C175%2C176%2C177%2C178%2C179%2C180%2C181%2C182%2C183%2C184%2C185%2C186%2C187%2C188%2C189%2C190%2C191%2C192%2C193%2C194%2C195%2C196%2C197%2C198%2C199%2C200%2C201%2C202%2C203%2C204%2C205%2C206%2C207%2C208%2C209%2C210%2C211%2C212%2C213%2C214%2C215%2C216%2C217%2C218%2C219%2C220%2C221%2C222%2C223%2C224%2C225%2C226%2C227%2C228%2C229%2C230%2C231%2C232%2C233%2C234%2C235%2C236%2C237%2C238%2C239%2C240%2C241%2C242%2C243%2C244%2C245%2C246%2C247%2C248%2C249%2C250%2C251%2C252%2C253%2C254%2C255%2C256%2C257%2C258%2C259%2C260%2C261%2C262%2C263%2C264%2C265%2C266%2C267%2C268%2C269%2C270%2C271%2C272%2C273%2C274%2C275%2C276%2C277%2C278%2C279%2C280%2C281%2C282%2C283%2C284%2C285%2C286%2C287%2C288%2C289%2C290%2C291%2C292%2C293%2C294%2C295%2C296%2C297%2C298%2C299%2C300%2C301%2C302%2C303%2C304%2C305%2C306%2C307%2C308%2C309%2C310%2C311%2C312%2C313%2C314%2C315%2C316%2C317%2C318%2C319%2C320%2C321%2C322%2C323%2C324%2C325%2C326%2C327?GoAheadAndLogIn=1#forgot" onclick="return show_forgot_form('_bottom')">Forgot Password</a> + <form action="token.cgi" method="post" id="forgot_form_bottom" class="mini_forgot bz_default_hidden"> + <label for="login_bottom">Login:</label> + <input name="loginname" size="20" id="login_bottom" type="text"> + <input id="forgot_button_bottom" value="Reset Password" type="submit"> + <input name="a" value="reqpw" type="hidden"> + <input id="token_bottom" name="token" value="1471867003-5lx1Ce9n7uN-wUlcFuoOS01dLo5nRpvogqDQiFgpG8Y" type="hidden"> + <a href="#" onclick="return hide_forgot_form('_bottom')">[x]</a> + </form> +</li> +</ul> + </li> + + + + + + +</ul> + + <div class="outro"></div> +</div> + + + +</body></html> \ No newline at end of file diff --git a/general/bugzilla/index.xml b/general/bugzilla/index.xml new file mode 100644 index 0000000000000000000000000000000000000000..b52dc276d0d7d42ea800edf2ae7f79e8bef4ff7b --- /dev/null +++ b/general/bugzilla/index.xml @@ -0,0 +1,33201 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<!DOCTYPE bugzilla SYSTEM "https://bugzilla.tlaplus.net/page.cgi?id=bugzilla.dtd"> +<bugzilla version="4.4.8" urlbase="https://bugzilla.tlaplus.net/" maintainer="bugzilla.tlaplus.net@lemmster.de"> + + <bug> + <bug_id>2</bug_id> + + <creation_ts>2009-11-18 02:42:00 +0000</creation_ts> + <short_desc>Add way to tell if spec has changed since last run of a model, and to look at old spec if it has.</short_desc> + <delta_ts>2010-06-15 12:08:53 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>4</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2009-11-18 02:42:11 +0000</bug_when> + <thetext>Something can be added to the Results Page to indicate if the spec has changed since the last run of the model. More difficult is figuring out a nice, simple interface to allow the user to look at the saved, read-only version of the spec files on which the model was run. One possibility is to add to the Spec explorer an extra level to list, for each model, any modules that have changed since the model was last run. Clicking on the module name would raise a read-lonly module editor on that module--with something in the tab indicating which model the module was saved for. + +(Items 1 and 67 from todo.txt)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>5</commentid> + <comment_count>1</comment_count> + <who name="Simon Zambrovski">simon</who> + <bug_when>2009-11-18 13:38:27 +0000</bug_when> + <thetext>I would make it transparently to the user. If the user clicks on the marker that is pointing to a changed file, the unchanged version should be shown.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>7</commentid> + <comment_count>2</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-11-18 15:09:36 +0000</bug_when> + <thetext>When a user clicks on an action in the error trace or coverage table, what should happen? I think if the module has not been changed, the action should be highlighted in the writable version of the module. If the module has been changed, it should be highlighted in the read-only version.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>8</commentid> + <comment_count>3</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2009-11-19 02:56:39 +0000</bug_when> + <thetext>It's not at all clear what the interface should be. If the user clicks on an error trace produced +6 months ago, he would reasonably expect it to show the saved module. On the other hand, +suppose the user runs the model, clicks on the location of one error, corrects that error, saves the +module, then clicks on the location of the next error. He would not be happy to find himself in the +read-only saved version of the module. + +My initial thought is that, right next to the notification that the spec has been changed, there should be +two buttons the user can push: one choosing the current spec and the other the original spec. (They could both be enabled if he has chosen "original spec" for a different model.) Whichever one he +chooses, it's the modules of that spec that appear in all editor views. + +But that's just my initial thought. I expect I'll find problems with it if I think harder.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>98</commentid> + <comment_count>4</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-01-26 12:05:52 +0000</bug_when> + <thetext>Here's Dan's and my current view on how saved modules should be handled. + +1. Define the current version of a module to be the one in an open editor window, if there is one; else it's the version in the file. If the version of a module saved after running a model is not the current version, then the user should be able to open the saved version by using an option on the TLC Model Checker menu. Clicking on that option shows a list of all modules in the spec for which the saved version of he currently selected model is not the same as the current one. Clicking on one of them opens a read-only editor on that version as a separate tab in the model's view. + +2. If the user double clicks on an action in the error-trace view, then this takes the user to the indicated location in the saved module iff + (a) the saved version is not the current version and + (b) the saved module is open in a tab in the model.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>205</commentid> + <comment_count>5</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-06-15 12:08:53 +0000</bug_when> + <thetext>I implemented what is described in comment 4 with a modification to item 2. That item is now + +If the user double clicks on an action in the error-trace view, then this takes the user to the indicated location in the saved module iff the saved module is open in a tab in the model. The toolbox does not check if the saved version is not the current version.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>3</bug_id> + + <creation_ts>2009-11-18 13:56:00 +0000</creation_ts> + <short_desc>Add reporting of fingerprint collision probability</short_desc> + <delta_ts>2010-07-03 11:51:58 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>6</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-11-18 13:56:34 +0000</bug_when> + <thetext>The Model Checking Results page should list in the General section the information about probability of fingerprint collision that TLC prints after a run that finishes computing the reachable states. (I think it prints it out in the event of a liveness error.) It should say approximately something like: Probability of fingerprint collision: theoretical: 4.3E-15 pragmatic: 8.7E-15</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>4</bug_id> + + <creation_ts>2009-11-19 13:24:00 +0000</creation_ts> + <short_desc>Cannot get the default VM install on Mac OS to run TLC</short_desc> + <delta_ts>2009-12-17 13:55:51 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 32-bit</rep_platform> + <op_sys>Mac OS</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P1</priority> + <bug_severity>blocker</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Simon Zambrovski">simon</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>9</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-11-19 13:24:59 +0000</bug_when> + <thetext>In TLCProcessJob, the method JavaRuntime.getDefaultVMInstall() returns null on Mac OS. A non-null value is required to run TLC.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>16</commentid> + <comment_count>1</comment_count> + <who name="Simon Zambrovski">simon</who> + <bug_when>2009-11-27 22:51:38 +0000</bug_when> + <thetext>On Leopard, Carbon, 32Bit delivers the code, run in Eclipse (not RCP) + +IVMInstall install = JavaRuntime.getDefaultVMInstall(); +System.out.println(install); +-> org.eclipse.jdt.internal.launching.macosx.MacOSXVMInstall@31d55cc +System.out.println(install.getInstallLocation()); +-> /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>17</commentid> + <comment_count>2</comment_count> + <who name="Simon Zambrovski">simon</who> + <bug_when>2009-11-27 23:01:00 +0000</bug_when> + <thetext>The same platform / installation delivers null in RCP mode. +(In reply to comment #1) +> On Leopard, Carbon, 32Bit delivers the code, run in Eclipse (not RCP) +> +> IVMInstall install = JavaRuntime.getDefaultVMInstall(); +> System.out.println(install); +> -> org.eclipse.jdt.internal.launching.macosx.MacOSXVMInstall@31d55cc +> System.out.println(install.getInstallLocation()); +> -> /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>18</commentid> + <comment_count>3</comment_count> + <who name="Simon Zambrovski">simon</who> + <bug_when>2009-11-27 23:02:23 +0000</bug_when> + <thetext>Another reference describing the same bug: http://www.eclipse.org/forums/index.php?t=msg&goto=495006&S=af54b9bdf2bc342a1f3154a501e149b5</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>20</commentid> + <comment_count>4</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-11-28 16:13:07 +0000</bug_when> + <thetext>I posted the message that you linked to in the last comment.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>45</commentid> + <comment_count>5</comment_count> + <who name="Simon Zambrovski">simon</who> + <bug_when>2009-12-16 16:36:20 +0000</bug_when> + <thetext>Added the plugin dependency to org.eclipse.jdt.launching.macosx to enable Mac OSx support. Could someone try if it solved the problem?</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>46</commentid> + <comment_count>6</comment_count> + <who name="Simon Zambrovski">simon</who> + <bug_when>2009-12-17 13:55:51 +0000</bug_when> + <thetext>Adding a mandatory reference to the OS-dependent plugin was wrong and didn't allow to run the dependent plugin on other platforms. But I made the reference "optional" (click on properties in the plugin.xml editor, dependency tab). Please try if it works.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>5</bug_id> + + <creation_ts>2009-11-19 15:01:00 +0000</creation_ts> + <short_desc>The help view does not always receive focus when the user clicks help</short_desc> + <delta_ts>2009-11-19 15:48:23 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Toolbox Help</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>10</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-11-19 15:01:30 +0000</bug_when> + <thetext>The help menu is not getting the focus if it doesn't already have the focus and it either is in or is being opened into a folder that has the focus.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>11</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-11-19 15:48:23 +0000</bug_when> + <thetext>This is now fixed by activating the help view in HelpHandler after it is opened by displayDynamicHelp(). In cases where the view already receives focus, this has no effect. In cases when it previously did not receive focus, activating the help view gives it focus.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>6</bug_id> + + <creation_ts>2009-11-19 16:09:00 +0000</creation_ts> + <short_desc>The rename spec command does not behave properly</short_desc> + <delta_ts>2009-11-27 16:51:03 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>12</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-11-19 16:09:23 +0000</bug_when> + <thetext>The rename spec command doesn't do the right thing if a spec already exists that has the same name ignoring case but with different capitalization. In particular, a ResourcesException is thrown saying "A resource exists with a different case". If the spec being renamed is open at the time, then a RuntimeException is thrown saying "Specification newSpecName not found" and the toolbox returns to the welcome view. + +In addition, if a spec is renamed to a name "newName" when there exists a folder newName.toolbox, this seems to cause the same problem. + +There may be other renaming actions that can cause the same resource problems.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>14</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-11-27 16:51:01 +0000</bug_when> + <thetext>I changed the renaming validation method to check if any specifications exist that have the same name but a different case. I cannot reproduce the problem that I said occured when there exists a folder newName.toolbox that has not been opened as a specification and the user renames an open specification to "newName". I will assume that I made this problem up, so the rename spec bug has been fixed.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>15</commentid> + <comment_count>2</comment_count> + <attachid>2</attachid> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-11-27 16:51:03 +0000</bug_when> + <thetext>Created attachment 2 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>2</attachid> + <date>2009-11-27 16:51:00 +0000</date> + <delta_ts>2009-11-27 16:51:03 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>28006</size> + <attacher name="Dan Ricketts">daniel.bmore.ricketts</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>7</bug_id> + + <creation_ts>2009-11-25 15:09:00 +0000</creation_ts> + <short_desc>Parsing errors in the MC file contain "Encountered ----" sometimes</short_desc> + <delta_ts>2009-11-27 23:29:22 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>13</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-11-25 15:09:36 +0000</bug_when> + <thetext>Entering an expression such as "1+" followed by nothing in fields of the model editor will result in a parse error message that says "Encountered ----". The parser finds "----" in the MC.tla file because that is the separator between sections. This should probably be replaced with something more useful for the user.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>19</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2009-11-27 23:29:22 +0000</bug_when> + <thetext>I wouldn't bother worrying about that. The message is nicely ambiguous, since it could +be interpreted to mean that the parser encountered something that it either can't or isn't +bothering to tell you what. More confusing is the stack trace part of the message that talks +about line numbers in the MC file. I'd suggest subtracting the suitable number from the +line numbers so numbers from 1 through the number of lines in the expression correspond +to what the user typed. This will leave most of the line numbers in the stack trace negative, +which will tell the user that these are not lines he should expect to see. However, this +has low priority.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>8</bug_id> + + <creation_ts>2009-11-30 02:10:00 +0000</creation_ts> + <short_desc>Add module-editor line width preference</short_desc> + <delta_ts>2010-07-01 12:09:42 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>21</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2009-11-30 02:10:38 +0000</bug_when> + <thetext>Add a new parameter that is a default line width for modules. This should be put on a new Module Editor preferences page. (it's not clear to me if any of the General preferences that apply to the module editor should be moved to this page. That should be done only if they apply only to the module editor and not to anything else, such as the Model Editor.) Its default value should be 77. + +The creation of a new module file by the Toolbox (for example, when opening a new spec with a new file) should use the parameter as follows. Let the value of this parameter be P. Then + +- The closing line of the module should consist of P "=" characters. + +- The opening line of the module should consist of the following: + + N "-" characters, 1 space character, "MODULE", one space character, + the module name, one space character, M "-" characters + + where N and M are the smallest integers greater than or equal to 4 such that: + (a) M equals either N or N-1, and + (b) The total number of characters in the line is greater than or equal to P + + I believe this means that, with Java notation, + N = Max(4, (Q / 2) + (Q%2)) + M = Max(4, Q / 2) + where Q = P - ("MODULE".length + ModuleName.length + 3) + +Also, rename the items under TLA+ Preferences to remove "Preferences" from their names--e.g., change "TLA+ Parser Preferences" to "TLA+ Parser".</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>22</commentid> + <comment_count>1</comment_count> + <who name="Simon Zambrovski">simon</who> + <bug_when>2009-11-30 11:54:50 +0000</bug_when> + <thetext>The preference renaming is moved to the separate Bug 9.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>24</commentid> + <comment_count>2</comment_count> + <who name="Simon Zambrovski">simon</who> + <bug_when>2009-11-30 12:02:26 +0000</bug_when> + <thetext>What is to do with those numbers, M, N, P and Q? + +The formulas are not needed for determination of width of new modules (it is trivial, since the content of the module is stored in a template). + +I don't see any other purpose of the editor width, beyond the usage in the formater. Writing a formater is a task which is usually more than finding out how long the line is. + +The GENERAL setting of the TEXT EDITOR (not TLA+ Editor) should not be changed.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>9</bug_id> + + <creation_ts>2009-11-30 11:55:00 +0000</creation_ts> + <short_desc>Rename Preference Pages</short_desc> + <delta_ts>2009-12-10 12:53:42 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Simon Zambrovski">simon</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>23</commentid> + <comment_count>0</comment_count> + <who name="Simon Zambrovski">simon</who> + <bug_when>2009-11-30 11:55:46 +0000</bug_when> + <thetext>Rename the items under TLA+ Preferences to remove "Preferences" from +their names -- e.g., change "TLA+ Parser Preferences" to "TLA+ Parser".</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>42</commentid> + <comment_count>1</comment_count> + <attachid>3</attachid> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-12-10 12:53:42 +0000</bug_when> + <thetext>Created attachment 3 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>3</attachid> + <date>2009-12-10 12:53:00 +0000</date> + <delta_ts>2009-12-10 12:53:42 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>937</size> + <attacher name="Dan Ricketts">daniel.bmore.ricketts</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>10</bug_id> + + <creation_ts>2009-11-30 17:16:00 +0000</creation_ts> + <short_desc>Eclipse buttons don't work on Linux ubuntu 9.10</short_desc> + <delta_ts>2011-07-01 20:08:42 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Linux</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>critical</bug_severity> + <target_milestone>---</target_milestone> + <dependson>116</dependson> + + <everconfirmed>1</everconfirmed> + <reporter name="Simon Zambrovski">simon</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>bugzilla.tlaplus.net</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>25</commentid> + <comment_count>0</comment_count> + <who name="Simon Zambrovski">simon</who> + <bug_when>2009-11-30 17:16:33 +0000</bug_when> + <thetext>I tried it in my linux (ubuntu Karmic) machine. +The toolbox, quickly used around 1 gb (1172 mb) of my virtual memory +before opening a file. +Having 1 GB of physical memory in my laptop, +only opening a spec file almost like forever. +I don't think it is a normal situation. + +I tried to upgrade my machine using the latest stable kernel +2.6.31-15-generic, +but the problem remains. + +Other applications (such as netbeans, eclipse, mysql) run normally in my +machine. +I'm not sure what went wrong. + + +Sincerely yours, +Ade Azurat (ade@cs.ui.ac.id)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>31</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-12-04 17:22:57 +0000</bug_when> + <thetext>This is not a memory issue. The physical memory usage of the toolbox on startup was only 60MB on his machine. He was unable to open a spec because the Finish button did not work properly on the New Spec Wizard on his machine. In particular, clicking on it does nothing. There is at least one other way to actually select Finish: hold Control and press Enter. + +It turns out this is an eclipse bug. The same thing occurs with some buttons in eclipse on ubuntu Karmic. This problem is listed many times on bug lists. For example, + +https://bugs.eclipse.org/bugs/show_bug.cgi?id=291257 +https://bugs.launchpad.net/gtk/+bug/442078/comments/28 +https://bugs.launchpad.net/ubuntu/+source/eclipse/+bug/443004 + +From what I've gathered from these bug lists, the most recent release of ubuntu (and maybe some past releases) contains an updated version of gtk, which I've learned is a widget toolkit for greating GUIs. The second link explains that if eclipse had used gtk properly in the past, then this new version would not cause problems, but evidently, eclipse has been using gtk in strange ways that only happened to work on past version but don't work on this new version. The button clicking bug is just one of the problems that exists in eclipse on the newest version of ubuntu. + +Some of the messages in the first link explain that eclipse 3.5.2 and 3.6 appear to fix the problem, but these versions are still in development. We could get one of the builds of 3.5.2 and use this as the new target platform, but since its not officially released, who knows what bugs this would introduce. This seems like a bad option to me. According to a message on the first link, the target date to release 3.5.2 is February 26, 2010. + +The GTK developers included a flag that allows the previous behavior of GTK to be used by an application. This flag is set by setting the the environment variable GTK_NATIVE_WINDOWS=1 . I tried this on the linux machine I've been using in Orsay, and it does seem to fix the problem. The only way I've found to set this is to run the command + +export GTK_NATIVE_WINDOWS=1 + +in a shell and then run the toolbox from that shell. It would be annoying for the user to have to do this every time, so it might be better to just include those two commands in a shell script that the user would run. We could do this while waiting for eclipse 3.5.2 to be released. Or maybe there is a nicer way to set this flag that I haven't found. + +Another option as Leslie suggested is to just put a message in every wizard and dialog explaining what to do if clicking on a button doesn't work. Unfortunately, there may be issues with widgets in the toolbox besides buttons that we haven't discovered. + +Any thoughts on this?</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>41</commentid> + <comment_count>2</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-12-10 12:44:31 +0000</bug_when> + <thetext>This is a slightly updated description of the bug. Some buttons don't work properly on Eclipse and the Toolbox on some platforms. In particular, any platform that uses GTK+ version 2.18 (the latest version) will experience this bug. The desktop environment GNOME uses GTK+ as its base widget toolkit, and the latest version of GNOME (released in September, 2009) uses GTK+2.18. GNOME is the default desktop environment for Fedora, Debian, Ubuntu, and OpenSolaris, so those systems with the latest version of GNOME probably experience the problem. We don't have a distribution for Solaris, so I guess that's not an issue right now. The wikipedia page for GTK+ lists a few other desktop environments that use GTK+ and can run on Linux machines. They are Xfce, LXDE, and ROX Desktop. They don't seem to be very widely used, but we can note those on the website just in case. + +The complete extent of the bug is not clear. However, from the bug forums and from my tests in Orsay, I believe that the button problem only occurs with the default button in a dialog or wizard. The default button is usually a different color and can be selected by pressing Enter (when they work properly). On platforms with the bug clicking on these buttons will cause the button to appear pressed, but nothing else will happen. If this happens, the user should try one or more of the following: + +1.) Press Enter +2.) Hold Control and press Enter +3.) Let the mouse hover over the button and press Enter +4.) Let the mouse hover over the button and press Space + +There may be other ways to select the buttons, but these are the one's that people have mentioned in the bug forums. Its also worth noting that if a user experiences any other strange behavior with a widget on one of those platforms, then there's a good chance its the same bug. Some of the posts on the bug forums mentioned other problems with GTK+ 2.18 besides the buttons. I don't believe these problems are relevant to the Toolbox, but there may be some other non-button problems that are. + +The workaround provided by the GTK+ developers is to set GDK_NATIVE_WINDOWS=true in a shell before launching the toolbox (or eclipse) from that shell. This causes GTK+ to behave as it did before 2.18. The real fix will be provided in Eclipse 3.5.2 which is scheduled for release on February 26, 2010.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>118</commentid> + <comment_count>3</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-02 15:12:20 +0000</bug_when> + <thetext>The trace explorer buttons for Explore and Restore seem to be affected by this bug.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>286</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-11 16:45:40 +0000</bug_when> + <thetext>Once fixed the system specific Instructions for Linux [0] can be removed from the web page. + +[0] http://research.microsoft.com/en-us/um/people/lamport/tla/toolbox.html#downloading</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>417</commentid> + <comment_count>5</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 20:08:42 +0000</bug_when> + <thetext>The new Maven/Tycho based build has upgraded the toolbox dependency to Eclipse 3.6, marking as fixed.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>11</bug_id> + + <creation_ts>2009-11-30 18:18:00 +0000</creation_ts> + <short_desc>Add the notion of a model being locked</short_desc> + <delta_ts>2010-01-25 14:45:17 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>26</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-11-30 18:18:27 +0000</bug_when> + <thetext>We still have the problem that TLC might be running for weeks, and the user in the meantime changed the spec. When TLC stops running, the model gets revalidated and stuff that was in the model configuration gets lost. Here is a possible solution: Add the notion of a model being LOCKED, meaning that it cannot be changed in any way, meaning that it is read only and it doesn't change to conform to the current spec. (This state actually exists in the toolbox now: it is called "model in use".) In particular, it conforms to the copy of the spec that's salted away with the model. Running the spec locks the model. There will also be a menu item that the user can select to lock the spec himself. (This will allow the user to protect himself from accidentally modifying or re-running a spec by mistake--perhaps losing a trace that took weeks for TLC to produce.) We must decide what should happen to the lock state when a TLC run completes. Should the user have to explicitly unlock it? I suggest that it be unlocked when the run completes if and only if that run did not take too long--where "too long" is a user-settable preference.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>27</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-12-02 17:57:10 +0000</bug_when> + <thetext>I'll add a field to the TLC preference page that specifies how long the model must run in order to remain locked when TLC terminates. I'll add a lock and an unlock button to the toolbars that currently contain the buttons for running, validating, and stopping. + +I think there should be a notion of an explicit user lock and an automatic lock. A user lock occurs when the user clicks on the lock button. An automatic lock occurs when TLC starts. A model with a user lock can only be unlocked when the user clicks the unlock button. A model with an automatic lock can be unlocked if TLC terminates in less than the specified time or if TLC terminates in more than the specified time and the user clicks the unlock button after TLC completes. If a user locks a model while there is an automatic lock (he clicks the lock button while the model is running), then the user lock replaces the automatic lock. + +When the model is locked, all fields in the model editor will be disabled (they will have the grayed out look, and the user will not be able to edit them). The lock button will be enabled when TLC is running and the unlock button will be disabled. When TLC is not running, the unlock button will be enabled only when the model is locked and the lock button will be enabled only when the model is unlocked.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>28</commentid> + <comment_count>2</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2009-12-02 23:38:13 +0000</bug_when> + <thetext>This sounds good.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>33</commentid> + <comment_count>3</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-12-07 11:23:17 +0000</bug_when> + <thetext>Should the user be able to rename the model when it is locked?</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>39</commentid> + <comment_count>4</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2009-12-07 19:14:44 +0000</bug_when> + <thetext>It doesn't matter whether or not the user is allowed to rename a locked model. (If he is allowed to remain it, that shouldn't unlock it.)</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>12</bug_id> + + <creation_ts>2009-12-02 23:44:00 +0000</creation_ts> + <short_desc>Toolbox checking unselected behavior spec options.</short_desc> + <delta_ts>2010-01-27 15:40:14 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>29</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2009-12-02 23:44:42 +0000</bug_when> + <thetext>When I change the spec to remove all variables and save it and then open an existing model, the model correctly opens with the "No behavior spec" option selected and the other options disabled. However, when validating the Toolbox, it complains that the Init and Next formulas left over from the previous version (which I can't change because the option is disabled) are undefined. We should make sure that no entry from a disabled field is ever put into the MC file.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>30</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-12-03 00:10:14 +0000</bug_when> + <thetext>I can't seem to reproduce this error. Can you send me the spec and model that caused this problem?</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>34</commentid> + <comment_count>2</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-12-07 11:25:32 +0000</bug_when> + <thetext>Since this does not seem to be reproducible, I'm marking it as worksforme.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>50</commentid> + <comment_count>3</comment_count> + <attachid>4</attachid> + <who name="Leslie Lamport">lamport</who> + <bug_when>2009-12-21 02:39:24 +0000</bug_when> + <thetext>Created attachment 4 +a spec + +see description</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>51</commentid> + <comment_count>4</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2009-12-21 02:50:29 +0000</bug_when> + <thetext>Open a new spec with this root file. Create a model for it, assigning arbitrary small +integer values to M and N and using Init and Next as the initial predicate and next-state +action. Add the invariant + + (x=y) => x = GCD(M, N) + +Run the model. It will produce an error, which you can ignore. + +Now enter ===== right before the CONSTANTS declaration and save the module. + +Go to the model and validate it. Depending on the Toolbox's mood, you'll get 5 or 7 errors. If you get 7 errors, +two of them will be complaining about Init and Spec. But you may get only 5, in which case it is correctly +complaining about the bad Invariant. However, it's impossible to remove the invariant because the invariant +section can't be opened. This is not a terrible problem; one just has to add a variable to the spec. But it's a +nuisance--especially if the randomly occurring complaint about Init and Spec occurs.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>52</commentid> + <comment_count>5</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2009-12-21 16:01:12 +0000</bug_when> + <thetext>The statement in my previous comment that the 5 errors in the Invariant are not +a bug was wrong. You can't check invariants or other properties if there's no +spec, so they should be ignored in that case. Other parts of the model that +should be disabled and ignored when there's no behavioral spec are: +- Recover from Checkpoint +- Number of workers +- State and Action constraint +- TLC Options</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>101</commentid> + <comment_count>6</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-27 15:40:14 +0000</bug_when> + <thetext>I don't believe that number of workers makes any difference. The toolbox was already disabling the invariants and properties sections but was not ignoring them when it launched TLC. It now ignores them. It also ignores checkpoint recovery, state and action contraints, and anything in the TLC Options section. I found that disabling the State Constraints, Action Constraints, and TLC Options sections creates some bizarre behavior on the Advanced Options page, so I decided not to do this.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>4</attachid> + <date>2009-12-21 02:39:00 +0000</date> + <delta_ts>2009-12-21 02:39:24 +0000</delta_ts> + <desc>a spec</desc> + <filename>Euclid.tla</filename> + <type>application/octet-stream</type> + <size>968</size> + <attacher name="Leslie Lamport">lamport</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>13</bug_id> + + <creation_ts>2009-12-07 11:22:00 +0000</creation_ts> + <short_desc>Trace exploration</short_desc> + <delta_ts>2010-01-27 11:43:23 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>32</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-12-07 11:22:48 +0000</bug_when> + <thetext>After an error trace is generated from a run of TLC, the user should be able to enter one or more expressions for which he wants to see the value at each state of the trace.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>36</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-12-07 17:00:12 +0000</bug_when> + <thetext>Currently, I think the TLC Error View should contain a section that looks the same as the invariants or the properties sections. This would require some re-implementation of the lower part of the view's sash form, but I think this would be a nice interface. In addition to the Add, Edit, and Remove buttons, the section will contain a run button. I'm not yet sure where the best place for this button is. Its necessary to determine if an expression contains primed variables. We could do this by providing the user with a checkbox for each expression that indicates if it has primed variables. We could also run SANY to determine if an expression has primed variables. This would require running SANY once to determine which expressions have primed variables, once to parse the initial predicate and next-state relations that are generated for exploring the trace, and once when TLC runs. I think it is preferable to provide the user with a checkbox and display the error produced by TLC if the user makes the wrong selection. + +Clicking the run button will execute the trace explorer, unless one of the following conditions is true: + +1.) The model is unlocked and the spec is not parsed. +2.) The model has a validation error (If the validation error is in the spec, init and next, invariants, properties, or constraints sections, this should not prevent the user from running the trace explorer, although this might be a little more difficult to implement). + +If one of these conditions is true, then an error window will pop up explaining the error. If neither is true, the following steps will occur: + +1.) The toolbox will run SANY to validate the expressions. If there are errors, these will be displayed as red error bubbles (the same as in the model editor). + +2.) If SANY finds no errors, TLC will be run to evaluate the expression at each state of the trace (If the expression contains primed variables, then it cannot be evaluated for the last state of the trace). + +3.) If TLC produces an error evaluating the expressions at any state, then I think this error should be appended to the existing message in the error box at the top of the error view. Another option is to have a separate box for reporting errors from evaluating expressions for trace exploration. A third option is to display the errors in error bubbles as with validation errors. + +4.) If TLC does not produce an error, then the existing error trace will be replaced with a new error trace. Each state will be identical to the corresponding state in the previous trace except that there will be one additional row for each expression that was evaluated. The left column of a row corresponding to an expression will have the expression and the right column will have its value. If an expression contains primed variables, then the value column of its row in the final state will have something like "--" to indicate that it cannot be evaluated. + +A while ago Leslie and I discussed the meaning of primed variables when exploring the error trace. I'm not sure if we came to a conclusion on this point, but I think that if an expression contains the primed value of a variable x, then the value of that expression at state number z should use the value of x in state number z+1. For example, consider the following trace. + +STATE 1: <Initial predicate> + /\ x = 0 + /\ y = 0 + + STATE 2: <Action line 8, col 3 to line 9, col 15 of module Test> + /\ x = 1 + /\ y = 0 + + STATE 3: <Action line 8, col 3 to line 9, col 15 of module Test> + /\ x = 2 + /\ y = 1 + + STATE 4: <Action line 8, col 3 to line 9, col 15 of module Test> + /\ x = 3 + /\ y = 3 + +If the user wants to evaluate the expression x'+y, then I think he should see the following trace. + +STATE 1: <Initial predicate> + /\ x = 0 + /\ y = 0 + \* x'+y = 1 + + STATE 2: <Action line 8, col 3 to line 9, col 15 of module Test> + /\ x = 1 + /\ y = 0 + \* x'+y = 2 + + STATE 3: <Action line 8, col 3 to line 9, col 15 of module Test> + /\ x = 2 + /\ y = 1 + \* x'+y = 4 + + STATE 4: <Action line 8, col 3 to line 9, col 15 of module Test> + /\ x = 3 + /\ y = 3 + \* x'+y = "--" + +The other option, which would be easier to implement, but which makes less sense to me would be to display the following trace. + +STATE 1: <Initial predicate> + /\ x = 0 + /\ y = 0 + \* x'+y = "--" + + STATE 2: <Action line 8, col 3 to line 9, col 15 of module Test> + /\ x = 1 + /\ y = 0 + \* x'+y = 1 + + STATE 3: <Action line 8, col 3 to line 9, col 15 of module Test> + /\ x = 2 + /\ y = 1 + \* x'+y = 2 + + STATE 4: <Action line 8, col 3 to line 9, col 15 of module Test> + /\ x = 3 + /\ y = 3 + \* x'+y = 4 + +In the preceding trace, the value of x' in the second state is equal to the value of x in the second state instead of the value of x in the third state.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>37</commentid> + <comment_count>2</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-12-07 17:30:49 +0000</bug_when> + <thetext> +1.) Create three new files in the model folder, TE.tla, TE.cfg, TE.out (TE stands for trace explorer, might need to choose something that the user is less likely to choose as a module name). + +2.) For each expression the user enters for trace exploration, assign an identifier that is unlikely to appear in the spec. Declare these identifiers as variables in TE.tla. Alternatively, the user could be responsible for assigning identifiers to expressions. + +3.) Fill TE.cfg and TE.tla with the values of constants, additional definitions, definition overrides, and additional model values. + +4.) Write the initial predicate and next-state relation to TE.cfg and TE.tla. This is best illustrated with an example. The trace is the following: + +STATE 1: <Initial predicate> + /\ x = 0 + /\ y = 0 + +STATE 2: <Action line 8, col 3 to line 9, col 15 of module Test> + /\ x = 1 + /\ y = 0 + +STATE 3: <Action line 8, col 3 to line 9, col 15 of module Test> + /\ x = 2 + /\ y = 1 + +STATE 4: <Action line 8, col 3 to line 9, col 15 of module Test> + /\ x = 3 + /\ y = 3 + +The user wants to evaluate two expressions: + +x + y +x' > y + +The file TE.tla will define two new variables: + +VARIABLES sum, big + +The variables are named "sum" and "big" for the simplicity of this example. In reality they will be something like "trace_2348902347238", unless the user is responsible to assigning labels to the expressions. The file will also define two new identifiers: + +sum_def == x + y +big_def == x' >y + +We define the initial predicate and next-state relation as follows: + +TInit == + /\ x = 0 + /\ y = 0 + /\ sum = sum_def + /\ big = "--" + +TNext == + \/ /\ x = 0 + /\ y = 0 + /\ x' = 1 + /\ y' = 0 + /\ sum' = sum_def' + /\ big' = big_def + + \/ /\ x = 1 + /\ y = 0 + /\ x' = 2 + /\ y' = 1 + /\ sum' = sum_def' + /\ big' = big_def + + \/ /\ x = 2 + /\ y = 1 + /\ x' = 3 + /\ y' = 3 + /\ sum' = sum_def' + /\ big' = big_def + +The expression defined by big_def has primed variables so the variable big takes the value "--" in the initial state predicate. The expression defined by sum_def does not contain primed variables. This will produce an error trace by defining the invariant: + +~(x=3/\y=3) + +The TLC Error View will have to alter this error trace if it is to display it in the way I described in the previous comment. In particular, the value of big must be shifted up one state and the last state should have that big = "--". Thus, the value of big in the second state will be displayed with the first state in the error view. + +The toolbox will call TLC on the root file TE.tla with config file TE.cfg and write its output to TE.out.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>38</commentid> + <comment_count>3</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-12-07 18:15:23 +0000</bug_when> + <thetext>One question that I forgot to put in the first comment. When the model is unlocked, should running the trace explorer cause module files to be recopied to the model directory?</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>40</commentid> + <comment_count>4</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2009-12-07 19:57:57 +0000</bug_when> + <thetext> + + Currently, I think the TLC Error View should contain a section + that looks the same as the invariants or the properties sections. + This would require some re-implementation of the lower part of the + view's sash form, but I think this would be a nice interface. In + addition to the Add, Edit, and Remove buttons, the section will + contain a run button. I'm not yet sure where the best place for + this button is. + +The button should be the same place as the Add/Edit/Remove buttons. +And it should be an "explore" button. The button to restore the original +trace (see below) should be in the same place. + + Its necessary to determine if an expression contains primed + variables. We could do this by providing the user with a checkbox + for each expression that indicates if it has primed variables. We + could also run SANY to determine if an expression has primed + variables. This would require running SANY once to determine which + expressions have primed variables, once to parse the initial + predicate and next-state relations that are generated for exploring + the trace, and once when TLC runs. + +The second run of SANY isn't necessary. If the expressions parse +correctly in the first parse, then the initial predicate and +next-state actions that the Toolbox creates will also parse correctly. +(This isn't completely trivial, but it's easy to ensure. For example, +the first module that SANY parses should declare the new variables to +make sure that they are legal variable names.) + + I think it is preferable to provide the user with a checkbox and + display the error produced by TLC if the user makes the wrong + selection. + +Since it doesn't require an extra parse, the Toolbox should determine +this by itself. + + Clicking the run button will execute the trace explorer, unless + one of the following conditions is true: + + 1.) The model is unlocked and the spec is not parsed. + 2.) The model has a validation error (If the validation error + is in the spec, init and next, invariants, properties, or + constraints sections, this should not prevent the user from + running the trace explorer, although this might be a little + more difficult to implement). + +It's not worth worrying about this. The explorer should be run only +if there is no validation error. + + If one of these conditions is true, then an error window will pop + up explaining the error. If neither is true, the following steps + will occur: + + 1.) The toolbox will run SANY to validate the expressions. If + there are errors, these will be displayed as red error bubbles + (the same as in the model editor). + + 2.) If SANY finds no errors, TLC will be run to evaluate the + expression at each state of the trace (If the expression + contains primed variables, then it cannot be evaluated for the + last state of the trace). + + 3.) If TLC produces an error evaluating the expressions at any + state, then I think this error should be appended to the + existing message in the error box at the top of the error view. + Another option is to have a separate box for reporting errors + from evaluating expressions for trace exploration. A third + option is to display the errors in error bubbles as with + validation errors. + +The original error should not be destroyed or mucked with. Remember +That it might have taken TLC a week to produce that message. I +suggest that in case trace exploration yields an error, that error +should replace the original error in the window--with some clear +indication that the error occurred in trace exploration. If the +exploration also produces an error trace, then that trace should be +displayed in the trace view. If the trace explorer succeeds on the +next try, the original error message is restored. When the user +clicks on the button to restore the original trace (see below), that +should also restore the original error message. + + 4.) If TLC does not produce an error, then the existing error + trace will be replaced with a new error trace. + +This replacement is not permanent. The original error trace must be +saved, and there must be a button that permits the use to restore it. + + Each state will be identical to the corresponding state in the + previous trace except that there will be one additional row for + each expression that was evaluated. The left column of a row + corresponding to an expression will have the expression and the + right column will have its value. If an expression contains + primed variables, then the value column of its row in the final + state will have something like "--" to indicate that it cannot be + evaluated. + + A while ago Leslie and I discussed the meaning of primed variables + when exploring the error trace. I'm not sure if we came to a + conclusion on this point, but I think that if an expression contains + the primed value of a variable x, then the value of that expression + at state number z should use the value of x in state number z+1. + For example... + +Yes, that's correct + + 1.) Create three new files in the model folder, TE.tla, + TE.cfg, TE.out (TE stands for trace explorer, might need to + choose something that the user is less likely to choose as a + module name). + +TE is fine. As with MC, the user shouldn't be allowed to create a +module named TE. + + 2.) For each expression the user enters for trace exploration, + assign an identifier that is unlikely to appear in the spec. + Declare these identifiers as variables in TE.tla. Alternatively, + the user could be responsible for assigning identifiers to + expressions. + +It's better to have the user choose the identifier. If the user +defines + + Sum2 == x'+y + +Then the error trace would contain something like + + STATE 1: <Initial predicate> + /\ x = 0 + /\ y = 0 + /\ Sum2 = 1 + + STATE 2: <Action line 8, col 3 to line 9, col 15 of module Test> + /\ x = 1 + /\ y = 0 + /\ Sum2 = ... + +One reason for this is that it would be good to allow the user to +change which variables' values are displayed and in what order. If +this feature is implemented, Sum2 would be treated as just another +variable like x and y.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>100</commentid> + <comment_count>5</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-27 11:43:23 +0000</bug_when> + <thetext>When the trace from the trace explorer is shown for a given model, it will continue to be shown in the error view for that model unless model checking is run, the restore button is pressed, or the error hyperlink on the results page is pressed. Closing and re-opening the toolbox, switching to another model and back, closing and re-opening using the menu item in the TLC menu will show in the error whatever errors were previously there for that model (errors from the trace explorer or errors from model checking). + +I decided to make the hyperlink on the results page restore the original error/trace in case the trace explorer somehow messes up the error view so that the restore button does not appear.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>14</bug_id> + + <creation_ts>2009-12-07 13:53:00 +0000</creation_ts> + <short_desc>The column numbers do not appear in module editor</short_desc> + <delta_ts>2010-01-29 13:13:01 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>35</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-12-07 13:53:32 +0000</bug_when> + <thetext>At one point I think the column number of the cursor appeared at the bottom of the module editor. I may have removed this when turning the module editor into a multipage editor to include a pretty printed version of the module.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>107</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-29 13:13:01 +0000</bug_when> + <thetext>I created a class TLAMultiPageEditorActionBarContributor that acts as the contributor class for the TLAEditorAndPDFViewer class that is the editor for TLA modules. The contributor adds the cursor position to the status line at the bottom of the toolbox when a text editor is active. I also re-added the Content Assist and Content Tip menu items to the edit menu that I had removed when I made the editor for tla modules into a multi page editor. I'm not sure what the Content Tip item does, but it was there before.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>15</bug_id> + + <creation_ts>2009-12-10 14:49:00 +0000</creation_ts> + <short_desc>Rename or deleting root file outside toolbox produces incorrect editor page</short_desc> + <delta_ts>2011-05-11 17:02:38 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>bugzilla.tlaplus.net</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>43</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-12-10 14:49:24 +0000</bug_when> + <thetext>If the user renames or deletes a root file outside of the toolbox and then opens the spec, the toolbox displays a page that says + + Resource is out of sync with the file system: '/test/test10.tla'. + + Press F5 or select File -> Refresh to refresh the file. + +Pressing F5 does nothing and File -> Refresh does not exist in the toolbox, so I guess this page is generated by eclipse code. The toolbox also shows the Parsing Error view which says "Could not find module."</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>44</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2009-12-10 14:50:02 +0000</bug_when> + <thetext>A solution is to attach a resource change listener to the work space. If the root file is renamed the listener would change the spec to point to the new root file name. I think that it would also have to change the name of the root module to equal the new file name. If the root file is deleted, the listener would change the spec to reflect this and the open spec handler would have to check for this before opening an editor on that file. + +I don't know that this would always put the toolbox in sync with the file system, because its not clear exactly when resource change listeners get notified of resource changes. + +An easier solution would be to simply check before opening an editor on the root file if that file still exists with the name the toolbox thinks it has and display an sensible error message to the user if it doesn't.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>173</commentid> + <comment_count>2</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-03-19 15:44:47 +0000</bug_when> + <thetext>Resource change listeners are notified of resource changes that occur outside of the toolbox only after the method refreshLocal is called on a directory containing the changed resources.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>289</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-11 17:01:40 +0000</bug_when> + <thetext>AFAIR ResourceChangeListener only track resources while the workbench is up and running. If spec or .toolbox/* files are moved/deleted while the Toolbox is down has to be handled too. Otherwise exception like the following show up in the log and/or current editor: + +org.eclipse.ui.PartInitException: The file does not exist. + at +org.eclipse.ui.texteditor.AbstractTextEditor.internalInit(AbstractTextEditor.java:3075) + at +org.eclipse.ui.texteditor.AbstractTextEditor.init(AbstractTextEditor.java:3088) + at org.lamport.tla.toolbox.editor.basic.TLAEditor.init(TLAEditor.java:175) + at +org.eclipse.ui.part.MultiPageEditorPart.addPage(MultiPageEditorPart.java:237) + at org.eclipse.ui.forms.editor.FormEditor.addPage(FormEditor.java:325) + at +org.lamport.tla.toolbox.editor.basic.TLAEditorAndPDFViewer.addPages(TLAEditorAndPDFViewer.java:70) + at org.eclipse.ui.forms.editor.FormEditor.createPages(FormEditor.java:138) + at +org.eclipse.ui.part.MultiPageEditorPart.createPartControl(MultiPageEditorPart.java:348) + at +org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + at +org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + at +org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at +org.eclipse.ui.internal.EditorAreaHelper.setVisibleEditor(EditorAreaHelper.java:271) + at +org.eclipse.ui.internal.EditorManager.setVisibleEditor(EditorManager.java:1429) + at +org.eclipse.ui.internal.EditorManager$5.runWithException(EditorManager.java:942) + at +org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at +org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803) + at +org.eclipse.ui.internal.Workbench$31.runWithException(Workbench.java:1567) + at +org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2548) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:592) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) +Caused by: org.eclipse.core.runtime.CoreException: The file does not exist. + at +org.eclipse.core.internal.filebuffers.ResourceFileBuffer.create(ResourceFileBuffer.java:237) + at +org.eclipse.core.internal.filebuffers.TextFileBufferManager.connect(TextFileBufferManager.java:112) + at +org.eclipse.ui.editors.text.TextFileDocumentProvider.createFileInfo(TextFileDocumentProvider.java:559) + at +org.eclipse.ui.editors.text.TextFileDocumentProvider.connect(TextFileDocumentProvider.java:478) + at +org.eclipse.ui.texteditor.AbstractTextEditor.doSetInput(AbstractTextEditor.java:4056) + at +org.eclipse.ui.texteditor.StatusTextEditor.doSetInput(StatusTextEditor.java:217) + at +org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.doSetInput(AbstractDecoratedTextEditor.java:1444) + at org.eclipse.ui.editors.text.TextEditor.doSetInput(TextEditor.java:169) + at +org.eclipse.ui.texteditor.AbstractTextEditor$19.run(AbstractTextEditor.java:3043) + at +org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464) + at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372) + at +org.eclipse.jface.window.ApplicationWindow$1.run(ApplicationWindow.java:759) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at +org.eclipse.jface.window.ApplicationWindow.run(ApplicationWindow.java:756) + at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2606) + at +org.eclipse.ui.texteditor.AbstractTextEditor.internalInit(AbstractTextEditor.java:3061) + ... 45 more + +!ENTRY org.eclipse.ui 4 0 2011-05-09 18:46:38.059 +!MESSAGE Unable to create editor ID +org.lamport.tla.toolbox.editor.basic.TLAEditorAndPDFViewer: assertion +failed: +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: assertion failed: + at org.eclipse.core.runtime.Assert.isTrue(Assert.java:110) + at org.eclipse.core.runtime.Assert.isTrue(Assert.java:96) + at +org.eclipse.ui.part.MultiPageEditorPart.setActivePage(MultiPageEditorPart.java:1065) + at +org.eclipse.ui.forms.editor.FormEditor.setActivePage(FormEditor.java:607) + at +org.eclipse.ui.part.MultiPageEditorPart.createPartControl(MultiPageEditorPart.java:352) + at +org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + at +org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + at +org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at +org.eclipse.ui.internal.EditorAreaHelper.setVisibleEditor(EditorAreaHelper.java:271) + at +org.eclipse.ui.internal.EditorManager.setVisibleEditor(EditorManager.java:1429) + at +org.eclipse.ui.internal.EditorManager$5.runWithException(EditorManager.java:942) + at +org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at +org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803) + at +org.eclipse.ui.internal.Workbench$31.runWithException(Workbench.java:1567) + at +org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2548) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:592) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) + +!ENTRY org.eclipse.ui 2 2 2011-05-09 18:46:38.163 +!MESSAGE Ignored attempt to add saveable that was already registered +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: unknown saveable: +org.eclipse.ui.internal.DefaultSaveable@3a33a6b8 from part: +org.eclipse.ui.internal.ErrorEditorPart@3a33a6b8 + at org.eclipse.ui.internal.SaveablesList.logWarning(SaveablesList.java:187) + at org.eclipse.ui.internal.SaveablesList.addModel(SaveablesList.java:117) + at org.eclipse.ui.internal.SaveablesList.addModels(SaveablesList.java:289) + at org.eclipse.ui.internal.SaveablesList.postOpen(SaveablesList.java:684) + at org.eclipse.ui.internal.PartList.partOpened(PartList.java:234) + at org.eclipse.ui.internal.PartList.access$0(PartList.java:210) + at org.eclipse.ui.internal.PartList$1.propertyChanged(PartList.java:40) + at +org.eclipse.ui.internal.WorkbenchPartReference.fireInternalPropertyChange(WorkbenchPartReference.java:375) + at +org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:610) + at +org.eclipse.ui.internal.EditorAreaHelper.setVisibleEditor(EditorAreaHelper.java:271) + at +org.eclipse.ui.internal.EditorManager.setVisibleEditor(EditorManager.java:1429) + at +org.eclipse.ui.internal.EditorManager$5.runWithException(EditorManager.java:942) + at +org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at +org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803) + at +org.eclipse.ui.internal.Workbench$31.runWithException(Workbench.java:1567) + at +org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2548) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:592) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>290</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-11 17:02:38 +0000</bug_when> + <thetext>One more stacktrace: + +!ENTRY org.eclipse.core.resources 4 2 2011-05-09 19:19:40.165 +!MESSAGE Problems occurred when invoking code from plug-in: +"org.eclipse.core.resources". +!STACK 0 +java.lang.NullPointerException + at +org.lamport.tla.toolbox.ui.contribution.StatusReflectingSpecLifecycleParticipant.initialize(StatusReflectingSpecLifecycleParticipant.java:23) + at +org.lamport.tla.toolbox.util.SpecLifecycleManager.initialize(SpecLifecycleManager.java:49) + at +org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.<init>(WorkspaceSpecManager.java:58) + at org.lamport.tla.toolbox.Activator.getSpecManager(Activator.java:297) + at +org.lamport.tla.toolbox.util.ResourceHelper.getResourceByName(ResourceHelper.java:147) + at +org.lamport.tla.toolbox.util.ResourceHelper.getResourceByModuleName(ResourceHelper.java:137) + at +org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:258) + at +org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:83) + at +org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:56) + at +org.lamport.tla.toolbox.spec.parser.SpecificationParserLauncher.parseSpecification(SpecificationParserLauncher.java:38) + at +org.lamport.tla.toolbox.spec.nature.ParserHelper$2.run(ParserHelper.java:75) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1957) + at +org.lamport.tla.toolbox.spec.nature.ParserHelper.rebuildSpec(ParserHelper.java:81) + at +org.lamport.tla.toolbox.spec.nature.TLAParsingBuilder.build(TLAParsingBuilder.java:67) + at +org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) + at +org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at +org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) + at +org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) + at +org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) + at +org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>16</bug_id> + + <creation_ts>2009-12-17 21:19:00 +0000</creation_ts> + <short_desc>cygwin doesn't properly unzip the Windows executable</short_desc> + <delta_ts>2009-12-17 21:19:20 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>47</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2009-12-17 21:19:20 +0000</bug_when> + <thetext>I received the following problem report from a user here. The problem +occurred when he unzipped the file using Cygwin's unzip command. It +worked fine when he used WinZip. He also said that when he unzipped +with WinZip, then produced a zip file with Cygwin and unzipped that +file with Cygwin, it worked fine. This all happened on an XP system. + +We should see if this is reproducible. If it is, we should spend a +few milliseconds trying to figure out if there's a way to produce a +zip file that Cygwin will handle properly. If we can't figure out +such a way, we should warn users not to unzip with Cygwin. + +----- + +I tried to install the toolbox but I'm getting an error. My operating +system is Windows XP. Here's what I did: + + - downloaded ZIP file from http://www.msr-inria.inria.fr/ + Projects/tools-for-formal-specs/toolbox.win32.win32.x86.zip + + - unzipped it to c:\, creating directory c:\tlatoolbox + + - installed Java (Java Version 6 Update 17). + + - rebooted computer + + - executed c:\tlatoolbox\toolbox.exe + + - got a pop up window that says "The Toolbox executable launcher was + unable to locate its companion shared library"</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>17</bug_id> + + <creation_ts>2009-12-18 00:17:00 +0000</creation_ts> + <short_desc>tlatex translation not working?</short_desc> + <delta_ts>2009-12-23 19:48:21 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLATEX Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>WORKSFORME</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>48</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2009-12-18 00:17:00 +0000</bug_when> + <thetext>When I try to produce a pdf version, the appropriate tab appears but it is blank. While this could be a problem with my installation, it has worked in the past and I haven't changed anything in my LaTeX installation. (Which doesn't mean that Windows didn't decide to change it for me.) However, no log entry is produced, which is a bug even if the Toolbox is calling tla2tex correctly. Moreover, even if there were a problem with my LaTeX installation, TLATeX would write a .tex file and the Toolbox command isn't doing that. And furthermore, there is an old version of the pdf file in the .toolbox directory that the Toolbox isn't displaying. + +Also, I don't remember if TLATeX produces an error message that the Toolbox is supposed to recognize and translate into an error warning for the user. If that's not being done now, it should be implemented.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>54</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2009-12-23 19:48:21 +0000</bug_when> + <thetext>The translation is working for me now. As near as I can tell, nothing changed in the Toolbox +or in my machines' configuration. Of course, this being modern software, it might now be +working because Neptune entered Sagitarius.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>18</bug_id> + + <creation_ts>2009-12-18 00:28:00 +0000</creation_ts> + <short_desc>Modifying the Toolbox to handle pcal files.</short_desc> + <delta_ts>2010-07-14 03:41:33 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA Tools</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>INVALID</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + <blocked>33</blocked> + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>49</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2009-12-18 00:28:08 +0000</bug_when> + <thetext>There will be two kinds of module files: .tla and .pcal files. A root +or non-root file of a spec can be of either kind. A .pcal file has a +derived .tla file that is produced by running the pcal translator, +which is done by calling pcal.trans.runMe(). For a pcal module, +"parsing" consists of running the pcal translator and then, if there +are no errors, parsing the resulting tla file. (Thus, no additional +"translate on save" option is needed.) + +When the user opens a pcal module, the corresponding tla file should +be opened in another tab of the editor (but the pcal file's tab should +have the focus). Eventually there will be a version of tla2tex for +pcal files. There will then need to be two separate commands for +producing a pdf version of the pcal file and of the tla file. (The +latter command should not be commonly used.) For now, the "Produce +PDF Version" command will call tla2tex on the tla file. + +Should the user want to edit the tla file? Normally, it's a bad idea +to edit derived files. However, I can imagine the user wanting to add +debugging code to the algorithm. Adding it to the TLA+ translation +might be a nice way to do this, since he will probably that code will +then be removed when he fixes the bug in the pcal file and translates +it. I suggest that the default be to pop up a warning the first time +the user changes the tla file after it's translated. We can have a +preference that allows him to disable that warning. We could also +have a preference that makes the tla file read only. + +Most command-line options will be specified by the options statement +in the pcal file. Moreover, the most common options, which specify +fairness and termination, will eventually be eliminated by changes to +the language. However, the user may want to specify some global +default options that will be passed to the translator as command-line +options. A preference will be provided to specify that. Its default +value will be -nocfg. Since the ability to specify options for an +individual spec in the Spec Explorer has been implemented, we perhaps +we should keep it--letting the preference specify the initial setting +of that field. Since those options will rarely be set by the user, it +doesn't make much difference what we do. + +A read-only copy of the pcal file should be saved in the model's +subdirectory along with the tla file. + +The module is considered to have changed if either the pcal file or +the tla file has been changed since it was last translated or parsed. + +I think this is a complete list of what has to be changed to handle +pcal files.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>214</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-07-14 03:41:33 +0000</bug_when> + <thetext>The plan for using pcal files has been abandoned, so this is moot.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>19</bug_id> + + <creation_ts>2009-12-23 01:47:00 +0000</creation_ts> + <short_desc>Toolbox caches obsolete values on startup</short_desc> + <delta_ts>2011-05-29 13:14:57 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>bugzilla.tlaplus.net</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>53</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2009-12-23 01:47:07 +0000</bug_when> + <thetext>I regularly synchronize my home and office machines by copying files back +and forth between them. This means that I frequently overwrite .toolbox +directories. If I open the Toolbox and it restores the previous state, it +fails to check if the models that it knew about when it was last run are +still there. This causes bizarre behavior. Often the Toolbox fails to +start the first time I try to open it. + +By the way, is P4 higher or lower priority than P3?</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>328</commentid> + <comment_count>1</comment_count> + <attachid>36</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-29 13:11:25 +0000</bug_when> + <thetext>Created attachment 36 +stack trace</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>36</attachid> + <date>2011-05-29 13:11:00 +0000</date> + <delta_ts>2011-05-29 13:11:25 +0000</delta_ts> + <desc>stack trace</desc> + <filename>ATT22830.log</filename> + <type>text/plain</type> + <size>385603</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>20</bug_id> + + <creation_ts>2010-01-18 15:59:00 +0000</creation_ts> + <short_desc>Model editor incorrectly reports that TLC is running</short_desc> + <delta_ts>2010-01-18 16:00:44 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>55</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-18 15:59:18 +0000</bug_when> + <thetext>Opening the spec and the (only) model (see attachments) gets the model in a state in which most of it thinks that TLC is running, except that the Model Checking Results page correctly reports its status as "Not running". This state may have been produced by running the trace explorer, but running the trace explorer on another spec doesn't do that.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>56</commentid> + <comment_count>1</comment_count> + <attachid>5</attachid> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-18 16:00:12 +0000</bug_when> + <thetext>Created attachment 5 +Root module for spec</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>57</commentid> + <comment_count>2</comment_count> + <attachid>6</attachid> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-18 16:00:44 +0000</bug_when> + <thetext>Created attachment 6 +toolbox directory containing the only model</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>5</attachid> + <date>2010-01-18 16:00:00 +0000</date> + <delta_ts>2010-01-18 16:00:12 +0000</delta_ts> + <desc>Root module for spec</desc> + <filename>Euclid.tla</filename> + <type>application/octet-stream</type> + <size>5985</size> + <attacher name="Dan Ricketts">daniel.bmore.ricketts</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>6</attachid> + <date>2010-01-18 16:00:00 +0000</date> + <delta_ts>2010-01-18 16:00:44 +0000</delta_ts> + <desc>toolbox directory containing the only model</desc> + <filename>Euclid.toolbox.zip</filename> + <type>application/octet-stream</type> + <size>78852</size> + <attacher name="Dan Ricketts">daniel.bmore.ricketts</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>21</bug_id> + + <creation_ts>2010-01-18 16:05:00 +0000</creation_ts> + <short_desc>Browsing for a new spec on Mac does not allow user to type in name</short_desc> + <delta_ts>2010-01-28 16:58:54 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 32-bit</rep_platform> + <op_sys>Mac OS</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>58</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-18 16:05:16 +0000</bug_when> + <thetext>In Windows, you can create a new file by browsing to an existing directory, typing in the name of the file, and clicking on Open. This opens the file if it exists, and creates it if it doesn't. The Toolbox's file browser on the Mac doesn't offer the option of typing in a file name.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>59</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-18 16:06:24 +0000</bug_when> + <thetext>In a standard Mac interface, you have two menu items. One (open) to +open an existing file and the other (save as) to save the contents of +the window to a new file (possibly overwriting an existing file). +Accordingly, there are two file browsers: the "open" file dialog and +the "save" file dialog. + +In the case of the toolbox, it is missing a "new" menu item to create +a new empty window, and the "save as" item doesn't open the right +dialog.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>77</commentid> + <comment_count>2</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 14:11:34 +0000</bug_when> + <thetext>Changing the file dialog to a "save" dialog allows the user to type in the file name on Mac. The downside is that next to the text bar where the user can type in the file name, the dialog says "Save As", and the button to finish says "Save". We can set the title of the dialog to be whatever we want.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>104</commentid> + <comment_count>3</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-28 16:58:54 +0000</bug_when> + <thetext>The save dialog has been implemented for Mac OS X. The Save As menu also now opens a save dialog instead of an open dialog on all operating systems.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>22</bug_id> + + <creation_ts>2010-01-21 01:44:00 +0000</creation_ts> + <short_desc>Help does not work on Mac</short_desc> + <delta_ts>2010-01-28 12:56:49 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Toolbox Help</component> + <version>unspecified</version> + <rep_platform>x86 32-bit</rep_platform> + <op_sys>Mac OS</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>60</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-01-21 01:44:23 +0000</bug_when> + <thetext>Jean-Charles reports that nothing appears on the Help menu at the top of the screen when the Toolbox is selected. (That's where MAC is supposed to show the help choices.)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>78</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 14:41:45 +0000</bug_when> + <thetext>I do not believe it is possible to have one click help as a menu. It would appear that it is necessary to make Dynamic Help a menu item of the Help menu. This is fine because we are going to add an About menu item there as well.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>102</commentid> + <comment_count>2</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-28 12:56:47 +0000</bug_when> + <thetext>The Help menu now has a Dynamic Help item.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>103</commentid> + <comment_count>3</comment_count> + <attachid>11</attachid> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-28 12:56:49 +0000</bug_when> + <thetext>Created attachment 11 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>11</attachid> + <date>2010-01-28 12:56:00 +0000</date> + <delta_ts>2010-01-28 12:56:49 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>3101</size> + <attacher name="Dan Ricketts">daniel.bmore.ricketts</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>23</bug_id> + + <creation_ts>2010-01-21 02:10:00 +0000</creation_ts> + <short_desc>Minor fixes to the Trace Explorer Window</short_desc> + <delta_ts>2010-01-22 17:46:43 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>61</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-01-21 02:10:21 +0000</bug_when> + <thetext>- Add a local help button (the ? inside a circle) that leads to help for the window. + +- When the user selects a state in the Error Trace, he sees the value of the expression as something like + + __trace_var_126403425857315000 = 12 + + The user should not see a variable name like that. Best would be to replace the variable name with the expression, the way it's shown in the Error Trace. If this isn't easy, the Toolbox should use shorter variable names for the expressions. + +- When nothing is selected in the Error-Trace window, the bottom text field says "No error information". It should say something more helpful, like: + + Select line in Error Trace to show its value here.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>69</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-22 13:19:36 +0000</bug_when> + <thetext>Help button has been added.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>71</commentid> + <comment_count>2</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-22 17:46:42 +0000</bug_when> + <thetext>Variable names of trace explorer expressions in the value viewer are replaced with the single line form of the expressions (as shown in the trace viewer.) If the user enters a multi-line expression, all line breaks are removed. If the line breaks are not removed, then the value of the state is difficult to read. The order of the variables now reflects what is shown in the trace viewer. For variables that do not represent trace explorer expressions, I have attempted to keep the format the same as TLC's output.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>72</commentid> + <comment_count>3</comment_count> + <attachid>9</attachid> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-22 17:46:43 +0000</bug_when> + <thetext>Created attachment 9 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>9</attachid> + <date>2010-01-22 17:46:00 +0000</date> + <delta_ts>2010-01-22 17:46:43 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>5266</size> + <attacher name="Dan Ricketts">daniel.bmore.ricketts</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>24</bug_id> + + <creation_ts>2010-01-21 18:40:00 +0000</creation_ts> + <short_desc>Parsing an unsaved file</short_desc> + <delta_ts>2010-01-26 11:28:31 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>62</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-01-21 18:40:01 +0000</bug_when> + <thetext>If you click on the "parse" button when the file has been modified, the Toolbox asks if you want to save the file but neither saves it nor parses it when you answer "yes".</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>73</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 10:38:52 +0000</bug_when> + <thetext>Clicking on "Parse Spec" when a spec module has been modified since last save brings up a dialog asking if you want to save the modified resources. If you click yes, it parses the spec but does not save the modified resources. If you click "Parse Module" on a module that has been modified, the toolbox does not prompt you to save. It just parses the module without saving.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>74</commentid> + <comment_count>2</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 10:41:50 +0000</bug_when> + <thetext>In the dialog that asks if you want to save the modified resources, clicking "No" has the same effect as clicking "Yes".</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>75</commentid> + <comment_count>3</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 12:28:50 +0000</bug_when> + <thetext>I changed the dialog to have three buttons, Yes, No, Cancel. Yes saves any modified .tla files and parses, No parses without saving, and Cancel does not save or parse. This dialog appears if there are modified resources when the user selects "Parse Spec" or "Parse Module".</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>96</commentid> + <comment_count>4</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-26 11:28:29 +0000</bug_when> + <thetext>I changed the dialog to OK/cancel. If the user selects OK, the unsaved modules are saved and the spec or module is parsed. Cancel does not save or parse.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>97</commentid> + <comment_count>5</comment_count> + <attachid>10</attachid> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-26 11:28:31 +0000</bug_when> + <thetext>Created attachment 10 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>10</attachid> + <date>2010-01-26 11:28:00 +0000</date> + <delta_ts>2010-01-26 11:28:31 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>17367</size> + <attacher name="Dan Ricketts">daniel.bmore.ricketts</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>25</bug_id> + + <creation_ts>2010-01-22 00:58:00 +0000</creation_ts> + <short_desc>Minor problem with value display in TLC Error Trace view</short_desc> + <delta_ts>2010-01-22 13:52:58 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>63</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-01-22 00:58:20 +0000</bug_when> + <thetext>When no line in the Error Trace is selected, the text box below it should say + + Select line in Error Trace to show its value here. + +It does not display this when the TLC Errors Window is first raised. Nor does it do that when the Explore or Restore button is pushed--unless a line in the Error Trace was already selected when that Button was pushed.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>70</commentid> + <comment_count>1</comment_count> + <attachid>8</attachid> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-22 13:52:58 +0000</bug_when> + <thetext>Created attachment 8 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>8</attachid> + <date>2010-01-22 13:52:00 +0000</date> + <delta_ts>2010-01-22 13:52:58 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>38951</size> + <attacher name="Dan Ricketts">daniel.bmore.ricketts</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>26</bug_id> + + <creation_ts>2010-01-22 01:03:00 +0000</creation_ts> + <short_desc>Elements with multiple lines do not display properly in trace viewer</short_desc> + <delta_ts>2010-01-22 13:18:02 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>64</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-22 01:03:52 +0000</bug_when> + <thetext>A name/expression or value that takes up multiple lines does not display properly in the trace viewer. In particular, only the first line shows.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>65</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-01-22 01:22:34 +0000</bug_when> + <thetext>I don't understand. The trace viewer (the two-column viewer with Name and Value columns) shows only a single line. To view a multi-line value, the user should either select the line, in which case the entire value should appear in the viewer, or expand the line so he can view the individual parts of the value separately. This seems to be working as it should. What am I missing?</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>66</commentid> + <comment_count>2</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-22 11:02:03 +0000</bug_when> + <thetext>Sorry, I was incorrect in saying that multi-line values display incorrectly. The bug is in displaying multi-line trace explorer expressions in the Name column. Only the first line appears.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>67</commentid> + <comment_count>3</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-22 13:18:00 +0000</bug_when> + <thetext>Multi-line expressions are now displayed as a single line in the Name column.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>68</commentid> + <comment_count>4</comment_count> + <attachid>7</attachid> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-22 13:18:02 +0000</bug_when> + <thetext>Created attachment 7 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>7</attachid> + <date>2010-01-22 13:18:00 +0000</date> + <delta_ts>2010-01-22 13:18:02 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1586</size> + <attacher name="Dan Ricketts">daniel.bmore.ricketts</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>27</bug_id> + + <creation_ts>2010-01-25 12:56:00 +0000</creation_ts> + <short_desc>Extra menu for the toolbox on Mac</short_desc> + <delta_ts>2011-08-25 14:00:11 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Mac OS</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P5</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>bugzilla.tlaplus.net</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>76</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 12:56:22 +0000</bug_when> + <thetext>The toolbox on Mac OS has an extra menu item entitled "TLA+ Toolbox." It has the menu items "About TLA+ Toolbox", "Preferences...", "Services", "Hide TLA+ Toolbox", Hide Others", "Show All", and "Quit TLA+ Toolbox." "Services" seems to be permanently grayed out. The Preferences menu item also appears in the File menu, which I think is fine. All menu items perform as expects, except for the "About TLA+ Toolbox" menu item which seems to do nothing. We are going to add an About item to the Help menu. It would be nice to be able to remove the one from the "TLA+ Toolbox" menu, but I'm not sure if this is possible.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>602</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-25 14:00:10 +0000</bug_when> + <thetext>Fixed in HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>603</commentid> + <comment_count>2</comment_count> + <attachid>104</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-25 14:00:11 +0000</bug_when> + <thetext>Created attachment 104 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>104</attachid> + <date>2011-08-25 14:00:00 +0000</date> + <delta_ts>2011-08-25 14:00:11 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>11726</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>28</bug_id> + + <creation_ts>2010-01-25 14:51:00 +0000</creation_ts> + <short_desc>Use of model values</short_desc> + <delta_ts>2011-05-17 13:10:42 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>79</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 14:51:06 +0000</bug_when> + <thetext>a. There is no reason why the user cannot use the same model value in two + different constant instantiations or in a constant instantiation and a + definition override. Or uses a model value declared on the advanced + page as a model value in a constant instantiation. This requires + checking that a model value is declared elsewhere before adding a + CONSTANT declaration for it. + + b. The correct order in which things should be written in the MC file are: + - Declaration of advanced model values. + - Declaration of the sets of model values that instantiate constants. + - New User Definitions. + - Everything Else, which is all of the form + newId_1234567 == some expression. + However, the current structure of the toolbox makes it a nuisance to do + this, and the current validator will disallow the models that this order + is designed to allow.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>29</bug_id> + + <creation_ts>2010-01-25 14:54:00 +0000</creation_ts> + <short_desc>PlusCal translator errors do not disappear</short_desc> + <delta_ts>2011-05-17 16:27:42 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>80</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 14:54:45 +0000</bug_when> + <thetext>Suppose the user starts to write a PlusCal algorithm, translates it and gets a PlusCal error, and then decides to delete the PlusCal code and just write the spec in TLA+. There's no way for him to get rid of the PlusCal error message in the Parse Errors window. In fact, even if I run the translator on another module, the PlusCal error remains in the Parse Error window--whether or not the other translation produces an error. (The only way to get rid of it is to go back to the original module, correct the PlusCall error, and re-run the translator.) The best thing to do is probably to create a separate PlusCal Error Window. Running the translator should first clear this window and remove all PlusCal error markers in the module on which the translator is run. (I believe that if running the PlusCal translator creates a PlusCal error, then the file is not re-parsed, so only the PlusCal error window would need to be popped up.)</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>30</bug_id> + + <creation_ts>2010-01-25 14:56:00 +0000</creation_ts> + <short_desc>The Definitions Override menu allows the user to override the same definition multiple times.</short_desc> + <delta_ts>2010-07-05 19:36:48 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>81</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 14:56:08 +0000</bug_when> + <thetext>The Definitions Override menu allows the user to override the same definition multiple times.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>31</bug_id> + + <creation_ts>2010-01-25 14:58:00 +0000</creation_ts> + <short_desc>Parsing spec command gets disabled</short_desc> + <delta_ts>2010-01-25 14:58:00 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>82</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 14:58:00 +0000</bug_when> + <thetext>For a big spec--in particular, for the farsite spec, after Parse the parse spec command gets disabled. But parse module file still works. Simon thinks it may be that the build infrastructure of Eclipse is deactivating builders under some conditions--for example, if a builder dies with an exception, it is deactivated. Perhaps it's also deactivated on a time-out. The list of builders is attached to the project, so one can query the project or the project nature to find this out. So, Simon assumes that for some reason, the builder is deactivated. + +The parser is being launched in a separate thread, but Simon thinks that perhaps he's not doing it in the right way.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>32</bug_id> + + <creation_ts>2010-01-25 14:59:00 +0000</creation_ts> + <short_desc>Closing the toolbox simply kills any running TLC</short_desc> + <delta_ts>2011-05-17 13:13:50 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>83</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 14:59:52 +0000</bug_when> + <thetext>Closing the toolbox simply kills any running TLC. Instead, it should warn the user that this will kill TLC and give him the option of canceling. To do this, need to modify to CloseSpecHandler.execute() so it checks if editors have been closed successfully before exiting. The model editor's method that gets called by the closeAllEditors method should return false. Another approach is to register another handler in place of this one when TLC is running, and having that handler call the current one only if the user says it's OK to stop TLC.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>33</bug_id> + + <creation_ts>2010-01-25 15:02:00 +0000</creation_ts> + <short_desc>PlusCal translation needs to be reimplemented to handle .pcal files</short_desc> + <delta_ts>2010-03-01 23:59:21 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>INVALID</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + <dependson>18</dependson> + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>84</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 15:02:15 +0000</bug_when> + <thetext>PlusCal translation needs to be examined. Here are some things that need to be fixed: + - There should be a more user-friendly way to specify translation options. This involves: + (a) Providing check-boxes or radio buttons for the common options. + (b) Finding a more convenient way to add them than the current one (right-clicking in the Toolbox Explorer) and selecting properties. + + - Translation options are now attached to the spec; they should be attached to an individual module. (It's possible for a single spec to have PlusCal algorithms in two different modules.)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>130</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-02-03 10:28:07 +0000</bug_when> + <thetext>I renamed this, but apparently bugzilla doesn't allow me to change the description. The things mentioned in the description are minor compared to the major change required: adapting the Toolbox to the new way to use PlusCal: by having .pcal file containing the algorithm separate from the .tla file containing its translation. This requires that the user be able to open a spec with a .pcal file as its "root". The existence of the two files raises many new issues to be dealt with, such as: + + - Should the user be able to edit the .tla file? This is a bad idea in general, but it's conceivable that the user may want to do this. It should be made difficult but not impossible. That is, the editor on the .tla file should by default be read-only. + + - The user should be able to pretty-print either of the two files or both of them. (TlaTeX will need to be modified to work on .pcal files.) + + - Do we allow the user to create a spec or open a module editor on a .tla file for which there also exists a .pcal file? Perhaps that should be the way for him to edit the .tla file.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>162</commentid> + <comment_count>2</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-03-01 23:59:21 +0000</bug_when> + <thetext>The plan to use .pcal files has been abandoned as a bad idea.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>34</bug_id> + + <creation_ts>2010-01-25 15:04:00 +0000</creation_ts> + <short_desc>Reset window layout produces blank window in welcome perspective</short_desc> + <delta_ts>2011-05-17 13:15:34 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>85</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 15:04:42 +0000</bug_when> + <thetext>If I select window / reset window layout in the Welcome Perspective, it produces a blank window instead of the Welcome View.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>206</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-07-01 11:49:27 +0000</bug_when> + <thetext>We should just disable the reset window command.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>35</bug_id> + + <creation_ts>2010-01-25 15:05:00 +0000</creation_ts> + <short_desc>Module editor keybindings</short_desc> + <delta_ts>2010-01-25 15:05:58 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>86</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 15:05:58 +0000</bug_when> + <thetext>Here are some thoughts on enhancements to the Module Editor. + + - Add a preference to choose an Emacs-like keybinding. This requires adding new commands that appear in the General/Editors/Keys, and options that choose from among sets of bindings. + + - Add editing commands (and invent bindings) for comments. Perhaps copy the commands I use for boxing comments. + +Note that Simon has bound toggle comments to Control-/, but that command doesn't appear either when I type Ctl-Shift-L or in tthe preferences keybinding options.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>36</bug_id> + + <creation_ts>2010-01-25 15:07:00 +0000</creation_ts> + <short_desc>Option to add lists of weakly and strongly fair actions</short_desc> + <delta_ts>2011-05-17 16:35:00 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>WONTFIX</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>87</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 15:07:34 +0000</bug_when> + <thetext>Enhance the Init/Next method of writing the spec to add lists of weakly and strongly fair actions.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>300</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-17 16:35:00 +0000</bug_when> + <thetext>LL Comment: Now that the user can specify fairness with PlusCal, this seems unnecessary.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>37</bug_id> + + <creation_ts>2010-01-25 15:10:00 +0000</creation_ts> + <short_desc>Change default for making a set of model values typed or untyped</short_desc> + <delta_ts>2010-07-03 10:27:21 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P2</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>88</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 15:10:01 +0000</bug_when> + <thetext>When the user has chosen assigned a set of model values to a constant and specified symmetry, the default on the next page of the wizard should be to make the values untyped. This may be hard to do because the second wizard page is created before the first page of the wizard is raised. If it's hard, perhaps we should change the default to be to make the values untyped. This is done in TypingWizardPage.createControl.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>93</commentid> + <comment_count>1</comment_count> + <who name="Simon Zambrovski">simon</who> + <bug_when>2010-01-25 15:54:58 +0000</bug_when> + <thetext>The reason of the default setting being "typed" is because we want people to use typed sets instead of untyped sets.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>38</bug_id> + + <creation_ts>2010-01-25 15:16:00 +0000</creation_ts> + <short_desc>Import Existing spec option behaves incorrectly when .toolbox directory does not exist</short_desc> + <delta_ts>2011-08-17 21:24:04 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>WONTFIX</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P5</priority> + <bug_severity>trivial</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>bugzilla.tlaplus.net</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>89</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 15:16:38 +0000</bug_when> + <thetext>When creating a new spec, the Import Existing spec option is always checked and disabled. It should be unchecked and disabled if the .toolbox directory does not already exist. However, if the .toolbox directory does exist, its present behavior of checking and enabling the box is the correct one. If it's hard to have both behaviors, forget about this.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>592</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-08-17 21:24:04 +0000</bug_when> + <thetext>It has been forgotten about.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>39</bug_id> + + <creation_ts>2010-01-25 15:18:00 +0000</creation_ts> + <short_desc>When a spec is open, the module browser should show the specification's directory</short_desc> + <delta_ts>2010-02-03 14:17:32 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>90</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 15:18:45 +0000</bug_when> + <thetext>When the user clicks on File/Open Module/Choose TLA+ Module, the file browser that pops up should show the specification's directory.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>94</commentid> + <comment_count>1</comment_count> + <who name="Simon Zambrovski">simon</who> + <bug_when>2010-01-25 15:57:08 +0000</bug_when> + <thetext>I find it more natural if it is the last directory you were in. If you want to add five modules from another directory you have to navigate five times to it, instead of once...</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>95</commentid> + <comment_count>2</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 16:00:51 +0000</bug_when> + <thetext>I think that the file browser should open to the specification's directory because SANY requires all the module files for a specification to be in the same directory.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>123</commentid> + <comment_count>3</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-02-02 19:08:54 +0000</bug_when> + <thetext>Simon's comment makes some sense, as long as "the last directory you were in" means the last directory from which you opened a file in a module editor. This means that, when I first open a spec, "the last directory I was in" is the spec directory. Currently, the browser doesn't open on the last directory I was in, but on the directory of the last spec that I closed. That is clearly wrong. Opening a module from a directory other than the spec's is something that seems to me to be so uncommon that I don't know whether it's better to open the browser on the last directory I was in or on the current spec's directory. I can think of scenarios in which each is the better thing to do. However, since it's so uncommon, I don't think it makes much difference. As a guess, I'd say that it's better to open it on the spec's directory. However, if either is easier to implement than the other, then let's go with that one. + +This problem applies to Save As as well as Open Module.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>131</commentid> + <comment_count>4</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-03 14:17:30 +0000</bug_when> + <thetext>I made both dialogs open to the current spec's directory. I believe this will partially fix bug 52. In particular, it should cause the add module dialog on linux to open to the spec's directory. I need to verify this.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>132</commentid> + <comment_count>5</comment_count> + <attachid>13</attachid> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-03 14:17:32 +0000</bug_when> + <thetext>Created attachment 13 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>13</attachid> + <date>2010-02-03 14:17:00 +0000</date> + <delta_ts>2010-02-03 14:17:32 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>26130</size> + <attacher name="Dan Ricketts">daniel.bmore.ricketts</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>40</bug_id> + + <creation_ts>2010-01-25 15:20:00 +0000</creation_ts> + <short_desc>TLC's liveness checking in simulation mode is buggy</short_desc> + <delta_ts>2015-04-27 11:54:45 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA Tools</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + <cc>bugzilla.tlaplus.net</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>91</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 15:20:25 +0000</bug_when> + <thetext>TLC's liveness checking in simulation mode is seriously buggy. Unless Yuan volunteers to find the fix quickly (which seems unlikely), we'll have to tell users not to check liveness properties in simulation mode. If Yuan does find the fix, we will probably have to fix a bug introduced by Simon that causes TLC to produce an error trace ending with + + State 5: <Action line 12, col 9 to line 12, col 20 of module Test2> + x = 4 + + State 6: Stuttering + Back to state 1.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>1018</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2015-04-27 11:54:45 +0000</bug_when> + <thetext>Fixed</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>41</bug_id> + + <creation_ts>2010-01-25 15:24:00 +0000</creation_ts> + <short_desc>Model editor does not remove some error messages on user input</short_desc> + <delta_ts>2011-05-17 16:35:24 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>92</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-25 15:24:54 +0000</bug_when> + <thetext>In at least one place, the Toolbox marks an error when the user starts entering a value, but doesn't remove the error marker when the user's typing removes the error. Here are the cases I've found: + + - Write a model specifying Init and Next, leaving Temporal Formula empty. Then select Temporal Formula. This produces an error because the Temporal + Formula field is empty. However, typing into that field doesn't make the error marker go away. + - In TLC Options on the Advanced Options page, choose simulation node. Then: + (a) Enter a non-number. Then delete that and enter a number. Or + (b) Enter a non-numeric seed or aril, then delete it or change it to a number. or else choose Model-checking mode and depth-first mode, then do the same + thing with the depth field. (Incidentally, there's no reason to check those fields at all when the appropriate option isn't chosen.) + - In the constant assignment section of the main model page, specify the value of a constant to be a set of model values one of which is SPECIFICATION. + This produces an error marker which remains after that constant assignment is changed. + +This isn't a big deal, because the errors go away when the model is validated. + +A similar case occurs if one first enters a Temporal Formula and then chooses "Initial predicate and next-state relation".</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>42</bug_id> + + <creation_ts>2010-01-27 11:37:00 +0000</creation_ts> + <short_desc>Toolbox does not alert user when editing a module out of synch with file system</short_desc> + <delta_ts>2011-05-11 15:24:16 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>bugzilla.tlaplus.net</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>99</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-27 11:37:52 +0000</bug_when> + <thetext>If the user edits a module that is out of synch with the file system, the toolbox does not warn the user of this. When the user saves the module, a message pops up telling the user that the module is out of synch.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>43</bug_id> + + <creation_ts>2010-01-28 17:03:00 +0000</creation_ts> + <short_desc>TLA files appear grayed out when browsing for new spec and adding a module</short_desc> + <delta_ts>2011-05-11 17:28:40 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Mac OS</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>105</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-01-28 17:03:00 +0000</bug_when> + <thetext>Files ending in .tla appear grayed out when browsing for a new spec or adding a module. It is still possible to select the grayed out items. They were not gray when the dialogs were "Open" dialogs but are gray now that the dialogs are "Save" dialogs.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>207</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-07-01 11:52:24 +0000</bug_when> + <thetext>This only occurs on mac OS. I spent some time trying to figure out why this occurs, but was unsuccessful.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>44</bug_id> + + <creation_ts>2010-01-29 08:36:00 +0000</creation_ts> + <short_desc>Drag-and-drop in module editor?</short_desc> + <delta_ts>2011-05-17 16:27:53 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>106</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-01-29 08:36:21 +0000</bug_when> + <thetext>A Mac 64-bit user requested drag-and-drop. On a Friday morning, on Windows, with cloudy weather and an outside temperature around 0, here's what I observed: + +- In the Toolbox module editor, if I select a piece of text and drag it, I get visual feedback that indicates I'm dragging it. But when I release the mouse button to drop it, nothing happens. + +- In Eclipse, drag-and-drop works when I edit a java file or an xml file, but not when I edit an html file. + +Simon: do you know what's supposed to happen? + +I don't imagine the Eclipse code contains anything so retro as documentation, but perhaps someone has posted something about drag-and-drop somewhere. This is not worth worrying about now, but we should probably look into it when we start working on the editor.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>45</bug_id> + + <creation_ts>2010-01-30 22:08:00 +0000</creation_ts> + <short_desc>The toolbox program file is not being set to be executable.</short_desc> + <delta_ts>2010-02-16 15:20:51 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 32-bit</rep_platform> + <op_sys>Mac OS</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>108</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-01-30 22:08:47 +0000</bug_when> + <thetext>Jean-Charles reports that on two out of three of the machines he tried running the Mac 64-bit version (by double-clicking on the icon), nothing happened. He eventually found that the problem was that a file was not set to be executable--a problem that reports solving with + +chmod +x (macosx.cocoa.x86_64-jc.macosx.cocoa.x86_64/) +toolbox.app/Contents/MacOS/toolbox + +I presume that the parenthesized text is supposed to indicate a super-directory of the directory in which the command was executed. + +I believe he found this problem with both the original version that Dan created and a later one that I made. I also have a vague recollection of this problem occurring on a different release. If this can't be fixed, we need to add a warning about it on the web page.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>112</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-02 13:27:04 +0000</bug_when> + <thetext>There is an eclipse bug open on this: + +https://bugs.eclipse.org/bugs/show_bug.cgi?id=282260 + +The bug seems to be with the zip command run by the eclipse product export wizard when exporting to an archive file. The first comment claims that unchecking "Generate metadata repository" solves the problem.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>113</commentid> + <comment_count>2</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-02 13:30:35 +0000</bug_when> + <thetext>This is a discussion on the same topic: + +http://www.eclipse.org/forums/index.php?t=msg&goto=373468&</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>115</commentid> + <comment_count>3</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-02 13:41:37 +0000</bug_when> + <thetext>I created an archive file using the eclipse product export wizard for mac 32-bit without generating a metadata repository. I tested it on the mac mini at the lab and it ran without requiring any changes in file permissions. When I produced the archive file for mac with a metadata repository, it did not run on the same mac. + +I believe this repository is for installing new features into a user's existing toolbox application and for running automatic updates for the toolbox. Do we need this right now?</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>121</commentid> + <comment_count>4</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-02 15:30:40 +0000</bug_when> + <thetext>I created a zip file for linux using the export wizard without generating the metadata repository. The toolbox ran without requiring setting it to be executable.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>46</bug_id> + + <creation_ts>2010-02-01 13:06:00 +0000</creation_ts> + <short_desc>Validating the model deletes the contents of MC.out</short_desc> + <delta_ts>2011-05-17 16:36:24 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>109</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-01 13:06:55 +0000</bug_when> + <thetext>Running validation on a model deletes the contents of MC.out. I think that the contents of that file should only be erased if TLC is going to be launched, not for validation.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>146</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-04 17:27:26 +0000</bug_when> + <thetext>I'm not sure if this is a bug or not. Validation of the model changes the identifiers used for defining invariants, properties, etc, so the ids that may appear in MC.out no longer correspond to anything in MC.tla. This may be a reason to erase MC.out on validation. Anyone else have any input on this one?</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>147</commentid> + <comment_count>2</comment_count> + <who name="Simon Zambrovski">simon</who> + <bug_when>2010-02-05 00:08:50 +0000</bug_when> + <thetext>You are right. Running validateion in general means regeneration of the MC files. Which means that the MC.out file is obsolete.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>152</commentid> + <comment_count>3</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-05 15:10:41 +0000</bug_when> + <thetext>There is a slight inconsistency issue here. Running validation clears MC.out but does not clear the output in the data provider for the model. When the user closes and reopens the toolbox after validating the model, any output disappears. This could be confusing/annoying.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>47</bug_id> + + <creation_ts>2010-02-01 15:47:00 +0000</creation_ts> + <short_desc>Automatically add last updated comment to end of module</short_desc> + <delta_ts>2010-07-01 11:53:17 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>110</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-01 15:47:17 +0000</bug_when> + <thetext>We have the \* Generated at Thu Jan 28 12:46:04 EST 2010 comment at the end of the file. Why not also have an automatic \* Last updated ... ?</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>48</bug_id> + + <creation_ts>2010-02-01 15:48:00 +0000</creation_ts> + <short_desc>Load all spec modules at once</short_desc> + <delta_ts>2010-02-03 16:36:46 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P5</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>111</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-01 15:48:46 +0000</bug_when> + <thetext>After loading a spec's top module, why not have an option to load all (related) other modules, to avoid having to go through the menu one by one?</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>137</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-02-03 16:36:46 +0000</bug_when> + <thetext>This was Jean-Charles' idea. A better idea would be a menu that allows you to select multiple modules to open at the same time.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>49</bug_id> + + <creation_ts>2010-02-02 13:40:00 +0000</creation_ts> + <short_desc>Goto definition feature not opening new module editor when it should.</short_desc> + <delta_ts>2010-02-24 14:11:27 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>114</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-02-02 13:40:52 +0000</bug_when> + <thetext>If I hold down Control and click on a symbol that's defined or declared in an extended module, the right thing happens if that module is open in a model editor. If it isn't, nothing happens because the Toolbox throws: + +org.eclipse.ui.PartInitException: Unable to open editor, unknown editor ID: org.lamport.tla.toolbox.TLAEditorAndPDFViewer</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>158</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-24 14:11:24 +0000</bug_when> + <thetext>The ID used for opening the editor was wrong.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>159</commentid> + <comment_count>2</comment_count> + <attachid>17</attachid> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-24 14:11:27 +0000</bug_when> + <thetext>Created attachment 17 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>17</attachid> + <date>2010-02-24 14:11:00 +0000</date> + <delta_ts>2010-02-24 14:11:27 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1465</size> + <attacher name="Dan Ricketts">daniel.bmore.ricketts</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>50</bug_id> + + <creation_ts>2010-02-02 14:10:00 +0000</creation_ts> + <short_desc>Deleting a model does not remove output source or data provider for model</short_desc> + <delta_ts>2010-02-03 16:15:04 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>116</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-02 14:10:11 +0000</bug_when> + <thetext>Deleting a model does not remove the sources and data providers for that model from the tlc output source registry. If a user recreates a model with the same name, the output data from the old model appears.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>136</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-03 16:15:04 +0000</bug_when> + <thetext>Deleting a model actually did remove the output source from the registry but did not remove the provider associated with that output source. It now removes the provider as well.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>51</bug_id> + + <creation_ts>2010-02-02 14:40:00 +0000</creation_ts> + <short_desc>Running trace explorer does not disable running of the model checker</short_desc> + <delta_ts>2011-05-17 16:28:52 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>117</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-02 14:40:51 +0000</bug_when> + <thetext>Running the trace explorer should disable running of the model checker on the same model because both operations work on the same directory.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>52</bug_id> + + <creation_ts>2010-02-02 15:15:00 +0000</creation_ts> + <short_desc>New spec and Add module dialogs do not open to correct directory on linux</short_desc> + <delta_ts>2010-07-01 11:54:38 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Linux</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>119</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-02 15:15:29 +0000</bug_when> + <thetext>On a linux ubuntu machine, the new spec browse dialog and add module dialogs open to the directory containing the toolbox executable everytime. The new spec browse dialog should open to the most recently opened directory, and the add module dialog should open to the directory of the root module.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>134</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-03 15:38:27 +0000</bug_when> + <thetext>I think the add module dialog issue should have been fixed by the fix for bug 39. I think I have also fixed the new spec browse dialog for all systems. The toolbox determines in which directory it should open by finding the first directory in the following list: + +1.) The directory to which the user most recently browsed from the current new spec wizard page. This is reset to null every time the user reopens that page, so this only persists through one "Add New Spec..." dialog session. +2.) The directory of the root module of the most recently opened spec. +3.) The home directory of the user.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>135</commentid> + <comment_count>2</comment_count> + <attachid>14</attachid> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-03 15:38:28 +0000</bug_when> + <thetext>Created attachment 14 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>14</attachid> + <date>2010-02-03 15:38:00 +0000</date> + <delta_ts>2010-02-03 15:38:28 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>93777</size> + <attacher name="Dan Ricketts">daniel.bmore.ricketts</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>53</bug_id> + + <creation_ts>2010-02-02 15:28:00 +0000</creation_ts> + <short_desc>Go-to definition/declaration does not work for non-spec modules</short_desc> + <delta_ts>2010-07-01 11:55:36 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>120</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-02 15:28:04 +0000</bug_when> + <thetext>Jumping to the definition/declaration for a symbol does not work properly for a module that is not extended or included in the root module. I believe the toolbox looks for symbols in the symbol table for the root module. If the user is editing a module that is not currently extended or instanced by the root module, then the toolbox will not detect the hyperlink for symbols that are not in the symbol table of the root module. If the symbol happens to be in the symbol table for the root module, then the toolbox will incorrectly jump to the definition or declaration of that symbol in the spec.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>122</commentid> + <comment_count>1</comment_count> + <attachid>12</attachid> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-02 15:31:30 +0000</bug_when> + <thetext>Created attachment 12 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>208</commentid> + <comment_count>2</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-07-01 11:55:36 +0000</bug_when> + <thetext>According to Leslie, this is fixed as much as it's going to be.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>12</attachid> + <date>2010-02-02 15:31:00 +0000</date> + <delta_ts>2010-02-02 15:31:30 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>665</size> + <attacher name="Dan Ricketts">daniel.bmore.ricketts</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>54</bug_id> + + <creation_ts>2010-02-02 19:17:00 +0000</creation_ts> + <short_desc>Default for Save As browser should be Browse Folders</short_desc> + <delta_ts>2010-07-01 11:57:53 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>WORKSFORME</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>124</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-02-02 19:17:23 +0000</bug_when> + <thetext>For some reason, the file browser for the Save As command has a button to choose whether or not to display the selected folder. (The Open New Module file browser doesn't have that option.) I would use the Open New Module's file browser for the Save As command as well. However, if there's some good reason for using a different browser, then the browser should by default open with the current folder shown. Currently, it opens the first time with the current folder hidden. Combined with bug 39, this is a disaster.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>125</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-02 19:35:53 +0000</bug_when> + <thetext>On my machine, even when browse folders is not selected, the current folder is shown. Can you attach a screenshot of what appears on your machine when you don't have browse folders selected. + +The downside to using the same dialog as the Add New Module dialog is that the button to finish says "Open" instead of "Save". It's possible that this could be confusing to some users, but we decided to use the Save dialog for opening new modules and specs on Macs, so I guess its not a big deal. + +Alternatively, eclipse uses a completely different browser for Save As. What do you think about this dialog?</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>55</bug_id> + + <creation_ts>2010-02-03 08:27:00 +0000</creation_ts> + <short_desc>Feature needed for handling many specs</short_desc> + <delta_ts>2010-07-01 11:58:26 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>126</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-02-03 08:27:19 +0000</bug_when> + <thetext>The Problem: I already have too many specs to be able to find easily the one I want to open. I don't want to start deleting them because the I would lose the models I've defined. + +The Solution: The following two features. + +1. The option of deleting a spec without deleting its .toolbox directory. Let's call that "Deleting" and the current behavior "Expunging". The simplest interface to use would be simply be to have Delete and Expunge options on the Spec Explorer menu. However, no one would figure out from the name what they mean. A more intuitive interface would be for Delete to raise a popup allowing the user to check or uncheck an "Allow spec to be reopened later" option. (I suggest that the default be that the option is checked.) Dan, Simon: which interface do you think is better? + +Note: This suggestions a third possible option: deleting the module files as well as the .toolbox directory. This is a bad idea because, to be useful, it should delete all the spec's modules, which is bad because (a) it's easy to forget that a spec imports a module that's used elsewhere and should be saved and (b) that option will almost always be used to delete an uncompleted spec, which is likely to be unparsable--so the Toolbox couldn't delete anything but the root module. + +2. Add to the Open Spec menu the option Reopen Deleted Spec. It would produce an alphabetically sorted list of all deleted (but not expunged) specs for the user to choose from. Note that there are three reasons why that operation might fail: (a) the root module [or the .toolbox directory] no longer exists, (b) the user has created a new spec with the old name, or (c) the user has created a new spec with that root module. Of course, (a) exists when opening an existing spec. I suggest that (b) and (c) be made impossible by removing an old spec from the list if a new one is created with the same name or root file. I also suggest that when the user opens a new spec with the name or root file of an old one, he be warned and given the option of canceling. + +It is possible to implement feature 1 without feature 2, since the old spec can be reopened now with the Add New Spec option. Feature 2 is still useful because it might be easier to find an old spec this way than by hunting through the file system. However, we can start with just feature 1.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>128</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-03 08:58:19 +0000</bug_when> + <thetext>I suggest an alternative solution consisting of two changes: + +1.) Have a list of the n most recently opened specs. This could be placed at the bottom of the file menu, as in eclipse and many other programs, or could be a submenu as the Open Spec menu item currently is. + +2.) Have a menu item for opening specs that brings up a dialog that looks like eclipse's dialog for opening a resource. This would be a searchable list of all specs.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>183</commentid> + <comment_count>2</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-04-13 20:00:31 +0000</bug_when> + <thetext>I now vote for Leslie's solution. I think for feature 1, the better interface is for Delete to pop up a message asking if the user wants to remove the .toolbox directory. However, I think that Delete is confusing. I think the menu item should day Remove Spec, and the popup should say "Delete models?". This makes it more clear what the operation is doing.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>56</bug_id> + + <creation_ts>2010-02-03 08:47:00 +0000</creation_ts> + <short_desc>Feature needed for controlling disk space usage</short_desc> + <delta_ts>2010-07-01 11:58:36 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>127</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-02-03 08:47:34 +0000</bug_when> + <thetext>TLC's checkpoint files can take up lots of space. The Toolbox should tell the user how much disk space his specs are using. We will need to discuss what the best interface is for doing this. Here are things that he should be able to see from the Toolbox: + +- For each spec, the size of the .toolbox directory. This should be a property of the spec, and it shouldn't be too hard for the user to go through all his specs in the Spec Explorer to see which ones are using lots of space. The size should also be displayed for the currently open spec, in some way that is discrete if the size is small and becomes more obvious if it's big. + +- For each spec, the space used be each model should be a property of that model. The space used by a model should be displayed on one of the model pages--again, discretely if it's small and loudly if it's big. There should also be a button to delete the model's checkpoint. (Is there anything else kept for the model that might be big enough to need deleting?) It would be useful if the user could see the space taken up by each model of a spec without opening each of them. (He is likely to want to find the guilty model when he sees that the spec is taking up a lot of space.) This could be done as a model property in the Spec Explorer, which provides a menu option for one that pops up an error box.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>57</bug_id> + + <creation_ts>2010-02-03 08:59:00 +0000</creation_ts> + <short_desc>Minor bug in Spec Explorer: permits operations on models of unopened spec</short_desc> + <delta_ts>2010-02-03 08:59:52 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>129</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-02-03 08:59:52 +0000</bug_when> + <thetext>When a spec is open, the Spec Explorer allows the user to display the models only of the open spec. I presume that's a feature and not a bug. (It would make sense to show them for unopened specs too, with commands like Open or Clone the model disabled, but that's not worth the bother.) However, when I close the spec, I can still see that spec's models and their menu items are still active. I don't know what Open does; the console shows that the Toolbox thinks it is opening the spec and then the model, but there's no sign that it has. Clone and Delete actually perform the action (on the apparently closed spec), but then make the models invisible in the Spec Explorer. + +Obviously, the fix is just not to display the models of any spec in the Spec Explorer when there's no spec open.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>58</bug_id> + + <creation_ts>2010-02-03 14:40:00 +0000</creation_ts> + <short_desc>Renaming a spec does not change model configuration file names</short_desc> + <delta_ts>2011-07-15 19:19:31 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + <blocked>121</blocked> + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>133</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-03 14:40:39 +0000</bug_when> + <thetext>Renaming a spec should change the configuration file names for models of the spec. Currently it does not, so renaming a spec and then attempting to open a model that existed before the renaming throws a null pointer exception and does not open the model.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>477</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-15 19:19:28 +0000</bug_when> + <thetext>Fixed in HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>478</commentid> + <comment_count>2</comment_count> + <attachid>71</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-15 19:19:31 +0000</bug_when> + <thetext>Created attachment 71 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>71</attachid> + <date>2011-07-15 19:19:00 +0000</date> + <delta_ts>2011-07-15 19:19:31 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>12243</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>59</bug_id> + + <creation_ts>2010-02-04 16:12:00 +0000</creation_ts> + <short_desc>Trace Explorer getting wedged (plus minor bug)</short_desc> + <delta_ts>2010-02-05 15:08:38 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>138</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-02-04 16:12:31 +0000</bug_when> + <thetext>Load the following spec: + +---------- MODULE Test2 ----------- +EXTENDS Naturals, TLC +VARIABLE x +CONSTANT C +Spec == (x=0) /\ [][x'=x+1]_x +Inv == x < 5 +================================= + +Set C to 44, check Inv as an invariant, and run the spec. On the resulting error trace, add C as the expression to print, and hit Explore. Everything is fine, and it prints 44. Go to the Constants section, change the value of C to 22 and hit Finish. BUT DO NOT SAVE THE MODEL. Go back to the Results page, open the Error Trace window, and hit Explore. It runs fine, except it's still printing 44 rather than 22. This indicates a minor bug: it should save the model before running TLC again. Now the major bug. Hit Explore again. Nothing happens. The Trace Explorer is wedged. Closing and opening it again doesn't help. The only way to unwedge it is to run the spec again, recreating the error trace from scratch. When Explore is selected, the Toolbox seems to be writing empty TE.tla and TE.tlc files. (Perhaps fixing the minor bug will prevent the major one.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>141</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-04 16:28:35 +0000</bug_when> + <thetext>The trace explorer is not running because MC.out is empty. This occurs because the delegate for running the trace explorer attempts to read the trace from MC.out, but MC.out is cleared when the model is validated, but not run. I think that validation should not clear MC.out (this is bug 46).</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>145</commentid> + <comment_count>2</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-04 17:25:26 +0000</bug_when> + <thetext>It doesn't seem wise to have the trace explorer rely on MC.out for the trace. It should write the trace to another file when the user clicks explore.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>150</commentid> + <comment_count>3</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-05 15:07:38 +0000</bug_when> + <thetext>Running the model checker on a model now creates a new file called MC_TE.out. The trace explorer delegate reads the trace from this file. It is not edited on validation of the model, only when TLC is run for model checking (not for trace exploration). + +When the trace explorer is run on an unsaved model, the model is now saved without validating. We don't want running the trace explorer to clear MC.out, which is one thing that validation does.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>151</commentid> + <comment_count>4</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-05 15:08:38 +0000</bug_when> + <thetext>MC_TE.out is created by attaching a sink to the process output sink for TLC runs. The class is TraceExplorerTraceSourceOutputSink.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>60</bug_id> + + <creation_ts>2010-02-04 16:17:00 +0000</creation_ts> + <short_desc>Trace Explorer's TE.tla file has entries in wrong order</short_desc> + <delta_ts>2010-02-04 16:41:46 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>139</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-02-04 16:17:15 +0000</bug_when> + <thetext>The Trace Explorer reports an error if an expression to be printed contains a model value or a symbol defined in the Advanced model page's Additional Definitions section. The problem seems to be that the expressions to be printed appear too early in the TE.tla file. They should be the last things before the definition of the initial predicate and next-state relation.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>142</commentid> + <comment_count>1</comment_count> + <attachid>15</attachid> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-04 16:41:46 +0000</bug_when> + <thetext>Created attachment 15 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>15</attachid> + <date>2010-02-04 16:41:00 +0000</date> + <delta_ts>2010-02-04 16:41:46 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1717</size> + <attacher name="Dan Ricketts">daniel.bmore.ricketts</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>61</bug_id> + + <creation_ts>2010-02-04 16:24:00 +0000</creation_ts> + <short_desc>Hiding of variables in Trace Explorer</short_desc> + <delta_ts>2010-02-05 00:12:19 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>140</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-02-04 16:24:10 +0000</bug_when> + <thetext>The user should be able to specify which variables are hidden (not displayed) in the Trace Explorer. (This should apply only to the view obtained by hitting Explore, not to the original trace obtained by hitting Restore.) We need to discuss what the interface should be for this before implementing the feature. + +Note: We were originally discussing adding the feature of changing the order in which variables are shown. That's unnecessary. The user can hide all the variables and then enter them in any order as expressions to be printed.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>149</commentid> + <comment_count>1</comment_count> + <who name="Simon Zambrovski">simon</who> + <bug_when>2010-02-05 00:12:19 +0000</bug_when> + <thetext>I would add a filter (JFace Viwers support filters), which can be activated using a view-action.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>62</bug_id> + + <creation_ts>2010-02-04 16:45:00 +0000</creation_ts> + <short_desc>Build custom about dialog</short_desc> + <delta_ts>2011-05-11 16:57:16 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P5</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>bugzilla.tlaplus.net</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>143</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-04 16:45:37 +0000</bug_when> + <thetext>We should build our own About dialog. Some of the aspects of the eclipse provided about dialog should not be on there, such as Installation Details.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>148</commentid> + <comment_count>1</comment_count> + <who name="Simon Zambrovski">simon</who> + <bug_when>2010-02-05 00:10:35 +0000</bug_when> + <thetext>In general, the About dialog is customizable. I read somewhere about it. I suppose it is set up using the plugin_customization.ini.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>63</bug_id> + + <creation_ts>2010-02-04 16:56:00 +0000</creation_ts> + <short_desc>Change order of trace explorer variables in trace viewer</short_desc> + <delta_ts>2010-07-14 03:25:07 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>144</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-04 16:56:19 +0000</bug_when> + <thetext>The trace explorer variables should appear before other variables in the order in which the user entered the expressions.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>212</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-07-14 03:25:07 +0000</bug_when> + <thetext>Dan apparently fixed this months ago.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>64</bug_id> + + <creation_ts>2010-02-05 16:11:00 +0000</creation_ts> + <short_desc>Constant expression evaluation shows up in User Output on linux</short_desc> + <delta_ts>2011-05-17 13:58:14 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Linux</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>153</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-05 16:11:41 +0000</bug_when> + <thetext>If the user enters expr into the evaluating constant expressions field, then the value val of expr correctly shows up in the value field, but <<!@$!@$!@$, val>> shows up in User Output. This occurs on Linux ubuntu.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>154</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-05 16:15:19 +0000</bug_when> + <thetext>This also occurs on mac.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>66</bug_id> + + <creation_ts>2010-02-18 00:29:00 +0000</creation_ts> + <short_desc>Clicking on module location jumps to PDF viewer sometimes</short_desc> + <delta_ts>2010-02-18 10:59:12 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>156</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-18 00:29:11 +0000</bug_when> + <thetext>If I have the PDF viewer tab selected in the Module Editor and I double click on a location in the coverage field, The Toolbox selects the right region in the .tla file, but it jumps to the PDF viewer rather than the .tla file viewer.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>157</commentid> + <comment_count>1</comment_count> + <attachid>16</attachid> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-02-18 10:59:12 +0000</bug_when> + <thetext>Created attachment 16 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>16</attachid> + <date>2010-02-18 10:59:00 +0000</date> + <delta_ts>2010-02-18 10:59:12 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>26010</size> + <attacher name="Dan Ricketts">daniel.bmore.ricketts</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>67</bug_id> + + <creation_ts>2010-03-01 23:47:00 +0000</creation_ts> + <short_desc>Problem with printing of invariant when it is violated.</short_desc> + <delta_ts>2010-03-01 23:47:38 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>160</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-03-01 23:47:38 +0000</bug_when> + <thetext>When the toolbox reports that TLC found an invariant violated, if the invariant is multi-line, it should print the message as + + Invariant <newline> + the text of the invariant <newline> + violated. + +If the invariant is a single line (contains no newline characters), it should be printed as it now is: + + Invariant text-of-invariant violated + +unless the text of the invariant is too long, in which case it should be printed as + + Invariant text-of-invariant<newline> + violated. + +How long is "too long" should be determined by experiment to ensure that the word "violated" is likely to be visible in the window. + +Note: trailing spaces and newline characters should be removed from the invariant before trying to print it.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>68</bug_id> + + <creation_ts>2010-03-01 23:58:00 +0000</creation_ts> + <short_desc>Set defaults for PlusCal algorithms</short_desc> + <delta_ts>2010-07-01 12:00:12 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>161</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-03-01 23:58:04 +0000</bug_when> + <thetext>The following default settings should be made when creating new model. (The user can override them if he wants.) + +1. If a spec contains the constant defaultInitValue, then it should be set to a model value. + +2. If a spec contains a defined operator Spec whose level is temporal, then it should be made the temporal spec and that + option chosen. Otherwise, if it contains a defined operator Init whose level is state and a defined operator Next whose + level is action, then they should be made the Init/Next spec. + +These defaults (especially the first) will be most useful to specs that come from PlusCal algorithms. We could limit their application to files that have PlusCal algorithms. However, I suggest that we don't because the algorithm could be in an EXTENDed module.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>69</bug_id> + + <creation_ts>2010-03-02 17:24:00 +0000</creation_ts> + <short_desc>Toolbox confused about directories.</short_desc> + <delta_ts>2015-02-11 14:32:22 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>ASSIGNED</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P2</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>bugzilla.tlaplus.net</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>163</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-03-02 17:24:10 +0000</bug_when> + <thetext>I opened a spec and then did a SaveAs to save the root module under a different name in the same directory. I then tried to open the root directory module. It was not listed among the choices presented in the OpenModule menu. When I clicked on AddModule, the browser came up showing the contents of the .toolbox directory. When I selected the parent directory (that is, the spec's directory) and selected the root module from it, I go an error window saying + + The provided module Euclid.tla is not located in the same directory as the root file. Please select the module in \Euclid + +Of course, the module I selected, file Euclid.tla in directory ...\Euclid, was the root file. + +When I closed the spec and tried to reopen it, I got various errors saying the root file didn't exist and something indicating that it was looking in the .toolbox directory.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>164</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-03-02 17:28:37 +0000</bug_when> + <thetext>I just deleted the spec and tried opening a new spec. When I clicked on Browse, nothing happened. (Nothing appeared on the Eclipse console.) I had to close the Toolbox and restart it to be able to open a new spec.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>70</bug_id> + + <creation_ts>2010-03-04 07:28:00 +0000</creation_ts> + <short_desc>Save dirty editor prior to execution - PlusCal preference and Save on Run TLC option</short_desc> + <delta_ts>2011-07-14 17:26:47 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>165</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-03-04 07:28:27 +0000</bug_when> + <thetext>A user was confused when he edited his PlusCal file and hit translate without saving, and found that the spec he was running the model checker on hadn't changed. This suggests that there should be a Save on Translate preference option that is selected by default. We should probably also add a Translate on Save preference. + +And this also raises the question of what should happen if the user tries to run the model checker (or validate a model) with an unsaved spec. I suggest that the default behavior should be to raise a window asking the user if he wants to save it. Note that this should be the case when there is any unsaved module that was part of the spec the last time the spec was parsed.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>297</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-17 16:30:28 +0000</bug_when> + <thetext>LL comment: A popup/dialog should ask the user if he/she wants to save the dirty editor prior to running the model checker and/or PlusCal translator. -> Generally a dirty editor should be saved before running any command on it (e.g. produce pdf, ....)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>473</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-14 17:26:47 +0000</bug_when> + <thetext>The second part of this bug in now tracked in bug #150.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>71</bug_id> + + <creation_ts>2010-03-05 03:29:00 +0000</creation_ts> + <short_desc>Make it easier to clone a model</short_desc> + <delta_ts>2010-07-01 12:15:00 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>166</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-03-05 03:29:31 +0000</bug_when> + <thetext>Now, to clone a model you have to go to the spec explorer--which means that no user will discover it by himself. And it's also inconvenient. There should be an easy way to create a clone of the model. Perhaps a Clone Model command on TLC Model Checker menu.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>72</bug_id> + + <creation_ts>2010-03-05 17:47:00 +0000</creation_ts> + <short_desc>Inconvenience in using TLA2TeX</short_desc> + <delta_ts>2011-05-17 14:10:35 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>167</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-03-05 17:47:09 +0000</bug_when> + <thetext>For some reason, Acrobat reader shows the pretty-printed version at an inconveniently large magnification. I can reduce the size, but the next time I run the pretty-printer the pdf is shown at the same large magnification. It would be nice if Acrobat could be called so it uses the magnification it had the last time--or at least the current magnification if it is already opened on the file. Alternatively (and perhaps in addition) it would be good to add a preference that specifies the magnification used when Acrobat opens the pdf file. (This would have to be specified in a sufficiently generic way--e.g., as command-line arguments--so it could be used if the user has a different program for displaying pdf files.)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>295</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-17 14:10:35 +0000</bug_when> + <thetext>Might be related to bug #117</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>73</bug_id> + + <creation_ts>2010-03-10 04:05:00 +0000</creation_ts> + <short_desc>TLC not reporting anything useful on a stack overflow</short_desc> + <delta_ts>2010-03-13 03:54:37 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA Tools</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>168</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-03-10 04:05:54 +0000</bug_when> + <thetext>When computing the invariant on the initial state throws a stack overflow exception (because of an infinite recursion), TLC just reports + + %1% + While working on the initial state: + %2% + + I'm pretty sure it used to report the stack overflow, so this bug was probably added when the error reporting was rewritten. However, the same useless error report is printed when TLC is run from a shell.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>170</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-03-13 03:54:37 +0000</bug_when> + <thetext>I fixed this and a couple of similar cases of useless error messages. They were all caused by a code that caught an except e and then called MP.printError with e.getMessage() as an argument. However, for StackOverFlow, NullPointer, and who knows what other exceptions, e.getMessage() equals null. (How appropriate for a NullPointer exception.) This produced something like \%1\% as the message. (That should be percent 1 percent, except that the stupid editor deletes percents, so I just typed backslash-percents in the hope that it will do the right thing.) + +I went through and changed a bunch of e.getMessage() instances to produce e.getString() if e.getMessage() is null. I may have missed some that can cause useless error messages. If we encounter one, we can probably find it by running TLC in debug mode with breakpoints on (handled and unhandled) StackOverFlow and NullPointer exceptions.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>74</bug_id> + + <creation_ts>2010-03-12 20:34:00 +0000</creation_ts> + <short_desc>Toolbox does not report violated invariant</short_desc> + <delta_ts>2011-05-17 14:32:57 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>WORKSFORME</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P2</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>169</commentid> + <comment_count>0</comment_count> + <attachid>18</attachid> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-03-12 20:34:31 +0000</bug_when> + <thetext>Created attachment 18 +Modules and model + +Running the Toolbox on the model for CastroLiskovBug produces an MC file that +reports an invariant failure, but the Toolbox reports that it has finished +without reporting an error (the statistics show one state left on the queue).</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>296</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-17 14:32:57 +0000</bug_when> + <thetext>Can´t reproduce it. This may have been solved by fixing the TLC -tool mode bug that caused the output that TLC printed early in its execution not to be seen by the Toolbox.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>18</attachid> + <date>2010-03-12 20:34:00 +0000</date> + <delta_ts>2010-03-12 20:34:31 +0000</delta_ts> + <desc>Modules and model</desc> + <filename>tlcbug.zip</filename> + <type>application/zip</type> + <size>104097</size> + <attacher name="Dan Ricketts">daniel.bmore.ricketts</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>75</bug_id> + + <creation_ts>2010-03-13 16:04:00 +0000</creation_ts> + <short_desc>Allow examining a locked TLC model.</short_desc> + <delta_ts>2010-07-01 12:15:51 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>171</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-03-13 16:04:17 +0000</bug_when> + <thetext>When a model is locked, the user should still be able to open sections to examine them. While a model is running, I'd like to see the model--for example, how many workers it's using, what the constraint is, etc. It's a nuisance to start TLC and wonder what it's actually checking. I just realized that I can do this by cloning the model. But it would be better to make the model fully examinable, just not modifiable. If that's hard, another possibility is to allow the user to unlock the running model and then relock it after opening the necessary sections. This is dangerous, but the user would have to be pretty stupid to shoot himself in the foot.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>172</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-03-18 10:34:03 +0000</bug_when> + <thetext>The easiest thing to do is to expand every section before disabling it when the model is locked. This could be annoying for the user. + +The better option and probably only slightly more difficult to implement is to disable the widgets on each page that are actually modifiable rather than entire sections. This means, for example, disabling the text box and buttons in the constants section rather than the entire section so that the user can still change the expansion state of the section but not change anything else.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>76</bug_id> + + <creation_ts>2010-03-24 23:34:00 +0000</creation_ts> + <short_desc>Browse button on new spec menu not working</short_desc> + <delta_ts>2010-07-01 12:02:48 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>WORKSFORME</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>174</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-03-24 23:34:22 +0000</bug_when> + <thetext>When no spec is open and I select Open Spec/Add New Spec, the Browse button on the popup menu does nothing. However, if I do the same thing when a spec is open, the Browse button works fine.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>175</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-03-25 16:01:19 +0000</bug_when> + <thetext>I can't reproduce this. Is there anything worth noting that gets printed to the console when this happens?</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>176</commentid> + <comment_count>2</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-03-26 19:17:08 +0000</bug_when> + <thetext>This is either sporadic or else it occurs on Vista and not on XP. I'm afraid I don't remember if I've observed it on both systems. Nothing is printed on the console.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>77</bug_id> + + <creation_ts>2010-03-29 17:26:00 +0000</creation_ts> + <short_desc>Model Editor unusable when checkpoints folder is large</short_desc> + <delta_ts>2010-05-05 11:59:18 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>177</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-03-29 17:26:46 +0000</bug_when> + <thetext>When the checkpoints folder for a model contains a large number of files, the model editor becomes almost unusable. This occurs because the of a call to refreshLocal() in the method ModelHelper.getCheckpoints(). It refreshes the checkpoints folder, which in some case can mean refreshing the 1000s of files inside. This is slow. Based on the comments, this call to refreshLocal is sometimes necessary because the toolbox doesn't always recognize the checkpoint folder, but currently it occurs on every validation of the main model page, which is probably unnecessary. This call needs to be made more selectively.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>198</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-05-05 11:59:16 +0000</bug_when> + <thetext>The second argument of ModelHelper.getCheckpoints(ILaunchConfiguration,boolean) is a flag indicating if the refreshLocal() should be called for the model folder. This flag is only set to true after a TLC job completes. All other calls to the getCheckpoints() method set the flag to false. This means that refreshing will not occur on every validation of the main model page. It will only occur when necessary, after TLC completes and may have created new checkpoints.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>199</commentid> + <comment_count>2</comment_count> + <attachid>20</attachid> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-05-05 11:59:18 +0000</bug_when> + <thetext>Created attachment 20 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>20</attachid> + <date>2010-05-05 11:59:00 +0000</date> + <delta_ts>2010-05-05 11:59:18 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>6985</size> + <attacher name="Dan Ricketts">daniel.bmore.ricketts</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>78</bug_id> + + <creation_ts>2010-03-30 12:36:00 +0000</creation_ts> + <short_desc>Non-automatic parsing locks UI</short_desc> + <delta_ts>2011-05-11 15:19:20 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>DUPLICATE</resolution> + <dup_id>103</dup_id> + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>bugzilla.tlaplus.net</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>178</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-03-30 12:36:56 +0000</bug_when> + <thetext>Launching parsing by selecting the Parse Module/Spec menu item locks the UI while auto-parse on save runs in a separate thread. I think that parsing should always be run asynchronously.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>275</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-11 15:19:20 +0000</bug_when> + <thetext> + +*** This bug has been marked as a duplicate of bug 103 ***</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>79</bug_id> + + <creation_ts>2010-04-07 00:41:00 +0000</creation_ts> + <short_desc>Add new TLC parameter Maximum Fingerprint Memory Size</short_desc> + <delta_ts>2012-01-03 18:42:25 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + <dependson>243</dependson> + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>bugzilla.tlaplus.net</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>179</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-04-07 00:41:12 +0000</bug_when> + <thetext>Yuan has added a new run-time parameter to TLC: the number of megabytes of memory to be allocated to storing the fingerprints of found states. This is specified with a new switch -fpmem ,as in + + -fpmem 100 + +The default value is 1/4 the maximum memory size that the JVW will assign to the program. (This amount apparently grows with the Maximum JVM Heap Size parameter.) This new parameter should appear both in the "How to Run" section of the Model Overview page and in the TLC model checker preferences page. The user chooses the default by leaving the text box blank. Only if the user specifies a values should the -fpmem argument be given to TLC. + +The parameter should be labeled Maximum FingerPrint Memory size in MB.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>180</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-04-07 20:21:46 +0000</bug_when> + <thetext>The Toolbox should allow the new parameter to be set only to a value less than the value of Maximum JVM Heap Size. (And conversely, the JVM heap size should not be settable to less than or equal to the new parameter.)</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>80</bug_id> + + <creation_ts>2010-04-11 18:19:00 +0000</creation_ts> + <short_desc>trace explorer doesn't work on trace of length 1</short_desc> + <delta_ts>2010-07-14 03:35:46 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>181</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-04-11 18:19:23 +0000</bug_when> + <thetext>You can create such an error trace by checking deadlock in a spec that deadlocks in the initial state. + +Why would I want to explore such an error trace? Because it's a convenient way to evaluate expressions on a particular state. (Perhaps that indicates a missing feature.)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>213</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-07-14 03:35:46 +0000</bug_when> + <thetext>This now appears to work. I presume Dan fixed it without marking the bug report as resolved.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>81</bug_id> + + <creation_ts>2010-04-11 19:39:00 +0000</creation_ts> + <short_desc>Bad behavior of model-editor page with long Invariants and Properties.</short_desc> + <delta_ts>2011-05-17 14:34:25 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>182</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-04-11 19:39:29 +0000</bug_when> + <thetext>The display of Invariants and Properties on the Model Overview Page does weird and unsatisfying things when the one-line displayed entries get too wide. In particular, the width of their column grows to accommodate the widest line, and cannot be shrunk even when the wide lines are eliminated--except by closing and reopening the model. As I recall, there are serious problems trying to fix this with the Eclipse primitives. So, I suggest the following change to ameliorate the problem: On the displayed line, replace each sequence of spaces with a single space.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>209</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-07-01 12:06:18 +0000</bug_when> + <thetext>I suggest preventing the widgets from expanding and adding a scroll bar.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>82</bug_id> + + <creation_ts>2010-04-26 18:23:00 +0000</creation_ts> + <short_desc>Toolbox crashed by out-of-memory exception</short_desc> + <delta_ts>2010-07-01 12:08:39 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>lamport</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>184</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-04-26 18:23:28 +0000</bug_when> + <thetext>I was running a TLC model that, according to the log entry pasted below, ran TLC out of memory. (Sorry for doing it this way, but I couldn't find the switch in the 747 cockpit that allows me to attach something to the bug report--though I'm sure I've stumbled upon it before.) It would be nice if this could be prevented from crashing the Toolbox, but would simply cause it to report a TLC error. Of course, if TLC running out of memory causes the Toolbox to run out of memory as well, this is likely to be impossible. But I don't see why this should happen. (Of course, I have a lot of trouble seeing why all the ways computer programs fail should happen.) + +eclipse.buildId=unknown +java.version=1.6.0_11 +java.vendor=Sun Microsystems Inc. +BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US +Framework arguments: -product org.lamport.tla.toolbox.product.standalone.product +Command-line arguments: -product org.lamport.tla.toolbox.product.standalone.product -data C:\users\lamport\tla\newtools\tla2-inria/../runtime-standalone.product -dev file:C:/users/lamport/tla/newtools/tla2-inria/.metadata/.plugins/org.eclipse.pde.core/standalone.product/dev.properties -os win32 -ws win32 -arch x86 + +!ENTRY org.eclipse.osgi 2 0 2010-04-22 09:21:38.625 +!MESSAGE The following is a complete list of bundles which are not resolved, see the prior log entry for the root cause if it exists: +!SUBENTRY 1 org.eclipse.osgi 2 0 2010-04-22 09:21:38.625 +!MESSAGE Bundle org.eclipse.jdt.launching.macosx_3.2.0.v20090527 [337] was not resolved. +!SUBENTRY 2 org.eclipse.jdt.launching.macosx 2 0 2010-04-22 09:21:38.625 +!MESSAGE Platform filter did not match: (osgi.os=macosx) + +!ENTRY org.eclipse.core.resources 2 10035 2010-04-22 09:21:39.750 +!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes. + +!ENTRY org.eclipse.ui 2 0 2010-04-22 09:21:40.562 +!MESSAGE Warnings while parsing the commands from the 'org.eclipse.ui.commands' and 'org.eclipse.ui.actionDefinitions' extension points. +!SUBENTRY 1 org.eclipse.ui 2 0 2010-04-22 09:21:40.562 +!MESSAGE Commands should really have a category: plug-in='org.lamport.tla.toolbox.tool.prover.ui', id='org.lamport.tla.toolbox.tool.prover.ui.checkStep.delegate', categoryId='org.eclipse.debug.ui.category.run' + +!ENTRY org.eclipse.ui 4 4 2010-04-22 09:23:52.814 +!MESSAGE Plugin org.lamport.tla.toolbox, extension org.eclipse.ui.perspectiveExtensions, id toolbox.view.ToolboxWelcomeView: Attribute 'relative' not defined. This attribute is required when relationship="left". + +!ENTRY org.eclipse.ui 4 4 2010-04-22 09:23:52.814 +!MESSAGE Unable to process element: view in perspective extension: null + +!ENTRY org.eclipse.ui 4 4 2010-04-22 09:24:31.268 +!MESSAGE Plugin org.lamport.tla.toolbox, extension org.eclipse.ui.perspectiveExtensions, id toolbox.view.ToolboxWelcomeView: Attribute 'relative' not defined. This attribute is required when relationship="left". + +!ENTRY org.eclipse.ui 4 4 2010-04-22 09:24:31.268 +!MESSAGE Unable to process element: view in perspective extension: null + +!ENTRY org.eclipse.ui 4 4 2010-04-22 12:12:57.928 +!MESSAGE Plugin org.lamport.tla.toolbox, extension org.eclipse.ui.perspectiveExtensions, id toolbox.view.ToolboxWelcomeView: Attribute 'relative' not defined. This attribute is required when relationship="left". + +!ENTRY org.eclipse.ui 4 4 2010-04-22 12:12:58.100 +!MESSAGE Unable to process element: view in perspective extension: null + +!ENTRY org.eclipse.ui 4 4 2010-04-22 12:13:51.304 +!MESSAGE Plugin org.lamport.tla.toolbox, extension org.eclipse.ui.perspectiveExtensions, id toolbox.view.ToolboxWelcomeView: Attribute 'relative' not defined. This attribute is required when relationship="left". + +!ENTRY org.eclipse.ui 4 4 2010-04-22 12:13:51.319 +!MESSAGE Unable to process element: view in perspective extension: null + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2010-04-23 23:14:47.975 +!MESSAGE Error writing the TLC process output file for ByzPaxosConsensus___TinyModel.launch +!STACK 1 +org.eclipse.core.runtime.CoreException: Could not write file: C:\users\lamport\papers\paxos\simple\byztla\ByzPaxosConsensus.toolbox\TinyModel\MC.out. + at org.eclipse.core.internal.filesystem.Policy.error(Policy.java:55) + at org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:386) + at org.eclipse.core.internal.localstore.FileSystemResourceManager.write(FileSystemResourceManager.java:956) + at org.eclipse.core.internal.resources.File.internalSetContents(File.java:320) + at org.eclipse.core.internal.resources.File.appendContents(File.java:53) + at org.lamport.tla.toolbox.tool.tlc.output.internal.FileProcessOutputSink$1.run(FileProcessOutputSink.java:47) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1800) + at org.lamport.tla.toolbox.tool.tlc.output.internal.FileProcessOutputSink.appendText(FileProcessOutputSink.java:43) + at org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + at org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + at org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + at org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + at org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + at java.lang.Thread.run(Thread.java:619) +Caused by: java.io.FileNotFoundException: C:\users\lamport\papers\paxos\simple\byztla\ByzPaxosConsensus.toolbox\TinyModel\MC.out (The process cannot access the file because it is being used by another process) + at java.io.FileOutputStream.openAppend(Native Method) + at java.io.FileOutputStream.<init>(FileOutputStream.java:177) + at org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:377) + ... 15 more +!SUBENTRY 1 org.eclipse.core.filesystem 4 272 2010-04-23 23:14:49.928 +!MESSAGE Could not write file: C:\users\lamport\papers\paxos\simple\byztla\ByzPaxosConsensus.toolbox\TinyModel\MC.out. +!STACK 0 +java.io.FileNotFoundException: C:\users\lamport\papers\paxos\simple\byztla\ByzPaxosConsensus.toolbox\TinyModel\MC.out (The process cannot access the file because it is being used by another process) + at java.io.FileOutputStream.openAppend(Native Method) + at java.io.FileOutputStream.<init>(FileOutputStream.java:177) + at org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:377) + at org.eclipse.core.internal.localstore.FileSystemResourceManager.write(FileSystemResourceManager.java:956) + at org.eclipse.core.internal.resources.File.internalSetContents(File.java:320) + at org.eclipse.core.internal.resources.File.appendContents(File.java:53) + at org.lamport.tla.toolbox.tool.tlc.output.internal.FileProcessOutputSink$1.run(FileProcessOutputSink.java:47) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1800) + at org.lamport.tla.toolbox.tool.tlc.output.internal.FileProcessOutputSink.appendText(FileProcessOutputSink.java:43) + at org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + at org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + at org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + at org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + at org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + at java.lang.Thread.run(Thread.java:619) + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2010-04-23 23:22:10.093 +!MESSAGE Error writing the TLC process output file for ByzPaxosConsensus___TinyModel.launch +!STACK 1 +org.eclipse.core.runtime.CoreException: Could not write file: C:\users\lamport\papers\paxos\simple\byztla\ByzPaxosConsensus.toolbox\TinyModel\MC_TE.out. + at org.eclipse.core.internal.filesystem.Policy.error(Policy.java:55) + at org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:386) + at org.eclipse.core.internal.localstore.FileSystemResourceManager.write(FileSystemResourceManager.java:956) + at org.eclipse.core.internal.resources.File.internalSetContents(File.java:320) + at org.eclipse.core.internal.resources.File.appendContents(File.java:53) + at org.lamport.tla.toolbox.tool.tlc.output.internal.FileProcessOutputSink$1.run(FileProcessOutputSink.java:47) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1800) + at org.lamport.tla.toolbox.tool.tlc.output.internal.FileProcessOutputSink.appendText(FileProcessOutputSink.java:43) + at org.lamport.tla.toolbox.tool.tlc.output.internal.TraceExplorerTraceSourceOutputSink.appendText(TraceExplorerTraceSourceOutputSink.java:53) + at org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + at org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + at org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + at org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + at org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + at java.lang.Thread.run(Thread.java:619) +Caused by: java.io.FileNotFoundException: C:\users\lamport\papers\paxos\simple\byztla\ByzPaxosConsensus.toolbox\TinyModel\MC_TE.out (The process cannot access the file because it is being used by another process) + at java.io.FileOutputStream.openAppend(Native Method) + at java.io.FileOutputStream.<init>(FileOutputStream.java:177) + at org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:377) + ... 16 more +!SUBENTRY 1 org.eclipse.core.filesystem 4 272 2010-04-23 23:22:10.093 +!MESSAGE Could not write file: C:\users\lamport\papers\paxos\simple\byztla\ByzPaxosConsensus.toolbox\TinyModel\MC_TE.out. +!STACK 0 +java.io.FileNotFoundException: C:\users\lamport\papers\paxos\simple\byztla\ByzPaxosConsensus.toolbox\TinyModel\MC_TE.out (The process cannot access the file because it is being used by another process) + at java.io.FileOutputStream.openAppend(Native Method) + at java.io.FileOutputStream.<init>(FileOutputStream.java:177) + at org.eclipse.core.internal.filesystem.local.LocalFile.openOutputStream(LocalFile.java:377) + at org.eclipse.core.internal.localstore.FileSystemResourceManager.write(FileSystemResourceManager.java:956) + at org.eclipse.core.internal.resources.File.internalSetContents(File.java:320) + at org.eclipse.core.internal.resources.File.appendContents(File.java:53) + at org.lamport.tla.toolbox.tool.tlc.output.internal.FileProcessOutputSink$1.run(FileProcessOutputSink.java:47) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1800) + at org.lamport.tla.toolbox.tool.tlc.output.internal.FileProcessOutputSink.appendText(FileProcessOutputSink.java:43) + at org.lamport.tla.toolbox.tool.tlc.output.internal.TraceExplorerTraceSourceOutputSink.appendText(TraceExplorerTraceSourceOutputSink.java:53) + at org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + at org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + at org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + at org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + at org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + at java.lang.Thread.run(Thread.java:619) + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:32:33.287 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + at java.util.Arrays.copyOf(Arrays.java:2882) + at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) + at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515) + at java.lang.StringBuffer.append(StringBuffer.java:306) + at org.eclipse.ui.editors.text.StorageDocumentProvider.setDocumentContent(StorageDocumentProvider.java:144) + at org.eclipse.ui.editors.text.FileDocumentProvider.setDocumentContent(FileDocumentProvider.java:424) + at org.eclipse.ui.editors.text.FileDocumentProvider.handleElementContentChanged(FileDocumentProvider.java:830) + at org.eclipse.ui.editors.text.FileDocumentProvider$2.execute(FileDocumentProvider.java:274) + at org.eclipse.ui.editors.text.FileDocumentProvider$SafeChange.run(FileDocumentProvider.java:163) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:32:38.444 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + at java.util.Arrays.copyOf(Arrays.java:2882) + at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) + at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515) + at java.lang.StringBuffer.append(StringBuffer.java:306) + at org.eclipse.ui.editors.text.StorageDocumentProvider.setDocumentContent(StorageDocumentProvider.java:144) + at org.eclipse.ui.editors.text.FileDocumentProvider.setDocumentContent(FileDocumentProvider.java:424) + at org.eclipse.ui.editors.text.FileDocumentProvider.handleElementContentChanged(FileDocumentProvider.java:830) + at org.eclipse.ui.editors.text.FileDocumentProvider$2.execute(FileDocumentProvider.java:274) + at org.eclipse.ui.editors.text.FileDocumentProvider$SafeChange.run(FileDocumentProvider.java:163) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:32:43.319 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + at java.util.Arrays.copyOf(Arrays.java:2882) + at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) + at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515) + at java.lang.StringBuffer.append(StringBuffer.java:306) + at org.eclipse.ui.editors.text.StorageDocumentProvider.setDocumentContent(StorageDocumentProvider.java:144) + at org.eclipse.ui.editors.text.FileDocumentProvider.setDocumentContent(FileDocumentProvider.java:424) + at org.eclipse.ui.editors.text.FileDocumentProvider.handleElementContentChanged(FileDocumentProvider.java:830) + at org.eclipse.ui.editors.text.FileDocumentProvider$2.execute(FileDocumentProvider.java:274) + at org.eclipse.ui.editors.text.FileDocumentProvider$SafeChange.run(FileDocumentProvider.java:163) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:36:25.073 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + at java.util.Arrays.copyOf(Arrays.java:2882) + at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) + at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515) + at java.lang.StringBuffer.append(StringBuffer.java:306) + at org.eclipse.ui.editors.text.StorageDocumentProvider.setDocumentContent(StorageDocumentProvider.java:144) + at org.eclipse.ui.editors.text.FileDocumentProvider.setDocumentContent(FileDocumentProvider.java:424) + at org.eclipse.ui.editors.text.FileDocumentProvider.handleElementContentChanged(FileDocumentProvider.java:830) + at org.eclipse.ui.editors.text.FileDocumentProvider$2.execute(FileDocumentProvider.java:274) + at org.eclipse.ui.editors.text.FileDocumentProvider$SafeChange.run(FileDocumentProvider.java:163) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:36:30.011 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:36:34.026 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:36:38.105 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:36:42.120 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:40:27.937 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:40:32.047 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:40:36.078 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:40:40.109 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:40:44.172 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:43:47.566 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:43:51.613 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:43:55.613 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:44:30.285 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:46:51.273 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space + +!ENTRY org.eclipse.ui 4 0 2010-04-24 11:46:55.351 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.OutOfMemoryError: Java heap space) + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287) +Caused by: java.lang.OutOfMemoryError: Java heap space</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>185</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-04-26 19:11:42 +0000</bug_when> + <thetext>The first few exceptions are FileNotFoundExceptions for the two output files MC_TE.out and MC.out. The message claims that another process is using these files. I tried running TLC on the same model from two different instances of the toolbox, but this did not produce any Java exceptions. I don't know what other process would be accessing those files.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>186</commentid> + <comment_count>2</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-04-26 19:37:03 +0000</bug_when> + <thetext>Those file not found exceptions don't seem to be relevant, since the toolbox did start the model and TLC ran for about two days before the out-of-memory exception killed it.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>187</commentid> + <comment_count>3</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-04-26 20:11:28 +0000</bug_when> + <thetext>I'm probably missing something, but what makes you think that TLC ran out of memory? I see that the Toolbox ran out of memory.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>188</commentid> + <comment_count>4</comment_count> + <attachid>19</attachid> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-04-26 21:17:26 +0000</bug_when> + <thetext>Created attachment 19 +the files + +I think I finally figured out how to attach this.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>189</commentid> + <comment_count>5</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-04-26 21:19:01 +0000</bug_when> + <thetext>TLC was not running, so I assumed that it had crashed. Would the Toolbox running out of memory stop TLC? + +Anyway, the TLC run started at 14:26 on 22 April. The last progress report was at 11:46:20 on 24 April, which was also the time of the last checkpoint. I have no idea why the Toolbox should have been writing ByzPaxosConsensus___TinyModel.launch on 23 April. Anyway, I finally saw where to add attachments, so I attached the files. (I could swear that section was not there when I created the report.)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>190</commentid> + <comment_count>6</comment_count> + <who name="Simon Zambrovski">simon</who> + <bug_when>2010-04-26 22:30:35 +0000</bug_when> + <thetext>There are generally two independent happenings. I think these are dependent now due to a bug in toolbox. These are things that I know of: + - A stack overflow in TLC produces a stack overflow of Toolbox + - An out-of-memory in TLC should not crash the toolbox. At least that was one of the design issues. I don't know how it behaves now, but this is easy to simulate. + - Toolbox is writing an incomming stream to a file. I assume it will fail, after the file size exceeds 2GB. This could be the error of FileNotFound. Windows is not very smart reporting errors. If the file can not be accessed it reports that the reason is that it is hold by another process. + - The out-of-memory of Toolbox seems to be produced by the Toolbox itself. This can be the similar problem as the previous. Trying to display a content of the file that is 2GB big can be problematic. We spoke about a kind of sliding-window mechanism for boths: file and display with Leslie, but I actually never implemented it.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>191</commentid> + <comment_count>7</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-04-26 22:55:14 +0000</bug_when> + <thetext>There is no file larger than 5MB in the TinyModel directory, where I presume it should be. In fact, the directory containing all the related specs and their models is only about 35MB. + +I'd be curious to know why a stack overflow in TLC produces a stack overflow in a separate process. However, that's very unlikely to be the cause of the problem. I've never seen a TLC stack overflow that was not produced by a problem with the spec (and properly caught by TLC). I just restarted the model from the checkpoint that was created just before the Toolbox crashed; it has been happily running for about 5 minutes. + +However, there does seem to be a memory problem with the Toolbox. I just noticed that, right before I closed it, the Toolbox was using over 700MB of memory. I restarted the Toolbox this morning and have not been doing much of anything with it. So, there must be a memory leak in the code.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>192</commentid> + <comment_count>8</comment_count> + <who name="Simon Zambrovski">simon</who> + <bug_when>2010-04-26 23:13:47 +0000</bug_when> + <thetext>I found it interesting, that a 5 MB file is being produced in 2 days of running TLC. As far as I know TLC writes log. In two days it should have produced tonns of logs.. + +So again, my comments to your bug descriptions are: +-> I was running a TLC model that, according to the log entry pasted below, ran +TLC out of memory. + +This is wrong. The log says that there was a out-of-memory in a toolbox, not in TLA. + +-> Of course, if TLC running out of memory causes the Toolbox to run out of memory as well, this is likely to be impossible. + +This is not the case.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>193</commentid> + <comment_count>9</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-04-27 12:48:09 +0000</bug_when> + <thetext>Simon and I talked about the toolbox's parsing and storing of TLC's output as one source of memory leak. The following steps are taken to parse TLC's output: + +1.) Create an empty document (an eclipse construct that provides support for editing and partitioning text, among other things). +2.) When new output from TLC arrives, append it to this document. +3.) Using the eclipse document partitioning framework, this is partitioned into regions where each region is either a start message tag, an end message tag, or a character that is not in a start or end message tag. +4.) The parser is notified each time the partitioning of the document changes. It uses the positions of the new partitions to create the appropriate data types to store for any interested listeners. + +I think that at least one problem is that the document containing all of TLC's output is stored as long as TLC is running. After TLC has been running for 2 weeks, the document created in step 1 will still contain + +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ + +and the associated partitions and other data types used by eclipse to maintain a document, even though the information contained in this part of the message has been stored in another data type in step 4. This redundant storage is unnecessary, and takes up a lot of memory. Once the partitioning for a portion of the document has been used to generate the appropriate data type in step 4, these partitions, along with the portion of the document to which they correspond, are no longer needed. + +Simon and I also talked about the caching of the data type created in step 4. All instances of this data type created by any run of TLC since the Toolbox was last started are held in memory. This doesn't seem to be a large percentage of the toolbox heap size, so it may not be worth worrying about right now. To test this, I ran TLC for about 12 hours, and then took a heap dump. The total heap size was about 250MB. Objects that I'm pretty sure relate to documents and partitioning of TLC's output seem to take up at least 100MB, while objects created in step 4 seem to take up less than 1 MB.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>194</commentid> + <comment_count>10</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-04-27 12:53:42 +0000</bug_when> + <thetext>The formatting of my last comment is not what I wanted. Try selecting "View Unformatted Text" in the menu to the right of the comment title to see what I actually intended.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>195</commentid> + <comment_count>11</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-04-27 13:20:11 +0000</bug_when> + <thetext>Compounding the problem is the fact that instances of BroadcastStreamListener (which broadcast TLC's output stream to interested sinks) are never removed as listeners to TLC's output stream. This means that all sinks, all parsers, and thus all documents containing output from any run of TLC since the toolbox was last started are kept in memory.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>196</commentid> + <comment_count>12</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-04-27 16:23:58 +0000</bug_when> + <thetext>Further data: just running the model overnight, the Toolbox's memory use grew from 200MB to close to 700MB. A quick estimate indicates that during that time, the Toolbox received 1000 messages, each about 100 bytes long, for a total of about 100KB. If that's the cause of the memory growth, that means the Toolbox is using 5KB of storage for each byte of input it receives. I suppose that's possible with modern software. In any case, this needs to be fixed.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>197</commentid> + <comment_count>13</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-04-30 10:39:08 +0000</bug_when> + <thetext>There's another source of memory leak. FileDocumentProviders are used throughout the toolbox code. They are connected to file editor input to provide convenient access to the file contents. Connecting them to a file editor input also causes them to register as a resource change listener in order to synchronize with changes to the file. When no longer needed, the disconnect() method should be called so that the file document providers remove themselves as resource change listeners. However, this is never done in the toolbox, so references remain to these providers so that they are never removed from the toolbox's heap. After running TLC for two days, FileDocumentProviders were responsible for approximately 40% of the heap space. Another 40% seems to be occupied by objects related to what I explained in comment 11.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>210</commentid> + <comment_count>14</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-07-01 12:08:39 +0000</bug_when> + <thetext>I've fixed the two memory leaks that I noticed, so this is at least partially fixed.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>19</attachid> + <date>2010-04-26 21:17:00 +0000</date> + <delta_ts>2010-04-26 21:17:26 +0000</delta_ts> + <desc>the files</desc> + <filename>Copy of TinyModel.zip</filename> + <type>application/octet-stream</type> + <size>366192</size> + <attacher name="Leslie Lamport">lamport</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>83</bug_id> + + <creation_ts>2010-06-02 12:47:00 +0000</creation_ts> + <short_desc>Renumber proof command does not work for non theorem nodes</short_desc> + <delta_ts>2010-07-01 12:08:57 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Dan Ricketts">daniel.bmore.ricketts</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>200</commentid> + <comment_count>0</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-06-02 12:47:54 +0000</bug_when> + <thetext>The renumber proof command does not work if the proof contains steps that cannot have proofs (use/hide, instance, def). SANY does not seem to provide a way to get the location of the step number for these nodes, so this might motivate a change to SANY.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>86</bug_id> + + <creation_ts>2010-07-14 03:21:00 +0000</creation_ts> + <short_desc>Goto Declaration not working with subexpression names</short_desc> + <delta_ts>2010-10-01 08:37:36 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>211</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-07-14 03:21:12 +0000</bug_when> + <thetext>The Goto Declaration command does nothing with a subexpression name like Foo!2!(x). The best one can do is to go to the definition of Foo if the user is pointing at the "Foo". + +This will be difficult to fix and will require modifying how TLAHyperlinkDector.detectHyperlinks parses the region of the module being pointed at to obtain the operator name to look up. Note that in Foo!Bar!<<!(x), the symbol to find is Foo!Bar, the "!<<!(x)" being a subexpression of that symbol's definition. Since very few people will notice that this case isn't handled, fixing it has low priority.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>223</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-10-01 08:37:36 +0000</bug_when> + <thetext>All known bugs in Goto Declaration, hyperlinking, and Show Uses deemed worth fixing have been fixed. The only known bug is that the Toolbox may not find the symbol if you point at a space in the symbol name, as in "Foo ! Bar". + +One perhaps surprising feature is that it will go to the definition or declaration of a symbol if that symbol is not serving as the symbol--in particular, if it appears in a comment or at the "<" or ">" in something like "<3>". (But it works correctly for "<3>1".)</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>87</bug_id> + + <creation_ts>2010-08-21 02:59:00 +0000</creation_ts> + <short_desc>Toolbox will not raise TLAPM console if TLC console has been raised.</short_desc> + <delta_ts>2011-05-17 16:36:08 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>WONTFIX</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>215</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-08-21 02:59:01 +0000</bug_when> + <thetext>Open a spec and run a TLC model on it, producing output on the TLC Console. Then run the prover. Clicking on the TLAPM Console raises the TLC Console. There seems to be no way to get rid of it except to close the Toolbox. + +Note: There should be a TLAPS Component as a bug attribute, but I don't know how to add one.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>216</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2010-08-22 17:29:02 +0000</bug_when> + <thetext>There is a way to open the TLAPS console when the TLC console is already open. One of the buttons at the top of the console allows you to switch between consoles. It has some sort of drop down menu with the console options. + +The TLAPS menu item to open the console should probably open the TLAPS console always, but I considered it a low priority because I didn't expect users to ever use the TLAPS console.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>302</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-17 16:36:08 +0000</bug_when> + <thetext>Support to separate consoles would require support in Eclipse. Unless this is going to be implemented there, this bug is unlikely to be addressed. + +TODO open bug a eclipse.org. + +Trivial workaround by selecting the console instance on the console selector icon.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>88</bug_id> + + <creation_ts>2010-09-02 03:40:00 +0000</creation_ts> + <short_desc>Goto Declaration (F3), Show Declaration (F5), and Show Uses (F6) don't work on subexpression names</short_desc> + <delta_ts>2010-10-01 08:38:33 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P5</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>217</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-09-02 03:40:17 +0000</bug_when> + <thetext>Goto Declaration (F3) and Show Declaration (F5) don't work if the cursor is on a symbol in a PICK or CASE statement of a proof. They need to be tested to see if there are other places as well where they don't work.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>218</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-09-14 08:37:06 +0000</bug_when> + <thetext>This appears to have been a misdiagnosis. The problem seems to be caused when selecting a name that occurs in a subexpression name, as in Foo(a)!1!(c).</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>219</commentid> + <comment_count>2</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-09-14 12:41:15 +0000</bug_when> + <thetext>I fixed Show Uses so that, when searching for uses of a defined symbol Foo, it marks all names of subexpressions of Foo. For example, it will mark the Foo in Foo!1!(a+b). + +Goto Declaration and Show Uses still don't work if the cursor is at a symbol that is part of the name of a subexpression of the definitiion--for example, if the cursor is at the Foo in Foo!1!(a+b). It doesn't seem worth fixing now. Instead, it should be fixed as part of a re-implementation of EditorUtil.getTokenAt so it works purely on what's in the buffer without using the parse tree.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>222</commentid> + <comment_count>3</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-09-17 10:52:02 +0000</bug_when> + <thetext>Note: Goto Declaration, etc. don't work on a symbol formed with a parameterized instantiation--e.g., I(exp)!Foo.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>224</commentid> + <comment_count>4</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-10-01 08:38:33 +0000</bug_when> + <thetext>All known bugs in Goto Declaration, hyperlinking, and Show Uses deemed worth +fixing have been fixed. The only known bug is that the Toolbox may not find +the symbol if you point at a space in the symbol name, as in "Foo ! Bar". + +One perhaps surprising feature is that it will go to the definition or +declaration of a symbol if that symbol is not serving as the symbol--in +particular, if it appears in a comment or at the "<" or ">" in something like +"<3>". (But it works correctly for "<3>1".)</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>89</bug_id> + + <creation_ts>2010-09-16 12:05:00 +0000</creation_ts> + <short_desc>Show Uses (F6) not working.</short_desc> + <delta_ts>2010-09-17 10:32:50 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>220</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-09-16 12:05:05 +0000</bug_when> + <thetext>I don't know what happened, but it's perhaps not a coincidence that this appeared after I partiallly fixed bug 88.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>221</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-09-17 10:32:50 +0000</bug_when> + <thetext>Bug fixed. + +The Show Uses command still has the following minor bug. When Foo is +defined in module M, which is instantiated by I == INSTANCE M, then +when showing uses of I!Foo, if the use appears in a subexpression name +like I!Foo!2, then just the "I" rather than the "I!Foo" is marked. +This is pretty harmless and is probably not worth fixing.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>90</bug_id> + + <creation_ts>2010-10-01 08:52:00 +0000</creation_ts> + <short_desc>Performance problem reading any non-trivial amount of TLC output</short_desc> + <delta_ts>2011-07-01 20:16:41 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Mac OS</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>DUPLICATE</resolution> + <dup_id>151</dup_id> + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>225</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-10-01 08:52:12 +0000</bug_when> + <thetext>It takes the Toolbox much too long to parse and display TLC output when it gets long. The only real examples I know of in which this is a problem are long uniprocess (sequential) PlusCal algorithms. An example that illustrates the problem is in the module FindOp.tla appended to the TokenSpec class. There are two kinds of output involved: + +- Error traces. It can take effectively forever for TLC to process a long error trace. Putting an "assert FALSE" statement at the end of the algorithm in FindOp.tla produces an error traces with about 1400 states. I have no idea how long it would take the Toolbox to process it, but I would guess it would be at least on the order of hours. + +- Progress information. I believe that it takes TLC about 20 seconds to process each progress report of FindOp.tla. (TLC completes in about a second, so the problem is only in the final report.) I believe that each progress report is about 1000 lines, where each line of output is a separate message. + +Experimentation suggests that the majority of time taken processing the error trace is in displaying it. However, a significant fraction (perhaps 1/3) is spent parsing the TLC output. There seems to be no good reason for that--especially since the entire trace is just a single TLC message. The parsing of TLC output needs to be completely rewritten so it is fast. It's likely that displaying the trace cannot be made fast enough, in which case the user can be warned that the trace is long and given the option of displaying just a part of it. + +When parsing the performance information is fast, we can figure out if displaying it is slow enough to require that something be done about it.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>226</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-10-01 15:42:16 +0000</bug_when> + <thetext>I just discovered a much more serious example of what appears to be the same problem. If you run in simulation mode a simple program with a Print statement that produces output, the Toolbox seems to be swamped by the output and displays no user output on the Results page. Fortunately, aborting the run stops everything, so the user doesn't have to wait for however many hours it takes the Toolbox to parse the output. Unfortunately, that gives the user no indication that any output was produced. + +I/O should be slow enough that the Toolbox should be able to read a stream of input and display it on the screen without falling behind. It should also take the Toolbox just nanoseconds per line to discover that it's not a message and should therefore go to the user output window. So, fixing the Toolbox's handling of TLC output should fix this problem.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>227</commentid> + <comment_count>2</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-10-01 16:13:43 +0000</bug_when> + <thetext>I just discovered that when you run TLC in model-checking mode and the Toolbox gets behind in printing user output, it doesn't print the remaining output when TLC stops normally. (It probably also doesn't if TLC stops because of an error.)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>330</commentid> + <comment_count>3</comment_count> + <attachid>37</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-30 13:11:52 +0000</bug_when> + <thetext>Created attachment 37 +Test_Copy.toolbox.zip + +To run it with the Toolbox, unzip the Test_Copy.toolbox directory, put it in the same directory as Test.tla, and open a spec named Test_Copy with root file Test.tla. The models N=12, N=18, etc. are the models that display the behavior with different values of the parameter N, which is the number of states in the error trace. (Ignore the other models.) + +L.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>331</commentid> + <comment_count>4</comment_count> + <attachid>38</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-30 13:12:11 +0000</bug_when> + <thetext>Created attachment 38 +spec</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>421</commentid> + <comment_count>5</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 20:16:41 +0000</bug_when> + <thetext>I assume all issues mentioned in this bug report have been solved by fix for bug #151 + +*** This bug has been marked as a duplicate of bug 151 ***</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>37</attachid> + <date>2011-05-30 13:11:00 +0000</date> + <delta_ts>2011-05-30 13:11:52 +0000</delta_ts> + <desc>Test_Copy.toolbox.zip</desc> + <filename>Test_Copy.toolbox.zip</filename> + <type>application/octet-stream</type> + <size>255062</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>38</attachid> + <date>2011-05-30 13:12:00 +0000</date> + <delta_ts>2011-05-30 13:12:11 +0000</delta_ts> + <desc>spec</desc> + <filename>Test.tla</filename> + <type>text/plain</type> + <size>2769</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>91</bug_id> + + <creation_ts>2010-10-15 18:03:00 +0000</creation_ts> + <short_desc>Sany error not being reported by the toolbox.</short_desc> + <delta_ts>2010-10-17 17:52:01 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>228</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-10-15 18:03:41 +0000</bug_when> + <thetext>The following module produces a SANY error that is not reported by the Toolbox. + +---- MODULE Test -------- +Foo == 1 + +THEOREM TRUE +<1> QED + BY DEF Foo.x' +================</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>229</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-10-17 17:52:01 +0000</bug_when> + <thetext>Fixed by change to ModuleParserLauncher.findLineAndColumn.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>92</bug_id> + + <creation_ts>2010-12-14 04:01:00 +0000</creation_ts> + <short_desc>Launch Prover command does not check if module has been saved.</short_desc> + <delta_ts>2010-12-14 19:26:46 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>230</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-12-14 04:01:50 +0000</bug_when> + <thetext>As it says, the Launch Prover command (Ctl+G Ctl+P) does not check if the module has been saved. It should.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>231</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2010-12-14 19:26:46 +0000</bug_when> + <thetext>Fixed by copying some code from the other commands.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>93</bug_id> + + <creation_ts>2010-12-20 11:28:00 +0000</creation_ts> + <short_desc>Characters produced by alt + number key cannot be entered from keyboard</short_desc> + <delta_ts>2011-01-13 17:26:23 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>unspecified</version> + <rep_platform>x86 32-bit</rep_platform> + <op_sys>Mac OS</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Vidar">vidar_slatten</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>232</commentid> + <comment_count>0</comment_count> + <who name="Vidar">vidar_slatten</who> + <bug_when>2010-12-20 11:28:49 +0000</bug_when> + <thetext>I cannot type |, [ or ] into the editor when on Mac. It works fine on Windows. Seems the problem has to do with any character that is produced by holding down the alt key then pressing a number key. Pressing shift + alt + number key works, though. + +I have a Norwegian keyboard, in case that has something to do with it. I have tried changing the input source to US keyboard, but the editor still does not register characters typed by holding alt + number key. + +I am able to copy paste these characters from existing specifications or other programs, so I can work around it. + +Versions: +OS: Snow Leopard +Java: 1.6 64-bit +TLA+ toolbox: 1.2.1</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>233</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-01-13 17:26:23 +0000</bug_when> + <thetext>The alt+number keys are currently bound to commands that do nothing. +The commands may eventually do something, but probably not for a +while. To remove the bindings, go to File/Preferences/Keys and type +Prefix into where it says "type filter text". This will show you all +those bindings, which you can then remove with the Unbind Command +button. + +In the next release, those commands will be rebound to +shift+alt+ctl+number. (I prefer to do this rather than completely +removing the commands because it will make it a little easier if we +decide to make them do something.) I hope that no system uses +these key combinations.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>94</bug_id> + + <creation_ts>2011-02-08 01:30:00 +0000</creation_ts> + <short_desc>Toolbox can't deal with long prover console output.</short_desc> + <delta_ts>2011-02-08 21:19:36 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>234</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-02-08 01:30:56 +0000</bug_when> + <thetext>On a long prover job, the Toolbox slows to a crawl and produces errors. (It's hard to read the "problem occurred" window, since the Toolbox can't paint its windows, but it seems to be trying to report a Java heap error.) It appears to be due to inefficient handling of the console output--perhaps the same problem that occurs when TLC produces a lot of console output. Here's what the Eclipse log shows: + + +Exception in thread "Output Stream Monitor" java.lang.OutOfMemoryError: Java heap space + at java.util.Arrays.copyOf(Arrays.java:2882) + at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) + at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390) + at java.lang.StringBuffer.append(StringBuffer.java:224) + at org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:154) + at org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + at org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + at java.lang.Thread.run(Thread.java:619)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>235</commentid> + <comment_count>1</comment_count> + <who name="Dan Ricketts">daniel.bmore.ricketts</who> + <bug_when>2011-02-08 06:34:32 +0000</bug_when> + <thetext>Eclipse uses a class called OutputStreamMonitor to wrap a process's output streams. By default the OutputStreamMonitor saves the stream in a StringBuffer. Since we currently don't use any of this saved stream, the StringBuffer is useless. To fix this, I committed some code that turns off buffering. This needs to be tested.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>236</commentid> + <comment_count>2</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-02-08 21:19:36 +0000</bug_when> + <thetext>It looks like Dan's fix has solved the problem, though I don't know how to test it thoroughly enough to make sure. I'll close this report and reopen it if I encounter the problem again.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>95</bug_id> + + <creation_ts>2011-03-11 01:21:00 +0000</creation_ts> + <short_desc>Toolbox displaying only a tiny piece of a TLC error message (and missing feature)</short_desc> + <delta_ts>2011-05-17 16:34:01 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>237</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-03-11 01:21:17 +0000</bug_when> + <thetext>When using the Evaluate Constant Expression feature to evaluate the expression + +<<TestObj \in Object, + ReachableFrom(TestObj, TestHeap) +>> + +TLC produced the error message: + +Error: Evaluating assumption line 73, col 8 to line 73, col 66 of module MC failed. +Attempted to apply function: +(id1 :> [f1 |-> id2, f2 |-> <<v1, id3>>] @@ id2 :> <<>> @@ id3 :> <<>>) +to argument {}, which is not in the domain of the function. + +but the Toolbox just displayed this in the top field of the TLC Errors window + +The `Evaluate Constant Expression’ section’s evaluation +to argument {}, which is not in the domain of the function. + +Since Bugzilla does not provide any way to attach input to the bug report that I've been able to find (though I seem to recall that there is some way to do it that is obvious to anyone who has a PhD in Bugzilla), I checked the example into the tla/trunk/tla2-inria/general/bug-11-03-10 directory. The root file is Promises.tla and it is Model_1 (the only model).</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>241</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-03-11 20:42:02 +0000</bug_when> + <thetext>When I tried to open a copy of the spec in the Toolbox, the Toolbox did not find the model, which is Model_1, even though the Model_1 directory was inside the .toolbox directory. (I have been unable to reproduce this problem with a fresh spec.) If that happens, to recreate the bug, it's necessary to create a new model using all the model info inside the Model_1/MC.{tla,cfg} files. Here's how to do it. + +What is the Model +---------------- +EventualType : make model value + +Type: ordinary value: + {EventualType} + +Id: set of model values + {id1, id2, id3} + +Exception: set of model values + {exc1, exc2} + +Value: set of model values + {v1, v2} + +Field: ordinary value: + {"type", "f1", "f2"} + +Definition Overrides: +-------------------- +Nat == 0..5 + +Seq(S) == UNION { [1..n -> S] : n \in 0..2 } + +Additional Definitions: +---------------------- +TestHeap == +(id1 :> [ f1 |-> id2, + f2 |-> <<v1, id3>>]) + @@ +(id2 :> << >>) + @@ +(id3 :> << >>) + +TestObj == +[type |-> EventualType, + f1 |-> id1] + +Evaluate Constant Expression: +----------------------------- +<<TestObj \in Object, + ReachableFrom(TestObj, TestHeap) +>> + +Running the model should then produce the error.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>242</commentid> + <comment_count>2</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-03-13 18:21:52 +0000</bug_when> + <thetext>I stupidly just realized that the problem is probably caused by the error being in the MC module. The Toolbox should be deleting just the location information from the message, but it's deleting too much. + +The Toolbox should actually translate the location into a location in the Model. This is a missing feature, which was not mentioned in the Bugzilla database. It now is.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>299</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-17 16:34:01 +0000</bug_when> + <thetext>Related to bug #7</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>96</bug_id> + + <creation_ts>2011-03-11 01:48:00 +0000</creation_ts> + <short_desc>Print output not shown in Evaluate Constant Expression</short_desc> + <delta_ts>2011-03-11 03:22:32 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>238</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-03-11 01:48:54 +0000</bug_when> + <thetext>If evaluating the constant expression in Evaluate Constant Expression evaluates a Print or PrintT statement, the output printed by TLC does not appear in the User Output area.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>239</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-03-11 03:04:14 +0000</bug_when> + <thetext>I wasn't finished with the description when it was submitted (I think by Eclipse, but perhaps I accidentally hit the Submit button). First of all, this is a problem because it makes it impossible to use Evaluate Constant Expression to debug constant operators with Print statements. + +Here's an example that explains what's triggering the bug. In the spec, put + +Foo(x) == IF PrintT("PrintFoo") THEN "Foo" ELSE 0 +Bar(x) == IF PrintT("PrintBar") THEN "Bar" ELSE 0 +ASSUME PrintT(Bar(1)) + +(We give Foo and Bar arguments, otherwise TLC will evaluate them before it does any execution of the spec.) Note that evaluating the assumption prints "PrintBar" and "Bar". Now, put Foo(1) as the expression in Evaluate Constant Expression. This essentially puts ASSUME <<"xxxx", Foo(1)>> into the MC.tla file, where xxxx is actually a less readable string. Evaluating this expression prints "PrintFoo" and <<"xxxx", "Foo">>. The User Output field should show "PrintBar", "Bar", and "PrintFoo", since the Toolbox grabs the <<"xxxx", "Foo">> and puts "Foo" in the Value area of the Evaluate Constant Expression section. However, it doesn't print the "PrintFoo" where it should. If you run TLC on the MC file outside the Toolbox, you'll see that the problem is that the "PrintFoo" is printed before the "Starting... (2011-...)" line, while all the other stuff is printed afterwards. Apparently, the Toolbox doesn't look for user output until after that "Starting..." line. + +So, the bug is not in the Toolbox itself, but rather in the placement of the code in TLC that prints the "Starting..." line.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>240</commentid> + <comment_count>2</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-03-11 03:22:32 +0000</bug_when> + <thetext>I moved the appropriate TLC code and it seems to have fixed the problem.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>97</bug_id> + + <creation_ts>2011-03-22 03:06:00 +0000</creation_ts> + <short_desc>Toolbox not reporting invariant violation</short_desc> + <delta_ts>2011-03-22 03:24:16 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>WONTFIX</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>243</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-03-22 03:06:04 +0000</bug_when> + <thetext>First of all let me report a Bugzilla bug. There is no place to attach a file to this bug report. However, I observed that on Bug 95, there is now a place for attachments. So apparently, Bugzilla creates the section for attachments only after the Bug is submitted. Assuming that doesn't just happen on the ides of March under a 1/4 full moon when it's raining, I will submit this and then try to attach the necessary files. + +Now for this bug. TLC found an invariant violation, but the Toolbox didn't report it or any other information about the run because of an array out of bounds exception. Below is what the Eclipse console shows. I will attach the spec and the various MC* files, which show what TLC produced. + +footFileName = C:\lamport\microsoft\spec-examples\joe_duffy\Promises2.tla +Writing files to: Model_1\ +---- + +Skipping resource: Model_1/MC.tla +Skipping resource: Model_1/Promises2.tla +---- + +entering removeModelProblemMarkers() on Promises2___Model_1 with markerType set to org.lamport.tla.toolbox.tlc.modelErrorSANY +Final check for the modelcheck mode. The result of the check is true +--------------------------- +TLC ARGUMENTS: +--------------------------- +-checkpoint +3 +-config +MC.cfg +-coverage +3 +-workers +1 +-tool +-metadir +C:\lamport\microsoft\spec-examples\joe_duffy\Promises2.toolbox\Model_1 +MC +--------------------------- +END TLC ARGUMENTS +--------------------------- +entering removeModelProblemMarkers() on Promises2___Model_1 with markerType set to org.lamport.tla.toolbox.tlc.modelErrorTLC +TLCOutputSourceRegistry for model checking maintains 1 sources. +The source Promises2___Model_1.launch has 4 prio and 1 listeners + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2011-03-21 19:04:03.564 +!MESSAGE Error broadcasting the message +!STACK 0 +java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0 + at java.util.Vector.get(Vector.java:694) + at org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.createError(TLCModelLaunchDataProvider.java:586) + at org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.onOutput(TLCModelLaunchDataProvider.java:273) + at org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:92) + at org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:59) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:225) + at org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:604) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:731) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:712) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:697) + at org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:762) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1157) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1176) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:315) + at org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:25) + at org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + at org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + at org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + at org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + at org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + at java.lang.Thread.run(Thread.java:619) +---- + +Skipping resource: Model_1/MC.tla +---- + +Job 'TLC run for Model_1' terminated with status: { Done } +---- + +----</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>244</commentid> + <comment_count>1</comment_count> + <attachid>21</attachid> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-03-22 03:07:14 +0000</bug_when> + <thetext>Created attachment 21 +Source file</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>245</commentid> + <comment_count>2</comment_count> + <attachid>22</attachid> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-03-22 03:07:45 +0000</bug_when> + <thetext>Created attachment 22 +The MC.out file</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>246</commentid> + <comment_count>3</comment_count> + <attachid>23</attachid> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-03-22 03:08:18 +0000</bug_when> + <thetext>Created attachment 23 +guess what</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>247</commentid> + <comment_count>4</comment_count> + <attachid>24</attachid> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-03-22 03:08:47 +0000</bug_when> + <thetext>Created attachment 24 +you'll never guess</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>248</commentid> + <comment_count>5</comment_count> + <attachid>25</attachid> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-03-22 03:09:22 +0000</bug_when> + <thetext>Created attachment 25 +...</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>249</commentid> + <comment_count>6</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-03-22 03:11:09 +0000</bug_when> + <thetext>How nice, the attached files are all comments. Very helpful. But they're now there.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>250</commentid> + <comment_count>7</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-03-22 03:24:16 +0000</bug_when> + <thetext>After carefully documenting all this, I tried running under the debugger and the problem didn't occur. I then restarted the Toolbox and tried again, and again it didn't occur. I'll resolve this as "Won't Fix", since there are probably more important things to worry about than why that exception occurred.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>21</attachid> + <date>2011-03-22 03:07:00 +0000</date> + <delta_ts>2011-03-22 03:07:14 +0000</delta_ts> + <desc>Source file</desc> + <filename>Promises2.tla</filename> + <type>application/octet-stream</type> + <size>33612</size> + <attacher name="Leslie Lamport">lamport</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>22</attachid> + <date>2011-03-22 03:07:00 +0000</date> + <delta_ts>2011-03-22 03:07:45 +0000</delta_ts> + <desc>The MC.out file</desc> + <filename>MC.out</filename> + <type>application/octet-stream</type> + <size>2976</size> + <attacher name="Leslie Lamport">lamport</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>23</attachid> + <date>2011-03-22 03:08:00 +0000</date> + <delta_ts>2011-03-22 03:08:18 +0000</delta_ts> + <desc>guess what</desc> + <filename>MC.tla</filename> + <type>application/octet-stream</type> + <size>2046</size> + <attacher name="Leslie Lamport">lamport</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>24</attachid> + <date>2011-03-22 03:08:00 +0000</date> + <delta_ts>2011-03-22 03:08:47 +0000</delta_ts> + <desc>you'll never guess</desc> + <filename>MC.cfg</filename> + <type>application/octet-stream</type> + <size>1705</size> + <attacher name="Leslie Lamport">lamport</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>25</attachid> + <date>2011-03-22 03:09:00 +0000</date> + <delta_ts>2011-03-22 03:09:22 +0000</delta_ts> + <desc>...</desc> + <filename>MC_TE.out</filename> + <type>application/octet-stream</type> + <size>2976</size> + <attacher name="Leslie Lamport">lamport</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>98</bug_id> + + <creation_ts>2011-04-03 20:39:00 +0000</creation_ts> + <short_desc>Toolbox incorrectly reports which invariant is violated if some members of the list of invariants are unchecked</short_desc> + <delta_ts>2015-10-06 06:53:59 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Chris Newcombe">chris.newcombe</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>251</commentid> + <comment_count>0</comment_count> + <who name="Chris Newcombe">chris.newcombe</who> + <bug_when>2011-04-03 20:39:29 +0000</bug_when> + <thetext>Toolbox incorrectly reports which invariant is violated if some members of the list of invariants are unchecked + +Running Version 1.2.1 of 29 September 2010 (32-bit), on Windows 7 (64-bit). + +First bug: + +I have a list of 3 invariants to be checked (in the Model Overview page). +When all of them are enabled (checked), everything seems to work fine. + +I temporarily unchecked the second (middle) invariant in the list (first time I’ve used this feature). +I ran the model-checker, knowing that the 3rd invariant in the list would be violated by my current spec/model. +The toolbox incorrectly reported that the second (unchecked) invariant was the one that was violated. +Examining the TLC error trace, I am sure that it was really the 3rd invariant that was violated. +i.e. Model checking appears to have been done correctly, but the toolbox incorrectly reported which invariant was violated. Presumably due to a bug in the handling of unchecked invariants. + +Second related bug: + +After the above problem, I completely removed the middle (unchecked) invariant, by clicking the 'Remove' button. +I re-ran the model checker. The toolbox again incorrectly reported that the (now removed) second invariant was the one that was violated. + +I then removed all of the invariants (leaving an empty list). +I added back one invariant -- the one I knew would fail. +Again the toolbox reported that the wrong invariant was violated -- it reported that the original 1st invariant was violated, when that invariant didn't even appear in the list anymore.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>257</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-04-09 21:18:18 +0000</bug_when> + <thetext>I was able to reproduce this bug on my Windows 7 64-bit machine with a 4-core Intel Xeon CPU. It does not occur on my Vista 32-bit 2-core machine. Also, when I tried to reproduce the bug again on my 64-bit machine, it didn't occur. + +The bug is in the Toolbox, not in TLC. It smells like a concurrency bug--especially since I have observed that the 64-bit machine seems to be good at revealing concurrency bugs, probably because it uses a weaker memory model than the 32-bit one. The code that finds and reads the TLC output is too complicated and requires too much knowledge of the Eclipse infrastructure for me to understand.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>1007</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2015-02-23 11:34:44 +0000</bug_when> + <thetext>Another incarnation is that TLC checks *no* invariant even though a (single one) is checked in the model editor. I have yet to reproduce this though.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>1008</commentid> + <comment_count>3</comment_count> + <attachid>198</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2015-03-05 09:02:57 +0000</bug_when> + <thetext>Created attachment 198 +Screenshot of unselected, yet checked invariant + +I got bitten by this again yesterday. The Toolbox checked the TypeOK invariant even though it wasn't selected (see screenshot). I wonder if it even checked the selected ones.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>1010</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2015-03-18 18:25:22 +0000</bug_when> + <thetext>http://tlaplus.codeplex.com/SourceControl/changeset/b00cb4336eeed3fd82cfd0d8170bc57c305a40e2 causes the Toolbox to properly lock the workspace before it writes files to launch the model checker. This makes sure that it can't interfer with other background operations that write to files. +I hope that this change addresses this bug too.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>1012</commentid> + <comment_count>5</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2015-03-20 16:41:13 +0000</bug_when> + <thetext>Below is an updated stacktrace with current line numbers: + +Negative seek offset + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:212) + at tlc2.tool.liveness.DiskGraph.getNode(DiskGraph.java:169) + at tlc2.tool.liveness.DiskGraph.getPath(DiskGraph.java:310) + at tlc2.tool.liveness.LiveWorker.printTrace(LiveWorker.java:603) + at tlc2.tool.liveness.LiveWorker.checkComponent(LiveWorker.java:373) + at tlc2.tool.liveness.LiveWorker.checkSccs(LiveWorker.java:163) + at tlc2.tool.liveness.LiveWorker.run(LiveWorker.java:613)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>1019</commentid> + <comment_count>6</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2015-05-12 13:55:45 +0000</bug_when> + <thetext>Fixed with 1.5.0</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>1021</commentid> + <comment_count>7</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2015-10-06 06:53:59 +0000</bug_when> + <thetext>The fix in 1.5.0 turns out to be incomplete. Thus, a workaround has been put in place [1] that caches the invariant list upon model checking start-up as fall-back. + +[1] https://tlaplus.codeplex.com/SourceControl/changeset/72a66a7ecd246018aaf5c1bfbe89dbe2280cb46d</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>198</attachid> + <date>2015-03-05 09:02:00 +0000</date> + <delta_ts>2015-03-05 09:02:57 +0000</delta_ts> + <desc>Screenshot of unselected, yet checked invariant</desc> + <filename>InvariantsBroken.png</filename> + <type>image/png</type> + <size>101067</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>100</bug_id> + + <creation_ts>2011-04-03 20:45:00 +0000</creation_ts> + <short_desc>Toolbox in confused state after system restart during model-checking</short_desc> + <delta_ts>2011-04-07 20:12:20 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>WONTFIX</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Chris Newcombe">chris.newcombe</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>253</commentid> + <comment_count>0</comment_count> + <who name="Chris Newcombe">chris.newcombe</who> + <bug_when>2011-04-03 20:45:54 +0000</bug_when> + <thetext>Running Version 1.2.1 of 29 September 2010 (32-bit) on Windows 7 Enterprise 64-bit, on a 4-proc 4GB ThinkPad laptop. + +Sequence of events: + +1. TLC was checking a model. (I can't remember if it was doing it in the background.) + +2. I had to do a system restart to install an update of some unrelated software (Adobe Reader). + +3. After the restart I ran the toolbox and found that: + + - TLC is not running (not surprising, as I haven't restarted it.) + + - The Model Overview tab says "(model checking is in progress)" + + - The "How to run" options are all greyed out. The "Checkpoint Id" and "Checkpoint Size" are populated with reasonable values, but they are greyed-out. + + - The "Model Checking Results" tab says "Current Status: Not running" and "Errors detected: No Errors". The "State space progress" box lists the last few state reports (from before the system restart) + + - The 'Stop model checker' button (small red square) was enabled, but had no apparent effect when clicked. + +Note: I did previously stop this TLC run, and restart from a checkpoint, without any problems. But I didn't do a system-restart that time. + +I worked around this by cloning the model. So it's not a severe problem, just confusing at first. +The cloned model initially had 1 error, that there was no checkpoint state. I realized that this was because the 'restart from checkpoint' box was already checked for the clone (it was also checked on the original model). I unchecked the box, and could then run TLC as normal.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>255</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-04-07 20:12:20 +0000</bug_when> + <thetext>This is a known behavior, documented in the Help pages, for which the Toolbox provides the repair menu item for a model in the spec explorer.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>101</bug_id> + + <creation_ts>2011-04-07 20:14:00 +0000</creation_ts> + <short_desc>Absolute path names in .toolbox directory files prevents opening existing specs that have been moved.</short_desc> + <delta_ts>2011-04-17 21:39:07 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>WORKSFORME</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P2</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Dan Ricketts">daniel.bmore.ricketts</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>256</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-04-07 20:14:38 +0000</bug_when> + <thetext>A Spec's .toolbox directory has data files containing absolute path names of files. This causes havoc if one copies an existing spec--for example, from another machine--and tries to open it without copying it to a directory with exactly the same path name. + +A possible bug fix is to rewrite the offending files when opening the new spec. See the comments preceding Spec.createNewSpec(...).</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>102</bug_id> + + <creation_ts>2011-04-17 21:35:00 +0000</creation_ts> + <short_desc>Incorrect links in displayed PlusCal translator error message</short_desc> + <delta_ts>2015-02-11 14:44:42 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>ASSIGNED</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>258</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-04-17 21:35:32 +0000</bug_when> + <thetext>In the soon-to-be-attached example, the PlusCal translator reports missing labels in two locations. When the Toolbox displays that message, it seems to attach links to the two locations that both refer to the first location.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>259</commentid> + <comment_count>1</comment_count> + <attachid>26</attachid> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-04-17 21:36:59 +0000</bug_when> + <thetext>Created attachment 26 +this is a tla file</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>982</commentid> + <comment_count>2</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2013-06-11 10:44:20 +0000</bug_when> + <thetext>I just noticed that this was filed under the wrong component. It looks like yet another bug in the Toolbox's parsing of output of the programs it calls.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>26</attachid> + <date>2011-04-17 21:36:00 +0000</date> + <delta_ts>2011-04-17 21:36:59 +0000</delta_ts> + <desc>this is a tla file</desc> + <filename>PCalBoundedChannel.tla</filename> + <type>application/octet-stream</type> + <size>1369</size> + <attacher name="Leslie Lamport">lamport</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>103</bug_id> + + <creation_ts>2011-05-04 14:28:00 +0000</creation_ts> + <short_desc>I/O and backend calls not sufficiently decoupled from UI (main) thread</short_desc> + <delta_ts>2011-07-01 20:18:10 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Linux</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>daniel.bmore.ricketts</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>260</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-04 14:28:38 +0000</bug_when> + <thetext>File > Open Spec > a fairly large spec causes the UI to hang. This is due to parsing the model in the UI thread. Same happens, if File > Parse Spec is clicked. +The appropriate command handles have to take care of decoupling the parsing from the UI thread by using a short-lived Thread or an org.eclipse.core.runtime.jobs.Job.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>261</commentid> + <comment_count>1</comment_count> + <who name="Simon Zambrovski">simon</who> + <bug_when>2011-05-06 20:59:28 +0000</bug_when> + <thetext>I remeber a discussion between Leslie and me regarding this issue. I also remember that we decided to touch this place on demand only, because Lesli ensured me that the biggest spec he ever saw was 64KB and Sany parses it in very few seconds, so it is acceptable for the user to wait. + +There are several issues to solve if running the SANY in a separate thread/job. +1. There is the synchronization issue with the Parse Status +2. During Parsing, the SpecObj and is not available, which means that the most parts of smart editor functions doesn't work. + +Since we developed A MINIMAL parser integration solution, it worked for us and it is ok to improve it in the current iteration. I would address another important issue if you touch this place. Currently SANY runs a complete reparse, which is a litte dump. Large specs consists of many individual TLA+ modules and a modification usually doesn't affect all the modules. So instead of parsing the spec starting from root module every time, it would be better to only affected modules. I remember Leslie and me discussed this issue and we even tried to implement it, but then we left it as it is and decided to implement the easiest parsing solution and improve it later. + +So, in short: YES, I vote for decoupling parsing from UI thread.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>276</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-11 15:19:20 +0000</bug_when> + <thetext>*** Bug 78 has been marked as a duplicate of this bug. ***</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>396</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-27 13:25:07 +0000</bug_when> + <thetext>More candidates: +org.lamport.tla.toolbox.tool.tlc.ui.editor.page.BasicFormPage.RunAction.run() +org.lamport.tla.toolbox.tool.tlc.ui.editor.ModelEditor.doSave(IProgressMonitor)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>402</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-30 11:03:02 +0000</bug_when> + <thetext>org.lamport.tla.toolbox.tool.tlc.traceexplorer.TraceExplorerComposite.doExplore()</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>411</commentid> + <comment_count>5</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 19:58:47 +0000</bug_when> + <thetext>org.lamport.tla.toolbox.tool.tlc.ui.modelexplorer.CloneModelContributionItem.getContributionItems()</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>413</commentid> + <comment_count>6</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 19:59:05 +0000</bug_when> + <thetext>*** Bug 137 has been marked as a duplicate of this bug. ***</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>424</commentid> + <comment_count>7</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 20:17:57 +0000</bug_when> + <thetext>*** Bug 110 has been marked as a duplicate of this bug. ***</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>425</commentid> + <comment_count>8</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 20:18:10 +0000</bug_when> + <thetext>org.lamport.tla.toolbox.tool.tla2tex.handler.ProducePDFHandler.execute(ExecutionEvent)</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>104</bug_id> + + <creation_ts>2011-05-09 10:14:00 +0000</creation_ts> + <short_desc>Bundle-RequiredExecutionEnvironment is set to J2SE-1.4 although Java5 API is used</short_desc> + <delta_ts>2011-05-09 10:18:16 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA Tools</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>262</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-09 10:14:35 +0000</bug_when> + <thetext>org.lamport.tla.toolbox.* bundles use Java5 API but their BREE is set to Java 1.4.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>263</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-09 10:18:14 +0000</bug_when> + <thetext>BREE has been set to Java 1.5</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>264</commentid> + <comment_count>2</comment_count> + <attachid>27</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-09 10:18:16 +0000</bug_when> + <thetext>Created attachment 27 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>27</attachid> + <date>2011-05-09 10:18:00 +0000</date> + <delta_ts>2011-05-09 10:18:16 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>2537</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>105</bug_id> + + <creation_ts>2011-05-09 10:23:00 +0000</creation_ts> + <short_desc>org.lamport.tla.toolbox.tool.prover uses Java 1.6 API</short_desc> + <delta_ts>2011-05-09 10:34:40 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA Tools</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>265</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-09 10:23:53 +0000</bug_when> + <thetext>java.lang.String.isEmpty() is not avaiable in Java 5</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>266</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-09 10:34:39 +0000</bug_when> + <thetext>Fix released by replacing isEmpty() with length() == 0</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>267</commentid> + <comment_count>2</comment_count> + <attachid>28</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-09 10:34:40 +0000</bug_when> + <thetext>Created attachment 28 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>28</attachid> + <date>2011-05-09 10:34:00 +0000</date> + <delta_ts>2011-05-09 10:34:40 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>9177</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>106</bug_id> + + <creation_ts>2011-05-09 12:29:00 +0000</creation_ts> + <short_desc>Test dependencies not satisfied causing compiler errors in o.l.t.toolbox and o.l.t.toolbox.tool.tlc.ui</short_desc> + <delta_ts>2011-05-09 12:45:17 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA Tools</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Linux</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>268</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-09 12:29:50 +0000</bug_when> + <thetext>Both bundles may _optionally_ depend on package "junit.framework" to satisfy the build time dependency but allow Junits absence at runtime.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>269</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-09 12:45:16 +0000</bug_when> + <thetext>Fix released</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>270</commentid> + <comment_count>2</comment_count> + <attachid>29</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-09 12:45:17 +0000</bug_when> + <thetext>Created attachment 29 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>29</attachid> + <date>2011-05-09 12:45:00 +0000</date> + <delta_ts>2011-05-09 12:45:17 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>730</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>107</bug_id> + + <creation_ts>2011-05-09 12:46:00 +0000</creation_ts> + <short_desc>Distributed TLC based on RMI broken</short_desc> + <delta_ts>2011-05-31 11:37:51 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>271</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-09 12:46:48 +0000</bug_when> + <thetext>Refactorings broke the RMI based distributed version of TLC.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>272</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-09 12:51:27 +0000</bug_when> + <thetext>Hi Simon, + +what's the reason you have deprecated all RMI related code? I have hacked it to get back working and our manual tests appear to work. Real tests are pending though.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>273</commentid> + <comment_count>2</comment_count> + <who name="Simon Zambrovski">simon</who> + <bug_when>2011-05-09 21:39:39 +0000</bug_when> + <thetext>Somehow Yuan and me decided that we are not able to make TLC work in distributed mode. From this point on I tried to push all the refactorings through both code bases: the single machine TLC, which I could test and through the distributed part wchi I could not test. In order to distuinguish the one from another, I marked TLC parts as depricated... I assume it was a mistake.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>337</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-31 11:37:51 +0000</bug_when> + <thetext>Fixed in HEAD (more performance tests pending)</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>108</bug_id> + + <creation_ts>2011-05-11 15:15:00 +0000</creation_ts> + <short_desc>Add framework to run automated UI tests</short_desc> + <delta_ts>2011-05-31 11:40:20 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + <dependson>120</dependson> + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>274</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-11 15:15:33 +0000</bug_when> + <thetext>Automated UI tests are a great time saver especially when developing for multiple OS. SWTBot [0] allows to easily write UI tests that can be executed automatically. + +[0] http://eclipse.org/swtbot/</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>338</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-31 11:40:20 +0000</bug_when> + <thetext>Framework released to HEAD</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>109</bug_id> + + <creation_ts>2011-05-11 15:36:00 +0000</creation_ts> + <short_desc>Automatically detect pdflatex on the system</short_desc> + <delta_ts>2011-05-11 15:36:18 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>277</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-11 15:36:18 +0000</bug_when> + <thetext>If pdflatex is not on the system path, an incomprehensible dialog pops up complaining that pdflatex cannot be found ("No such file or directory"). To make it easier for the user, either: + +a) Find pdflatex automatically (CDT has facilities to located system binaries) +b) Generate PDF directly in Java +c) Improve error dialog with a direct link to the Preferences > TLA+ Prefs > PDF Viewer</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>110</bug_id> + + <creation_ts>2011-05-11 15:38:00 +0000</creation_ts> + <short_desc>"Produce PDF Version" handler executes PDF generation on the UI thread</short_desc> + <delta_ts>2011-07-01 20:17:57 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>DUPLICATE</resolution> + <dup_id>103</dup_id> + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>278</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-11 15:38:21 +0000</bug_when> + <thetext>Canceling a long or stuck operation is impossible since the buttons don't work.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>420</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 20:15:16 +0000</bug_when> + <thetext>org.lamport.tla.toolbox.tool.tla2tex.PDFHandlerThreadingTest has been added as a test case, though not activated yet.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>423</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 20:17:57 +0000</bug_when> + <thetext> + +*** This bug has been marked as a duplicate of bug 103 ***</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>111</bug_id> + + <creation_ts>2011-05-11 16:12:00 +0000</creation_ts> + <short_desc>NullPointerException when using spaces in application path (path to TLC java process)</short_desc> + <delta_ts>2011-07-18 13:04:28 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Mac OS</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + <blocked>157</blocked> + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>279</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-11 16:12:00 +0000</bug_when> + <thetext>When using a space in the app path on Mac OS X, Toolbox throws a NPE while executing a model check. Changing the path name to not contain a whitespace appears to prevent this error (even thought the path gets renamed back to spaces again)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>301</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-17 16:35:58 +0000</bug_when> + <thetext>See bug# 82 (same code area)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>484</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-18 13:04:17 +0000</bug_when> + <thetext>Fixed by bug #116</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>112</bug_id> + + <creation_ts>2011-05-11 16:13:00 +0000</creation_ts> + <short_desc>Open spec wizard accepts specs with illegal names</short_desc> + <delta_ts>2011-05-31 11:41:09 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>280</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-11 16:13:10 +0000</bug_when> + <thetext>Add a marker to the new spec wizard forbidding illegal names (like -)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>339</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-31 11:41:08 +0000</bug_when> + <thetext>Fixed in HEAD, verified on Mac, Windows XP, Linux</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>340</commentid> + <comment_count>2</comment_count> + <attachid>40</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-31 11:41:09 +0000</bug_when> + <thetext>Created attachment 40 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>40</attachid> + <date>2011-05-31 11:41:00 +0000</date> + <delta_ts>2011-05-31 11:41:09 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>3185</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>113</bug_id> + + <creation_ts>2011-05-11 16:15:00 +0000</creation_ts> + <short_desc>Toolbox does not shut down gracefully with model checks still running</short_desc> + <delta_ts>2011-05-19 18:50:20 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>281</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-11 16:15:34 +0000</bug_when> + <thetext>Closing the Toolbox during a model check causes exceptions (e.g. NPE) in different parts of the code base. The assumption is, that the asynchronous jobs do not get canceled correctly or themselves check if the Toolbox has quit.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>291</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-11 17:03:45 +0000</bug_when> + <thetext>ENTRY org.eclipse.ui 4 4 2011-05-11 14:31:12.919 +!MESSAGE Failed to execute item toolbox.command.spec.new +!STACK 0 +org.eclipse.core.commands.ExecutionException: No activeWorkbenchWindow +found while executing toolbox.command.spec.new + at org.eclipse.ui.handlers.HandlerUtil.noVariableFound(HandlerUtil.java:40) + at +org.eclipse.ui.handlers.HandlerUtil.getVariableChecked(HandlerUtil.java:89) + at +org.eclipse.ui.handlers.HandlerUtil.getActiveWorkbenchWindowChecked(HandlerUtil.java:210) + at +org.lamport.tla.toolbox.ui.handler.NewSpecHandler.execute(NewSpecHandler.java:33) + at +org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at +org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at +org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at +org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at +org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820) + at +org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806) + at +org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1282) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1267) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1061) + at +org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot$2.run(AbstractSWTBot.java:159) + at +org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$5.doRun(UIThreadRunnable.java:221) + at +org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$1.run(UIThreadRunnable.java:89) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at +org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.runEventLoop(EventLoopProgressMonitor.java:123) + at +org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.isCanceled(EventLoopProgressMonitor.java:97) + at org.eclipse.core.internal.jobs.ThreadJob.isCanceled(ThreadJob.java:146) + at org.eclipse.core.internal.jobs.ThreadJob.waitForRun(ThreadJob.java:235) + at org.eclipse.core.internal.jobs.ThreadJob.joinRun(ThreadJob.java:199) + at org.eclipse.core.internal.jobs.ImplicitJobs.begin(ImplicitJobs.java:92) + at org.eclipse.core.internal.jobs.JobManager.beginRule(JobManager.java:286) + at +org.eclipse.core.internal.resources.WorkManager.checkIn(WorkManager.java:117) + at +org.eclipse.core.internal.resources.Workspace.prepareOperation(Workspace.java:1914) + at org.eclipse.core.internal.resources.Project.touch(Project.java:1270) + at org.lamport.tla.toolbox.spec.Spec.setLastModified(Spec.java:193) + at +org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.setSpecLoaded(WorkspaceSpecManager.java:242) + at +org.lamport.tla.toolbox.ui.handler.OpenSpecHandler.execute(OpenSpecHandler.java:64) + at +org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at +org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at +org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at +org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.lamport.tla.toolbox.util.UIHelper.runCommand(UIHelper.java:420) + at +org.lamport.tla.toolbox.ui.handler.NewSpecHandler.execute(NewSpecHandler.java:55) + at +org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at +org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at +org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at +org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at +org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820) + at +org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806) + at +org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1282) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1267) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1061) + at +org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot$2.run(AbstractSWTBot.java:159) + at +org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$5.doRun(UIThreadRunnable.java:221) + at +org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$1.run(UIThreadRunnable.java:89) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at +org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at +org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at +org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at +org.eclipse.swtbot.eclipse.core.UITestApplication.start(UITestApplication.java:54) + at +org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at +org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at +org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at +sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>293</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-12 08:48:22 +0000</bug_when> + <thetext>!ENTRY org.eclipse.ui 4 0 2011-05-12 08:45:48.479 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (org.eclipse.swt.SWTException: Widget is disposed) + at org.eclipse.swt.SWT.error(SWT.java:4083) + at org.eclipse.swt.SWT.error(SWT.java:3998) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at org.lamport.tla.toolbox.ui.handler.NewSpecHandler.execute(NewSpecHandler.java:45) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820) + at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806) + at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1282) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1267) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1061) + at org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot$2.run(AbstractSWTBot.java:159) + at org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$5.doRun(UIThreadRunnable.java:221) + at org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$1.run(UIThreadRunnable.java:89) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.swtbot.eclipse.core.UITestApplication.start(UITestApplication.java:54) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) +Caused by: org.eclipse.swt.SWTException: Widget is disposed + at org.eclipse.swt.SWT.error(SWT.java:4083) + at org.eclipse.swt.SWT.error(SWT.java:3998) + at org.eclipse.swt.SWT.error(SWT.java:3969) + at org.eclipse.swt.widgets.Widget.error(Widget.java:466) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:403) + at org.eclipse.swt.widgets.Label.setImage(Label.java:524) + at org.eclipse.jface.dialogs.TitleAreaDialog.setTitleImage(TitleAreaDialog.java:650) + at org.eclipse.jface.wizard.WizardDialog.hardClose(WizardDialog.java:870) + at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:819) + at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:430) + at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1282) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1267) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1061) + at org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot$2.run(AbstractSWTBot.java:159) + at org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$5.doRun(UIThreadRunnable.java:221) + at org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$1.run(UIThreadRunnable.java:89) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + ... 47 more + +!ENTRY org.eclipse.ui 4 0 2011-05-12 08:45:48.482 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.NullPointerException) + at org.eclipse.swt.SWT.error(SWT.java:4083) + at org.eclipse.swt.SWT.error(SWT.java:3998) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.swtbot.eclipse.core.UITestApplication.start(UITestApplication.java:54) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) +Caused by: java.lang.NullPointerException + at org.lamport.tla.toolbox.util.UIHelper.runCommand(UIHelper.java:414) + at org.lamport.tla.toolbox.ui.handler.NewSpecHandler.execute(NewSpecHandler.java:55) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820) + at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806) + at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1282) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1267) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1061) + at org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot$2.run(AbstractSWTBot.java:159) + at org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$5.doRun(UIThreadRunnable.java:221) + at org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable$1.run(UIThreadRunnable.java:89) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + ... 24 more</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>312</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-18 12:42:46 +0000</bug_when> + <thetext>!ENTRY org.eclipse.core.jobs 4 2 2011-05-18 12:41:33.895 +!MESSAGE An internal error occurred during: "Parsing spec...". +!STACK 0 +java.lang.NullPointerException + at org.lamport.tla.toolbox.ui.contribution.StatusReflectingSpecLifecycleParticipant.initialize(StatusReflectingSpecLifecycleParticipant.java:23) + at org.lamport.tla.toolbox.util.SpecLifecycleManager.initialize(SpecLifecycleManager.java:49) + at org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.<init>(WorkspaceSpecManager.java:58) + at org.lamport.tla.toolbox.Activator.getSpecManager(Activator.java:297) + at org.lamport.tla.toolbox.util.ResourceHelper.getResourceByName(ResourceHelper.java:147) + at org.lamport.tla.toolbox.util.ResourceHelper.getResourceByModuleName(ResourceHelper.java:137) + at org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:258) + at org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:83) + at org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:56) + at org.lamport.tla.toolbox.spec.parser.SpecificationParserLauncher.parseSpecification(SpecificationParserLauncher.java:38) + at org.lamport.tla.toolbox.spec.nature.ParserHelper$2.run(ParserHelper.java:75) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1957) + at org.lamport.tla.toolbox.spec.nature.ParserHelper.rebuildSpec(ParserHelper.java:81) + at org.lamport.tla.toolbox.ui.handler.OpenSpecHandler$1.run(OpenSpecHandler.java:73) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>313</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-19 18:50:03 +0000</bug_when> + <thetext>java.lang.NullPointerException + at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1196) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1984) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1957) + at org.lamport.tla.toolbox.spec.nature.ParserHelper.rebuildSpec(ParserHelper.java:81) + at org.lamport.tla.toolbox.ui.handler.OpenSpecHandler$1.run(OpenSpecHandler.java:73) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>314</commentid> + <comment_count>5</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-19 18:50:20 +0000</bug_when> + <thetext>!ENTRY org.eclipse.core.jobs 4 2 2011-05-18 12:56:17.191 +!MESSAGE An internal error occurred during: "Parsing spec...". +!STACK 0 +java.lang.NullPointerException + at org.lamport.tla.toolbox.util.RCPNameToFileIStream.initInternalLibraryPath(RCPNameToFileIStream.java:58) + at org.lamport.tla.toolbox.util.RCPNameToFileIStream.<init>(RCPNameToFileIStream.java:48) + at org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:128) + at org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:83) + at org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:56) + at org.lamport.tla.toolbox.spec.parser.SpecificationParserLauncher.parseSpecification(SpecificationParserLauncher.java:38) + at org.lamport.tla.toolbox.spec.nature.ParserHelper$2.run(ParserHelper.java:75) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1957) + at org.lamport.tla.toolbox.spec.nature.ParserHelper.rebuildSpec(ParserHelper.java:81) + at org.lamport.tla.toolbox.ui.handler.OpenSpecHandler$1.run(OpenSpecHandler.java:73) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>114</bug_id> + + <creation_ts>2011-05-11 16:24:00 +0000</creation_ts> + <short_desc>Grey out edit button in model editor unless selection in declared constants table</short_desc> + <delta_ts>2011-05-11 16:25:17 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>282</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-11 16:24:25 +0000</bug_when> + <thetext>User reports indicate that the model editor Edit button for the constants should be greyed out unless a valid selection in the table is present. Otherwise one might think the button does no function correctly since clicking it has no effect.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>283</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-11 16:25:17 +0000</bug_when> + <thetext>!ENTRY org.eclipse.ui 4 0 2011-05-11 16:22:22.313 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: null argument: + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:73) + at org.lamport.tla.toolbox.tool.tlc.ui.editor.part.ValidateableConstantSectionPart.doEditFormula(ValidateableConstantSectionPart.java:37) + at org.lamport.tla.toolbox.tool.tlc.ui.editor.part.ValidateableConstantSectionPart.doEdit(ValidateableConstantSectionPart.java:80) + at org.lamport.tla.toolbox.tool.tlc.ui.editor.part.ValidateableTableSectionPart$1.widgetSelected(ValidateableTableSectionPart.java:67) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3540) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3161) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) + + +Clicking the button with a selection</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>115</bug_id> + + <creation_ts>2011-05-11 16:34:00 +0000</creation_ts> + <short_desc>Open .tla from the system by double clicking in TLA Toolbox</short_desc> + <delta_ts>2011-08-04 10:28:49 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + <dependson>116</dependson> + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>284</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-11 16:34:07 +0000</bug_when> + <thetext>This feature has been added with Eclipse 3.6 (Helios release) [0]. + +[0] https://bugs.eclipse.org/4922</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>563</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-04 09:57:33 +0000</bug_when> + <thetext>See Eclipse bug https://bugs.eclipse.org/4922</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>564</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-04 10:28:49 +0000</bug_when> + <thetext>Documentation can be found on the Eclipse wiki: +- http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/product_open_file.htm +- http://wiki.eclipse.org/Eclipse/OpenFileFeature</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>116</bug_id> + + <creation_ts>2011-05-11 16:45:00 +0000</creation_ts> + <short_desc>Upgrade to recent Eclipse RCP version</short_desc> + <delta_ts>2011-07-18 10:15:22 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + <blocked>115</blocked> + + <blocked>10</blocked> + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>285</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-11 16:45:13 +0000</bug_when> + <thetext>The Toolbox ships on top of Eclipse 3.5 (2009). This bugs require a more recent version of Eclipse. + +Since this change potentially introduces new bugs, it shouldn't be done lightheadedly though.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>481</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-18 10:15:22 +0000</bug_when> + <thetext>Fixed a while ago with the introduction of an automated build</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>117</bug_id> + + <creation_ts>2011-05-11 16:51:00 +0000</creation_ts> + <short_desc>Adobe PDF opens up in a separate windows instead of embedded editor</short_desc> + <delta_ts>2011-05-17 16:32:37 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLATEX Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>287</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-11 16:51:24 +0000</bug_when> + <thetext>It has been reported that on Windows 7 a generated PDF does not open up inside the Toolbox editor but in a separate Adobe windows.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>118</bug_id> + + <creation_ts>2011-05-11 16:55:00 +0000</creation_ts> + <short_desc>"Translate PlusCal Algorithm" handle may only be enabled if spec indeed contains a PlusCal definition</short_desc> + <delta_ts>2011-05-17 16:31:11 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>288</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-11 16:55:52 +0000</bug_when> + <thetext/> + </long_desc><long_desc isprivate="0"> + <commentid>298</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-17 16:31:11 +0000</bug_when> + <thetext>LL comment: Even go further and do not show the translation button unless the current spec contains a PlusCal spec.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>119</bug_id> + + <creation_ts>2011-05-11 19:08:00 +0000</creation_ts> + <short_desc>German keyboard layout does not match ASCII values</short_desc> + <delta_ts>2011-05-17 16:30:47 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>Mac OS</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>292</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-11 19:08:34 +0000</bug_when> + <thetext>A user reported that: "The first time I tried to create a example project but I could not type “[ ]” It seems that TLA+ is not recognizing special chars like “[ ] { }”, when input method in Mac OS X is set to German. If you set it to English it works."</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>120</bug_id> + + <creation_ts>2011-05-12 13:32:00 +0000</creation_ts> + <short_desc>Automated product build</short_desc> + <delta_ts>2011-05-31 11:41:32 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + <blocked>108</blocked> + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>294</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-12 13:32:11 +0000</bug_when> + <thetext>TLA+ Toolbox currently is build manually from inside the development environment. A headless build should replace this task.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>341</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-31 11:41:32 +0000</bug_when> + <thetext>Fix released to SVN + +run "mvn install" in the tla2-inria/ folder to build products</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>121</bug_id> + + <creation_ts>2011-05-17 16:39:00 +0000</creation_ts> + <short_desc>Renaming spec broken, causing inconsistent projects even after Toolbox restart</short_desc> + <delta_ts>2011-07-18 11:20:31 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + <dependson>58</dependson> + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>303</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-17 16:39:21 +0000</bug_when> + <thetext>Renaming a spec causes the renamed spec to vanish from the spec explorer. After restarting the toolbox both the renamed as well as the new spec show up. + +If the underlying fix proves difficult, greying out "Rename" from the context menu should be considered.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>476</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-14 18:57:23 +0000</bug_when> + <thetext>Is a spec rename even supposed to change the name of the root .tla file as well as the module name inside?</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>483</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-18 11:20:31 +0000</bug_when> + <thetext>Fixed in HEAD</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>122</bug_id> + + <creation_ts>2011-05-18 08:22:00 +0000</creation_ts> + <short_desc>Generated PDF does not show in embedded browser hard locking the Toolbox</short_desc> + <delta_ts>2011-05-18 08:46:14 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Linux</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>304</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-18 08:22:30 +0000</bug_when> + <thetext>On Ubuntu Natty 11.04 producing a PDF causes the progress bar to come up which hard locks at approximately 50%. No multipage editor with the embedded browser is ever shown. +The only option to recover from this situation is to forcefully kill the Toolbox (which might cause data loss).</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>308</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-18 08:46:14 +0000</bug_when> + <thetext>It appears as if reinstalling "xulrunner-1.9.2" fixed the hard lock issue. It must have somehow reseted the file handling in Mozilla Firefox (purging ~/.mozilla/eclipse did not help). Now the editor page opens up, but instead of showing the PDF, it prompts to save the file to disk.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>123</bug_id> + + <creation_ts>2011-05-18 08:30:00 +0000</creation_ts> + <short_desc>Statusline should indicate "unparsed" state on dirty editor</short_desc> + <delta_ts>2011-05-18 09:49:39 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>305</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-18 08:30:32 +0000</bug_when> + <thetext>"[...] it was not possible to enter behavior spec in the model for an existing specification. Although the Spec Status was displayed as “parsed”, the input fields were disabled. It turned +out that the specification contained errors, but the spec status was displayed wrong because it was a new specification. After parsing the spec manually, an error occurred because of [...]" (Bernhard Schildendorfer)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>307</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-18 08:37:55 +0000</bug_when> + <thetext>"Changes in the TLA-Module-Window are not indicated in the “Spec Status” Field at the bottom of the +window. From my point of view, each editing action should be indicated in the “Spec Status” as +“unknown” or similar (independently of the file-save-status). Also, by executing the TLC Model +Checker, no “Do you want to save the modified resources” announcement is displayed in reference to +changes in the TLA-Module-Window." (Bernd Wittmann)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>309</commentid> + <comment_count>2</comment_count> + <attachid>30</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-18 09:41:28 +0000</bug_when> + <thetext>Created attachment 30 +Protocol Bernhard Schildendorfer + +see page 4 to 5</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>310</commentid> + <comment_count>3</comment_count> + <attachid>31</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-18 09:49:39 +0000</bug_when> + <thetext>Created attachment 31 +Report Bernd Wittman + +see page 2</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>30</attachid> + <date>2011-05-18 09:41:00 +0000</date> + <delta_ts>2011-05-18 09:41:28 +0000</delta_ts> + <desc>Protocol Bernhard Schildendorfer</desc> + <filename>Protocol_Bernhard Schildendorfer.pdf</filename> + <type>application/octet-stream</type> + <size>685498</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>31</attachid> + <date>2011-05-18 09:49:00 +0000</date> + <delta_ts>2011-05-18 09:49:39 +0000</delta_ts> + <desc>Report Bernd Wittman</desc> + <filename>Report_is101516 Bernd Wittmann.pdf</filename> + <type>application/octet-stream</type> + <size>409350</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>124</bug_id> + + <creation_ts>2011-05-18 08:36:00 +0000</creation_ts> + <short_desc>PDF editor pages stays empty with error message indicating that the file could not be loaded</short_desc> + <delta_ts>2011-05-18 09:51:06 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows 7</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>306</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-18 08:36:40 +0000</bug_when> + <thetext>"If I generate PDF to view the tla-File, the program asks me if I want to open or save the pdf-File. But the pdf is already stored in the same directory as the tla-File. If I click on the “open”-Button it lasts a relative long time until it opens the external Reader and the pdf-viewer says: “The navigation to the website was aborted”. Why is it necessary to download the pdf-File?" (Silvia Straithammer) + +The report does not really indicate if this happened on Vista or Windows 7. Will leave it as Windows 7 for now.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>311</commentid> + <comment_count>1</comment_count> + <attachid>32</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-18 09:51:06 +0000</bug_when> + <thetext>Created attachment 32 +Report Silvia Straihammer</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>32</attachid> + <date>2011-05-18 09:51:00 +0000</date> + <delta_ts>2011-05-18 09:51:06 +0000</delta_ts> + <desc>Report Silvia Straihammer</desc> + <filename>TLA_bericht Silvia Straihammer.pdf</filename> + <type>application/octet-stream</type> + <size>105526</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>125</bug_id> + + <creation_ts>2011-05-19 18:52:00 +0000</creation_ts> + <short_desc>Toolbox fails to detect default VM installation on first run</short_desc> + <delta_ts>2011-07-18 13:04:28 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>Mac OS</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + <blocked>157</blocked> + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>leuschel</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>315</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-19 18:52:07 +0000</bug_when> + <thetext>It has been reported, that the Toolbox fails to start if not installed into Applications/. Verification pending...</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>372</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-10 18:51:54 +0000</bug_when> + <thetext>While running performance tests, I have made following observations (Mac OS X 10.0.6 x86_64): +a) Toolbox does not have to be installed in Applications/ +b) First toolbox run model checking throws an NPE +c) A toolbox restart fixes the NPE irregardless of where it is installed</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>373</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-10 18:59:44 +0000</bug_when> + <thetext>Job 'TLC run for Model_1' terminated with status: { Error } + +!ENTRY org.eclipse.core.jobs 4 2 2011-06-10 18:59:05.167 +!MESSAGE An internal error occurred during: "TLC run for Model_1". +!STACK 0 +java.lang.NullPointerException + at org.lamport.tla.toolbox.tool.tlc.job.TLCProcessJob.run(TLCProcessJob.java:108) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>374</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-10 19:01:15 +0000</bug_when> + <thetext>The root cause appears to be that the toolbox fails to find the default VM installation (org.eclipse.jdt.launching.JavaRuntime.getDefaultVMInstall()) on its first run. Updating bug title to reflect this.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>389</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-22 16:10:09 +0000</bug_when> + <thetext>If bundle "org.eclipse.jdt.launching.macosx" is missing, eclipse fails to detect/find the VM on Mac.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>415</commentid> + <comment_count>5</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 20:00:16 +0000</bug_when> + <thetext>*** Bug 133 has been marked as a duplicate of this bug. ***</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>485</commentid> + <comment_count>6</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-18 13:04:21 +0000</bug_when> + <thetext>Fixed by bug #116</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>126</bug_id> + + <creation_ts>2011-05-24 08:31:00 +0000</creation_ts> + <short_desc>NPE in Add Spec handler when parent directory does not exist</short_desc> + <delta_ts>2011-07-14 11:24:09 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>316</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-24 08:31:15 +0000</bug_when> + <thetext>For the user it appears as if the Finish button has no functionality. + +!SUBENTRY 1 org.lamport.tla.toolbox 4 0 2011-05-23 12:11:38.434 +!MESSAGE Error creating TLA+ file +!STACK 0 +java.io.IOException: No such file or directory + at java.io.UnixFileSystem.createFileExclusively(Native Method) + at java.io.File.createNewFile(File.java:883) + at org.lamport.tla.toolbox.job.NewTLAModuleCreationOperation.run(NewTLAModuleCreationOperation.java:47) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1957) + at org.lamport.tla.toolbox.ui.wizard.NewSpecWizard.performFinish(NewSpecWizard.java:51) + at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:811) + at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:430) + at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3540) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3161) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at org.lamport.tla.toolbox.ui.handler.NewSpecHandler.execute(NewSpecHandler.java:45) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820) + at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806) + at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3540) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3161) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>469</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-14 11:24:08 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>470</commentid> + <comment_count>2</comment_count> + <attachid>68</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-14 11:24:09 +0000</bug_when> + <thetext>Created attachment 68 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>68</attachid> + <date>2011-07-14 11:24:00 +0000</date> + <delta_ts>2011-07-14 11:24:09 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>7477</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>127</bug_id> + + <creation_ts>2011-05-25 14:59:00 +0000</creation_ts> + <short_desc>Graph windows do not have a title bar making it impossible to close</short_desc> + <delta_ts>2011-07-06 13:19:02 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Linux</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>317</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-25 14:59:10 +0000</bug_when> + <thetext>The graph title bar is missing on Linux (click on the column title to open it), which makes it impossible to close the graphs. No shortcuts appear to help either.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>433</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-06 13:18:59 +0000</bug_when> + <thetext>Fixed in HEAD + +Removed SWT.ON_TOP style bit which screws up on Linux/GTK and which does not have a visible effect on Win or Mac.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>434</commentid> + <comment_count>2</comment_count> + <attachid>58</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-06 13:19:02 +0000</bug_when> + <thetext>Created attachment 58 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>58</attachid> + <date>2011-07-06 13:19:00 +0000</date> + <delta_ts>2011-07-06 13:19:02 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>37675</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>128</bug_id> + + <creation_ts>2011-05-26 14:24:00 +0000</creation_ts> + <short_desc>util.SimpleFilenameToStream.locate(String) fails if path contains whitespaces</short_desc> + <delta_ts>2011-05-27 09:16:05 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + <blocked>129</blocked> + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>318</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-26 14:24:46 +0000</bug_when> + <thetext>\\C:\\Documents%20and%20Settings\\markus\\tlatoolbox\\tlatools\\class\\tla2sany\\StandardModules\\ vs "\\C:\\Documents and Settings\\markus\\tlatoolbox\\tlatools\\class\\tla2sany\\StandardModules\\"</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>320</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-27 09:16:02 +0000</bug_when> + <thetext>Fix released to HEAD, verified on Mac OS X, Windows XP (x86) and Linux.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>321</commentid> + <comment_count>2</comment_count> + <attachid>33</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-27 09:16:05 +0000</bug_when> + <thetext>Created attachment 33 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>33</attachid> + <date>2011-05-27 09:16:00 +0000</date> + <delta_ts>2011-05-27 09:16:05 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>13866</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>129</bug_id> + + <creation_ts>2011-05-26 14:26:00 +0000</creation_ts> + <short_desc>TLCWorker may read specification and configuration from TLCServer via RMI</short_desc> + <delta_ts>2011-07-01 19:57:44 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA Tools</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + <dependson>128</dependson> + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>319</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-26 14:26:49 +0000</bug_when> + <thetext>Instead of requiring the user to copy the specification and configuration files to all workers, workers may read the files with RMI.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>409</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 19:57:43 +0000</bug_when> + <thetext>Closing as fixed, RMI has been added to TLCServerRMI.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>410</commentid> + <comment_count>2</comment_count> + <attachid>55</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 19:57:44 +0000</bug_when> + <thetext>Created attachment 55 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>55</attachid> + <date>2011-07-01 19:57:00 +0000</date> + <delta_ts>2011-07-01 19:57:44 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>3005</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>130</bug_id> + + <creation_ts>2011-05-27 09:54:00 +0000</creation_ts> + <short_desc>tlc2.util.ByteUtilsTest fails to create test file</short_desc> + <delta_ts>2011-05-27 10:00:19 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Linux</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>322</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-27 09:54:49 +0000</bug_when> + <thetext>-- Error Log from JUnit -- +Class: tlc2.util.ByteUtilsTest +Method: test4 +Actual: null +Expected: null +Stack Trace: +java.io.FileNotFoundException: test (Is a directory) + at java.io.FileOutputStream.open(Native Method) + at java.io.FileOutputStream.<init>(FileOutputStream.java:179) + at java.io.FileOutputStream.<init>(FileOutputStream.java:70) + at tlc2.util.ByteUtilsTest.mainTestWriteLongReadLong(ByteUtilsTest.java:156) + at tlc2.util.ByteUtilsTest.test4(ByteUtilsTest.java:73) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at junit.framework.TestCase.runTest(TestCase.java:164) + at junit.framework.TestCase.runBare(TestCase.java:130) + at junit.framework.TestResult$1.protect(TestResult.java:106) + at junit.framework.TestResult.runProtected(TestResult.java:124) + at junit.framework.TestResult.run(TestResult.java:109) + at junit.framework.TestCase.run(TestCase.java:120) + at junit.framework.TestSuite.runTest(TestSuite.java:230) + at junit.framework.TestSuite.run(TestSuite.java:225) + at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130) + at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) + at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) + at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) + at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) + at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>323</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-27 10:00:15 +0000</bug_when> + <thetext>Fix released to HEAD, verified on Linux</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>324</commentid> + <comment_count>2</comment_count> + <attachid>34</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-27 10:00:19 +0000</bug_when> + <thetext>Created attachment 34 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>34</attachid> + <date>2011-05-27 10:00:00 +0000</date> + <delta_ts>2011-05-27 10:00:19 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>3737</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>131</bug_id> + + <creation_ts>2011-05-27 10:02:00 +0000</creation_ts> + <short_desc>tlc2.util.BigInt.equals causes java.lang.StackOverflowError</short_desc> + <delta_ts>2011-05-27 10:17:48 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>325</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-27 10:02:40 +0000</bug_when> + <thetext>-- Error Log from JUnit -- +Class: tlc2.util.ByteUtilsTest +Method: test5 +Actual: null +Expected: null +Stack Trace: +java.lang.StackOverflowError + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34) + at tlc2.util.BigInt.equals(BigInt.java:34)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>326</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-27 10:17:45 +0000</bug_when> + <thetext>Fix released to HEAD, verified on Linux</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>327</commentid> + <comment_count>2</comment_count> + <attachid>35</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-27 10:17:48 +0000</bug_when> + <thetext>Created attachment 35 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>35</attachid> + <date>2011-05-27 10:17:00 +0000</date> + <delta_ts>2011-05-27 10:17:48 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>2333</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>132</bug_id> + + <creation_ts>2011-05-29 17:23:00 +0000</creation_ts> + <short_desc>Open Saved Module menu item not grayed out</short_desc> + <delta_ts>2011-05-29 17:23:12 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P5</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>329</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-05-29 17:23:12 +0000</bug_when> + <thetext>Open Saved Module item on the The TLC Model Checker menu should be grayed out if no model is selected. Currently, it's not grayed out but clicking on it does nothing. This will confuse naive users who have no idea what that command does. (They'll probably still be confused if they use that command when it is enabled, but at least they have a chance of figuring it out--and may perhaps go to the help pages to find out.)</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>133</bug_id> + + <creation_ts>2011-05-30 16:44:00 +0000</creation_ts> + <short_desc>Internal Error when running TLC on Mac</short_desc> + <delta_ts>2011-07-01 20:00:16 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>Mac OS</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>DUPLICATE</resolution> + <dup_id>125</dup_id> + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Michael Leuschel">leuschel</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>332</commentid> + <comment_count>0</comment_count> + <who name="Michael Leuschel">leuschel</who> + <bug_when>2011-05-30 16:44:01 +0000</bug_when> + <thetext>I am trying to run TLC from the TLA toolbox 1.3.1 on Mac OS X 10.6.7. +Whenever I try to run TLC I get the error message: + +An internal error occurred during: "TLC run for Model_1". +java.lang.NullPointerException + +This happens both using the 32-bit and the 64-bit version. +The Hardware is a MacBook Pro Core2Duo 3.06 GHz. +It happens with all my specifications and models (which ran successfully on 1.1.0 from Feb 5, 2010). +I have also tried creating new specifications from scratch; without success. + +(As a side-not: the "About TLA Toolbox" menu command seems to perform no action.)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>333</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-30 17:38:01 +0000</bug_when> + <thetext>(In reply to comment #0) +> I am trying to run TLC from the TLA toolbox 1.3.1 on Mac OS X 10.6.7. +> Whenever I try to run TLC I get the error message: +> +> An internal error occurred during: "TLC run for Model_1". +> java.lang.NullPointerException +> +> This happens both using the 32-bit and the 64-bit version. +> The Hardware is a MacBook Pro Core2Duo 3.06 GHz. +> It happens with all my specifications and models (which ran successfully on +> 1.1.0 from Feb 5, 2010). +> I have also tried creating new specifications from scratch; without success. + +Hi Michael, + +this appears to be an incarnation of bug #111 and potentially bug #125 too. Can you try and check if the workarounds mentioned on those bugs solve your issue? + +Basically make sure that the toolbox is installed into Applcations/ and that the path to the toolbox does not contain whitespaces. + +> (As a side-not: the "About TLA Toolbox" menu command seems to perform no +> action.) + +This already gets tracked in bug #27. + +Thanks +Markus</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>414</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 20:00:16 +0000</bug_when> + <thetext> + +*** This bug has been marked as a duplicate of bug 125 ***</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>134</bug_id> + + <creation_ts>2011-05-31 09:25:00 +0000</creation_ts> + <short_desc>Distributed TLC does not compile on Java 1.5</short_desc> + <delta_ts>2011-05-31 11:35:11 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>Linux</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>334</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-31 09:25:14 +0000</bug_when> + <thetext>Description Resource Path Location Type +The constructor IOException(String, EOFException) is undefined MemFPSet2.java /tlatools/src/tlc2/tool/fp line 235 Java Problem +Description Resource Path Location Type +The constructor IOException(String, IOException) is undefined DiskFPSet.java /tlatools/src/tlc2/tool/fp line 147 Java Problem +Description Resource Path Location Type +The method getLiveRef() is undefined for the type UnicastRef TLCServer.java /tlatools/src/tlc2/tool/distributed line 157 Java Problem</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>335</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-31 11:35:09 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>336</commentid> + <comment_count>2</comment_count> + <attachid>39</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-31 11:35:11 +0000</bug_when> + <thetext>Created attachment 39 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>39</attachid> + <date>2011-05-31 11:35:00 +0000</date> + <delta_ts>2011-05-31 11:35:11 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1808</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>135</bug_id> + + <creation_ts>2011-05-31 11:52:00 +0000</creation_ts> + <short_desc>NPE startup crash requiring Toolbox restart (happens randomly)</short_desc> + <delta_ts>2011-07-01 19:56:01 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Linux</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>342</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-31 11:52:21 +0000</bug_when> + <thetext>!ENTRY org.eclipse.ui 4 0 2011-05-31 01:10:00.273 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NullPointerException + at org.lamport.tla.toolbox.util.SpecLifecycleManager$1.invoke(SpecLifecycleManager.java:30) + at org.lamport.tla.toolbox.util.SpecLifecycleManager.sendEventWithVeto(SpecLifecycleManager.java:80) + at org.lamport.tla.toolbox.util.SpecLifecycleManager.sendEvent(SpecLifecycleManager.java:64) + at org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.addSpec(WorkspaceSpecManager.java:156) + at org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.<init>(WorkspaceSpecManager.java:97) + at org.lamport.tla.toolbox.Activator.getSpecManager(Activator.java:297) + at org.lamport.tla.toolbox.ui.contribution.SizeControlContribution.updateSize(SizeControlContribution.java:90) + at org.lamport.tla.toolbox.ui.contribution.SizeControlContribution.createControl(SizeControlContribution.java:78) + at org.eclipse.jface.action.ControlContribution.fill(ControlContribution.java:97) + at org.eclipse.jface.action.ToolBarManager.update(ToolBarManager.java:353) + at org.eclipse.jface.action.ToolBarManager.createControl(ToolBarManager.java:111) + at org.eclipse.ui.internal.menus.TrimContributionManager$ToolBarTrimProxy.dock(TrimContributionManager.java:88) + at org.eclipse.ui.internal.menus.TrimContributionManager.update(TrimContributionManager.java:232) + at org.eclipse.ui.internal.WorkbenchWindow.updateLayoutDataForContents(WorkbenchWindow.java:3784) + at org.eclipse.ui.internal.WorkbenchWindow.setLayoutDataForContents(WorkbenchWindow.java:3795) + at org.eclipse.ui.internal.WorkbenchWindow.createDefaultContents(WorkbenchWindow.java:1113) + at org.eclipse.ui.internal.WorkbenchWindowConfigurer.createDefaultContents(WorkbenchWindowConfigurer.java:625) + at org.eclipse.ui.application.WorkbenchWindowAdvisor.createWindowContents(WorkbenchWindowAdvisor.java:268) + at org.eclipse.ui.internal.WorkbenchWindow.createContents(WorkbenchWindow.java:999) + at org.eclipse.jface.window.Window.create(Window.java:431) + at org.eclipse.ui.internal.Workbench$20.runWithException(Workbench.java:1032) + at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803) + at org.eclipse.ui.internal.Workbench$28.runWithException(Workbench.java:1384) + at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3855) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3476) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2316) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>343</commentid> + <comment_count>1</comment_count> + <attachid>41</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-31 11:53:01 +0000</bug_when> + <thetext>Created attachment 41 +Console output</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>344</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-31 11:55:57 +0000</bug_when> + <thetext>I suspect the call to org.eclipse.core.runtime.IConfigurationElement.createExecutableExtension(String) in org.lamport.tla.toolbox.util.SpecLifecycleManager.SpecLifecycleManager() to return null on Eclipse <= 3.5. Eclipse bugzilla searches turn up empty though.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>345</commentid> + <comment_count>3</comment_count> + <attachid>42</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-31 11:55:58 +0000</bug_when> + <thetext>Created attachment 42 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>346</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-31 11:56:35 +0000</bug_when> + <thetext>To activate assertions in Eclipse follow http://tech.puredanger.com/2007/01/17/eclipse-assertions/</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>347</commentid> + <comment_count>5</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-05-31 12:06:51 +0000</bug_when> + <thetext>To avoid having to go to the Web to find out how to enable/disable assertions, here's the explanation from http://tech.puredanger.com/2007/01/17/eclipse-assertions/ + +When using the JDK 1.4+ assert keyword, it’s nice in Eclipse to enable them for all your launch configurations at once. The easiest way to do this is to specify a default VM argument for your installed JDK. You can do this by going to Windows -> Preferences -> Java -> Installed JREs. Then select your JDK and click the Edit… button. In the “Default VM Arguments” box, add -ea.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>388</commentid> + <comment_count>6</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-21 15:52:04 +0000</bug_when> + <thetext>Changed ProverUIActivator.start(BundleContext) to access the preference store from inside the UI thread to prevent SWT invalid thread access exceptions.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>407</commentid> + <comment_count>7</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 19:56:00 +0000</bug_when> + <thetext>Changes in comment #6 seem to have done the trick, closing as fixed.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>408</commentid> + <comment_count>8</comment_count> + <attachid>54</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 19:56:01 +0000</bug_when> + <thetext>Created attachment 54 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>41</attachid> + <date>2011-05-31 11:53:00 +0000</date> + <delta_ts>2011-05-31 11:53:01 +0000</delta_ts> + <desc>Console output</desc> + <filename>consoleoutput.txt</filename> + <type>text/plain</type> + <size>759854</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>42</attachid> + <date>2011-05-31 11:55:00 +0000</date> + <delta_ts>2011-05-31 11:55:58 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>3064</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>54</attachid> + <date>2011-07-01 19:56:00 +0000</date> + <delta_ts>2011-07-01 19:56:01 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>2724</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>136</bug_id> + + <creation_ts>2011-05-31 15:13:00 +0000</creation_ts> + <short_desc>NPE in UIHelper.runCommand() if workbench window is inactive</short_desc> + <delta_ts>2011-05-31 15:13:18 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>348</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-05-31 15:13:18 +0000</bug_when> + <thetext>!ENTRY org.eclipse.ui 4 4 2011-05-31 15:03:36.247 +!MESSAGE An internal error has occurred. +!STACK 0 +java.lang.NullPointerException + at org.lamport.tla.toolbox.util.UIHelper.runCommand(UIHelper.java:417) + at org.lamport.tla.toolbox.ui.handler.NewSpecHandler$2$1.runInUIThread(NewSpecHandler.java:168) + at org.eclipse.ui.progress.UIJob$1.run(UIJob.java:95) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.swt.widgets.Display.release(Display.java:3215) + at org.eclipse.swt.graphics.Device.dispose(Device.java:246) + at org.lamport.tla.toolbox.Application.start(Application.java:50) + at org.eclipse.swtbot.eclipse.core.UITestApplication.start(UITestApplication.java:54) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384)</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>137</bug_id> + + <creation_ts>2011-06-01 11:14:00 +0000</creation_ts> + <short_desc>CloneModelContributionItem.getContributionItems() refreshes workspace in UI thread</short_desc> + <delta_ts>2011-07-01 19:59:05 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>DUPLICATE</resolution> + <dup_id>103</dup_id> + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>349</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-01 11:14:16 +0000</bug_when> + <thetext>org.lamport.tla.toolbox.tool.tlc.ui.modelexplorer.CloneModelContributionItem.getContributionItems() triggers a local workspace refresh each time the UI asks for contribution items. This is an expensive operation and should be refactored into a non-UI job.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>358</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-08 08:59:18 +0000</bug_when> + <thetext>Causing the following test failure: + +junit.framework.AssertionFailedError: Backend code (e.g. parsing must not be executed in UI thread) times executed: 14 + at junit.framework.Assert.fail(Assert.java:47) + at junit.framework.Assert.assertTrue(Assert.java:20) + at junit.framework.Assert.assertFalse(Assert.java:34) + at org.lamport.tla.toolbox.tool.tlc.ui.test.threading.HandlerThreadingTest.assertNoBackendCodeInUIThread(HandlerThreadingTest.java:99) + at org.lamport.tla.toolbox.tool.tlc.ui.test.threading.HandlerThreadingTest.parseSpecInNonUIThread(HandlerThreadingTest.java:88) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) + at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) + at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) + at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) + at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) + at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) + at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) + at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) + at org.junit.runners.ParentRunner.run(ParentRunner.java:236) + at org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner.run(SWTBotJunit4ClassRunner.java:54) + at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) + at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) + at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) + at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) + at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) + at org.eclipse.swtbot.eclipse.core.RemotePluginTestRunner.main(RemotePluginTestRunner.java:64) + at org.eclipse.swtbot.eclipse.core.UITestApplication.runTests(UITestApplication.java:117) + at org.eclipse.ui.internal.testing.WorkbenchTestable$1.run(WorkbenchTestable.java:71) + at java.lang.Thread.run(Thread.java:680)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>412</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 19:59:05 +0000</bug_when> + <thetext> + +*** This bug has been marked as a duplicate of bug 103 ***</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>138</bug_id> + + <creation_ts>2011-06-02 10:38:00 +0000</creation_ts> + <short_desc>Missing view descriptor causes PartInitException at startup</short_desc> + <delta_ts>2011-07-18 09:45:25 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>350</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-02 10:38:55 +0000</bug_when> + <thetext>!ENTRY org.eclipse.ui 4 4 2011-05-31 18:30:35.320 +!MESSAGE Exception in org.eclipse.ui.internal.FolderLayout.addView(String): org.eclipse.ui.PartInitException: View descriptor not found: org.eclipse.ui.navigator.ProjectExplorer + +!ENTRY org.eclipse.ui 4 4 2011-05-31 18:30:35.325 +!MESSAGE Exception in org.eclipse.ui.internal.FolderLayout.addView(String): org.eclipse.ui.PartInitException: View descriptor not found: org.eclipse.ui.navigator.ProjectExplorer +!STACK 1 +org.eclipse.ui.PartInitException: View descriptor not found: org.eclipse.ui.navigator.ProjectExplorer + at org.eclipse.ui.internal.FolderLayout.addView(FolderLayout.java:75) + at org.eclipse.ui.internal.ide.application.ResourcePerspective.defineLayout(ResourcePerspective.java:84) + at org.eclipse.ui.internal.ide.application.ResourcePerspective.createInitialLayout(ResourcePerspective.java:49) + at org.eclipse.ui.internal.Perspective.loadPredefinedPersp(Perspective.java:816) + at org.eclipse.ui.internal.Perspective.createPresentation(Perspective.java:270) + at org.eclipse.ui.internal.Perspective.<init>(Perspective.java:156) + at org.eclipse.ui.internal.tweaklets.Workbench3xImplementation.createPerspective(Workbench3xImplementation.java:55) + at org.eclipse.ui.internal.WorkbenchPage.createPerspective(WorkbenchPage.java:1672) + at org.eclipse.ui.internal.WorkbenchPage.init(WorkbenchPage.java:2453) + at org.eclipse.ui.internal.WorkbenchPage.<init>(WorkbenchPage.java:563) + at org.eclipse.ui.internal.tweaklets.Workbench3xImplementation.createWorkbenchPage(Workbench3xImplementation.java:39) + at org.eclipse.ui.internal.WorkbenchWindow.busyOpenPage(WorkbenchWindow.java:768) + at org.eclipse.ui.internal.Workbench$23.runWithException(Workbench.java:1221) + at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803) + at org.eclipse.ui.internal.Workbench$31.runWithException(Workbench.java:1567) + at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:179) + at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:150) + at org.eclipse.swt.widgets.Display.syncExec(Display.java:4282) + at org.eclipse.ui.internal.StartupThreading.runWithoutExceptions(StartupThreading.java:94) + at org.eclipse.ui.internal.Workbench.init(Workbench.java:1562) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2567) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115) + at org.eclipse.tycho.surefire.osgibooter.UITestApplication.runApplication(UITestApplication.java:31) + at org.eclipse.tycho.surefire.osgibooter.AbstractUITestApplication.run(AbstractUITestApplication.java:114) + at org.eclipse.tycho.surefire.osgibooter.UITestApplication.start(UITestApplication.java:37) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) +!SUBENTRY 1 org.eclipse.ui 4 0 2011-05-31 18:30:35.327 +!MESSAGE View descriptor not found: org.eclipse.ui.navigator.ProjectExplorer</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>479</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-18 09:45:23 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>480</commentid> + <comment_count>2</comment_count> + <attachid>72</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-18 09:45:25 +0000</bug_when> + <thetext>Created attachment 72 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>72</attachid> + <date>2011-07-18 09:45:00 +0000</date> + <delta_ts>2011-07-18 09:45:25 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>955</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>139</bug_id> + + <creation_ts>2011-06-05 23:21:00 +0000</creation_ts> + <short_desc>"Evaluate Constant Expression" output shows set with duplicate elements</short_desc> + <delta_ts>2011-08-01 23:18:23 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA Tools</component> + <version>1.3</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows 7</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Chris Newcombe">chris.newcombe</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>351</commentid> + <comment_count>0</comment_count> + <who name="Chris Newcombe">chris.newcombe</who> + <bug_when>2011-06-05 23:21:20 +0000</bug_when> + <thetext>Toolbox: 32-bit build of Version 1.3.1 of 5 April 2011 (also happens with Version 1.2.1 of 29 September 2010) +Running on: Windows 7 Enterprise Edition, 64-bit. + +In ‘Evaluate Constant Expression’: + + TCRecur({<<a, b>>, <<b, c>>}) + +Produces this output; a value that claims to be a set (as intended), +but which has duplicate elements: + + {<<a, b>>, <<b, c>>, <<a, c>>, <<a, b>>, <<b, c>>, <<a, c>>} + +The model has one constant, with the model value: + +Univ <- {a, b, c, d, e, f} + +The spec is an attempt to constructively define a transitive closure operator on binary relations modeled as 2-tuples: + +------------------------- MODULE TransitiveClosure ------------------------- +CONSTANT Univ + +MissingJoinTuples(r1,r2) == {<<x, z>> \in (Univ \X Univ) : + /\ <<x, z>> \notin r1 + /\ <<x, z>> \notin r2 + /\ \E y \in Univ : <<x, y>> \in r1 /\ <<y, z>> \in r2} + +TCRecur(r) == LET RECURSIVE selfJoin(_) + selfJoin(r1) == + LET mjt == MissingJoinTuples(r1, r1) + IN IF mjt = {} THEN r1 (* have reached least fixpoint, so this must be transitive closure *) + ELSE LET bigger == r1 \union mjt + IN bigger \union selfJoin(bigger) + IN selfJoin(r) +=============================================================================</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>391</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-06-22 18:23:40 +0000</bug_when> + <thetext>This is a TLC bug in PrintT (and presumably in Print as well). For example, PrintT({"a", "a"}) prints {"a", "a"}. The method that puts a value into canonical form should be called before printing the value, but that requires hunting through the TLC code to find the appropriate method.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>392</commentid> + <comment_count>2</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-06-22 18:55:47 +0000</bug_when> + <thetext>This seems to be trivial to fix, so I fixed it. However, I haven't heard from Yuan that the fix is OK, so I'll leave this open until I do.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>140</bug_id> + + <creation_ts>2011-06-07 15:34:00 +0000</creation_ts> + <short_desc>Fingerprint server incorrectly retrieved with call by value instead of call by ref</short_desc> + <delta_ts>2011-06-07 15:34:54 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>352</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-07 15:34:27 +0000</bug_when> + <thetext>The fingerprint server is intended to be a shared (RMI) resource and thus must be accessed with call by reference semantics.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>353</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-07 15:34:53 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>354</commentid> + <comment_count>2</comment_count> + <attachid>43</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-07 15:34:54 +0000</bug_when> + <thetext>Created attachment 43 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>43</attachid> + <date>2011-06-07 15:34:00 +0000</date> + <delta_ts>2011-06-07 15:34:54 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1695</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>141</bug_id> + + <creation_ts>2011-06-07 17:09:00 +0000</creation_ts> + <short_desc>UniqueString has to be created by TLCServer in distributed mode</short_desc> + <delta_ts>2011-06-07 17:12:02 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>355</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-07 17:09:33 +0000</bug_when> + <thetext>If TLC is run in distributed mode (RMI) on a spec that uses the concat operator (\o), UniqueString instances have to be created centrally by the server. Otherwise the same String value might result in different internal unique identifiers.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>356</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-07 17:12:01 +0000</bug_when> + <thetext>Fix released to HEAD, UniqueString creation is now delegated to the central TLCServer (bottleneck).</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>357</commentid> + <comment_count>2</comment_count> + <attachid>44</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-07 17:12:02 +0000</bug_when> + <thetext>Created attachment 44 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>44</attachid> + <date>2011-06-07 17:12:00 +0000</date> + <delta_ts>2011-06-07 17:12:02 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>2234</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>142</bug_id> + + <creation_ts>2011-06-08 10:35:00 +0000</creation_ts> + <short_desc>TLCServer fails due to missing fingerprint file on worker connect</short_desc> + <delta_ts>2011-06-08 11:30:04 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>Linux</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>INVALID</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>359</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-08 10:35:53 +0000</bug_when> + <thetext>java.io.FileNotFoundException: /tmp/spec/states/11-06-08-08-32-07/MC.fp (No such file or directory) + at java.io.RandomAccessFile.open(Native Method) + at java.io.RandomAccessFile.<init>(RandomAccessFile.java:212) + at tlc2.util.RandomAccessFile.<init>(RandomAccessFile.java:24) + at tlc2.util.BufferedRandomAccessFile.<init>(BufferedRandomAccessFile.java:111) + at tlc2.util.BufferedRandomAccessFile.<init>(BufferedRandomAccessFile.java:124) + at tlc2.tool.fp.DiskFPSet.addThread(DiskFPSet.java:195) + at tlc2.tool.distributed.TLCServer.registerWorker(TLCServer.java:145) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) + at sun.rmi.transport.Transport$1.run(Transport.java:159) + at java.security.AccessController.doPrivileged(Native Method) + at sun.rmi.transport.Transport.serviceCall(Transport.java:155) + at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) + at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) + at java.lang.Thread.run(Thread.java:662) + at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255) + at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233) + at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142) + at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178) + at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132) + at $Proxy0.registerWorker(Unknown Source) + at tlc2.tool.distributed.TLCWorker.main(TLCWorker.java:144)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>360</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-08 11:30:04 +0000</bug_when> + <thetext>Caused by g5k deployment script</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>143</bug_id> + + <creation_ts>2011-06-09 09:25:00 +0000</creation_ts> + <short_desc>TLCWorkers may wait for TLCServer to come online</short_desc> + <delta_ts>2011-06-09 09:29:18 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>361</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-09 09:25:42 +0000</bug_when> + <thetext>If a TLCWorker fails to connect to the TLCServer instance at startup it exists the process. This has proven impractical for a distributed system. Hence, TLCWorkers may wait for the server to come online by repeatedly trying to connect (with increasing wait times).</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>362</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-09 09:29:17 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>363</commentid> + <comment_count>2</comment_count> + <attachid>45</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-09 09:29:18 +0000</bug_when> + <thetext>Created attachment 45 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>45</attachid> + <date>2011-06-09 09:29:00 +0000</date> + <delta_ts>2011-06-09 09:29:18 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1776</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>144</bug_id> + + <creation_ts>2011-06-09 09:30:00 +0000</creation_ts> + <short_desc>Collect and report performance statistics for RMI distributed TLC</short_desc> + <delta_ts>2011-06-09 11:58:07 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>364</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-09 09:30:36 +0000</bug_when> + <thetext>In order to improve distributed TLC, reproducable statistics have to be collected during runtime.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>365</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-09 11:58:04 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>366</commentid> + <comment_count>2</comment_count> + <attachid>46</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-09 11:58:07 +0000</bug_when> + <thetext>Created attachment 46 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>46</attachid> + <date>2011-06-09 11:58:00 +0000</date> + <delta_ts>2011-06-09 11:58:07 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>56830</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>145</bug_id> + + <creation_ts>2011-06-09 18:51:00 +0000</creation_ts> + <short_desc>Toolbox not reporting a TLC error</short_desc> + <delta_ts>2011-10-17 15:10:23 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + <blocked>220</blocked> + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>367</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-06-09 18:51:02 +0000</bug_when> + <thetext>The console log shows that running a model caused a TLC error (as it should have), but the Toolbox reported no error or any other result for the run. The Toolbox ran TLC correctly on a clone of the model. Below is a copy of the Eclipse console output produced by the incorrect run. The model will be attached below. + +-------- + +footFileName = C:\lamport\books\hyper-tla\specs\Channel\FGBoundedBuffer.tla +Writing files to: Model_1\ +---- + +Skipping resource: Model_1/FGBoundedBuffer.tla +Skipping resource: Model_1/MC.tla +Skipping resource: Model_1/PCalBoundedChannel.tla +---- + +Found algorithm definition in PCalBoundedChannel.tla +Found algorithm definition in FGBoundedBuffer.tla +entering removeModelProblemMarkers() on FGBoundedBuffer___Model_1 with markerType set to org.lamport.tla.toolbox.tlc.modelErrorSANY +Final check for the modelcheck mode. The result of the check is true +--------------------------- +TLC ARGUMENTS: +--------------------------- +-checkpoint +3 +-config +MC.cfg +-coverage +3 +-workers +1 +-tool +-metadir +C:\lamport\books\hyper-tla\specs\Channel\FGBoundedBuffer.toolbox\Model_1 +MC +--------------------------- +END TLC ARGUMENTS +--------------------------- +entering removeModelProblemMarkers() on FGBoundedBuffer___Model_1 with markerType set to org.lamport.tla.toolbox.tlc.modelErrorTLC +TLCOutputSourceRegistry for model checking maintains 4 sources. +The source FGBoundedBuffer___Model_1.launch has 4 prio and 1 listeners +The source BPConProof___Model_1.launch has 4 prio and 1 listeners +The source FGBoundedBuffer___Model_1_Copy.launch has 4 prio and 1 listeners +The source PCalBoundedBuffer___Model_2.launch has 4 prio and 1 listeners +---- + +---- + +Found algorithm definition in PCalBoundedChannel.tla +Found algorithm definition in FGBoundedBuffer.tla + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2011-06-09 09:41:15.170 +!MESSAGE Error broadcasting the message +!STACK 0 +java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 1 + at java.util.Vector.get(Vector.java:694) + at org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.createError(TLCModelLaunchDataProvider.java:586) + at org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.onOutput(TLCModelLaunchDataProvider.java:273) + at org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:92) + at org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:59) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:225) + at org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:604) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:731) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:712) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:697) + at org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:762) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1157) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1176) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:315) + at org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:25) + at org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + at org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + at org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + at org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + at org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + at java.lang.Thread.run(Thread.java:619) + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2011-06-09 09:41:15.171 +!MESSAGE Error broadcasting the message +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: null argument:The state encountered without the error describing the reason for it. This is a bug. + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.onOutput(TLCModelLaunchDataProvider.java:245) + at org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:92) + at org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:59) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:225) + at org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:604) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:731) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:712) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:697) + at org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:762) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1157) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1176) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:315) + at org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:25) + at org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + at org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + at org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + at org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + at org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + at java.lang.Thread.run(Thread.java:619) + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2011-06-09 09:41:15.202 +!MESSAGE Error broadcasting the message +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: null argument:The state encountered without the error describing the reason for it. This is a bug. + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.onOutput(TLCModelLaunchDataProvider.java:245) + at org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:92) + at org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:59) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:225) + at org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:604) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:731) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:712) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:697) + at org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:762) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1157) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1176) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:315) + at org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:25) + at org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + at org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + at org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + at org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + at org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + at java.lang.Thread.run(Thread.java:619) + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2011-06-09 09:41:15.218 +!MESSAGE Error broadcasting the message +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: null argument:The state encountered without the error describing the reason for it. This is a bug. + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.onOutput(TLCModelLaunchDataProvider.java:245) + at org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:92) + at org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:59) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:225) + at org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:604) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:731) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:712) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:697) + at org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:762) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1157) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1176) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:315) + at org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:25) + at org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + at org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + at org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + at org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + at org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + at java.lang.Thread.run(Thread.java:619) + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2011-06-09 09:41:15.233 +!MESSAGE Error broadcasting the message +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: null argument:The state encountered without the error describing the reason for it. This is a bug. + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.onOutput(TLCModelLaunchDataProvider.java:245) + at org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:92) + at org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:59) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:225) + at org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:604) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:731) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:712) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:697) + at org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:762) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1157) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1176) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:315) + at org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:25) + at org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + at org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + at org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + at org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + at org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + at java.lang.Thread.run(Thread.java:619) + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2011-06-09 09:41:15.514 +!MESSAGE Error broadcasting the message +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: null argument:The state encountered without the error describing the reason for it. This is a bug. + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.onOutput(TLCModelLaunchDataProvider.java:245) + at org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:92) + at org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:59) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:225) + at org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:604) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:731) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:712) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:697) + at org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:762) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1157) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1176) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:315) + at org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:25) + at org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + at org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + at org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + at org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + at org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + at java.lang.Thread.run(Thread.java:619) + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2011-06-09 09:41:15.545 +!MESSAGE Error broadcasting the message +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: null argument:The state encountered without the error describing the reason for it. This is a bug. + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.onOutput(TLCModelLaunchDataProvider.java:245) + at org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:92) + at org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:59) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:225) + at org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:604) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:731) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:712) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:697) + at org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:762) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1157) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1176) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:315) + at org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:25) + at org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + at org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + at org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + at org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + at org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + at java.lang.Thread.run(Thread.java:619) + +!ENTRY org.lamport.tla.toolbox.tool.tlc 4 0 2011-06-09 09:41:15.561 +!MESSAGE Error broadcasting the message +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: null argument:The state encountered without the error describing the reason for it. This is a bug. + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.onOutput(TLCModelLaunchDataProvider.java:245) + at org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:92) + at org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:59) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:225) + at org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:604) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:731) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:712) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:697) + at org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:762) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1157) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1176) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:315) + at org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:25) + at org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + at org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + at org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + at org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + at org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + at java.lang.Thread.run(Thread.java:619) +---- + +---- + +Found algorithm definition in PCalBoundedChannel.tla +Found algorithm definition in FGBoundedBuffer.tla +Job 'TLC run for Model_1' terminated with status: { Done }</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>368</commentid> + <comment_count>1</comment_count> + <attachid>47</attachid> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-06-09 18:53:35 +0000</bug_when> + <thetext>Created attachment 47 +a zip file + +The model in question is Model_1. The clone Model_1_Copy worked.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>47</attachid> + <date>2011-06-09 18:53:00 +0000</date> + <delta_ts>2011-06-09 18:53:35 +0000</delta_ts> + <desc>a zip file</desc> + <filename>FGBoundedBuffer.toolbox.zip</filename> + <type>application/octet-stream</type> + <size>15461</size> + <attacher name="Leslie Lamport">lamport</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>146</bug_id> + + <creation_ts>2011-06-10 07:01:00 +0000</creation_ts> + <short_desc>Deleting a model from one spec seems to delete models with the same name from all specs</short_desc> + <delta_ts>2011-07-01 19:50:42 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P2</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>369</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-06-10 07:01:15 +0000</bug_when> + <thetext>Add a model named Foo to one spec. Close that spec. Add a model named Foo to a second spec. Close that spec. Re-open the first spec and delete the model named Foo. It will be deleted from the second spec too. + +It's pretty amazing that I never noticed this before.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>370</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-06-10 07:26:03 +0000</bug_when> + <thetext>It looks like the problem is in DeleteModelHandler.java, which I presume is the handler for the Delete Model command. The execute command has a loop that gets a list of launch configurations and deletes any that have the right name. However, instead of comparing the complete model name, which begins with the spec name + "____", the comparison is against ModelHelper.getModelName(...), which strips that stuff away. I presume Simon thought that the list of launch configurations were only ones from the current spec and they are from all specs, but I haven't tried debugging to check this.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>375</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-10 19:46:52 +0000</bug_when> + <thetext>Fix released to HEAD + +- Simplified implementation by cutting out the middle man^delegate +- Multi-selection support added +- Decoupled delete operation from UI thread +-- Canceled +-- Progress +- Delete gets delegated to Workspace +-- Undo trivial to implement + +Unit/Func. tests pending... (manually tested on Linux and Mac)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>376</commentid> + <comment_count>3</comment_count> + <attachid>48</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-10 19:46:56 +0000</bug_when> + <thetext>Created attachment 48 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>406</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 19:50:42 +0000</bug_when> + <thetext>Resolving as fixed, no unit tests have been written.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>48</attachid> + <date>2011-06-10 19:46:00 +0000</date> + <delta_ts>2011-06-10 19:46:56 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>5983</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>147</bug_id> + + <creation_ts>2011-06-10 14:20:00 +0000</creation_ts> + <short_desc>NumberFormatException for input "2262 @!@!@java.lang.IllegalArgumentException: URI is not" during startup</short_desc> + <delta_ts>2011-06-14 09:04:17 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>371</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-10 14:20:30 +0000</bug_when> + <thetext>!ENTRY org.eclipse.text 4 2 2011-06-10 14:18:45.147 +!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.text". +!STACK 0 +java.lang.NumberFormatException: For input string: "2262 @!@!@java.lang.IllegalArgumentException: URI is not" + at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) + at java.lang.Integer.parseInt(Integer.java:458) + at java.lang.Integer.parseInt(Integer.java:499) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCAnalyzer.getMessageCode(TagBasedTLCAnalyzer.java:295) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCAnalyzer.processTag(TagBasedTLCAnalyzer.java:132) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCAnalyzer.addTagEnd(TagBasedTLCAnalyzer.java:82) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:216) + at org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:611) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:755) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:736) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:721) + at org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:796) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1191) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1210) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:315) + at org.lamport.tla.toolbox.tool.tlc.output.LogFileReader.read(LogFileReader.java:52) + at org.lamport.tla.toolbox.tool.tlc.output.source.TLCOutputSourceRegistry.connect(TLCOutputSourceRegistry.java:163) + at org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.connectToSourceRegistry(TLCModelLaunchDataProvider.java:744) + at org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.<init>(TLCModelLaunchDataProvider.java:130) + at org.lamport.tla.toolbox.tool.tlc.output.source.TLCOutputSourceRegistry.getProvider(TLCOutputSourceRegistry.java:218) + at org.lamport.tla.toolbox.tool.tlc.ui.editor.page.ResultPage.loadData(ResultPage.java:231) + at org.lamport.tla.toolbox.tool.tlc.ui.editor.page.BasicFormPage.createFormContent(BasicFormPage.java:276) + at org.eclipse.ui.forms.editor.FormPage$1.run(FormPage.java:152) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.forms.editor.FormPage.createPartControl(FormPage.java:150) + at org.lamport.tla.toolbox.tool.tlc.ui.editor.ModelEditor.addPages(ModelEditor.java:478) + at org.eclipse.ui.forms.editor.FormEditor.createPages(FormEditor.java:138) + at org.eclipse.ui.part.MultiPageEditorPart.createPartControl(MultiPageEditorPart.java:348) + at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.EditorManager$5.runWithException(EditorManager.java:953) + at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803) + at org.eclipse.ui.internal.Workbench$31.runWithException(Workbench.java:1567) + at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2548) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) +TLCOutputSourceRegistry for model checking maintains 1 sources. +The source Test___Model_1.launch has 1 prio and 1 listeners</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>377</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-14 09:04:14 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>378</commentid> + <comment_count>2</comment_count> + <attachid>49</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-14 09:04:17 +0000</bug_when> + <thetext>Created attachment 49 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>49</attachid> + <date>2011-06-14 09:04:00 +0000</date> + <delta_ts>2011-06-14 09:04:17 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>2437</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>148</bug_id> + + <creation_ts>2011-06-14 09:10:00 +0000</creation_ts> + <short_desc>util.SimpleFilenameToStream.getInstallationBasePath() occasionally fails to lookup the StandardModules/ path because java.lang.ClassLoader.getResource(String) returns in jar resource</short_desc> + <delta_ts>2011-06-20 13:27:37 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Linux</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>379</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-14 09:10:28 +0000</bug_when> + <thetext>java.lang.ClassLoader.getResource(String) does not behave deterministically WRT the resource it returns. This causes util.SimpleFilenameToStream.getInstallationBasePath() to randomly fail because it finds the StandardModules inside the "jar:file:" scheme (URL) and not "file:". + +There are several ways to address this issue: +a) make resource loading deterministic +b) support loading from file: as well as jar:file: +c) derive an RCPSimpleFilenameToStream resolver that gets used by the Toolbox</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>380</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-20 13:27:35 +0000</bug_when> + <thetext>Added b) in jar loading to util.SimpleFilenameToStream</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>381</commentid> + <comment_count>2</comment_count> + <attachid>50</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-20 13:27:37 +0000</bug_when> + <thetext>Created attachment 50 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>50</attachid> + <date>2011-06-20 13:27:00 +0000</date> + <delta_ts>2011-06-20 13:27:37 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>3129</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>149</bug_id> + + <creation_ts>2011-06-20 17:28:00 +0000</creation_ts> + <short_desc>Specs with no behavior specification don't work until you add and remove a behavior spec</short_desc> + <delta_ts>2011-06-21 12:40:45 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>WORKSFORME</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P2</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>382</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-06-20 17:28:34 +0000</bug_when> + <thetext>In the Toolbox, create a new spec whose root module is + +------ Test ------- +ASSUME TRUE +=========== + +Create a model and run TLC on it. The Toolbox claims that TLC produces the mysterious error %1%. + +Add the statement + + VARIABLE x + +but don't change the model. (It will still specify "no behavior specification".) Running TLC produces the error + + The configuration file did not specify the initial state predicate. + +In both these cases, the TLC Console shows that TLC found no error, and running TLC on the MC spec outside the Toolbox produces no error. + +Now add the definition + + Spec == x=0 /\ [][x'=x]_x + +to the module. Change the model to use Spec as the behavior specification. Then (without running TLC) select "No behavior Specification" +and run the model. It runs fine. Delete Spec from the behavior specification field and select "No Behavior Specification". Again, the model +runs fine. Delete the VARIABLE statement and the definition of Spec. Again the model runs fine.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>383</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-06-20 17:37:55 +0000</bug_when> + <thetext>Correction: The error + + The configuration file did not specify the initial state predicate. + + actually was produced by TLC, even when running the MC file from outside the Toolbox.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>387</commentid> + <comment_count>2</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-06-21 12:40:45 +0000</bug_when> + <thetext>The problem seems to have gone away when I restarted the Toolbox. I can no longer produce it.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>150</bug_id> + + <creation_ts>2011-06-20 17:54:00 +0000</creation_ts> + <short_desc>Toolbox not asking for approval to run TLC when spec has been modified</short_desc> + <delta_ts>2011-07-20 11:51:04 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P5</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>384</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-06-20 17:54:56 +0000</bug_when> + <thetext>If you tried to run a model after modifying the spec without saving the modifications, the Toolbox used to ask if you wanted to save those modifications. It no longer does, but it should. (You don't want to make a change, forget to save it, and then start a model running before going home for the weekend.)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>474</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-14 17:41:15 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>475</commentid> + <comment_count>2</comment_count> + <attachid>70</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-14 17:41:16 +0000</bug_when> + <thetext>Created attachment 70 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>497</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-20 11:04:21 +0000</bug_when> + <thetext>Model editors should be saved implicitly. Only a dirty spec editor should raise a save dialog.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>498</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-20 11:51:01 +0000</bug_when> + <thetext>Fix released to HEAD +(Raise save dialog for dirty spec editor)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>499</commentid> + <comment_count>5</comment_count> + <attachid>76</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-20 11:51:04 +0000</bug_when> + <thetext>Created attachment 76 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>70</attachid> + <date>2011-07-14 17:41:00 +0000</date> + <delta_ts>2011-07-14 17:41:16 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>36896</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>76</attachid> + <date>2011-07-20 11:51:00 +0000</date> + <delta_ts>2011-07-20 11:51:04 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>82847</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>151</bug_id> + + <creation_ts>2011-06-20 21:13:00 +0000</creation_ts> + <short_desc>org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser does not scale for large output</short_desc> + <delta_ts>2011-07-01 20:16:41 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>lamport</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>385</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-20 21:13:38 +0000</bug_when> + <thetext>Parsing ~70k lines of TLC output takes hours.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>404</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 19:48:32 +0000</bug_when> + <thetext>Fixed and released to HEAD + +- Set VIRTUAL bit for coverage table to only create table items on +demand +- Group user content in console parser in a single token instead of a +token per char (breaks incomplete line support though) +- Buffer parser input up to complete lines (a complete has a line +ending)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>405</commentid> + <comment_count>2</comment_count> + <attachid>53</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 19:48:38 +0000</bug_when> + <thetext>Created attachment 53 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>422</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 20:16:41 +0000</bug_when> + <thetext>*** Bug 90 has been marked as a duplicate of this bug. ***</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>53</attachid> + <date>2011-07-01 19:48:00 +0000</date> + <delta_ts>2011-07-01 19:48:38 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>35815</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>152</bug_id> + + <creation_ts>2011-06-21 08:16:00 +0000</creation_ts> + <short_desc>Improve keyboard experience</short_desc> + <delta_ts>2011-07-05 15:23:28 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>386</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-21 08:16:53 +0000</bug_when> + <thetext>F11: Launch currently active model check</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>427</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-05 15:23:26 +0000</bug_when> + <thetext>F11 added</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>428</commentid> + <comment_count>2</comment_count> + <attachid>56</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-05 15:23:28 +0000</bug_when> + <thetext>Created attachment 56 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>56</attachid> + <date>2011-07-05 15:23:00 +0000</date> + <delta_ts>2011-07-05 15:23:28 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1271</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>153</bug_id> + + <creation_ts>2011-06-22 17:16:00 +0000</creation_ts> + <short_desc>Turn tla2tool.jar into OSGi bundle</short_desc> + <delta_ts>2011-06-22 22:32:58 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA Tools</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>390</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-22 17:16:36 +0000</bug_when> + <thetext>The Toolbox nests tla2tools.jar inside bundle org.lamport.tla.toolbox. This workaround requires an extra build cycle (manually triggering tlatoolbox's ant build) during development every time a change is done to tlatoolbox/. + +To avoid this overhead, tlatools should be turned into a first class OSGi citizen by converting it into a bundle. This adds no overhead to non-OSGi usage.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>393</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-22 22:32:57 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>394</commentid> + <comment_count>2</comment_count> + <attachid>51</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-22 22:32:58 +0000</bug_when> + <thetext>Created attachment 51 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>51</attachid> + <date>2011-06-22 22:32:00 +0000</date> + <delta_ts>2011-06-22 22:32:58 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>3545</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>154</bug_id> + + <creation_ts>2011-06-23 11:02:00 +0000</creation_ts> + <short_desc>Platform specific bundles [net/filesystem] missing in distribution</short_desc> + <delta_ts>2011-08-01 16:04:38 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + <blocked>157</blocked> + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>395</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-23 11:02:37 +0000</bug_when> + <thetext>All distribution bundles on http://research.microsoft.com/en-us/um/people/lamport/tla/toolbox.html miss platform specific bundles for .net and .filesystem. This means that the toolbox will use the less efficient platform independent versions.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>539</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-01 16:04:36 +0000</bug_when> + <thetext>.filesystem. has been added to the build. Marking as fixed. Tested on Mac, Win and Linux.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>540</commentid> + <comment_count>2</comment_count> + <attachid>86</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-01 16:04:38 +0000</bug_when> + <thetext>Created attachment 86 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>86</attachid> + <date>2011-08-01 16:04:00 +0000</date> + <delta_ts>2011-08-01 16:04:38 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>899</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>155</bug_id> + + <creation_ts>2011-06-28 12:59:00 +0000</creation_ts> + <short_desc>Obscure PlusCal translator's command-line options don't work from inside Toolbox</short_desc> + <delta_ts>2015-02-11 14:41:38 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA Tools</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>ASSIGNED</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P5</priority> + <bug_severity>trivial</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>397</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-06-28 12:59:10 +0000</bug_when> + <thetext>The PlusCal translator options -spec, -myspec, -spec2, -myspec2, and -writeAST write the file AST.tla; the first four read that AST.tla file to perform the translation. This file is always written to and read from the directory from which the translator is run. The Toolbox runs the translator from some obscure directory somewhere, specifying the module name with a path. This works all right, except for the -writeAST, since the user presumably wants to see the AST.tla file. Not a big deal. Moreover, since these option were broken in Version 1.5 and work only with the -version 1.4 option, this bug is even less worth fixing. However, it's recorded here for future reference. If these options are ever made to work again, it would be a good idea to modify the translator to write the AST.tla file in the same directory as the module containing the algorithm.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>156</bug_id> + + <creation_ts>2011-06-30 10:11:00 +0000</creation_ts> + <short_desc>Trace Explorer exploration fails with stack overflow</short_desc> + <delta_ts>2011-06-30 11:24:57 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>398</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-30 10:11:52 +0000</bug_when> + <thetext>Running a trace exploration on the FindOp error trace reveals a stack overflow in SANY. + +Reproduce: +a) Model check FindOp with an invariant who causes an error trace (pc # "Done") +b) Add <<delim, leftTok>> to error trace exploration and hit explore</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>399</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-30 10:55:54 +0000</bug_when> + <thetext>see tla2sany.drivers.Bug156TEStackOverflowTest.testFrontEndParse() for a test case showing this behavior.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>400</commentid> + <comment_count>2</comment_count> + <attachid>52</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-30 10:55:56 +0000</bug_when> + <thetext>Created attachment 52 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>401</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-30 10:56:35 +0000</bug_when> + <thetext>LL: "The two different errors depending on how much heap space SANY is given suggests that it might be caused by the Toolbox putting some sort of weirdness into the TE.tla file."</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>403</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-06-30 11:24:57 +0000</bug_when> + <thetext>TE.tla is written in org.lamport.tla.toolbox.tool.tlc.launch.TraceExplorerDelegate.buildForLaunch(ILaunchConfiguration, String, IProgressMonitor) starting in line #388.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>52</attachid> + <date>2011-06-30 10:55:00 +0000</date> + <delta_ts>2011-06-30 10:55:56 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>13847</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>157</bug_id> + + <creation_ts>2011-07-01 20:07:00 +0000</creation_ts> + <short_desc>Release Toolbox 1.3.2 or 1.4</short_desc> + <delta_ts>2011-10-17 14:11:27 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + <dependson>111</dependson> + + <dependson>125</dependson> + + <dependson>154</dependson> + + <dependson>192</dependson> + + <dependson>193</dependson> + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>416</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 20:07:27 +0000</bug_when> + <thetext>This bug is intended as an umbrella bug for the next Toolbox release (it's either 1.3.2 or 1.4).</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>418</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 20:08:50 +0000</bug_when> + <thetext>Fix for bug #10 makes the comment on the website [0] obsolete. + +[0] http://research.microsoft.com/en-us/um/people/lamport/tla/toolbox.html#downloading</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>419</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 20:14:26 +0000</bug_when> + <thetext>Adding release stoppers</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>681</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-17 14:11:27 +0000</bug_when> + <thetext>Done already</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>158</bug_id> + + <creation_ts>2011-07-01 20:33:00 +0000</creation_ts> + <short_desc>Run distributed TLC from Toolbox</short_desc> + <delta_ts>2011-07-06 20:54:52 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>426</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-01 20:33:30 +0000</bug_when> + <thetext>It should be possible to run the distributed TLC server instance from within the Toolbox. This makes it easier for user because they don't have to start the server process manually. Obviously it won't support larger experiments where the server and the toolbox have to be separated (e.g. network topology and/or hardware...).</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>438</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-06 20:54:52 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>159</bug_id> + + <creation_ts>2011-07-06 10:03:00 +0000</creation_ts> + <short_desc>NPE in NewSpecWizard job</short_desc> + <delta_ts>2011-07-06 10:07:04 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>429</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-06 10:03:44 +0000</bug_when> + <thetext>!ENTRY org.eclipse.core.jobs 4 2 2011-07-06 10:02:11.580 +!MESSAGE An internal error occurred during: "NewSpecWizard job". +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: null argument: + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:73) + at org.eclipse.core.runtime.Path.initialize(Path.java:577) + at org.eclipse.core.runtime.Path.<init>(Path.java:163) + at org.lamport.tla.toolbox.ui.handler.NewSpecHandler$1.run(NewSpecHandler.java:90) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>430</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-06 10:07:03 +0000</bug_when> + <thetext>Fix released to HEAD +(check for valid rootfilename before running job)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>431</commentid> + <comment_count>2</comment_count> + <attachid>57</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-06 10:07:04 +0000</bug_when> + <thetext>Created attachment 57 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>57</attachid> + <date>2011-07-06 10:07:00 +0000</date> + <delta_ts>2011-07-06 10:07:04 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>4545</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>160</bug_id> + + <creation_ts>2011-07-06 12:16:00 +0000</creation_ts> + <short_desc>java.lang.ArithmeticException: / by zero in Graph window when column value is 0</short_desc> + <delta_ts>2011-07-07 00:18:41 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>432</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-06 12:16:57 +0000</bug_when> + <thetext>!ENTRY org.eclipse.ui 4 0 2011-07-06 12:15:38.200 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.ArithmeticException: / by zero) + at org.eclipse.swt.SWT.error(SWT.java:4083) + at org.eclipse.swt.SWT.error(SWT.java:3998) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) +Caused by: java.lang.ArithmeticException: / by zero + at org.lamport.tla.toolbox.tool.tlc.ui.editor.page.ResultPage$DataDisplay$1.paintControl(ResultPage.java:997) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:223) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1282) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1267) + at org.eclipse.swt.widgets.Control.gtk_expose_event(Control.java:2783) + at org.eclipse.swt.widgets.Composite.gtk_expose_event(Composite.java:701) + at org.eclipse.swt.widgets.Canvas.gtk_expose_event(Canvas.java:167) + at org.eclipse.swt.widgets.Shell.gtk_expose_event(Shell.java:1204) + at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:1739) + at org.eclipse.swt.widgets.Control.windowProc(Control.java:4796) + at org.eclipse.swt.widgets.Display.windowProc(Display.java:4360) + at org.eclipse.swt.internal.gtk.OS._gtk_main_do_event(Native Method) + at org.eclipse.swt.internal.gtk.OS.gtk_main_do_event(OS.java:8189) + at org.eclipse.swt.widgets.Display.eventProc(Display.java:1238) + at org.eclipse.swt.internal.gtk.OS._gdk_window_process_updates(Native Method) + at org.eclipse.swt.internal.gtk.OS.gdk_window_process_updates(OS.java:5366) + at org.eclipse.swt.widgets.Control.update(Control.java:4755) + at org.eclipse.swt.widgets.Shell.setVisible(Shell.java:2004) + at org.eclipse.swt.widgets.Shell.open(Shell.java:1410) + at org.lamport.tla.toolbox.tool.tlc.ui.editor.page.ResultPage$DataDisplay.run(ResultPage.java:1033) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + ... 23 more</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>440</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-07-07 00:18:41 +0000</bug_when> + <thetext>This occurs when trying to graph a column all of whose values are 0. Added a little hack to suppress the overflow. It also seems to suppress the graph, but it's not worth trying to fix that.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>161</bug_id> + + <creation_ts>2011-07-06 18:05:00 +0000</creation_ts> + <short_desc>Serve TLCWorker via Java Webstart</short_desc> + <delta_ts>2011-07-06 20:50:49 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>435</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-06 18:05:13 +0000</bug_when> + <thetext>Making the TLCWorker app available via Java Webstart simplifies deployment in (user) scripts.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>436</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-06 20:50:47 +0000</bug_when> + <thetext>Released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>437</commentid> + <comment_count>2</comment_count> + <attachid>59</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-06 20:50:49 +0000</bug_when> + <thetext>Created attachment 59 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>59</attachid> + <date>2011-07-06 20:50:00 +0000</date> + <delta_ts>2011-07-06 20:50:49 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>12388</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>162</bug_id> + + <creation_ts>2011-07-06 22:37:00 +0000</creation_ts> + <short_desc>Bootstrap JRE via Java Webstart</short_desc> + <delta_ts>2011-07-07 14:04:02 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>439</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-06 22:37:09 +0000</bug_when> + <thetext>On Windows systems the browser can be used to bootstrap a JRE.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>444</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-07 14:04:02 +0000</bug_when> + <thetext>Accessing http://$TOOLBOX_HOST:10996/ will now automatically check for an installed JRE and prompt the user to install it if now JRE could be found. An initial search turns up empty for unattended installation (it's probably a security feature anyway)</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>163</bug_id> + + <creation_ts>2011-07-07 10:52:00 +0000</creation_ts> + <short_desc>NPE in SimpleFilenameToStream resolver when run from inside signed jar (required by web start)</short_desc> + <delta_ts>2011-07-07 15:51:32 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>441</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-07 10:52:43 +0000</bug_when> + <thetext>java.lang.ExceptionInInitializerError + at tlc2.tool.distributed.TLCWorker.main(TLCWorker.java:161) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at com.sun.javaws.Launcher.executeApplication(Launcher.java:1804) + at com.sun.javaws.Launcher.executeMainClass(Launcher.java:1750) + at com.sun.javaws.Launcher.doLaunchApp(Launcher.java:1512) + at com.sun.javaws.Launcher.run(Launcher.java:130) + at java.lang.Thread.run(Thread.java:662) +Caused by: java.lang.NullPointerException + at util.SimpleFilenameToStream.getInstallationBasePath(SimpleFilenameToStream.java:61) + at util.SimpleFilenameToStream.<clinit>(SimpleFilenameToStream.java:45) + ... 10 more +Error: Failed to start worker at coconut for server coconut.local. +null</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>446</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-07 15:51:31 +0000</bug_when> + <thetext>Fix released to HEAD +(Lesson confirmed: never ever use File in your application, use InputStream instead)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>447</commentid> + <comment_count>2</comment_count> + <attachid>60</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-07 15:51:32 +0000</bug_when> + <thetext>Created attachment 60 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>60</attachid> + <date>2011-07-07 15:51:00 +0000</date> + <delta_ts>2011-07-07 15:51:32 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>32829</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>164</bug_id> + + <creation_ts>2011-07-07 11:14:00 +0000</creation_ts> + <short_desc>Add custom system properties to TLCServer process launched from within Toolbox</short_desc> + <delta_ts>2011-07-08 09:56:35 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>442</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-07 11:14:38 +0000</bug_when> + <thetext>In some scenarios the TLCServer process requires extra system properties (e.g. java.rmi.server.hostname, java.rmi.server.useLocalHostname, ... [0]). + +[0] http://download.oracle.com/javase/1.4.2/docs/guide/rmi/javarmiproperties.html</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>448</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-08 09:56:32 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>449</commentid> + <comment_count>2</comment_count> + <attachid>61</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-08 09:56:35 +0000</bug_when> + <thetext>Created attachment 61 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>61</attachid> + <date>2011-07-08 09:56:00 +0000</date> + <delta_ts>2011-07-08 09:56:35 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>47502</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>165</bug_id> + + <creation_ts>2011-07-07 12:09:00 +0000</creation_ts> + <short_desc>Startup exception/crash due to invalid thread access</short_desc> + <delta_ts>2011-07-25 14:39:04 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>Linux</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>443</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-07 12:09:27 +0000</bug_when> + <thetext>org.osgi.framework.BundleException: Exception in org.eclipse.ui.internal.editors.text.EditorsPlugin.start() of bundle org.eclipse.ui.editors. + at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:806) + at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:755) + at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:370) + at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:284) + at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:417) + at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:265) + at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:106) + at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:453) + at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) + at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:393) + at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:33) + at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:466) + at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422) + at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410) + at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) + at java.lang.ClassLoader.loadClass(ClassLoader.java:248) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.visit(PCalDetectingBuilder.java:82) + at org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:112) + at org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:64) + at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) + at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86) + at org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:74) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:110) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:94) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder.build(PCalDetectingBuilder.java:58) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>516</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-25 14:38:58 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>517</commentid> + <comment_count>2</comment_count> + <attachid>81</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-25 14:39:04 +0000</bug_when> + <thetext>Created attachment 81 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>81</attachid> + <date>2011-07-25 14:39:00 +0000</date> + <delta_ts>2011-07-25 14:39:04 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>127186</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>166</bug_id> + + <creation_ts>2011-07-07 15:39:00 +0000</creation_ts> + <short_desc>Interesting Obligations view: Could not create the view: Subclassing not allowed</short_desc> + <delta_ts>2011-07-14 16:05:39 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.3</version> + <rep_platform>x86 32-bit</rep_platform> + <op_sys>Linux</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>blocker</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Loïc FEJOZ">loic</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>445</commentid> + <comment_count>0</comment_count> + <who name="Loïc FEJOZ">loic</who> + <bug_when>2011-07-07 15:39:26 +0000</bug_when> + <thetext>In version 1.3.1 of 5 April 2011 running under Linux, launching proof manager on an invalid proof raise the following error. + +org.eclipse.swt.SWTException: Subclassing not allowed + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.SWT.error(SWT.java:3770) + at org.eclipse.swt.widgets.Widget.error(Widget.java:450) + at org.eclipse.swt.widgets.ExpandItem.checkSubclass(ExpandItem.java:120) + at org.eclipse.swt.widgets.Widget.<init>(Widget.java:205) + at org.eclipse.swt.widgets.Item.<init>(Item.java:63) + at org.eclipse.swt.widgets.ExpandItem.<init>(ExpandItem.java:114) + at org.lamport.tla.toolbox.tool.prover.ui.view.ObligationsView$InterestingObligationExpandItem.<init>(ObligationsView.java:564) + at org.lamport.tla.toolbox.tool.prover.ui.view.ObligationsView.updateItem(ObligationsView.java:336) + at org.lamport.tla.toolbox.tool.prover.ui.view.ObligationsView.fillFromCurrentSpec(ObligationsView.java:237) + at org.lamport.tla.toolbox.tool.prover.ui.view.ObligationsView.createPartControl(ObligationsView.java:167) + at org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:367) + at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:226) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.Perspective.showView(Perspective.java:2229) + at org.eclipse.ui.internal.WorkbenchPage.busyShowView(WorkbenchPage.java:1067) + at org.eclipse.ui.internal.WorkbenchPage$20.run(WorkbenchPage.java:3816) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchPage.showView(WorkbenchPage.java:3813) + at org.eclipse.ui.internal.WorkbenchPage.showView(WorkbenchPage.java:3789) + at org.lamport.tla.toolbox.util.UIHelper.openView(UIHelper.java:179) + at org.lamport.tla.toolbox.tool.prover.ui.view.ObligationsView.updateObligationView(ObligationsView.java:271) + at org.lamport.tla.toolbox.tool.prover.ui.util.ProverHelper$3.run(ProverHelper.java:1094) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3468) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3115) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>471</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-14 16:05:35 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>472</commentid> + <comment_count>2</comment_count> + <attachid>69</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-14 16:05:39 +0000</bug_when> + <thetext>Created attachment 69 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>69</attachid> + <date>2011-07-14 16:05:00 +0000</date> + <delta_ts>2011-07-14 16:05:39 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>22256</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>167</bug_id> + + <creation_ts>2011-07-09 15:51:00 +0000</creation_ts> + <short_desc>User defined block size in TLC distributed mode</short_desc> + <delta_ts>2011-07-14 10:44:01 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>450</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-09 15:51:10 +0000</bug_when> + <thetext>A user may wish to define a custom block size for the amount of states that are assigned a worker in distributed mode.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>451</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-09 17:43:54 +0000</bug_when> + <thetext>Functor like API added for user defined code.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>452</commentid> + <comment_count>2</comment_count> + <attachid>62</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-09 17:43:56 +0000</bug_when> + <thetext>Created attachment 62 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>456</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-11 15:32:32 +0000</bug_when> + <thetext>Scriptable BlockSizeSelector (e.g. JavaScript) + +-Dtlc2.tool.distributed.selector.factory=tlc2.tool.distributed.selector.ScriptableBlockSelectorFactory +-Dtlc2.tool.distributed.selector.script=/path/to/ExampleScript.javascript + +---- ExampleScript.javascript ---- +function getBlocks(stateQueue, worker) { + var size = stateQueue.size(); + var blockSize = getBlockSize(size); + var states = stateQueue.sDequeue(blockSize); + return states; +} +function getBlockSize(size) { + var workerCount = tlcServer.getWorkerCount(); + var factor = 1.0 / workerCount; + return size * factor; +} +---- ExampleScript.javascript ----</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>467</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-14 10:44:00 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>468</commentid> + <comment_count>5</comment_count> + <attachid>67</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-14 10:44:01 +0000</bug_when> + <thetext>Created attachment 67 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>62</attachid> + <date>2011-07-09 17:43:00 +0000</date> + <delta_ts>2011-07-09 17:43:56 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>2911</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>67</attachid> + <date>2011-07-14 10:44:00 +0000</date> + <delta_ts>2011-07-14 10:44:01 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1682</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>168</bug_id> + + <creation_ts>2011-07-11 14:59:00 +0000</creation_ts> + <short_desc>Statistics in distributed mode show incorrect values</short_desc> + <delta_ts>2011-07-11 15:08:23 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>453</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-11 14:59:49 +0000</bug_when> + <thetext>StatesGenerated does not show correct value.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>454</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-11 15:08:22 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>455</commentid> + <comment_count>2</comment_count> + <attachid>63</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-11 15:08:23 +0000</bug_when> + <thetext>Created attachment 63 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>63</attachid> + <date>2011-07-11 15:08:00 +0000</date> + <delta_ts>2011-07-11 15:08:23 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>2939</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>169</bug_id> + + <creation_ts>2011-07-12 10:24:00 +0000</creation_ts> + <short_desc>States transfered might exceed RMI's maximum transferable size causing EOFException during unmarshalling</short_desc> + <delta_ts>2011-07-14 10:42:20 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>457</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-12 10:24:44 +0000</bug_when> + <thetext>In cases with few workers a single worker may get assigned to many states at once.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>465</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-14 10:42:19 +0000</bug_when> + <thetext>Fix released to HEAD (bug #171 makes it even less likely)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>466</commentid> + <comment_count>2</comment_count> + <attachid>66</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-14 10:42:20 +0000</bug_when> + <thetext>Created attachment 66 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>66</attachid> + <date>2011-07-14 10:42:00 +0000</date> + <delta_ts>2011-07-14 10:42:20 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1355</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>170</bug_id> + + <creation_ts>2011-07-12 20:02:00 +0000</creation_ts> + <short_desc>Handling disconnecting workers should not exit model checking</short_desc> + <delta_ts>2011-12-08 20:40:37 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA Tools</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>458</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-12 20:02:39 +0000</bug_when> + <thetext>If a workers disconnects for whatever reason during model checking, the server tries to: + +a) assign the corresponding server side thread to another (known) worker +b) exists the server if no other server are available + +a) causes twice the load on the worker as the worker will be busy handling its original thread already +b) is suboptimal if all workers just get disconnected for a short period of time. The server should simply wait for a new worker to connect. +TODO: find out if the server at least writes a checkpoint before it shuts down.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>730</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-08 20:40:37 +0000</bug_when> + <thetext>Fixed in HEAD</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>171</bug_id> + + <creation_ts>2011-07-13 11:16:00 +0000</creation_ts> + <short_desc>Assign block size (=new states) dynamically</short_desc> + <delta_ts>2011-07-14 09:39:33 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>459</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-13 11:16:50 +0000</bug_when> + <thetext>LL: "From the user's perspective, the queue is not the particular data structure that the server is maintaining. It's the set of states that have been found but not yet examined to find their successor states. Maintaining the exact size of this queue would require that the workers report the result of examining each state, which is clearly a bad idea. The obvious approximation is to define the queue to be the set of states in the server's queue plus all the states it has sent to the workers for which it has not yet received a reply. Since the queue size is a useful indicator of progress, we want it to report to the user the most accurate value we can without degrading performance. Accuracy is obtained by having the server send states to the workers in small batches. That's why we want to send states in the smallest batches that we can without degrading performance. I don't want the maximum number of states to send to be a user-settable property because the user will have no idea how to set it. The penalty for sending states in smaller batches is using more (shorter) messages to send the same amount of data. If we can get some not terribly inaccurate data on how much bandwidth overhead is added by each separate message (presumably, roughly the bandwidth taken by an empty message), then the server can dynamically determine the number of states to send per message from the average time it takes a worker to process a state and the amount of bandwidth overhead we're willing to add."</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>460</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-14 09:39:30 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>461</commentid> + <comment_count>2</comment_count> + <attachid>64</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-14 09:39:33 +0000</bug_when> + <thetext>Created attachment 64 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>64</attachid> + <date>2011-07-14 09:39:00 +0000</date> + <delta_ts>2011-07-14 09:39:33 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>293146</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>172</bug_id> + + <creation_ts>2011-07-14 10:23:00 +0000</creation_ts> + <short_desc>[UI] Use system locale to format start/end time and show duration as tooltip</short_desc> + <delta_ts>2011-07-14 10:28:29 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>462</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-14 10:23:46 +0000</bug_when> + <thetext>The "model checking results" tab does not format start or end time according to the systems current locale. Nor does it show the duration.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>463</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-14 10:28:28 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>464</commentid> + <comment_count>2</comment_count> + <attachid>65</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-14 10:28:29 +0000</bug_when> + <thetext>Created attachment 65 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>65</attachid> + <date>2011-07-14 10:28:00 +0000</date> + <delta_ts>2011-07-14 10:28:29 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>7259</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>173</bug_id> + + <creation_ts>2011-07-18 10:23:00 +0000</creation_ts> + <short_desc>Webserver used to serve jnlp webstart worker file should select port dynamically or fall back to alternative if 10996 is bound already</short_desc> + <delta_ts>2011-07-18 10:23:07 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>482</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-18 10:23:07 +0000</bug_when> + <thetext>The Jetty webserver used by the Toolbox to serve worker.jnlp (distributed TLC) binds to port 10996 (set by system property in .product file). This wouldn't be a problem since 10996 isn't likely to be bound by another program. Unless the other program is another instance of the Toolbox (running on the same machine) which happens e.g. if the user works on two specs simultaneously.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>174</bug_id> + + <creation_ts>2011-07-19 13:44:00 +0000</creation_ts> + <short_desc>[UI] Better report distributed model run</short_desc> + <delta_ts>2011-07-19 13:48:58 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>486</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-19 13:44:28 +0000</bug_when> + <thetext>A distributed model should report status on the model checker page</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>487</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-19 13:48:57 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>488</commentid> + <comment_count>2</comment_count> + <attachid>73</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-19 13:48:58 +0000</bug_when> + <thetext>Created attachment 73 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>73</attachid> + <date>2011-07-19 13:48:00 +0000</date> + <delta_ts>2011-07-19 13:48:58 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>10184</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>175</bug_id> + + <creation_ts>2011-07-19 21:20:00 +0000</creation_ts> + <short_desc>Deadlock in DiskStateQueue if subset of workers die (disconnect) during model run</short_desc> + <delta_ts>2011-08-11 09:10:10 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>REOPENED</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>489</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-19 21:20:09 +0000</bug_when> + <thetext>Deadlock in DiskStateQueue if subset of workers die (disconnect) during model run</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>556</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-03 16:02:38 +0000</bug_when> + <thetext>All TLCServerThreads are stuck with the following stack trace: + +Daemon System Thread [TLCServerThread-[rmi://coconut:33691]] (Suspended) + waiting for: tlc2.tool.queue.DiskStateQueue (id=79) + java.lang.Object.wait(long) line: not available [native method] + tlc2.tool.queue.DiskStateQueue(java.lang.Object).wait() line: 485 [local variables unavailable] + tlc2.tool.queue.DiskStateQueue(tlc2.tool.queue.StateQueue).isAvail() line: 129 + tlc2.tool.queue.DiskStateQueue(tlc2.tool.queue.StateQueue).sDequeue(int) line: 86 + tlc2.tool.distributed.selector.StatisticalBlockSelector(tlc2.tool.distributed.selector.BlockSelector).getBlocks(tlc2.tool.queue.StateQueue, tlc2.tool.distributed.TLCWorkerRMI) line: 47 + tlc2.tool.distributed.TLCServerThread.run() line: 88</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>557</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-03 17:31:57 +0000</bug_when> + <thetext>The root cause is in tlc2.tool.distributed.TLCServerThread.run(). If a remote worker disconnects and the TLCServerThread obj cannot be reassigned to a new worker, the states removed from the stateQueue, but for which the successor states have not yet computed, are never returned into the stateQueue.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>558</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-03 17:37:40 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>559</commentid> + <comment_count>4</comment_count> + <attachid>92</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-03 17:37:41 +0000</bug_when> + <thetext>Created attachment 92 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>560</commentid> + <comment_count>5</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-03 18:21:18 +0000</bug_when> + <thetext>Argh, not done yet.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>561</commentid> + <comment_count>6</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-03 18:46:57 +0000</bug_when> + <thetext>If tlc2.tool.distributed.TLCServerThread is in the waiting state (due to tlc2.tool.queue.StateQueue.isAvail()) and the remote worker disconnects, tlc2.TLCGlobals.getNumWorkers() is never decremented.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>562</commentid> + <comment_count>7</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-03 22:11:52 +0000</bug_when> + <thetext>To fix the issue noted in comment #6, subsequent remote workers will be reused to wake up stuck TLCServerThreads (in TLCServerThread) when they initially connect TLCServer. This implicitly assumes that there are remote workers (re-)connecting. +A more complete fix would be to spawn a timer thread that periodically checks remote workers and cleans up if a worker is gone.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>572</commentid> + <comment_count>8</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-11 09:10:09 +0000</bug_when> + <thetext>Implemented the timer thread mentioned in comment #7.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>573</commentid> + <comment_count>9</comment_count> + <attachid>94</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-11 09:10:10 +0000</bug_when> + <thetext>Created attachment 94 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>92</attachid> + <date>2011-08-03 17:37:00 +0000</date> + <delta_ts>2011-08-03 17:37:41 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1721</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>94</attachid> + <date>2011-08-11 09:10:00 +0000</date> + <delta_ts>2011-08-11 09:10:10 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>34441</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>176</bug_id> + + <creation_ts>2011-07-20 10:38:00 +0000</creation_ts> + <short_desc>NegativeArraySizeException with StateQueue</short_desc> + <delta_ts>2011-07-20 10:47:44 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>490</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-20 10:38:45 +0000</bug_when> + <thetext>java.lang.NegativeArraySizeException + at tlc2.tool.queue.StateQueue.sDequeue(StateQueue.java:78) + at tlc2.tool.distributed.selector.BlockSelector.getBlocks(BlockSelector.java:45) + at tlc2.tool.distributed.TLCServerThread.run(TLCServerThread.java:82)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>491</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-20 10:47:43 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>492</commentid> + <comment_count>2</comment_count> + <attachid>74</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-20 10:47:44 +0000</bug_when> + <thetext>Created attachment 74 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>74</attachid> + <date>2011-07-20 10:47:00 +0000</date> + <delta_ts>2011-07-20 10:47:44 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>6210</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>177</bug_id> + + <creation_ts>2011-07-20 10:51:00 +0000</creation_ts> + <short_desc>Diameter statistics/TLCTrace#getLevel() non deterministic with workers > 1 or with distributed model checking</short_desc> + <delta_ts>2011-08-03 14:36:56 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>lamport</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>493</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-20 10:51:53 +0000</bug_when> + <thetext>The diameter statistic is broken in distributed mode.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>494</commentid> + <comment_count>1</comment_count> + <attachid>75</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-20 10:52:50 +0000</bug_when> + <thetext>Created attachment 75 +screenshot of the model result page showing non-monoton diameter</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>500</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-20 12:38:03 +0000</bug_when> + <thetext>LL: "Here’s what I got running 12 workers on the same model. Note that it reports a diameter of 16 instead of the correct value of 19. However, the all the other final statistics are correct. I got the same result running 24 workers (12 machines)."</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>518</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-25 15:39:42 +0000</bug_when> + <thetext>Another example of non-monotonicity with 8 (local) workers: + +Finished computing initial states: 1 distinct state(s) generated. +TLC server at orange is ready (2011-07-25 15:24:45) +Progress(4) at 2011-07-25 15:25:45: 65 states generated, 15 distinct states found, 8 states left on queue. +Progress(10) at 2011-07-25 15:26:46: 13745 states generated, 300 distinct states found, 153 states left on queue. +Progress(14) at 2011-07-25 15:27:47: 26102 states generated, 526 distinct states found, 230 states left on queue. +Progress(14) at 2011-07-25 15:28:47: 161977 states generated, 1601 distinct states found, 605 states left on queue. +Progress(15) at 2011-07-25 15:29:47: 307949 states generated, 1724 distinct states found, 620 states left on queue. +Progress(18) at 2011-07-25 15:31:01: 444191 states generated, 2157 distinct states found, 642 states left on queue. +Progress(18) at 2011-07-25 15:32:07: 543780 states generated, 2398 distinct states found, 581 states left on queue. +Progress(18) at 2011-07-25 15:33:08: 694574 states generated, 2958 distinct states found, 500 states left on queue. +Progress(16) at 2011-07-25 15:34:09: 812710 states generated, 3333 distinct states found, 460 states left on queue. +Progress(20) at 2011-07-25 15:35:22: 970293 states generated, 3562 distinct states found, 0 states left on queue.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>522</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-26 16:51:44 +0000</bug_when> + <thetext>The same behavior can be observed on a non distributed model checking run (with checkpointing activated): + +Progress(10) at 2011-07-26 16:45:20: 3152 states generated, 1170 distinct states found, 640 states left on queue. +Progress(18) at 2011-07-26 16:46:20: 302525 states generated, 65095 distinct states found, 14670 states left on queue. +Progress(18) at 2011-07-26 16:47:20: 631070 states generated, 124622 distinct states found, 19439 states left on queue. +Progress(26) at 2011-07-26 16:48:21: 950979 states generated, 176805 distinct states found, 18304 states left on queue. +Progress(24) at 2011-07-26 16:49:21: 1273683 states generated, 224880 distinct states found, 12596 states left on queue. +The depth of the complete state graph search is 43.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>525</commentid> + <comment_count>5</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-27 14:10:07 +0000</bug_when> + <thetext>Enabling checkpoints does not appear to be causing a broken trace, but might increase its likelihood. At least disabling checkpoints in distributed mode has no effect on the occurrence of a broken trace.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>526</commentid> + <comment_count>6</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-27 15:29:08 +0000</bug_when> + <thetext>Two questions come up... + +a) TLCTrace#getTrace() must under no condition violate the monotonicity? +b) Two states A and B with different fingerprints do not share the same TLCState#uid?</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>527</commentid> + <comment_count>7</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-28 15:15:08 +0000</bug_when> + <thetext>TLCTrace data structure does not work to contain the distinct state tree in parallel mode (either multiple threads or workers). In parallel mode TLCTrace#lastPtr (last state written to file) -logically the tail of TLCTrace - does not reflect the longest path in the distinct state tree. This is due to the case that TLC generally does not explorer the distinct state tree breadth-first wise in parallel mode. If TLCTrace#getLevel() produces correct results in depth-first search even in single threaded mode is questionable. + +The trace itself (used for trace exploration if an invariant is violated) is, in all modes, correctly displayed as it is constructed starting from the _known_ violating (end-)state. It does not use TLCTrace#lastPtr. However, TLC does not necessarily find the shortest trace path in parallel mode. + +On a technical side: TLCTrace doesn't do paging. It is therefore growing indefinitely, posing a technical limitation on the maximum amount of states depending on the file system max file size limit. It is however part of checkpointing.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>541</commentid> + <comment_count>8</comment_count> + <attachid>87</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-02 10:32:10 +0000</bug_when> + <thetext>Created attachment 87 +Adds a depth field to _each_ state to store the states height in the state tree.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>542</commentid> + <comment_count>9</comment_count> + <attachid>88</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-02 10:35:01 +0000</bug_when> + <thetext>Created attachment 88 +A state tree of height 8 where TLCTrace#getLevel() correctly reports the level.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>543</commentid> + <comment_count>10</comment_count> + <attachid>89</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-02 10:36:46 +0000</bug_when> + <thetext>Created attachment 89 +A state tree of height 7 where TLCTrace#getLevel() incorrectly reports the level to be 5. + +Both screenshots were created with the same spec/model (just different invocations of _non-distributed_ TLC with 4 workers on a dual core machine.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>547</commentid> + <comment_count>11</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-03 10:59:56 +0000</bug_when> + <thetext>Added TLCTrace#getLevelForReporting() to assure level reported monotonically increments</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>555</commentid> + <comment_count>12</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-03 14:36:56 +0000</bug_when> + <thetext>tlc2.tool.ModelChecker.runTLCContinueDoing(int, int) uses the level to determine its isDone state (control flow). It has to be checked, +what the effects of tlc2.tool.TLCTrace.getLevel() WRT to control flow in runTLCContinueDoing are.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>75</attachid> + <date>2011-07-20 10:52:00 +0000</date> + <delta_ts>2011-07-20 10:52:50 +0000</delta_ts> + <desc>screenshot of the model result page showing non-monoton diameter</desc> + <filename>image001.png</filename> + <type>image/png</type> + <size>96466</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="1" isprivate="0"> + <attachid>87</attachid> + <date>2011-08-02 10:32:00 +0000</date> + <delta_ts>2011-08-02 10:32:10 +0000</delta_ts> + <desc>Adds a depth field to _each_ state to store the states height in the state tree.</desc> + <filename>bug177-stateWithDepth.txt</filename> + <type>text/plain</type> + <size>2606</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>88</attachid> + <date>2011-08-02 10:35:00 +0000</date> + <delta_ts>2011-08-02 10:35:01 +0000</delta_ts> + <desc>A state tree of height 8 where TLCTrace#getLevel() correctly reports the level.</desc> + <filename>Level8.png</filename> + <type>image/png</type> + <size>72882</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>89</attachid> + <date>2011-08-02 10:36:00 +0000</date> + <delta_ts>2011-08-02 10:36:46 +0000</delta_ts> + <desc>A state tree of height 7 where TLCTrace#getLevel() incorrectly reports the level to be 5.</desc> + <filename>Level5-7.png</filename> + <type>image/png</type> + <size>68396</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>178</bug_id> + + <creation_ts>2011-07-20 10:54:00 +0000</creation_ts> + <short_desc>TLCServer cancellation or crash in distributed mode does not kill/exit remote TLCWorkers</short_desc> + <delta_ts>2011-07-26 12:45:43 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>495</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-20 10:54:38 +0000</bug_when> + <thetext>LL: "I’ve found that hitting “cancel” on a distributed TLC job does not kill the worker processes. They appear to finish working on the states they’ve been given and then sit waiting for something to happen."</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>520</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-26 12:45:39 +0000</bug_when> + <thetext>Fix released to HEAD + +TLCWorker need to handle a crashed server -> Periodically check server aliveness (keep alive timer) +Cancellation is a variant of a server crash -> Handled by TLCWorker keep alive timer +Additionally try to eagerly exit workers from inside a server VM shutdown hook.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>521</commentid> + <comment_count>2</comment_count> + <attachid>82</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-26 12:45:43 +0000</bug_when> + <thetext>Created attachment 82 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>82</attachid> + <date>2011-07-26 12:45:00 +0000</date> + <delta_ts>2011-07-26 12:45:43 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>3605</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>179</bug_id> + + <creation_ts>2011-07-20 10:56:00 +0000</creation_ts> + <short_desc>Out of memory exception in TLCServer with many workers</short_desc> + <delta_ts>2011-08-03 14:23:27 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>lamport</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>496</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-20 10:56:58 +0000</bug_when> + <thetext>Exception in thread "RMI TCP Connection(idle)" java.lang.OutOfMemoryError: Java heap space + at java.lang.String.valueOf(String.java:2840) + at java.lang.Thread.getName(Thread.java:1061) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:644) + at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) + at java.lang.Thread.run(Thread.java:619) + +Java heap space +java.lang.OutOfMemoryError: Java heap space + at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1943) + at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) + at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) + at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) + at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667) + at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323) + at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) + at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) + at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) + at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) + at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) + at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) + at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) + at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) + at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667) + at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323) + at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) + at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) + at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) + at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) + at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) + at tlc2.tool.TLCStateVec.readObject(TLCStateVec.java:55) + at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974) + at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849) + at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) + at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) + at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667) + at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323) + at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>553</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-03 14:22:18 +0000</bug_when> + <thetext>The user has the chance to increase the heap size on the main model editor page. The default for non-distributed mode is set to 500mb. Maybe this default is too low for distributed mode and should be raised accordingly.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>554</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-03 14:23:27 +0000</bug_when> + <thetext>Adding Leslie for input on comment #1</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>180</bug_id> + + <creation_ts>2011-07-20 15:45:00 +0000</creation_ts> + <short_desc>TLCServer exists immediately reporting success when multiple workers connect simultaneously</short_desc> + <delta_ts>2011-07-21 09:17:35 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>critical</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>501</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-20 15:45:33 +0000</bug_when> + <thetext>When multiple workers start at once, the first one will empty the state queue causing other workers to signal the server that all work is done. Thus synchronization has to include outstanding results.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>502</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-20 19:26:08 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>503</commentid> + <comment_count>2</comment_count> + <attachid>77</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-20 19:26:10 +0000</bug_when> + <thetext>Created attachment 77 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>504</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-21 09:17:33 +0000</bug_when> + <thetext>Turns out this is a regression caused by bug #176, thus reverting.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>505</commentid> + <comment_count>4</comment_count> + <attachid>78</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-21 09:17:35 +0000</bug_when> + <thetext>Created attachment 78 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>77</attachid> + <date>2011-07-20 19:26:00 +0000</date> + <delta_ts>2011-07-20 19:26:10 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>3045</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>78</attachid> + <date>2011-07-21 09:17:00 +0000</date> + <delta_ts>2011-07-21 09:17:35 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>20171</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>181</bug_id> + + <creation_ts>2011-07-21 09:59:00 +0000</creation_ts> + <short_desc>TLC error messages not shown in Toolbox</short_desc> + <delta_ts>2011-07-25 12:39:15 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + <dependson>182</dependson> + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>506</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-21 09:59:11 +0000</bug_when> + <thetext>LL: "I have not been able to get the Toolbox to display any TLC error message in the place in the TLC Errors window where it’s supposed to. For example, the TLC output below causes the Toolbox to raise an Error window with no message. Also, if an invariant is violated, the Toolbox displays the trace but doesn’t say that the invariant is violated."</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>507</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-21 09:59:22 +0000</bug_when> + <thetext>@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.03 of 20 July 2011 +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running in Model-Checking mode. +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file MC.tla +Parsing file Test.tla +Parsing file C:\lamport\tla\newtools\tla2-inria\tlatools\class\tla2sany\StandardModules\TLC.tla +Parsing file C:\lamport\tla\newtools\tla2-inria\tlatools\class\tla2sany\StandardModules\Naturals.tla +Parsing file C:\lamport\tla\newtools\tla2-inria\tlatools\class\tla2sany\StandardModules\Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Sequences +Semantic processing of module TLC +Semantic processing of module Test +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2011-07-20 14:48:02) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2105:1 @!@!@ +Evaluating assumption line 4, col 8 to line 4, col 36 of module Test failed. +!@!@STARTMSG 2154:0 @!@!@ +Attempted to apply the operator overridden by the Java method +public static tlc2.value.IntValue tlc2.module.Naturals.Plus(tlc2.value.IntValue,tlc2.value.IntValue), +but it produced the following error: +@!@!@STARTMSG 2178:0 @!@!@ +Overflow when computing 2147400000+2147400000 +@!@!@ENDMSG 2178 @!@!@ +@!@!@ENDMSG 2154 @!@!@ +@!@!@ENDMSG 2105 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished. (2011-07-20 14:48:02) +@!@!@ENDMSG 2186 @!@!@</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>513</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-25 12:39:15 +0000</bug_when> + <thetext>Fixed in HEAD</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>182</bug_id> + + <creation_ts>2011-07-21 14:16:00 +0000</creation_ts> + <short_desc>TLC user output not shown in Toolbox</short_desc> + <delta_ts>2011-07-25 12:39:15 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + <blocked>181</blocked> + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>508</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-21 14:16:32 +0000</bug_when> + <thetext>-------------------------------- MODULE Test -------------------------------- +EXTENDS TLC +ASSUME PrintT(99) +================== + +Note the TLC output lines + 99 + <<"$!@$!@$!@$!@$!", 999>> + + +the first being produced by the PrintT statement, the second by the 999 in the “Evaluate Constant Expression” field of the Model Checking Results page. Neither of them appears where they belong on the Results page.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>509</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-21 14:20:31 +0000</bug_when> + <thetext>Fix released to HEAD + +Enhancement bug #151 unveiled a one-offset bug in TagBasedTLCAnalyzer.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>510</commentid> + <comment_count>2</comment_count> + <attachid>79</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-21 14:20:32 +0000</bug_when> + <thetext>Created attachment 79 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>79</attachid> + <date>2011-07-21 14:20:00 +0000</date> + <delta_ts>2011-07-21 14:20:32 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>5994</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>183</bug_id> + + <creation_ts>2011-07-25 11:22:00 +0000</creation_ts> + <short_desc>Startup exception due to invalid thread access</short_desc> + <delta_ts>2011-07-26 09:33:28 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>511</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-25 11:22:04 +0000</bug_when> + <thetext>LL: "I wasn't doing anything unusual when the Toolbox got into this state. Here's the console output when I restarted the Toolbox. The last two exceptions are apparently caused by the Toolbox trying to re-open the spec that was last open. They are what I get when I try to open any spec." + +!ENTRY org.eclipse.ui.workbench 4 0 2011-07-24 14:03:47.583 +!MESSAGE Unable to create view ID org.lamport.tla.toolbox.tool.prover.ui.rejectedObligations: Invalid thread access +!STACK 0 +org.eclipse.swt.SWTException: Invalid thread access + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.SWT.error(SWT.java:3770) + at org.eclipse.swt.widgets.Widget.error(Widget.java:463) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:355) + at org.eclipse.swt.widgets.Widget.checkParent(Widget.java:275) + at org.eclipse.swt.widgets.Widget.<init>(Widget.java:146) + at org.eclipse.swt.widgets.Control.<init>(Control.java:105) + at org.eclipse.swt.widgets.Scrollable.<init>(Scrollable.java:75) + at org.eclipse.swt.widgets.Composite.<init>(Composite.java:95) + at org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:362) + at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:226) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.ViewReference.getView(ViewReference.java:195) + at org.eclipse.ui.internal.WorkbenchPage.findView(WorkbenchPage.java:1907) + at org.lamport.tla.toolbox.util.UIHelper.findView(UIHelper.java:199) + at org.lamport.tla.toolbox.tool.prover.ui.view.ObligationsView.refreshObligationView(ObligationsView.java:197) + at org.lamport.tla.toolbox.tool.prover.ui.util.ProverSpecLifecycleParticipant.eventOccured(ProverSpecLifecycleParticipant.java:52) + at org.lamport.tla.toolbox.util.SpecLifecycleManager$1.invoke(SpecLifecycleManager.java:31) + at org.lamport.tla.toolbox.util.SpecLifecycleManager.sendEventWithVeto(SpecLifecycleManager.java:87) + at org.lamport.tla.toolbox.util.SpecLifecycleManager.sendEvent(SpecLifecycleManager.java:68) + at org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.setSpecLoaded(WorkspaceSpecManager.java:228) + at org.lamport.tla.toolbox.ui.handler.OpenSpecHandler$1.run(OpenSpecHandler.java:69) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55) + +!ENTRY org.eclipse.core.jobs 4 2 2011-07-24 14:03:47.615 +!MESSAGE An internal error occurred during: "OpenSpecHandler is parsing spec...". +!STACK 0 +org.eclipse.swt.SWTException: Invalid thread access + at org.eclipse.swt.SWT.error(SWT.java:3884) + at org.eclipse.swt.SWT.error(SWT.java:3799) + at org.eclipse.swt.SWT.error(SWT.java:3770) + at org.eclipse.swt.widgets.Widget.error(Widget.java:463) + at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:355) + at org.eclipse.swt.widgets.Widget.checkParent(Widget.java:275) + at org.eclipse.swt.widgets.Widget.<init>(Widget.java:146) + at org.eclipse.swt.widgets.Control.<init>(Control.java:105) + at org.eclipse.swt.widgets.Scrollable.<init>(Scrollable.java:75) + at org.eclipse.swt.widgets.Composite.<init>(Composite.java:95) + at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:270) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.ViewReference.getView(ViewReference.java:195) + at org.eclipse.ui.internal.WorkbenchPage.findView(WorkbenchPage.java:1907) + at org.lamport.tla.toolbox.util.UIHelper.findView(UIHelper.java:199) + at org.lamport.tla.toolbox.tool.prover.ui.view.ObligationsView.refreshObligationView(ObligationsView.java:197) + at org.lamport.tla.toolbox.tool.prover.ui.util.ProverSpecLifecycleParticipant.eventOccured(ProverSpecLifecycleParticipant.java:52) + at org.lamport.tla.toolbox.util.SpecLifecycleManager$1.invoke(SpecLifecycleManager.java:31) + at org.lamport.tla.toolbox.util.SpecLifecycleManager.sendEventWithVeto(SpecLifecycleManager.java:87) + at org.lamport.tla.toolbox.util.SpecLifecycleManager.sendEvent(SpecLifecycleManager.java:68) + at org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.setSpecLoaded(WorkspaceSpecManager.java:228) + at org.lamport.tla.toolbox.ui.handler.OpenSpecHandler$1.run(OpenSpecHandler.java:69) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>512</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-25 11:23:13 +0000</bug_when> + <thetext>LL: "Here's the recipe for reproducing the problem. + +Create a new spec and enter + +THEOREM FALSE +OBVIOUS + +Run the prover on the theorem. (Put the cursor on the theorem and type Ctl+g Ctl+g.) This will raise an error window. Close the spec and try to reopen it. + +--- + +I forgot to mention that the problem happens only if I close the spec with the prover's error window open. If I close that window before closing the spec, there seems to be no problem."</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>514</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-25 13:13:02 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>515</commentid> + <comment_count>3</comment_count> + <attachid>80</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-25 13:13:03 +0000</bug_when> + <thetext>Created attachment 80 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>519</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-26 09:33:28 +0000</bug_when> + <thetext>The root cause for this kind of exceptions is missing synchronization between daemon/backend and the UI thread. A backend thread must not access the UI resources outside of the UI thread [0]. +In this specific case, the backend recreated the prover UI at startup, but failed to join the UI thread to do so. + +[0] http://www.eclipse.org/swt/faq.php#uithread</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>80</attachid> + <date>2011-07-25 13:13:00 +0000</date> + <delta_ts>2011-07-25 13:13:03 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>2847</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>184</bug_id> + + <creation_ts>2011-07-27 00:46:00 +0000</creation_ts> + <short_desc>Trying to open a TLC model while the prover is running crashes the Toolbox</short_desc> + <delta_ts>2014-01-27 22:29:50 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Windows 7</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>523</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-07-27 00:46:38 +0000</bug_when> + <thetext>Twice I tried to open a TLC model while the Toolbox was running a TLAPS proof, and twice the Toolbox stopped responding. It would be fine for the Toolbox to disable the TLC Model Checker menu items while TLAPS is being run, but crashing is inelegant.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>524</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-27 13:54:53 +0000</bug_when> + <thetext>I fail to reproduce this on either Win, Mac or Linux. Leslie please outline the steps and attach the corresponding spec/model.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>1006</commentid> + <comment_count>2</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2014-01-27 22:29:50 +0000</bug_when> + <thetext>This is a test comment.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>185</bug_id> + + <creation_ts>2011-07-28 19:32:00 +0000</creation_ts> + <short_desc>TLCServer does not accept -checkpoint parameter</short_desc> + <delta_ts>2011-07-28 19:35:22 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>528</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-28 19:32:51 +0000</bug_when> + <thetext>TLCServer/TLCApp does not know about the -checkpoint parameter and thus only supports checkpointing every 30 minutes.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>529</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-28 19:35:21 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>530</commentid> + <comment_count>2</comment_count> + <attachid>83</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-28 19:35:22 +0000</bug_when> + <thetext>Created attachment 83 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>83</attachid> + <date>2011-07-28 19:35:00 +0000</date> + <delta_ts>2011-07-28 19:35:22 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>2544</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>186</bug_id> + + <creation_ts>2011-07-29 09:32:00 +0000</creation_ts> + <short_desc>[Build] No source enconding set causing Maven to complain about build being platform dependent</short_desc> + <delta_ts>2011-07-29 09:36:17 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>531</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-29 09:32:06 +0000</bug_when> + <thetext>http://maven.apache.org/general.html#encoding-warning</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>532</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-07-29 09:36:17 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>187</bug_id> + + <creation_ts>2011-08-01 11:33:00 +0000</creation_ts> + <short_desc>Toolbox ignores states/ subfolder used by TLCServer to store checkpoint data</short_desc> + <delta_ts>2011-08-01 12:05:31 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>533</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-01 11:33:10 +0000</bug_when> + <thetext>Checkpoint data written by distributed TLC cannot be selected in Toolbox (unless manually copied from subfolder).</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>535</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-01 12:05:30 +0000</bug_when> + <thetext>Fix released to HEAD + +The "-metadir" parameter has been added to TLCServer to better comply with TLC non-distributed command line arguments. This allows the Toolbox to pass a custom path to the nested process.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>536</commentid> + <comment_count>2</comment_count> + <attachid>84</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-01 12:05:31 +0000</bug_when> + <thetext>Created attachment 84 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>84</attachid> + <date>2011-08-01 12:05:00 +0000</date> + <delta_ts>2011-08-01 12:05:31 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>5434</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>188</bug_id> + + <creation_ts>2011-08-01 12:03:00 +0000</creation_ts> + <short_desc>Distributed TLC incorrectly reports states recovered</short_desc> + <delta_ts>2011-08-01 13:03:34 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>534</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-01 12:03:47 +0000</bug_when> + <thetext>Recovering from a checkpoint yields the following output: + +@!@!@STARTMSG 2198:0 @!@!@ +Recovery completed. -- Recovery completed. 157308 distinct states found. 18093 states on queue. states examined. %2% states on queue. +@!@!@ENDMSG 2198 @!@!@</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>537</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-01 13:03:31 +0000</bug_when> + <thetext>Fix released to HEAD +(changed tlc2.output.MP.printMessage(int, String) parameters)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>538</commentid> + <comment_count>2</comment_count> + <attachid>85</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-01 13:03:34 +0000</bug_when> + <thetext>Created attachment 85 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>85</attachid> + <date>2011-08-01 13:03:00 +0000</date> + <delta_ts>2011-08-01 13:03:34 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>27948</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>189</bug_id> + + <creation_ts>2011-08-02 13:33:00 +0000</creation_ts> + <short_desc>Run user script prior to TLC model checker</short_desc> + <delta_ts>2011-08-03 12:03:31 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>544</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-02 13:33:35 +0000</bug_when> + <thetext>The model checker should support running a custom user script prior to launching the model checker. This is especially useful in distributed mode, where remote workers have to be started.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>545</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-03 08:36:32 +0000</bug_when> + <thetext>context/changes for UI part: +An additional editable input text box with an optional file chooser dialog</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>546</commentid> + <comment_count>2</comment_count> + <attachid>90</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-03 08:36:34 +0000</bug_when> + <thetext>Created attachment 90 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>549</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-03 12:01:23 +0000</bug_when> + <thetext>Some random thoughts... + +- Catchy name for "pre-flight" script (current working title)? +- Check box to easily deactivate startup script (e.g. if remote workers are already running after TLCServer startup crash) +- Sequential vs. parallel execution of script? +-- Check script return value in sequential execution prior to launching TLCServer?</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>550</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-03 12:03:31 +0000</bug_when> + <thetext>Both jobs org.lamport.tla.toolbox.tool.prover.job.ProverJob as well as the new ScriptrunnerJob need a shell interpreter to execute. Thus, a common base class should be refactored out of ProverJob. +Btw. ProverJob makes the implicit assumption that Cygwin is installed to the C: drive which is not necessarily the case.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>90</attachid> + <date>2011-08-03 08:36:00 +0000</date> + <delta_ts>2011-08-03 08:36:34 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>5949</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>190</bug_id> + + <creation_ts>2011-08-03 11:15:00 +0000</creation_ts> + <short_desc>Startup NPE in TokenSpec.findTokenSpecs()</short_desc> + <delta_ts>2011-08-03 14:14:07 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>Windows Vista</op_sys> + <bug_status>REOPENED</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>548</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-03 11:15:14 +0000</bug_when> + <thetext>!ENTRY org.eclipse.ui 4 0 2011-07-28 15:47:24.765 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NullPointerException + at org.lamport.tla.toolbox.editor.basic.tla.TokenSpec.findTokenSpecs(TokenSpec.java:287) + at org.lamport.tla.toolbox.editor.basic.tla.TokenSpec.findCurrentTokenSpec(TokenSpec.java:134) + at org.lamport.tla.toolbox.editor.basic.tla.TLAHyperlinkDetector.detectHyperlinks(TLAHyperlinkDetector.java:97) + at org.eclipse.ui.texteditor.HyperlinkDetectorRegistry$HyperlinkDetectorDelegate.detectHyperlinks(HyperlinkDetectorRegistry.java:80) + at org.eclipse.jface.text.hyperlink.HyperlinkManager.findHyperlinks(HyperlinkManager.java:263) + at org.eclipse.jface.text.hyperlink.HyperlinkManager.mouseMove(HyperlinkManager.java:439) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:199) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3910) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3503) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) + at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) + at org.eclipse.equinox.launcher.Main.run(Main.java:1311) + at org.eclipse.equinox.launcher.Main.main(Main.java:1287)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>551</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-03 14:13:52 +0000</bug_when> + <thetext> Added null check in org.lamport.tla.toolbox.editor.basic.tla.TokenSpec.findTokenSpecs(String, int) to prevent NPE from happening (does not fix the root cause). Leaving bug open until root cause is found though.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>552</commentid> + <comment_count>2</comment_count> + <attachid>91</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-03 14:13:54 +0000</bug_when> + <thetext>Created attachment 91 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>91</attachid> + <date>2011-08-03 14:13:00 +0000</date> + <delta_ts>2011-08-03 14:13:54 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>43240</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>191</bug_id> + + <creation_ts>2011-08-05 08:06:00 +0000</creation_ts> + <short_desc>Remove useless preferences from preference page</short_desc> + <delta_ts>2011-08-08 14:24:57 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>565</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-05 08:06:50 +0000</bug_when> + <thetext>These preferences are currently useless/meaningless in the scope of the Toolbox: + +General > Compare/Patch +General > Appearance > Colors and Fonts > Text Compare</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>569</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-05 13:02:22 +0000</bug_when> + <thetext>Fixed by implementing a filter in org.lamport.tla.toolbox.ApplicationWorkbenchWindowAdvisor.postWindowOpen(). A much better fix is to completely exclude bundle "org.eclipse.compare". However, this appears to be impractical with current Maven capabilities.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>570</commentid> + <comment_count>2</comment_count> + <attachid>93</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-05 13:02:26 +0000</bug_when> + <thetext>Created attachment 93 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>571</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-08 14:24:57 +0000</bug_when> + <thetext>After some more investigation it turns out that: + +a) "org.eclipse.compare" is required by the update manager and thus cannot be excluded +b) "General > Compare/Patch" can be excluded with the method mentioned in comment #1 +c) "General > Appearance > Colors and Fonts > Text compare" cannot be excluded easily. The only viable solution would be "Equinox Transforms" (http://wiki.eclipse.org/Equinox_Transforms). Opening that can of worms isn't worth it though.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>93</attachid> + <date>2011-08-05 13:02:00 +0000</date> + <delta_ts>2011-08-05 13:02:26 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1318</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>192</bug_id> + + <creation_ts>2011-08-05 10:06:00 +0000</creation_ts> + <short_desc>Add distributed TLC documentation to HTML Toolbox help</short_desc> + <delta_ts>2011-10-17 14:10:54 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + <blocked>157</blocked> + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>566</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-05 10:06:35 +0000</bug_when> + <thetext>Add distributed TLC documentation to HTML Toolbox help</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>680</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-17 14:10:54 +0000</bug_when> + <thetext>Done a while ago</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>193</bug_id> + + <creation_ts>2011-08-05 10:08:00 +0000</creation_ts> + <short_desc>Add Toolbox update site to support updating a Toolbox to the next release</short_desc> + <delta_ts>2011-08-16 12:23:12 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + <blocked>157</blocked> + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>567</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-05 10:08:24 +0000</bug_when> + <thetext>Update site location has be decided on prior to the next release. The update site doesn't have to be created though.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>585</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-16 10:54:25 +0000</bug_when> + <thetext>- Added check for updates command to help menu +- Added ...p2.inf, which defines the location of the http://lamport.org/tlatoolbox update site +- Fixed feature license, description and label</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>586</commentid> + <comment_count>2</comment_count> + <attachid>99</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-16 10:54:28 +0000</bug_when> + <thetext>Created attachment 99 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>588</commentid> + <comment_count>3</comment_count> + <attachid>100</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-16 12:23:02 +0000</bug_when> + <thetext>Created attachment 100 +To prevent an error popping up (help > check for updates), due to missing p2 meta-data at http://lamport.org/tlatoolbox, the attached content.xml dummy file should be placed there.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>589</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-16 12:23:12 +0000</bug_when> + <thetext>Fix released to HEAD.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>99</attachid> + <date>2011-08-16 10:54:00 +0000</date> + <delta_ts>2011-08-16 10:54:28 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>23808</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>100</attachid> + <date>2011-08-16 12:23:00 +0000</date> + <delta_ts>2011-08-16 12:23:02 +0000</delta_ts> + <desc>To prevent an error popping up (help > check for updates), due to missing p2 meta-data at http://lamport.org/tlatoolbox, the attached content.xml dummy file should be placed there.</desc> + <filename>content.xml</filename> + <type>application/xml</type> + <size>247</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>194</bug_id> + + <creation_ts>2011-08-05 10:12:00 +0000</creation_ts> + <short_desc>Trusted SSL certificate needed to sign bundles for Java webstart</short_desc> + <delta_ts>2011-10-17 14:11:08 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>568</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-05 10:12:19 +0000</bug_when> + <thetext>In order to remotely execute the tla2tools.jar with Java webstart via e.g. psexec, a trusted SSL certificate is needed. A self signed certificate causes a prompt to be shown, that requires the user to accept the self signed certificate. While this is acceptable for small machine numbers, it causes notable work with large numbers of machine. A user has to connect to each machine and accept the certificate. + +An alternative would be to manually add the self signed certificate to the trust store of each machine (which might be better supported by remote management/administration tools).</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>195</bug_id> + + <creation_ts>2011-08-11 17:14:00 +0000</creation_ts> + <short_desc>startup deadlock while determining spec size</short_desc> + <delta_ts>2012-01-25 22:14:18 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + <dependson>260</dependson> + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>574</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-11 17:14:31 +0000</bug_when> + <thetext>Hi Markus, + +I finally caught the Toolbox hanging when I started it in debug mode. I believe I was running it from the configuration I made from the ...product.product.product launch file. Appended below are the Eclipse console log, the full stack trace, and the contents of the .log file. I tried starting the same Eclipse four more times, twice in debug mode and twice normally, and it hung each time. On the fifth try (not in debug mode) it started up. Once again, the spec it was trying to open was the last "footFileName" it had printed before it hung. + +Leslie + +================ + +Here's the Eclipse console log: + + +osgi> !SESSION 2011-08-10 15:06:46.559 ----------------------------------------------- +eclipse.buildId=unknown +java.version=1.6.0_21 +java.vendor=Sun Microsystems Inc. +BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US +Framework arguments: -product org.lamport.tla.toolbox.product.standalone.product +Command-line arguments: -product org.lamport.tla.toolbox.product.standalone.product -data C:\lamport\tla\newtools\tla2-inria/../runtime-org.lamport.tla.toolbox.product.product.product -dev file:C:/lamport/tla/newtools/tla2-inria/.metadata/.plugins/org.eclipse.pde.core/org.lamport.tla.toolbox.product.product.product/dev.properties -os win32 -ws win32 -arch x86_64 -console -consolelog + +!ENTRY org.eclipse.osgi 2 0 2011-08-10 15:06:48.502 +!MESSAGE The following is a complete list of bundles which are not resolved, see the prior log entry for the root cause if it exists: +!SUBENTRY 1 org.eclipse.osgi 2 0 2011-08-10 15:06:48.502 +!MESSAGE Bundle org.eclipse.equinox.security.win32.x86_1.0.100.v20090520-1800 [23] was not resolved. +!SUBENTRY 2 org.eclipse.equinox.security.win32.x86 2 0 2011-08-10 15:06:48.502 +!MESSAGE Platform filter did not match: (& (osgi.os=win32) (osgi.arch=x86)) +!SUBENTRY 1 org.eclipse.osgi 2 0 2011-08-10 15:06:48.503 +!MESSAGE Bundle org.eclipse.core.resources.win32.x86_3.5.0.v20081020 [39] was not resolved. +!SUBENTRY 2 org.eclipse.core.resources.win32.x86 2 0 2011-08-10 15:06:48.503 +!MESSAGE Platform filter did not match: (& (osgi.os=win32) (osgi.arch=x86)) +!SUBENTRY 1 org.eclipse.osgi 2 0 2011-08-10 15:06:48.503 +!MESSAGE Bundle org.eclipse.swt.win32.win32.x86_3.5.2.v3557f [71] was not resolved. +!SUBENTRY 2 org.eclipse.swt.win32.win32.x86 2 0 2011-08-10 15:06:48.503 +!MESSAGE Platform filter did not match: (& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86)) +!SUBENTRY 1 org.eclipse.osgi 2 0 2011-08-10 15:06:48.504 +!MESSAGE Bundle org.eclipse.core.filesystem.win32.x86_1.1.0.v20080604-1400 [92] was not resolved. +!SUBENTRY 2 org.eclipse.core.filesystem.win32.x86 2 0 2011-08-10 15:06:48.504 +!MESSAGE Platform filter did not match: (& (osgi.os=win32) (osgi.arch=x86)) +TLA+ Toolbox started without arguments. + +!ENTRY org.eclipse.core.resources 2 10035 2011-08-10 15:06:48.829 +!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes. +footFileName = C:\lamport\books\hyper-tla\specs\euclid\PCalEuclid.tla +footFileName = C:\lamport\books\hyper-tla\specs\euclid\PCalEuclid_question.tla +footFileName = C:\lamport\papers\paxos\simple\byztla\PConProof.tla + +====================================== +Here's the full stack trace: + + +org.lamport.tla.toolbox.product.product.product [Eclipse Application] + org.eclipse.equinox.launcher.Main at localhost:58677 (Suspended) + Daemon System Thread [Attach Listener] (Suspended) + Daemon System Thread [Signal Dispatcher] (Suspended) + Daemon System Thread [Finalizer] (Suspended) + waiting for: ReferenceQueue$Lock (id=46) + Object.wait(long) line: not available [native method] + ReferenceQueue<T>.remove(long) line: 118 + ReferenceQueue<T>.remove() line: 134 + Finalizer$FinalizerThread.run() line: 159 + Daemon System Thread [Reference Handler] (Suspended) + waiting for: Reference$Lock (id=47) + Object.wait(long) line: not available [native method] + Reference$Lock(Object).wait() line: 485 + Reference$ReferenceHandler.run() line: 116 + Thread [main] (Suspended) + owns: Class<T> (org.lamport.tla.toolbox.Activator) (id=49) + waited by: Thread [Worker-2] (Suspended) + owns: RunnableLock (id=50) + waited by: Thread [Thread-6] (Suspended) + owns: RunnableLock (id=51) + waited by: Thread [Thread-5] (Suspended) + waiting for: Object (id=48) + Object.wait(long) line: not available [native method] + ThreadJob.joinRun(IProgressMonitor) line: 187 + ImplicitJobs.begin(ISchedulingRule, IProgressMonitor, boolean) line: 87 + JobManager.beginRule(ISchedulingRule, IProgressMonitor) line: 232 + WorkManager.checkIn(ISchedulingRule, IProgressMonitor) line: 117 + Workspace.prepareOperation(ISchedulingRule, IProgressMonitor) line: 1747 + Project.touch(IProgressMonitor) line: 1107 + Spec.setLastModified() line: 194 + WorkspaceSpecManager.setSpecLoaded(Spec) line: 235 + WorkspaceSpecManager.<init>() line: 97 + Activator.getSpecManager() line: 303 + SizeControlContribution.updateSize() line: 90 + SizeControlContribution.createControl(Composite) line: 78 + SizeControlContribution(ControlContribution).fill(ToolBar, int) line: 97 + ToolBarManager.update(boolean) line: 353 + ToolBarManager.createControl(Composite) line: 111 + TrimContributionManager$ToolBarTrimProxy.dock(int) line: 88 + TrimContributionManager.update(boolean, boolean) line: 232 + WorkbenchWindow.updateLayoutDataForContents() line: 3785 + WorkbenchWindow.setLayoutDataForContents() line: 3796 + WorkbenchWindow.createDefaultContents(Shell) line: 1114 + WorkbenchWindowConfigurer.createDefaultContents(Shell) line: 625 + ApplicationWorkbenchWindowAdvisor(WorkbenchWindowAdvisor).createWindowContents(Shell) line: 268 + WorkbenchWindow.createContents(Composite) line: 1000 + WorkbenchWindow(Window).create() line: 431 + Workbench$60.runWithException() line: 3363 + Workbench$60(StartupThreading$StartupRunnable).run() line: 31 + RunnableLock.run() line: 35 + UISynchronizer(Synchronizer).runAsyncMessages(boolean) line: 134 + Display.runAsyncMessages(boolean) line: 3885 + Display.readAndDispatch() line: 3506 + ApplicationWorkbenchAdvisor(WorkbenchAdvisor).openWindows() line: 803 + Workbench$28.runWithException() line: 1384 + Workbench$28(StartupThreading$StartupRunnable).run() line: 31 + RunnableLock.run() line: 35 + UISynchronizer(Synchronizer).runAsyncMessages(boolean) line: 134 + Display.runAsyncMessages(boolean) line: 3885 + Display.readAndDispatch() line: 3506 + Workbench.runUI() line: 2316 + Workbench.access$4(Workbench) line: 2221 + Workbench$5.run() line: 500 + Realm.runWithDefault(Realm, Runnable) line: 332 + Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 493 + PlatformUI.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 149 + Application.start(IApplicationContext) line: 42 + EclipseAppHandle.run(Object) line: 194 + EclipseAppLauncher.runApplication(Object) line: 110 + EclipseAppLauncher.start(Object) line: 79 + EclipseStarter.run(Object) line: 368 + EclipseStarter.run(String[], Runnable) line: 179 + NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] + NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 + DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 + Method.invoke(Object, Object...) line: 597 + Main.invokeFramework(String[], URL[]) line: 559 + Main.basicRun(String[]) line: 514 + Main.run(String[]) line: 1311 + Main.main(String[]) line: 1287 + Thread [OSGi Console] (Suspended) + Thread.sleep(long) line: not available [native method] + FrameworkConsole.console() line: 270 + FrameworkConsole.run() line: 224 + Thread.run() line: 619 + Daemon Thread [State Data Manager] (Suspended) + Thread.sleep(long) line: not available [native method] + StateManager.run() line: 306 + Thread.run() line: 619 + Daemon Thread [Framework Event Dispatcher] (Suspended) + waiting for: EventManager$EventThread (id=22) + Object.wait(long) line: not available [native method] + EventManager$EventThread(Object).wait() line: 485 + EventManager$EventThread.getNextEvent() line: 397 + EventManager$EventThread.run() line: 333 + Daemon Thread [Start Level Event Dispatcher] (Suspended) + waiting for: EventManager$EventThread (id=25) + Object.wait(long) line: not available [native method] + EventManager$EventThread(Object).wait() line: 485 + EventManager$EventThread.getNextEvent() line: 397 + EventManager$EventThread.run() line: 333 + Thread [643357997@qtp-1619519236-1 - Acceptor0 SelectChannelConnector@0.0.0.0:10996] (Suspended) + owns: WindowsSelectorImpl (id=54) + owns: Collections$UnmodifiableSet<E> (id=55) + owns: Util$1 (id=56) + WindowsSelectorImpl$SubSelector.poll0(long, int, int[], int[], int[], long) line: not available [native method] + WindowsSelectorImpl$SubSelector.poll() line: 273 + WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl$SubSelector) line: 255 + WindowsSelectorImpl.doSelect(long) line: 136 + WindowsSelectorImpl(SelectorImpl).lockAndDoSelect(long) line: 69 + WindowsSelectorImpl(SelectorImpl).select(long) line: 80 + SelectorManager$SelectSet.doSelect() line: 432 + SelectChannelConnector$1(SelectorManager).doSelect(int) line: 185 + SelectChannelConnector.accept(int) line: 124 + AbstractConnector$Acceptor.run() line: 707 + QueuedThreadPool$PoolThread.run() line: 520 + Thread [255194190@qtp-1619519236-0] (Suspended) + waiting for: QueuedThreadPool$PoolThread (id=27) + Object.wait(long) line: not available [native method] + QueuedThreadPool$PoolThread.run() line: 563 + Daemon Thread [Timer-0] (Suspended) + waiting for: TaskQueue (id=57) + Object.wait(long) line: not available [native method] + TimerThread.mainLoop() line: 509 + TimerThread.run() line: 462 + Thread [Worker-0] (Suspended) + waiting for: Object (id=48) + Object.wait(long) line: not available [native method] + ThreadJob.joinRun(IProgressMonitor) line: 187 + ImplicitJobs.begin(ISchedulingRule, IProgressMonitor, boolean) line: 87 + JobManager.beginRule(ISchedulingRule, IProgressMonitor) line: 232 + StringPoolJob.run(IProgressMonitor) line: 99 + Worker.run() line: 55 + Thread [Thread-5] (Suspended) + waiting for: RunnableLock (id=51) + Object.wait(long) line: not available [native method] + RunnableLock(Object).wait() line: 485 + UISynchronizer(Synchronizer).syncExec(Runnable) line: 186 + UISynchronizer.syncExec(Runnable) line: 150 + Display.syncExec(Runnable) line: 4342 + StartupThreading.runWithoutExceptions(StartupThreading$StartupRunnable) line: 94 + Workbench.init() line: 1379 + Workbench.access$32(Workbench) line: 1296 + Workbench$58.run() line: 2304 + Thread [Thread-6] (Suspended) + waiting for: RunnableLock (id=50) + Object.wait(long) line: not available [native method] + RunnableLock(Object).wait() line: 485 + UISynchronizer(Synchronizer).syncExec(Runnable) line: 186 + UISynchronizer.syncExec(Runnable) line: 150 + Display.syncExec(Runnable) line: 4342 + StartupThreading.runWithoutExceptions(StartupThreading$StartupRunnable) line: 94 + Workbench.doRestoreState(IMemento, MultiStatus) line: 3359 + Workbench.access$30(Workbench, IMemento, MultiStatus) line: 3328 + Workbench$54.run() line: 2114 + Workbench.runStartupWithProgress(int, Runnable) line: 1827 + Workbench.restoreState(IMemento) line: 2112 + Workbench.access$28(Workbench, IMemento) line: 2083 + Workbench$49.run() line: 1946 + SafeRunner.run(ISafeRunnable) line: 42 + Workbench.restoreState() line: 1890 + WorkbenchConfigurer.restoreState() line: 183 + WorkbenchAdvisor$1.run() line: 781 + Thread [Worker-1] (Suspended) + waiting for: WorkerPool (id=127) + Object.wait(long) line: not available [native method] + WorkerPool.sleep(long) line: 185 + WorkerPool.startJob(Worker) line: 217 + Worker.run() line: 51 + Daemon Thread [Java indexing] (Suspended) + waiting for: IndexManager (id=128) + Object.wait(long) line: not available [native method] + IndexManager(Object).wait() line: 485 + IndexManager(JobManager).run() line: 381 + Thread.run() line: 619 + Thread [Worker-2] (Suspended) + waiting for: Class<T> (org.lamport.tla.toolbox.Activator) (id=49) + Activator.getSpecManager() line: 301 + TLAParsingBuilder.build(int, Map, IProgressMonitor) line: 52 + BuildManager$2.run() line: 627 + SafeRunner.run(ISafeRunnable) line: 42 + BuildManager.basicBuild(int, IncrementalProjectBuilder, Map, MultiStatus, IProgressMonitor) line: 170 + BuildManager.basicBuild(IProject, int, ICommand[], MultiStatus, IProgressMonitor) line: 201 + BuildManager$1.run() line: 253 + SafeRunner.run(ISafeRunnable) line: 42 + BuildManager.basicBuild(IProject, int, MultiStatus, IProgressMonitor) line: 256 + BuildManager.basicBuildLoop(IProject[], IProject[], int, MultiStatus, IProgressMonitor) line: 309 + BuildManager.build(int, IProgressMonitor) line: 341 + AutoBuildJob.doBuild(IProgressMonitor) line: 140 + AutoBuildJob.run(IProgressMonitor) line: 238 + Worker.run() line: 55 + Thread [Worker-3] (Suspended) + waiting for: WorkerPool (id=127) + Object.wait(long) line: not available [native method] + WorkerPool.sleep(long) line: 185 + WorkerPool.startJob(Worker) line: 217 + Worker.run() line: 51 + C:\Program Files\Java\jdk1.6.0_21\bin\javaw.exe (Aug 10, 2011 3:06:46 PM)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>575</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-11 17:17:12 +0000</bug_when> + <thetext>Released thread decoupling to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>576</commentid> + <comment_count>2</comment_count> + <attachid>95</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-11 17:17:13 +0000</bug_when> + <thetext>Created attachment 95 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>820</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-25 22:14:18 +0000</bug_when> + <thetext>Solved (a while ago)</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>95</attachid> + <date>2011-08-11 17:17:00 +0000</date> + <delta_ts>2011-08-11 17:17:13 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>3090</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>196</bug_id> + + <creation_ts>2011-08-11 17:18:00 +0000</creation_ts> + <short_desc>Simplify IDE workspace provisioning</short_desc> + <delta_ts>2011-08-16 11:59:16 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>577</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-11 17:18:47 +0000</bug_when> + <thetext>Setting up and keeping a local development workspace in sync should take as little work as possible. A first step is to use a .target as a common base to declare 3rd party dependencies.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>578</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-11 17:22:33 +0000</bug_when> + <thetext>Released .target to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>579</commentid> + <comment_count>2</comment_count> + <attachid>96</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-11 17:22:33 +0000</bug_when> + <thetext>Created attachment 96 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>587</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-16 11:59:16 +0000</bug_when> + <thetext>Fixed in HEAD</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>96</attachid> + <date>2011-08-11 17:22:00 +0000</date> + <delta_ts>2011-08-11 17:22:33 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1686</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>197</bug_id> + + <creation_ts>2011-08-13 18:17:00 +0000</creation_ts> + <short_desc>java.lang.NumberFormatException: in WorkspaceSpecManager.getMostRecentlyOpenedSpec</short_desc> + <delta_ts>2011-08-15 11:24:28 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>580</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-13 18:17:47 +0000</bug_when> + <thetext>LL: I just discovered the following bug. When I click + + File > Open Spec > Add New Spec + +and then click Browse on the popped up dialog, it works fine if I'm doing it with a spec open, but it does nothing if I do it with no spec open. + +The problem seems to be caused by something weird in the workspace. It happens (and is repeatable) when I run the Toolbox from Eclipse with the current workspace, but not when I run either the Eclipse-generated release or the Maven-generated release, or when I run the Toolbox from Eclipse with a fresh workspace. + +Appended below is the log. As you can see, the problem is a NumberFormatException at WorkspaceSpecManager.java:468. Simply adding another catch clause to catch and ignore the exception seems to solve the problem. However, I thought you should look at it and see if that sounds like a reasonable thing to do. + +Leslie + + +!SESSION 2011-08-12 18:19:49.456 ----------------------------------------------- +eclipse.buildId=unknown +java.version=1.6.0_21 +java.vendor=Sun Microsystems Inc. +BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US +Framework arguments: -product org.lamport.tla.toolbox.product.standalone.product +Command-line arguments: -product org.lamport.tla.toolbox.product.standalone.product -data C:\lamport\tla\newtools\tla2-inria-workspace/../runtime-org.lamport.tla.toolbox.product.product.product -dev file:C:/lamport/tla/newtools/tla2-inria-workspace/.metadata/.plugins/org.eclipse.pde.core/org.lamport.tla.toolbox.product.product.product/dev.properties -os win32 -ws win32 -arch x86_64 -consoleLog + +!ENTRY org.eclipse.core.resources 2 10035 2011-08-12 18:20:52.466 +!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes. + +!ENTRY org.eclipse.ui 4 4 2011-08-12 18:21:13.958 +!MESSAGE Plugin org.lamport.tla.toolbox, extension org.eclipse.ui.perspectiveExtensions, id toolbox.view.ToolboxWelcomeView: Attribute 'relative' not defined. This attribute is required when relationship="left". + +!ENTRY org.eclipse.ui 4 4 2011-08-12 18:21:13.962 +!MESSAGE Unable to process element: view in perspective extension: null + +!ENTRY org.eclipse.ui 4 0 2011-08-12 18:21:20.509 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NumberFormatException: null + at java.lang.Long.parseLong(Unknown Source) + at java.lang.Long.parseLong(Unknown Source) + at org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.getMostRecentlyOpenedSpec(WorkspaceSpecManager.java:468) + at org.lamport.tla.toolbox.ui.wizard.NewSpecWizardPage.handleBrowse(NewSpecWizardPage.java:186) + at org.lamport.tla.toolbox.ui.wizard.NewSpecWizardPage$2.widgetSelected(NewSpecWizardPage.java:95) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at org.lamport.tla.toolbox.ui.handler.NewSpecHandler.execute(NewSpecHandler.java:59) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820) + at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806) + at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) + +!ENTRY org.eclipse.ui 4 0 2011-08-12 18:22:00.543 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NumberFormatException: null + at java.lang.Long.parseLong(Unknown Source) + at java.lang.Long.parseLong(Unknown Source) + at org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.getMostRecentlyOpenedSpec(WorkspaceSpecManager.java:468) + at org.lamport.tla.toolbox.ui.wizard.NewSpecWizardPage.handleBrowse(NewSpecWizardPage.java:186) + at org.lamport.tla.toolbox.ui.wizard.NewSpecWizardPage$2.widgetSelected(NewSpecWizardPage.java:95) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at org.lamport.tla.toolbox.ui.handler.NewSpecHandler.execute(NewSpecHandler.java:59) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820) + at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806) + at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) + +!ENTRY org.eclipse.ui 4 0 2011-08-12 18:22:28.872 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NumberFormatException: null + at java.lang.Long.parseLong(Unknown Source) + at java.lang.Long.parseLong(Unknown Source) + at org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.getMostRecentlyOpenedSpec(WorkspaceSpecManager.java:468) + at org.lamport.tla.toolbox.ui.wizard.NewSpecWizardPage.handleBrowse(NewSpecWizardPage.java:186) + at org.lamport.tla.toolbox.ui.wizard.NewSpecWizardPage$2.widgetSelected(NewSpecWizardPage.java:95) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at org.lamport.tla.toolbox.ui.handler.NewSpecHandler.execute(NewSpecHandler.java:59) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820) + at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806) + at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) + +!ENTRY org.eclipse.ui 4 0 2011-08-12 18:22:55.268 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NumberFormatException: null + at java.lang.Long.parseLong(Unknown Source) + at java.lang.Long.parseLong(Unknown Source) + at org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.getMostRecentlyOpenedSpec(WorkspaceSpecManager.java:468) + at org.lamport.tla.toolbox.ui.wizard.NewSpecWizardPage.handleBrowse(NewSpecWizardPage.java:186) + at org.lamport.tla.toolbox.ui.wizard.NewSpecWizardPage$2.widgetSelected(NewSpecWizardPage.java:95) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at org.lamport.tla.toolbox.ui.handler.NewSpecHandler.execute(NewSpecHandler.java:59) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820) + at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806) + at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>581</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-15 10:24:47 +0000</bug_when> + <thetext>Made org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.getRecentlyOpened() more robust against NPE and CoreExceptions. + +NPE indicates a more severe problem though which will cause problems on various ends. org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.specStorage must not contain invalid (null) entries. Investigation pending...</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>582</commentid> + <comment_count>2</comment_count> + <attachid>97</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-15 10:24:50 +0000</bug_when> + <thetext>Created attachment 97 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>583</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-15 11:24:26 +0000</bug_when> + <thetext>Scratch comment #1, fix released to HEAD which reuses org.lamport.tla.toolbox.util.compare.SpecComparator. SpecComparator accounts for a null close date. + +The reason that the spec under question has no close date set in the first place, can probably be explained by an unclean Toolbox shutdown/ a crash.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>584</commentid> + <comment_count>4</comment_count> + <attachid>98</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-15 11:24:28 +0000</bug_when> + <thetext>Created attachment 98 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>97</attachid> + <date>2011-08-15 10:24:00 +0000</date> + <delta_ts>2011-08-15 10:24:50 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>47121</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>98</attachid> + <date>2011-08-15 11:24:00 +0000</date> + <delta_ts>2011-08-15 11:24:28 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>80351</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>198</bug_id> + + <creation_ts>2011-08-16 17:12:00 +0000</creation_ts> + <short_desc>"Error while loading manipulator" when trying to update Toolbox on Mac</short_desc> + <delta_ts>2011-08-30 19:36:03 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>Mac OS</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>590</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-16 17:12:18 +0000</bug_when> + <thetext>Other platforms work fine. OSx however throws the following exception. + +!ENTRY org.eclipse.equinox.p2.touchpoint.eclipse 4 0 2011-08-16 17:01:34.587 +!MESSAGE Error while loading manipulator. +!STACK 0 +java.lang.IllegalStateException: The framework persistent data location (/opt/toolbox/toolbox.app/Contents/MacOS/configuration) is not the same as the framework configuration location (/opt/toolbox/configuration). + at org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxManipulatorImpl.checkConsistencyOfFwConfigLocAndFwPersistentDataLoc(EquinoxManipulatorImpl.java:65) + at org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxManipulatorImpl.loadWithoutFwPersistentData(EquinoxManipulatorImpl.java:348) + at org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxManipulatorImpl.load(EquinoxManipulatorImpl.java:319) + at org.eclipse.equinox.internal.p2.touchpoint.eclipse.LazyManipulator.loadDelegate(LazyManipulator.java:54) + at org.eclipse.equinox.internal.p2.touchpoint.eclipse.LazyManipulator.getLauncherData(LazyManipulator.java:117) + at org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.SetLauncherNameAction.setLauncher(SetLauncherNameAction.java:44) + at org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.SetLauncherNameAction.execute(SetLauncherNameAction.java:30) + at org.eclipse.equinox.internal.p2.engine.ParameterizedProvisioningAction.execute(ParameterizedProvisioningAction.java:35) + at org.eclipse.equinox.internal.p2.engine.Phase.mainPerform(Phase.java:149) + at org.eclipse.equinox.internal.p2.engine.Phase.perform(Phase.java:78) + at org.eclipse.equinox.internal.p2.engine.PhaseSet.perform(PhaseSet.java:44) + at org.eclipse.equinox.internal.p2.engine.Engine.perform(Engine.java:73) + at org.eclipse.equinox.internal.p2.engine.Engine.perform(Engine.java:44) + at org.eclipse.equinox.p2.operations.ProvisioningSession.performProvisioningPlan(ProvisioningSession.java:174) + at org.eclipse.equinox.p2.operations.ProfileModificationJob.runModal(ProfileModificationJob.java:79) + at org.eclipse.equinox.p2.operations.ProvisioningJob.run(ProvisioningJob.java:177) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +!ENTRY org.eclipse.equinox.p2.engine 4 4 2011-08-16 17:01:34.599 +!MESSAGE An error occurred while unconfiguring the items to uninstall +!SUBENTRY 1 org.eclipse.equinox.p2.engine 4 0 2011-08-16 17:01:34.599 +!MESSAGE session context was:(profile=DefaultProfile, phase=org.eclipse.equinox.internal.p2.engine.phases.Unconfigure, operand=[R]org.lamport.tla.toolbox.product.product.executable.cocoa.macosx.x86_64.toolbox 1.3.2.201108161358 --> null, action=org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.SetLauncherNameAction). +!SUBENTRY 1 org.eclipse.equinox.p2.engine 4 0 2011-08-16 17:01:34.599 +!MESSAGE Error while loading manipulator. +!STACK 0 +java.lang.IllegalStateException: Error while loading manipulator. + at org.eclipse.equinox.internal.p2.touchpoint.eclipse.LazyManipulator.loadDelegate(LazyManipulator.java:58) + at org.eclipse.equinox.internal.p2.touchpoint.eclipse.LazyManipulator.getLauncherData(LazyManipulator.java:117) + at org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.SetLauncherNameAction.setLauncher(SetLauncherNameAction.java:44) + at org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.SetLauncherNameAction.execute(SetLauncherNameAction.java:30) + at org.eclipse.equinox.internal.p2.engine.ParameterizedProvisioningAction.execute(ParameterizedProvisioningAction.java:35) + at org.eclipse.equinox.internal.p2.engine.Phase.mainPerform(Phase.java:149) + at org.eclipse.equinox.internal.p2.engine.Phase.perform(Phase.java:78) + at org.eclipse.equinox.internal.p2.engine.PhaseSet.perform(PhaseSet.java:44) + at org.eclipse.equinox.internal.p2.engine.Engine.perform(Engine.java:73)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>591</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-16 17:18:24 +0000</bug_when> + <thetext>This is how this bug manifest UI-wise: + +An error occurred while unconfiguring the items to uninstall +session context was:(profile=DefaultProfile, phase=org.eclipse.equinox.internal.p2.engine.phases.Unconfigure, operand=[R]org.lamport.tla.toolbox.product.product.executable.cocoa.macosx.x86_64.toolbox 1.3.2.201108161358 --> null, action=org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.SetLauncherNameAction). +Error while loading manipulator.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>614</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-30 19:36:03 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>199</bug_id> + + <creation_ts>2011-08-24 15:33:00 +0000</creation_ts> + <short_desc>Add update scheduler to toolbox</short_desc> + <delta_ts>2011-08-30 19:34:53 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>593</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-24 15:33:16 +0000</bug_when> + <thetext>The Toolbox may automatically check for updates. This is fortunately provided by equinox p2 ui. + +The Toolbox will check for updates by default at startup.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>594</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-24 15:46:33 +0000</bug_when> + <thetext>Basic plumbing done, user documentation missing (do we need documentation for update)?</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>595</commentid> + <comment_count>2</comment_count> + <attachid>101</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-24 15:46:34 +0000</bug_when> + <thetext>Created attachment 101 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>613</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-30 19:34:53 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>101</attachid> + <date>2011-08-24 15:46:00 +0000</date> + <delta_ts>2011-08-24 15:46:34 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>4589</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>200</bug_id> + + <creation_ts>2011-08-25 11:30:00 +0000</creation_ts> + <short_desc>Build includes pom.properties files which cause filenames too long warnings on Windows</short_desc> + <delta_ts>2011-08-25 12:59:34 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>596</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-25 11:30:18 +0000</bug_when> + <thetext>The files are not needed by the Toolbox at runtime and thus should be omitted from the zip files.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>597</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-25 12:59:31 +0000</bug_when> + <thetext>Fixed in HEAD +pom.properties (and pom.xml) are omitted from zip files.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>598</commentid> + <comment_count>2</comment_count> + <attachid>102</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-25 12:59:34 +0000</bug_when> + <thetext>Created attachment 102 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>102</attachid> + <date>2011-08-25 12:59:00 +0000</date> + <delta_ts>2011-08-25 12:59:34 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>533</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>201</bug_id> + + <creation_ts>2011-08-25 13:33:00 +0000</creation_ts> + <short_desc>Remove javacc build step from ant build</short_desc> + <delta_ts>2011-08-25 13:34:49 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>trivial</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>599</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-25 13:33:18 +0000</bug_when> + <thetext>LL: "The parser should never be regenerated automatically with javacc. Depending on the changes, manual editing of some of the generated files may be necessary. Please remove anything from the build file that could conceivably cause it to be done. (I have some files explaining what needs to be done. I should add them to the repository.)"</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>600</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-25 13:34:48 +0000</bug_when> + <thetext>Removed in HEAd</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>601</commentid> + <comment_count>2</comment_count> + <attachid>103</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-25 13:34:49 +0000</bug_when> + <thetext>Created attachment 103 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>103</attachid> + <date>2011-08-25 13:34:00 +0000</date> + <delta_ts>2011-08-25 13:34:49 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>800</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>202</bug_id> + + <creation_ts>2011-08-27 14:03:00 +0000</creation_ts> + <short_desc>Optional dependencies broken in recent Tycho build</short_desc> + <delta_ts>2011-08-27 14:06:12 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>604</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-27 14:03:19 +0000</bug_when> + <thetext>https://bugs.eclipse.org/355947</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>605</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-27 14:06:11 +0000</bug_when> + <thetext>Fixed in HEAD as per https://bugs.eclipse.org/bugs/show_bug.cgi?id=355947#c4</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>606</commentid> + <comment_count>2</comment_count> + <attachid>105</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-27 14:06:12 +0000</bug_when> + <thetext>Created attachment 105 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>105</attachid> + <date>2011-08-27 14:06:00 +0000</date> + <delta_ts>2011-08-27 14:06:12 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>737</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>203</bug_id> + + <creation_ts>2011-08-30 10:12:00 +0000</creation_ts> + <short_desc>Rename Maven build output zip files to include version name</short_desc> + <delta_ts>2011-08-30 19:33:43 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>607</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-30 10:12:20 +0000</bug_when> + <thetext>rename org.lamport.tla.toolbox.product.product-linux...zip to TLAToolbox-1.3.2-linux...zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>611</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-30 19:33:37 +0000</bug_when> + <thetext>Fixed in HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>612</commentid> + <comment_count>2</comment_count> + <attachid>107</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-30 19:33:43 +0000</bug_when> + <thetext>Created attachment 107 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>107</attachid> + <date>2011-08-30 19:33:00 +0000</date> + <delta_ts>2011-08-30 19:33:43 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>2234</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>204</bug_id> + + <creation_ts>2011-08-30 18:26:00 +0000</creation_ts> + <short_desc>Add refresh command to sync spec/model with filesystem</short_desc> + <delta_ts>2011-08-30 18:46:12 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>608</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-30 18:26:34 +0000</bug_when> + <thetext>If a Toolbox file is changed on the file system layer, the Toolbox does not automatically detect the change. Thus, refresh functionality is needed. This will be done as a "Refresh" context menu entry in the spec explorer.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>609</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-30 18:46:10 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>610</commentid> + <comment_count>2</comment_count> + <attachid>106</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-08-30 18:46:12 +0000</bug_when> + <thetext>Created attachment 106 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>106</attachid> + <date>2011-08-30 18:46:00 +0000</date> + <delta_ts>2011-08-30 18:46:12 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>3946</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>205</bug_id> + + <creation_ts>2011-09-10 20:26:00 +0000</creation_ts> + <short_desc>TLC stops if Queue Size grows to more than 2^31</short_desc> + <delta_ts>2011-09-26 17:12:12 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>blocker</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Chris Newcombe">chris.newcombe</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>615</commentid> + <comment_count>0</comment_count> + <attachid>108</attachid> + <who name="Chris Newcombe">chris.newcombe</who> + <bug_when>2011-09-10 20:26:28 +0000</bug_when> + <thetext>Created attachment 108 +screenshot after TLC stopped + +Version 1.2.1 of 29 September 2010 +(toolbox-1.2.1.win32.win32.x86_64) + +OS is Windows Server 2003 data center edition, service pack 2 (2007). + +I have a model-checking job that fails after 2 or 3 days (on a good 8-core +machine). + +TLC just stops with no error. + +It's pretty clear from the output that it's because Queue Size grows larger +than 2^31. I've pasted the end of the TLC console log below, and attached a +screenshot. + +I tried pasting the spec below as well, but bugzilla rejected it as comments +cannot be larger than 64KB. It is the 'textbookSnapshotIsolation.tla' spec +that I sent to Leslie in an email last week. + +Comments at the start of the spec show how to configure TLC (2 model values in +set Key, and 4 model values in set TxnId). +The invariant I was checking was + + ~ ReadOnlyAnomaly(history) + +This is an attempt to confirm that the above invariant is violated in a way +reported in a recent published paper (see end of spec for details). +I know from some experimentation that TLC gets close to finding the violation I +am looking for -- but it runs into the overflow bug before doing so. + +thanks, + +Chris + +… snip +@!@!@STARTMSG 2221:0 @!@!@ + line 8, col 38 to line 8, col 52 of module textbookSnapshotIsolation: +1242532628 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(14) at 2011-09-10 02:19:53: 4968408451 states generated, -1005007939 +distinct states found, -2147483642 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +4968408451 states generated, -1005007939 distinct states found, -2147483642 +states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2194:0 @!@!@ +The depth of the complete state graph search is 14. +@!@!@ENDMSG 2194 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished. (2011-09-10 02:21:24) +@!@!@ENDMSG 2186 @!@!@</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>624</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-12 17:25:01 +0000</bug_when> + <thetext>Hi Chris, + +Leslie is currently traveling. Can you send textbookSnapshotIsolation.tla to bugzilla.tlaplus.net <at> lemmster <dot> de too? + +Thanks +Markus + +P.S.: How many TLC worker threads do you use?</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>625</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-13 15:34:03 +0000</bug_when> + <thetext>tlc2.tool.queue.StateQueue.len has been converted from int to long.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>626</commentid> + <comment_count>3</comment_count> + <attachid>111</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-13 15:34:07 +0000</bug_when> + <thetext>Created attachment 111 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>627</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-15 20:01:41 +0000</bug_when> + <thetext>Hi Chris, + +I have fixed StateQueue to support more than 2^31 states. Do you wanna test drive a recent nightly build [0] and let me know if it fixes your problem? + +Thanks +Markus + +[0] http://tla.msr-inria.inria.fr/tlatoolbox/products/</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>629</commentid> + <comment_count>5</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-20 10:51:45 +0000</bug_when> + <thetext>Separated long running tlc2.tool.queue.DiskStateQueueTest from short/smoke tests to keep test execution time minimal.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>634</commentid> + <comment_count>6</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-26 17:12:11 +0000</bug_when> + <thetext>Fix released to HEAD. Follow up "negative seek offset" bug is tracked as bug #210.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>635</commentid> + <comment_count>7</comment_count> + <attachid>113</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-26 17:12:12 +0000</bug_when> + <thetext>Created attachment 113 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>108</attachid> + <date>2011-09-10 20:26:00 +0000</date> + <delta_ts>2011-09-10 20:26:28 +0000</delta_ts> + <desc>screenshot after TLC stopped</desc> + <filename>TLC failure on Queue Size larger than 2^31.png</filename> + <type>image/png</type> + <size>99513</size> + <attacher name="Chris Newcombe">chris.newcombe</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>111</attachid> + <date>2011-09-13 15:34:00 +0000</date> + <delta_ts>2011-09-13 15:34:07 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>177039</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>113</attachid> + <date>2011-09-26 17:12:00 +0000</date> + <delta_ts>2011-09-26 17:12:12 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>13132</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>206</bug_id> + + <creation_ts>2011-09-12 10:25:00 +0000</creation_ts> + <short_desc>DND does not work in TLA editor</short_desc> + <delta_ts>2011-09-12 11:15:25 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>616</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-12 10:25:38 +0000</bug_when> + <thetext>DND'ing a text block in the tla editor reveals the following exception: + +!ENTRY org.eclipse.ui 4 0 2011-09-12 10:24:39.779 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NullPointerException + at org.eclipse.ui.internal.EditorSiteDragAndDropServiceImpl$1.dragLeave(EditorSiteDragAndDropServiceImpl.java:107) + at org.eclipse.swt.dnd.DNDListener.handleEvent(DNDListener.java:70) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1282) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1267) + at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1061) + at org.eclipse.swt.dnd.DropTarget.drag_leave(DropTarget.java:430) + at org.eclipse.swt.dnd.DropTarget.Drag_Leave(DropTarget.java:264) + at org.eclipse.swt.internal.gtk.OS._gtk_main_do_event(Native Method) + at org.eclipse.swt.internal.gtk.OS.gtk_main_do_event(OS.java:8189) + at org.eclipse.swt.widgets.Display.eventProc(Display.java:1238) + at org.eclipse.swt.internal.gtk.OS._g_main_context_iteration(Native Method) + at org.eclipse.swt.internal.gtk.OS.g_main_context_iteration(OS.java:2237) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3159) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:592) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>617</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-12 11:11:36 +0000</bug_when> + <thetext>A side effect of this bug causes the editor to crash if: + +0) An editor text block has been moved (causing the aforementioned exception) +1) Cut & Paste is used on the (full) editor content + +!ENTRY org.eclipse.ui 4 0 2011-09-07 17:55:06.195 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.IllegalArgumentException: Index out of bounds + at org.eclipse.swt.SWT.error(SWT.java:4064) + at org.eclipse.swt.SWT.error(SWT.java:3998) + at org.eclipse.swt.SWT.error(SWT.java:3969) + at org.eclipse.swt.custom.StyledText.getLocationAtOffset(StyledText.java:4329) + at org.eclipse.swt.custom.StyledTextDropTargetEffect$1.handleEvent(StyledTextDropTargetEffect.java:71) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062) + at org.eclipse.swt.widgets.Composite.WM_PAINT(Composite.java:1454) + at org.eclipse.swt.widgets.Control.windowProc(Control.java:4218) + at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341) + at org.eclipse.swt.widgets.Display.windowProc(Display.java:4886) + at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method) + at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2459) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3655) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) + at org.eclipse.jface.dialogs.MessageDialog.open(MessageDialog.java:334) + at org.eclipse.ui.internal.EditorManager.saveAll(EditorManager.java:1176) + at org.eclipse.ui.internal.Workbench$19.run(Workbench.java:1181) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.ui.internal.Workbench.saveAllEditors(Workbench.java:1130) + at org.eclipse.ui.internal.Workbench.busyClose(Workbench.java:1048) + at org.eclipse.ui.internal.Workbench.access$15(Workbench.java:1032) + at org.eclipse.ui.internal.Workbench$25.run(Workbench.java:1276) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.Workbench.close(Workbench.java:1274) + at org.eclipse.ui.internal.Workbench.close(Workbench.java:1246) + at org.eclipse.ui.internal.WorkbenchWindow.busyClose(WorkbenchWindow.java:731) + at org.eclipse.ui.internal.WorkbenchWindow.access$0(WorkbenchWindow.java:710) + at org.eclipse.ui.internal.WorkbenchWindow$5.run(WorkbenchWindow.java:832) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchWindow.close(WorkbenchWindow.java:830) + at org.eclipse.jface.window.Window.handleShellCloseEvent(Window.java:741) + at org.eclipse.jface.window.Window$3.shellClosed(Window.java:687) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:98) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062) + at org.eclipse.swt.widgets.Decorations.closeWidget(Decorations.java:308) + at org.eclipse.swt.widgets.Decorations.WM_CLOSE(Decorations.java:1665) + at org.eclipse.swt.widgets.Control.windowProc(Control.java:4164) + at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341) + at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1598) + at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2038) + at org.eclipse.swt.widgets.Display.windowProc(Display.java:4873) + at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method) + at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2454) + at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java:497) + at org.eclipse.swt.widgets.Control.windowProc(Control.java:4253) + at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341) + at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1598) + at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2038) + at org.eclipse.swt.widgets.Display.windowProc(Display.java:4873) + at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method) + at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2454) + at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java:497) + at org.eclipse.swt.widgets.Control.windowProc(Control.java:4253) + at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341) + at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1598) + at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2038) + at org.eclipse.swt.widgets.Display.windowProc(Display.java:4873) + at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method) + at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2459) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3655) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>618</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-12 11:12:22 +0000</bug_when> + <thetext>https://bugs.eclipse.org/287486#c5 outlines a viable fix.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>619</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-12 11:15:24 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>620</commentid> + <comment_count>4</comment_count> + <attachid>109</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-12 11:15:25 +0000</bug_when> + <thetext>Created attachment 109 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>109</attachid> + <date>2011-09-12 11:15:00 +0000</date> + <delta_ts>2011-09-12 11:15:25 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>2044</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>207</bug_id> + + <creation_ts>2011-09-12 12:38:00 +0000</creation_ts> + <short_desc>Linear growth factor in MemStateQueue quickly exceeds heap space</short_desc> + <delta_ts>2011-09-12 17:23:04 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>621</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-12 12:38:07 +0000</bug_when> + <thetext>Linearly doubling the state queue size exceeds the Java head space quickly. If the queue size reaches a certain size, doubling makes little sense anyway, since the new states found does not follow this growth rate.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>622</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-12 17:23:02 +0000</bug_when> + <thetext>The capacity of MemStateQueue has be change to grow with (oldLength * 4) / 3 + 1).</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>623</commentid> + <comment_count>2</comment_count> + <attachid>110</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-12 17:23:04 +0000</bug_when> + <thetext>Created attachment 110 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>110</attachid> + <date>2011-09-12 17:23:00 +0000</date> + <delta_ts>2011-09-12 17:23:04 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>13309</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>208</bug_id> + + <creation_ts>2011-09-19 10:52:00 +0000</creation_ts> + <short_desc>Bug at ResourceHelper line 1477</short_desc> + <delta_ts>2012-02-11 21:39:04 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>lamport</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>628</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-19 10:52:39 +0000</bug_when> + <thetext>osgi> TLA+ Toolbox started without arguments. +!SESSION 2011-09-18 08:57:03.414 ----------------------------------------------- +eclipse.buildId=unknown +java.version=1.6.0_26 +java.vendor=Sun Microsystems Inc. +BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US Framework arguments: -product org.lamport.tla.toolbox.product.standalone.product +Command-line arguments: -product org.lamport.tla.toolbox.product.standalone.product -data C:\lamport\tla\newtools\tla2-inria-workspace/../runtime-org.lamport.tla.toolbox.product.product.product -dev file:C:/lamport/tla/newtools/tla2-inria-workspace/.metadata/.plugins/org.eclipse.pde.core/org.lamport.tla.toolbox.product.product.product/dev.properties -os win32 -ws win32 -arch x86 -console -consolelog + +!ENTRY org.eclipse.core.resources 2 10035 2011-09-18 08:57:09.530 !MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes. +footFileName = C:\lamport\papers\paxos\simple\byztla\BPConProof.tla +footFileName = C:\lamport\mytemp\BiqQueue.tla footFileName = C:\lamport\papers\proof\Calculus.tla +footFileName = C:\lamport\mytemp\NewTest.tla footFileName = C:\lamport\tla\newtools\tlapm\doc\vstte12\Peterson.tla +footFileName = C:\lamport\tla\newtools\tlapm\doc\vstte12\RawPeterson.tla +footFileName = C:\lamport\mytemp\Test.tla footFileName = C:\lamport\mytemp\Test92.tla footFileName = C:\lamport\tla\pluscal\bugs\bug_11_09_13.tla +Spec build invoked on Test ... +Added a parse result listener. +There are now 1 listeners. +Resulting status is: parsed +... build invocation finished. + +!ENTRY org.eclipse.equinox.p2.ui.sdk.scheduler 4 0 2011-09-18 08:57:16.571 !MESSAGE The update checker service is not initialized + +!ENTRY org.eclipse.equinox.p2.ui.sdk.scheduler 4 0 2011-09-18 08:57:16.575 !MESSAGE The update checker service is not initialized Removed a parse result listener. +There are now 0 listeners. + +!ENTRY org.eclipse.ui 4 4 2011-09-18 08:57:31.570 !MESSAGE Plugin org.lamport.tla.toolbox, extension org.eclipse.ui.perspectiveExtensions, id toolbox.view.ToolboxWelcomeView: Attribute 'relative' not defined. This attribute is required when relationship="left". + +!ENTRY org.eclipse.ui 4 4 2011-09-18 08:57:31.572 !MESSAGE Unable to process element: view in perspective extension: null Spec build invoked on Calculus ... +Resulting status is: parsed +... build invocation finished. +Added a parse result listener. +There are now 1 listeners. +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Bug at ResourceHelper line 1477 +Opening SetOfIntervals(Calculus.tla at offset: 213, length: 14) Bug at ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at ResourceHelper line 1477 Bug at ResourceHelper line 1477</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>862</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-02-11 21:39:04 +0000</bug_when> + <thetext>A trivial problem caused by not realizing that an empty value could produce a zero-length array rather than a null value in one case.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>209</bug_id> + + <creation_ts>2011-09-22 14:15:00 +0000</creation_ts> + <short_desc>tlc2.util.RandomAccessFile maintains read/write statistics which are never used</short_desc> + <delta_ts>2011-09-22 14:17:44 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>630</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-22 14:15:43 +0000</bug_when> + <thetext>tlc2.util.RandomAccessFile maintains statistics for all API methods. However, these statistics are never used anywhere which makes them an unnecessary performance bottleneck. Especially since all methods excessively call System.currentTimeMillis().</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>631</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-22 14:17:43 +0000</bug_when> + <thetext>Fixed by changing class hierarchy to directly inherit from java.io.RandomAccessFile instead of tlc2.util.RandomAccessFile.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>632</commentid> + <comment_count>2</comment_count> + <attachid>112</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-22 14:17:44 +0000</bug_when> + <thetext>Created attachment 112 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>112</attachid> + <date>2011-09-22 14:17:00 +0000</date> + <delta_ts>2011-09-22 14:17:44 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>978</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>210</bug_id> + + <creation_ts>2011-09-26 17:07:00 +0000</creation_ts> + <short_desc>java.IO.Exception: negative seek offset</short_desc> + <delta_ts>2011-11-29 17:09:03 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>633</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-26 17:07:25 +0000</bug_when> + <thetext>For large models TLC crashes with a "java.IO.Exception: negative seek offset" exception while accessing the fingerprint disk storage (file "MC_0.fp"). No stack trace is shown nor written to any log.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>636</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-26 17:42:32 +0000</bug_when> + <thetext>The precise error is: + +Error: accessing file D:\textbookSnapshotIsolation.toolbox\ReadOnlyAnomaly (real not forced history), 2 keys 4 txns\11-09-17-19-02-13\MC_1.fp java.io.IOException: Negative seek offset + +This indicates that the exception occurs in tlc2.tool.fp.DiskFPSet.diskLookup(long). One potential cause might be the platform specific max file size limit.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>637</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-26 20:40:37 +0000</bug_when> + <thetext>Example output of when the index turns negative. + +Warning: MidEntry turned negative: -1 +(Use the -nowarning option to disable this warning.) +Error: DiskGraph.toString() +java.io.IOException: Negative seek offset + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:207) + at tlc2.tool.fp.DiskFPSet.diskLookup(DiskFPSet.java:437) + at tlc2.tool.fp.DiskFPSet.put(DiskFPSet.java:229) + at tlc2.tool.fp.DiskFPSetTest.testMaxDiskFPSetSize(DiskFPSetTest.java:56)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>638</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-27 15:44:58 +0000</bug_when> + <thetext>Added -fpbits parameter to externally configure tlc2.tool.fp.MultiFPSet.fpbits at startup. This determines the amount of nested tlc2.tool.fp.DiskFPSet.DiskFPSet(int) used at runtime. A DiskFPSet is constrained by a) the file systems max file size and b) a long overflow when addressing the disk backing storage. +Increasing -fpbits does not prevent a) or b), it just makes both less likely/happen later.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>639</commentid> + <comment_count>4</comment_count> + <attachid>114</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-09-27 15:45:04 +0000</bug_when> + <thetext>Created attachment 114 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>660</commentid> + <comment_count>5</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-10 09:56:41 +0000</bug_when> + <thetext>Chris Newcombe: + +New information, possibly related to the older 'negative seek' bug. + +I've been running a non-distributed test on an 8-core box for 7 days 19 hours. It's generated quite a lot of states. +It just gave this error, which I have not seen before: + + DiskFPSet.mergeNewEntries: 9223367739864457495 is already on disk. + +There isn't a stack trace. +The "Running TLC model checker" window is still still open +But all of the CPUs are pretty much idle. + +End of log, containing the error: + +Checkpointing of run D:\serializableSnapshotIsolation.toolbox\serializable, 2 keys 4 txns FULL symmetry\11-10-01-22-25-12 +@!@!@ENDMSG 2195 @!@!@ +@!@!@STARTMSG 2196:0 @!@!@ +Checkpointing completed at (2011-10-09 17:47:10) +@!@!@ENDMSG 2196 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(19) at 2011-10-09 17:47:10: 5481360968 states generated, 31649964 distinct states found, 2574512565 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(19) at 2011-10-09 17:48:10: 5481979264 states generated, 32156610 distinct states found, 2574851100 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(19) at 2011-10-09 17:49:10: 5482633400 states generated, 32691779 distinct states found, 2575200301 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2195:0 @!@!@ +Checkpointing of run D:\serializableSnapshotIsolation.toolbox\serializable, 2 keys 4 txns FULL symmetry\11-10-01-22-25-12 +@!@!@ENDMSG 2195 @!@!@ +@!@!@STARTMSG 2196:0 @!@!@ +Checkpointing completed at (2011-10-09 17:50:11) +@!@!@ENDMSG 2196 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(19) at 2011-10-09 17:50:11: 5483254957 states generated, 33193657 distinct states found, 2575520845 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2011-10-09 17:50:11 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 128, col 14 to line 128, col 20 of module serializableSnapshotIsolation: 598320930 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 128, col 23 to line 128, col 35 of module serializableSnapshotIsolation: 598320930 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 128, col 38 to line 128, col 52 of module serializableSnapshotIsolation: 598320930 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 128, col 55 to line 128, col 64 of module serializableSnapshotIsolation: 598320930 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 128, col 67 to line 128, col 77 of module serializableSnapshotIsolation: 598320930 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 128, col 80 to line 128, col 97 of module serializableSnapshotIsolation: 598320930 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 399, col 8 to line 399, col 93 of module serializableSnapshotIsolation: 1683759288 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 400, col 8 to line 400, col 60 of module serializableSnapshotIsolation: 1683759288 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 401, col 8 to line 401, col 66 of module serializableSnapshotIsolation: 1683759288 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 406, col 8 to line 406, col 63 of module serializableSnapshotIsolation: 1683759288 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 407, col 8 to line 407, col 64 of module serializableSnapshotIsolation: 1683759288 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 408, col 8 to line 408, col 68 of module serializableSnapshotIsolation: 1683759288 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 417, col 8 to line 417, col 66 of module serializableSnapshotIsolation: 5722859 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 418, col 20 to line 418, col 32 of module serializableSnapshotIsolation: 5722859 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 418, col 35 to line 418, col 49 of module serializableSnapshotIsolation: 5722859 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 418, col 52 to line 418, col 61 of module serializableSnapshotIsolation: 5722859 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 418, col 64 to line 418, col 74 of module serializableSnapshotIsolation: 5722859 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 418, col 77 to line 418, col 94 of module serializableSnapshotIsolation: 5722859 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 468, col 19 to line 468, col 114 of module serializableSnapshotIsolation: 1123037941 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 469, col 19 to line 471, col 79 of module serializableSnapshotIsolation: 1123037941 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 472, col 19 to line 474, col 81 of module serializableSnapshotIsolation: 1123037941 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 475, col 19 to line 477, col 76 of module serializableSnapshotIsolation: 1123037941 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 478, col 19 to line 480, col 77 of module serializableSnapshotIsolation: 1123037941 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 481, col 19 to line 483, col 84 of module serializableSnapshotIsolation: 1123037941 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 565, col 20 to line 566, col 92 of module serializableSnapshotIsolation: 666571768 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 567, col 32 to line 567, col 44 of module serializableSnapshotIsolation: 666571768 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 567, col 47 to line 567, col 61 of module serializableSnapshotIsolation: 666571768 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 571, col 20 to line 571, col 92 of module serializableSnapshotIsolation: 666571768 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 611, col 23 to line 613, col 72 of module serializableSnapshotIsolation: 666571768 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 617, col 25 to line 617, col 73 of module serializableSnapshotIsolation: 272119505 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 618, col 35 to line 618, col 45 of module serializableSnapshotIsolation: 394452263 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 681, col 8 to line 681, col 87 of module serializableSnapshotIsolation: 678019497 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 682, col 8 to line 682, col 72 of module serializableSnapshotIsolation: 678019497 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 683, col 8 to line 683, col 66 of module serializableSnapshotIsolation: 678019497 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 741, col 16 to line 743, col 68 of module serializableSnapshotIsolation: 130798841 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 748, col 16 to line 748, col 64 of module serializableSnapshotIsolation: 130798841 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 750, col 26 to line 750, col 43 of module serializableSnapshotIsolation: 130798841 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 763, col 24 to line 763, col 33 of module serializableSnapshotIsolation: 547220656 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 763, col 36 to line 763, col 46 of module serializableSnapshotIsolation: 547220656 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 763, col 49 to line 763, col 66 of module serializableSnapshotIsolation: 547220656 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 834, col 16 to line 834, col 71 of module serializableSnapshotIsolation: 371070760 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 835, col 28 to line 835, col 34 of module serializableSnapshotIsolation: 371070760 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 835, col 37 to line 835, col 49 of module serializableSnapshotIsolation: 371070760 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 835, col 52 to line 835, col 61 of module serializableSnapshotIsolation: 371070760 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 835, col 64 to line 835, col 74 of module serializableSnapshotIsolation: 371070760 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 835, col 77 to line 835, col 94 of module serializableSnapshotIsolation: 371070760 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 844, col 20 to line 844, col 127 of module serializableSnapshotIsolation: 87685200 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 848, col 24 to line 848, col 74 of module serializableSnapshotIsolation: 43842600 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 849, col 36 to line 849, col 50 of module serializableSnapshotIsolation: 43842600 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 867, col 24 to line 867, col 81 of module serializableSnapshotIsolation: 43842600 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 868, col 24 to line 869, col 87 of module serializableSnapshotIsolation: 43842600 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 870, col 20 to line 870, col 80 of module serializableSnapshotIsolation: 87685200 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 871, col 20 to line 871, col 81 of module serializableSnapshotIsolation: 87685200 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 872, col 20 to line 872, col 85 of module serializableSnapshotIsolation: 87685200 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 891, col 12 to line 891, col 126 of module serializableSnapshotIsolation: 269066713 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 892, col 12 to line 892, col 67 of module serializableSnapshotIsolation: 269066713 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 893, col 12 to line 893, col 67 of module serializableSnapshotIsolation: 269066713 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 894, col 12 to line 894, col 68 of module serializableSnapshotIsolation: 269066713 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 895, col 12 to line 895, col 72 of module serializableSnapshotIsolation: 269066713 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 896, col 24 to line 896, col 38 of module serializableSnapshotIsolation: 269066713 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2195:0 @!@!@ +Checkpointing of run D:\serializableSnapshotIsolation.toolbox\serializable, 2 keys 4 txns FULL symmetry\11-10-01-22-25-12 +@!@!@ENDMSG 2195 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +@!@!@STARTMSG 2166:0 @!@!@ +DiskFPSet.mergeNewEntries: 9223367739864457495 is already on disk. + +@!@!@ENDMSG 2166 @!@!@ +@!@!@ENDMSG 1000 @!@!@ +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: <Initial predicate> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) +/\ history = <<>> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: <Action line 416, col 5 to line 418, col 96 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) +/\ history = <<[op |-> "begin", txnid |-> T0]>> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: <Action line 876, col 5 to line 903, col 48 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {K0} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) +/\ history = <<[op |-> "begin", txnid |-> T0], [op |-> "write", txnid |-> T0, key |-> K0]>> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +4: <Action line 876, col 5 to line 903, col 48 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {K0, K1} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +5: <Action line 518, col 5 to line 618, col 45 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {K0, K1} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0] >> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +6: <Action line 422, col 5 to line 483, col 84 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0] >> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +7: <Action line 416, col 5 to line 418, col 96 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1] >> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +8: <Action line 416, col 5 to line 418, col 96 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2] >> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +9: <Action line 876, col 5 to line 903, col 48 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {K0} @@ T2 :> {} @@ T3 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "write", txnid |-> T1, key |-> K0] >> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +10: <Action line 416, col 5 to line 418, col 96 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {K0} @@ T2 :> {} @@ T3 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "write", txnid |-> T1, key |-> K0], + [op |-> "begin", txnid |-> T3] >> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +11: <Action line 518, col 5 to line 618, col 45 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {K0} @@ T2 :> {} @@ T3 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "write", txnid |-> T1, key |-> K0], + [op |-> "begin", txnid |-> T3], + [op |-> "read", txnid |-> T2, key |-> K1, ver |-> T0] >> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {K1} @@ T3 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +12: <Action line 518, col 5 to line 618, col 45 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {K0} @@ T2 :> {} @@ T3 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> TRUE @@ T3 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "write", txnid |-> T1, key |-> K0], + [op |-> "begin", txnid |-> T3], + [op |-> "read", txnid |-> T2, key |-> K1, ver |-> T0], + [op |-> "read", txnid |-> T2, key |-> K0, ver |-> T0] >> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {K0, K1} @@ T3 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> TRUE @@ T2 :> FALSE @@ T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +13: <Action line 518, col 5 to line 618, col 45 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {K0} @@ T2 :> {} @@ T3 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> TRUE @@ T3 :> TRUE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "write", txnid |-> T1, key |-> K0], + [op |-> "begin", txnid |-> T3], + [op |-> "read", txnid |-> T2, key |-> K1, ver |-> T0], + [op |-> "read", txnid |-> T2, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K0, ver |-> T0] >> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {K0, K1} @@ T3 :> {K0}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> TRUE @@ T2 :> FALSE @@ T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +14: <Action line 518, col 5 to line 618, col 45 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {K0} @@ T2 :> {} @@ T3 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> TRUE @@ T3 :> TRUE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "write", txnid |-> T1, key |-> K0], + [op |-> "begin", txnid |-> T3], + [op |-> "read", txnid |-> T2, key |-> K1, ver |-> T0], + [op |-> "read", txnid |-> T2, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K1, ver |-> T0] >> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {K0, K1} @@ T3 :> {K0, K1}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> TRUE @@ T2 :> FALSE @@ T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +15: <Action line 876, col 5 to line 903, col 48 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {K0} @@ T2 :> {K1} @@ T3 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> TRUE @@ T3 :> TRUE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "write", txnid |-> T1, key |-> K0], + [op |-> "begin", txnid |-> T3], + [op |-> "read", txnid |-> T2, key |-> K1, ver |-> T0], + [op |-> "read", txnid |-> T2, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K1, ver |-> T0], + [op |-> "write", txnid |-> T2, key |-> K1] >> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {} @@ T2 :> {K0, K1} @@ T3 :> {K0, K1}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> TRUE @@ T2 :> TRUE @@ T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +16: <Action line 518, col 5 to line 618, col 45 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {K0} @@ T2 :> {K1} @@ T3 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> TRUE @@ T3 :> TRUE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "write", txnid |-> T1, key |-> K0], + [op |-> "begin", txnid |-> T3], + [op |-> "read", txnid |-> T2, key |-> K1, ver |-> T0], + [op |-> "read", txnid |-> T2, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K1, ver |-> T0], + [op |-> "write", txnid |-> T2, key |-> K1], + [op |-> "read", txnid |-> T1, key |-> K0, ver |-> T1] >> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {K0} @@ T2 :> {K0, K1} @@ T3 :> {K0, K1}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> TRUE @@ T2 :> TRUE @@ T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +17: <Action line 876, col 5 to line 903, col 48 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {K0} @@ T2 :> {K1} @@ T3 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> TRUE @@ T3 :> TRUE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "write", txnid |-> T1, key |-> K0], + [op |-> "begin", txnid |-> T3], + [op |-> "read", txnid |-> T2, key |-> K1, ver |-> T0], + [op |-> "read", txnid |-> T2, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K1, ver |-> T0], + [op |-> "write", txnid |-> T2, key |-> K1], + [op |-> "read", txnid |-> T1, key |-> K0, ver |-> T1] >> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {K0} @@ T2 :> {K0, K1} @@ T3 :> {K0, K1}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> K1 @@ T2 :> NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> TRUE @@ T2 :> TRUE @@ T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +18: <Action line 422, col 5 to line 483, col 84 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {K0} @@ T2 :> {} @@ T3 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> TRUE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "write", txnid |-> T0, key |-> K0], + [op |-> "write", txnid |-> T0, key |-> K1], + [op |-> "read", txnid |-> T0, key |-> K1, ver |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "write", txnid |-> T1, key |-> K0], + [op |-> "begin", txnid |-> T3], + [op |-> "read", txnid |-> T2, key |-> K1, ver |-> T0], + [op |-> "read", txnid |-> T2, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K0, ver |-> T0], + [op |-> "read", txnid |-> T3, key |-> K1, ver |-> T0], + [op |-> "write", txnid |-> T2, key |-> K1], + [op |-> "read", txnid |-> T1, key |-> K0, ver |-> T1], + [ op |-> "abort", + txnid |-> T2, + reason |-> "in attempted commit, to preserve serializability" ] >> +/\ holdingSIREADlocks = (T0 :> {K1} @@ T1 :> {K0} @@ T2 :> {} @@ T3 :> {K0, K1}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> K1 @@ T2 :> NoLock @@ T3 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> TRUE @@ T2 :> FALSE @@ T3 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2196:0 @!@!@ +Checkpointing completed at (2011-10-09 18:02:35) +@!@!@ENDMSG 2196 @!@!@</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>661</commentid> + <comment_count>6</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-10 09:57:49 +0000</bug_when> + <thetext>Chris Newcombe: + +This time, it did not delete the MC*.fp file – info below. + +Of course, it didn’t hit the negative seek offset either. But another test on a different host, running for just as long, did just hit the negative seek offset error (and deleted its files as usual). + +So this file size might possibly be a low estimate of the size that causes the negative seek offset error. (If it’s caused by a size issue.) + + + +Directory of D:\serializableSnapshotIsolation.toolbox\serializable, 2 keys 4 txns FULL symmetry\11-10-01-22-25-12 + + + +10/01/2011 10:25 PM 0 MC.st + +10/09/2011 06:02 PM 16 MC.st.chkpt + +10/09/2011 03:42 PM 17,179,869,408 MC_0.fp + +10/09/2011 05:54 PM 0 MC_0.tmp + +10/09/2011 03:45 PM 17,179,869,424 MC_1.fp + + 5 File(s) 34,359,738,848 bytes + + 0 Dir(s) 736,461,398,016 bytes free + + + +D:\serializableSnapshotIsolation.toolbox\serializable, 2 keys 4 txns FULL symmet + +ry\11-10-01-22-25-12> + + + +The drive was not full (see attached picturePictures attached (sorry, this is the easiest way to capture the information) + +~ 154GB of 839GB used</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>706</commentid> + <comment_count>7</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-11-29 00:14:59 +0000</bug_when> + <thetext>MidEntry turned negative: +================ +loEntry: -2147483648 +midEntry: -2147483390 +hiEntry: -2147482624 +loVal: 9223361181405976355 +hiVal: 9223365871748060008</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>707</commentid> + <comment_count>8</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-11-29 17:09:00 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>708</commentid> + <comment_count>9</comment_count> + <attachid>132</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-11-29 17:09:03 +0000</bug_when> + <thetext>Created attachment 132 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>114</attachid> + <date>2011-09-27 15:45:00 +0000</date> + <delta_ts>2011-09-27 15:45:04 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>181192</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>132</attachid> + <date>2011-11-29 17:09:00 +0000</date> + <delta_ts>2011-11-29 17:09:03 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>4625</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>211</bug_id> + + <creation_ts>2011-09-30 11:50:00 +0000</creation_ts> + <short_desc>Error when looking for PlusCal algorithm</short_desc> + <delta_ts>2011-09-30 16:54:03 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>WONTFIX</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>640</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-09-30 11:50:23 +0000</bug_when> + <thetext>Opening the spec or trivially modifying it and saving it causes the exception in the attachment. However a new spec that is identical to this except for the module name does not cause the error.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>641</commentid> + <comment_count>1</comment_count> + <attachid>115</attachid> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-09-30 11:55:10 +0000</bug_when> + <thetext>Created attachment 115 +The TLA spec</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>642</commentid> + <comment_count>2</comment_count> + <attachid>116</attachid> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-09-30 11:56:24 +0000</bug_when> + <thetext>Created attachment 116 +The Console output.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>643</commentid> + <comment_count>3</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-09-30 16:54:03 +0000</bug_when> + <thetext>An examination of the code indicates that this exception occurred because performing a find method call with an offset of 0 on a FindReplaceDocumentAdapter object produced a BadLocationException. An examination of the code of the FindReplaceDocumentAdapter indicates that this can happen only if the document being searched has length less than or equal to 0. If programmers had ever heard of the concept of documentation, it might be possible to determine if there are some valid circumstances in which a document that is not empty can have a non-positive length. Since there is no documentation, I will assume that the length of a non-empty document should be positive, and therefore this is a bug in the Eclipse infrastructure. This conclusion is supported by the fact that it was repeatable with that particular spec, but disappeared when I deleted the spec, closed the Toolbox, re-opened the Toolbox, and then recreated the spec. (Closing the Toolbox was necessary to make it disappear.) + +However, there is still a bug. If the document is empty (has length 0), then this error repeatably occurs. I would call that a bug in the find method, but of course that method can't have any bugs because it has no specification, and it can't fail to do what it is supposed to do if there's nothing that it's supposed to do. In any case, since a TLA specification file with no characters is not syntactically correct, so I think we can live with this bug.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>115</attachid> + <date>2011-09-30 11:55:00 +0000</date> + <delta_ts>2011-09-30 11:55:10 +0000</delta_ts> + <desc>The TLA spec</desc> + <filename>Test.tla</filename> + <type>text/plain</type> + <size>6781</size> + <attacher name="Leslie Lamport">lamport</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>116</attachid> + <date>2011-09-30 11:56:00 +0000</date> + <delta_ts>2011-09-30 11:56:24 +0000</delta_ts> + <desc>The Console output.</desc> + <filename>Test-console-output.txt</filename> + <type>text/plain</type> + <size>17272</size> + <attacher name="Leslie Lamport">lamport</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>212</bug_id> + + <creation_ts>2011-10-04 01:56:00 +0000</creation_ts> + <short_desc>Coverage checking crashes distributed model checking (tlc2.tool.WorkerException) after a few seconds of work with even a single worker</short_desc> + <delta_ts>2011-10-07 19:11:15 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Linux</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>blocker</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Chris Newcombe">chris.newcombe</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>644</commentid> + <comment_count>0</comment_count> + <who name="Chris Newcombe">chris.newcombe</who> + <bug_when>2011-10-04 01:56:24 +0000</bug_when> + <thetext>I’m trying ‘Run in distributed mode’ for the first time. +I’m using Toolbox Version 1.4.0 of 16 September 2011. (Doing ‘check for updates’ says No Updates Found). +From: https://tla.msr-inria.inria.fr/tlatoolbox/products/TLAToolbox-1.4.0-linux.gtk.x86_64.zip + +I believe I have it set up correctly. I can start multiple workers on multiple machines, and they do register and start work. + +But model-checking always exits a few seconds after starting, with this error: + + tlc2.tool.WorkerException + at tlc2.tool.distributed.TLCWorker.getNextStates(TLCWorker.java:123) + …. (Full TLC logs are pasted below.) + +Even if I try it with a single worker, it always exits with that exception, after checking a constant number of states. +The final number of states seems deterministic, and depends on the specification. It does not seem to depend on which single worker does the checking. +e.g. +- For one specification (serializableSnapshotIsolation) the number of states is 25374 +- For another specification (textbookSnapshotIsolation.tla) the number of states is 21618 + +I have not yet looked for patterns when using more than one worker. + +I’ll paste TLC logs first (master and single worker). +After that, I’ll describe how I created the nodes (which OS etc). +If necessary we I could create a set of EC2 nodes and give you direct SSH access, if you need to examine this in situ. Let me know. + +Regards, + +Chris + +-- + +The TLC console log from the master: (the worker’s log is after this) + +TLC Server Version 2.03 of 20 July 2011 +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /mnt/serializableSnapshotIsolation.toolbox/serializable, 2 keys, 4 txns, FULL symmetry/MC.tla +Parsing file /mnt/serializableSnapshotIsolation.toolbox/serializable, 2 keys, 4 txns, FULL symmetry/serializableSnapshotIsolation.tla +Parsing file /mnt/toolbox/plugins/org.lamport.tlatools_1.0.0.201109181126/tla2sany/StandardModules/TLC.tla +Parsing file /mnt/toolbox/plugins/org.lamport.tlatools_1.0.0.201109181126/tla2sany/StandardModules/Integers.tla +Parsing file /mnt/toolbox/plugins/org.lamport.tlatools_1.0.0.201109181126/tla2sany/StandardModules/Sequences.tla +Parsing file /mnt/toolbox/plugins/org.lamport.tlatools_1.0.0.201109181126/tla2sany/StandardModules/FiniteSets.tla +Parsing file /mnt/toolbox/plugins/org.lamport.tlatools_1.0.0.201109181126/tla2sany/StandardModules/Naturals.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module serializableSnapshotIsolation +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2011-10-03 22:58:38) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state(s) generated. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 7000:0 @!@!@ +TLC server at ip-10-167-58-139 is ready (2011-10-03 22:58:39) +@!@!@ENDMSG 7000 @!@!@ +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at rmi://ip-10-167-25-202.us-west-1.compute.internal:53005 completed (2011-10-03 22:58:49) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +%1% +@!@!@ENDMSG 1000 @!@!@ +tlc2.tool.WorkerException + at tlc2.tool.distributed.TLCWorker.getNextStates(TLCWorker.java:123) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) + at sun.rmi.transport.Transport$1.run(Transport.java:159) + at java.security.AccessController.doPrivileged(Native Method) + at sun.rmi.transport.Transport.serviceCall(Transport.java:155) + at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) + at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) + at java.lang.Thread.run(Thread.java:662) + at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255) + at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233) + at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142) + at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178) + at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132) + at $Proxy2.getNextStates(Unknown Source) + at tlc2.tool.distributed.TLCWorkerSmartProxy.getNextStates(TLCWorkerSmartProxy.java:34) + at tlc2.tool.distributed.TLCServerThread.run(TLCServerThread.java:120) + +The behavior up to this point is: +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: <Initial predicate> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) +/\ history = <<>> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: <Action line 416, col 5 to line 418, col 96 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) +/\ history = <<[op |-> "begin", txnid |-> T0]>> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: <Action line 422, col 5 to line 483, col 84 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) +/\ history = <<[op |-> "begin", txnid |-> T0], [op |-> "commit", txnid |-> T0]>> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +4: <Action line 416, col 5 to line 418, col 96 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +5: <Action line 422, col 5 to line 483, col 84 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "commit", txnid |-> T1] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +6: <Action line 416, col 5 to line 418, col 96 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "commit", txnid |-> T1], + [op |-> "begin", txnid |-> T2] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +7: <Action line 422, col 5 to line 483, col 84 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "commit", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "commit", txnid |-> T2] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +8: <Action line 416, col 5 to line 418, col 96 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "commit", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "commit", txnid |-> T2], + [op |-> "begin", txnid |-> T3] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 7003:0 @!@!@ +Worker: rmi://ip-10-167-25-202.us-west-1.compute.internal:53005 Sent: 19646 Rcvd: 25338 (2011-10-03 22:59:08) +@!@!@ENDMSG 7003 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(8) at 2011-10-03 22:59:08: 25375 states generated, 19646 distinct states found, 16644 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +25375 states generated, 19646 distinct states found, 16644 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished. (2011-10-03 22:59:08) +@!@!@ENDMSG 2186 @!@!@ + + +The worker says: + +ubuntu@ip-10-167-25-202:/mnt$ java -cp tla2tools.jar tlc2.tool.distributed.TLCWorker ec2-50-18-128-101.us-west-1.compute.amazonaws.com & +[1] 2906 +ubuntu@ip-10-167-25-202:/mnt$ TLC Worker Version 2.03 of 20 July 2011 +Parsing file /tmp/1317682729698/MC.tla +Parsing file /tmp/1317682729698/serializableSnapshotIsolation.tla +Parsing file /tmp/TLC.tla +Parsing file /tmp/Integers.tla +Parsing file /tmp/Sequences.tla +Parsing file /tmp/FiniteSets.tla +Parsing file /tmp/Naturals.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module serializableSnapshotIsolation +Semantic processing of module MC +Starting... (2011-10-03 22:58:50) +TLC worker ready at: Mon Oct 03 22:58:50 UTC 2011 +ip-10-167-25-202.us-west-1.compute.internal, work completed at: Mon Oct 03 22:59:09 UTC 2011 Computed: 25374 Thank you! + +----- + +How I created the master and worker machines: + +I’m testing on the Amazon EC2 cloud. I’ll be writing a blog or mailinglist-post with these instructions when I have them working. +For now it’s probably easier if you just access the nodes I’ve created. + +The instructions below assume a little bit of familiarity with EC2 – e.g. that you have an AWS account signed up with EC2, and have downloaded the pk-XXX.pem and cert-XXX.pem files required to call the public EC2 API (to create instances etc.) + +#1 Create an EC2 ssh keypair – used for both the master and the workers. + In commands below, my keypair is called: tlakp1 + From the AWS Management console, download the private key to your laptop/desktop machine. + +#2. Create an EC2 security group – used for both the master and the workers. + In the commands that follow, my security group is called: tlasg + +a. Open Inbound TCP/IP port range 1024-65535 to 0.0.0.0./0 in tlasg + +Note: from: sudo netstat -lp -A inet | grep java I found that the master listens on 10996-10997, but both the master and workers listen on apparently random ports that change on each run. Hence the firewall has to be almost completely open. + +#3 Create an EC2 instance that will be the master. + + I chose a recent build of Ubuntu linux because: +- We want to easily automate the workers, so really we want linux. Ubuntu has a tool called cloud-init that +- As the workers download software from the master, presumably the workers have to be the same OS as the master. +- The master needs a GUI with remote access. Ubuntu Server can be easily upgraded to support a good remote GUI. + + The master needs disk-space for TLC’s state. (Seems like TLC remote workers don’t write to their own disks.) + Empirically, TLC performs best with EC2 ‘ephemeral’ disks – i.e. local disks, not network-attached EBS volumes. The commands below create ephemeral local disks with a filesystem mounted as /mnt. + + The commands below create 64-bit instances in AWS region ‘us-west-1’. For AMIs that are 32-bit and/or different AWS regions, see http://alestic.com/ + + Create the master instance, with ephemeral drives: + +ec2-run-instances ami-0b6f3c4e --region us-west-1 -t m1.xlarge -n 1 -b '/dev/sdb=ephemeral0' -b '/dev/sdc=ephemeral1' -b '/dev/sdd=ephemeral2' -b '/dev/sde=ephemeral3' -g tlasg -k tlakp1 –K pk-MYFILE.pem -C cert-MYFILE.pem + +Wait until the master instance is running, by repeating this command until the new instance is in ‘running’ state: + +ec2-describe-instances --region us-west-1 -K pk-${MY_AWS_EC2_X509}.pem -C cert-${MY_AWS_EC2_X509}.pem + + (the above command will tell you the public DNS name of the instance, of the form: ec2-*****.us-west-1.compute.amazonaws.com) + +#4 SSH into the master server and install Sun’s JDK, and the Ubuntu desktop, and the Free NX remote-desktop server software: + +ssh -o ServerAliveInterval=60 -i tlakp1.pem ubuntu@ec2-MYINSTANCENAME.us-west-1.compute.amazonaws.com + +install java hotspot JDK + + sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner" + sudo apt-get update + sudo apt-get install sun-java6-jdk + + sudo touch /etc/profile.d/java.sh + sudo sh -c "echo 'export JAVA_HOME=/usr/lib/jvm/java-6-sun' >> /etc/profile.d/java.sh" + sudo sh -c "echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile.d/java.sh" + source /etc/profile.d/java.sh +install ubuntu GUI (takes a while +export DEBIAN_FRONTEND=noninteractive +sudo -E apt-get update +sudo -E apt-get install -y ubuntu-desktop +install FreeNX server +sudo add-apt-repository ppa:freenx-team +sudo sed -i ‘s/natty/lucid/g’ /etc/apt/sources.list.d/freenx-team-ppa-natty.list +sudo apt-get update +sudo apt-get install freenx +wget https://bugs.launchpad.net/freenx-server/+bug/576359/+attachment/1378450/+files/nxsetup.tar.gz +tar -xvf nxsetup.tar.gz +sudo cp nxsetup /usr/lib/nx/nxsetup +sudo /usr/lib/nx/nxsetup --install +(Answer ‘n’ to the question about creating a key.) +Enable password authentication on the ssh server Edit /etc/ssh/sshd_config and +sudo nano /etc/ssh/sshd_config + (set PasswordAuthentication to yes then save the file, and exit the editor) +Restart sshd process to pick up the change: +sudo /etc/init.d/ssh restart +The user for remote desktop will be ‘ubuntu’. Set a password with: +sudo passwd ubuntu +Install TLA toolbox on the /mnt drive, not the boot drive. + +sudo chown ubuntu /mnt +cd /mnt +wget 'https://tla.msr-inria.inria.fr/tlatoolbox/products/TLAToolbox-1.4.0-linux.gtk.x86_64.zip' +unzip TLAToolbox-1.4.0-linux.gtk.x86_64.zip +#5 On your laptop or desktop, install the free NX remote-deskstop client: +Download the client from http://www.nomachine.com/download.php. +After install Click on the NX Connection wizard to setup a new connection. Put the master’s EC2 public DNS name in the Host field. Port is 22. The login user is ubuntu. +#6 Using the GUI via NX client from your laptop/desktop, run the Toolbox and create the spec and model. + +#7 Set up workers, install Sun JDK, and start TLC workers by pointing them to the master server. + +E.g. Create some workers (number is controlled with -n 2): + +ec2-run-instances ami-0b6f3c4e --region us-west-1 -t m2.4xlarge -n 2 -b '/dev/sdb=ephemeral0' -b '/dev/sdc=ephemeral1' -g tlasg -k tlakp1 -K pk-${MY_AWS_EC2_X509}.pem -C cert-${MY_AWS_EC2_X509}.pem + +Wait until they are running, by repeating this command until the new instance(s) are in ‘running’ state: + +ec2-describe-instances --region us-west-1 -K pk-${MY_AWS_EC2_X509}.pem -C cert-${MY_AWS_EC2_X509}.pem + + (the above command will tell you the public DNS name of the instance, of the form: ec2-*****.us-west-1.compute.amazonaws.com) + +For each worker: + +ssh -o ServerAliveInterval=60 -i tlakp1.pem ubuntu@ec2-WORKER-PUBLIC-DNS-NAME.us-west-1.compute.amazonaws.com + + sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner" + sudo apt-get update + sudo apt-get install sun-java6-jdk + + sudo touch /etc/profile.d/java.sh + sudo sh -c "echo 'export JAVA_HOME=/usr/lib/jvm/java-6-sun' >> /etc/profile.d/java.sh" + sudo sh -c "echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile.d/java.sh" + source /etc/profile.d/java.sh + +Connect the worker to the master, get TLC, and start the worker + +sudo chown ubuntu /mnt +cd /mnt +wget http://ec2-MASTER-EC2-PUBLIC-DNS-NAME.us-west-1.compute.amazonaws.com:10996/files/tla2tools.jar +java -cp tla2tools.jar tlc2.tool.distributed.TLCWorker ec2-MASTER-EC2-PUBLIC-DNS-NAME.us-west-1.compute.amazonaws.com</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>648</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-04 18:06:57 +0000</bug_when> + <thetext>Hi Chris, + +I assume textbookSnapshotIsolation.tla specification is same spec as with bug #205? + +And does TLC get past 21618 states for textbookSnapshotIsolation in non-distributed work? + +Thanks +Markus</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>649</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-06 20:57:34 +0000</bug_when> + <thetext>Chris, + +the latest CI zips [0] contain improved exception handling that should not swallow the nested cause. Can you give it a try? + +Thanks +Markus</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>651</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-06 20:59:51 +0000</bug_when> + <thetext>[0] https://tla.msr-inria.inria.fr/tlatoolbox/ci/products/</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>652</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-07 17:48:00 +0000</bug_when> + <thetext>Chris via direct email: + +Hi Markus, Leslie + + >>the latest CI zips [0] contain improved exception handling that should not + >>swallow the nested cause. Can you give it a try? + +I just tried the following version, with 1 remote worker and the same spec as before. + + https://tla.msr-inria.inria.fr/tlatoolbox/ci/products/ + TLAToolbox-1.4.1-linux.gtk.x86_64.zip 06-Oct-2011 11:43 47216569 + +Here's the output: + +TLC Server Version 2.03 of 20 July 2011 +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /mnt/serializableSnapshotIsolation.toolbox/serializable, 2 keys, 4 txns, FULL symmetry/MC.tla +Parsing file /mnt/serializableSnapshotIsolation.toolbox/serializable, 2 keys, 4 txns, FULL symmetry/serializableSnapshotIsolation.tla +Parsing file /mnt/toolbox/plugins/org.lamport.tlatools_1.0.0.201110061135/tla2sany/StandardModules/TLC.tla +Parsing file /mnt/toolbox/plugins/org.lamport.tlatools_1.0.0.201110061135/tla2sany/StandardModules/Integers.tla +Parsing file /mnt/toolbox/plugins/org.lamport.tlatools_1.0.0.201110061135/tla2sany/StandardModules/Sequences.tla +Parsing file /mnt/toolbox/plugins/org.lamport.tlatools_1.0.0.201110061135/tla2sany/StandardModules/FiniteSets.tla +Parsing file /mnt/toolbox/plugins/org.lamport.tlatools_1.0.0.201110061135/tla2sany/StandardModules/Naturals.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module serializableSnapshotIsolation +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2011-10-07 15:28:39) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state(s) generated. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 7000:0 @!@!@ +TLC server at ip-10-167-58-139 is ready (2011-10-07 15:28:40) +@!@!@ENDMSG 7000 @!@!@ +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at rmi://ip-10-167-25-202.us-west-1.compute.internal:40387 completed (2011-10-07 15:28:43) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +%1% +@!@!@ENDMSG 1000 @!@!@ +tlc2.tool.WorkerException + at tlc2.tool.distributed.TLCWorker.getNextStates(TLCWorker.java:123) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) + at sun.rmi.transport.Transport$1.run(Transport.java:159) + at java.security.AccessController.doPrivileged(Native Method) + at sun.rmi.transport.Transport.serviceCall(Transport.java:155) + at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) + at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) + at java.lang.Thread.run(Thread.java:662) + at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255) + at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233) + at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142) + at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178) + at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132) + at $Proxy2.getNextStates(Unknown Source) + at tlc2.tool.distributed.TLCWorkerSmartProxy.getNextStates(TLCWorkerSmartProxy.java:34) + at tlc2.tool.distributed.TLCServerThread.run(TLCServerThread.java:120) +Caused by: java.lang.NullPointerException + at tlc2.tool.TLCStateMutSource.copy(TLCStateMutSource.java:124) + at tlc2.value.FcnLambdaValue.<init>(FcnLambdaValue.java:41) + at tlc2.tool.Tool.evalAppl(Tool.java:1585) + at tlc2.tool.Tool.eval(Tool.java:1212) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:1018) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:776) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:1021) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:878) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:715) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:878) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:975) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:776) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:1029) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:776) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:1063) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:878) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:816) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:878) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:700) + at tlc2.tool.distributed.TLCApp.getNextStates(TLCApp.java:132) + at tlc2.tool.distributed.TLCWorker.getNextStates(TLCWorker.java:76) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) + at sun.rmi.transport.Transport$1.run(Transport.java:159) + at java.security.AccessController.doPrivileged(Native Method) + at sun.rmi.transport.Transport.serviceCall(Transport.java:155) + at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) + at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) + at java.lang.Thread.run(Thread.java:662) + +The behavior up to this point is: +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: <Initial predicate> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) +/\ history = <<>> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: <Action line 416, col 5 to line 418, col 96 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) +/\ history = <<[op |-> "begin", txnid |-> T0]>> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: <Action line 422, col 5 to line 483, col 84 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) +/\ history = <<[op |-> "begin", txnid |-> T0], [op |-> "commit", txnid |-> T0]>> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +4: <Action line 416, col 5 to line 418, col 96 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +5: <Action line 422, col 5 to line 483, col 84 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "commit", txnid |-> T1] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +6: <Action line 416, col 5 to line 418, col 96 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "commit", txnid |-> T1], + [op |-> "begin", txnid |-> T2] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +7: <Action line 422, col 5 to line 483, col 84 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "commit", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "commit", txnid |-> T2] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +8: <Action line 416, col 5 to line 418, col 96 of module serializableSnapshotIsolation> +/\ holdingXLocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ outConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) +/\ history = << [op |-> "begin", txnid |-> T0], + [op |-> "commit", txnid |-> T0], + [op |-> "begin", txnid |-> T1], + [op |-> "commit", txnid |-> T1], + [op |-> "begin", txnid |-> T2], + [op |-> "commit", txnid |-> T2], + [op |-> "begin", txnid |-> T3] >> +/\ holdingSIREADlocks = (T0 :> {} @@ T1 :> {} @@ T2 :> {} @@ T3 :> {} @@ T4 :> {}) +/\ waitingForXLock = (T0 :> NoLock @@ T1 :> NoLock @@ T2 :> NoLock @@ T3 :> NoLock @@ T4 :> NoLock) +/\ inConflict = (T0 :> FALSE @@ T1 :> FALSE @@ T2 :> FALSE @@ T3 :> FALSE @@ T4 :> FALSE) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 7003:0 @!@!@ +Worker: rmi://ip-10-167-25-202.us-west-1.compute.internal:40387 Sent: 19646 Rcvd: 25338 (2011-10-07 15:29:02) +@!@!@ENDMSG 7003 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(8) at 2011-10-07 15:29:02: 25375 states generated, 19646 distinct states found, 16644 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +25375 states generated, 19646 distinct states found, 16644 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished. (2011-10-07 15:29:02) +@!@!@ENDMSG 2186 @!@!@ + + +And the console output of the single worker: + +ubuntu@ip-10-167-25-202:/mnt$ java -cp tla2tools.jar tlc2.tool.distributed.TLCWorker ec2-50-18-128-101.us-west-1.compute.amazonaws.com & +[1] 6990 +ubuntu@ip-10-167-25-202:/mnt$ TLC Worker Version 2.03 of 20 July 2011 +Parsing file /tmp/1318001328641/MC.tla +Parsing file /tmp/1318001328641/serializableSnapshotIsolation.tla +Parsing file /tmp/TLC.tla +Parsing file /tmp/Integers.tla +Parsing file /tmp/Sequences.tla +Parsing file /tmp/FiniteSets.tla +Parsing file /tmp/Naturals.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module serializableSnapshotIsolation +Semantic processing of module MC +Starting... (2011-10-07 15:28:49) +TLC worker ready at: Fri Oct 07 15:28:49 UTC 2011 +ip-10-167-25-202.us-west-1.compute.internal, work completed at: Fri Oct 07 15:29:08 UTC 2011 Computed: 25374 Thank you!</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>653</commentid> + <comment_count>5</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-07 18:47:13 +0000</bug_when> + <thetext>I'm able to reproduce this locally even with cmdline TLC. Causing the NPE is related to "coverage" checking. Removing the coverage parameter on the cmdline, makes the NPE disappear.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>654</commentid> + <comment_count>6</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-07 18:54:54 +0000</bug_when> + <thetext>Coverage has been remove from the parameters that are passed to TLCServer until the root cause for the NPE is found. The next CI build will include this change.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>655</commentid> + <comment_count>7</comment_count> + <attachid>117</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-07 18:54:55 +0000</bug_when> + <thetext>Created attachment 117 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>117</attachid> + <date>2011-10-07 18:54:00 +0000</date> + <delta_ts>2011-10-07 18:54:55 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>2122</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>213</bug_id> + + <creation_ts>2011-10-04 15:10:00 +0000</creation_ts> + <short_desc>DiskFPSet memory lookup fails to look up 0 (zero) or Long.MIN_VALUE</short_desc> + <delta_ts>2011-10-06 20:57:45 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>645</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-04 15:10:31 +0000</bug_when> + <thetext>A bucket used by DiskFPSet to store fingerprints in memory marks unused positions with zeros. Thus DiskFPSet#memLookup(long) cannot lookup a fingerprint which happens to be either 0 or Long.MIN_VALUE (zeroing Long.MIN_VALUE msb turns it into 0).</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>646</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-04 15:11:58 +0000</bug_when> + <thetext>FWIW: No code appears to exist that guards TLC from using 0/zero as a valid fingerprint</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>647</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-04 15:21:58 +0000</bug_when> + <thetext>Fromn the moment when the in-memory storage is flushed to disk, zero is correctly handled by DiskFPSet#diskLookup(long). This means that the behavior for 0 and Long.Min_Value depends on DiskFPSets internal state.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>650</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-06 20:57:45 +0000</bug_when> + <thetext>[0] https://tla.msr-inria.inria.fr/tlatoolbox/ci/products/</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>214</bug_id> + + <creation_ts>2011-10-09 10:35:00 +0000</creation_ts> + <short_desc>Performance bottleneck in checkpointing and .fp file roll-over</short_desc> + <delta_ts>2012-01-14 21:10:54 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>656</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-09 10:35:12 +0000</bug_when> + <thetext>Creating a checkpoint and/or rolling over the fingerprint (.fp) disk backing store essentially stalls TLC for "larger" models. A larger model is one with millions of states and multi GB disk files. Checkpointing or rolling over causes the complete file to be copied taking most + +In distributed mode, this has the extra problem of disconnecting TLCWorkers because TLCServer stops responding for too long. Obviously we could make TLCWorkers more robust WRT timeouts, but it doesn't solve the underlying problem.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>790</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-14 21:10:54 +0000</bug_when> + <thetext>This bottleneck might be the cause for tlc2.tool.fp.DiskFPSet.beginChkpt() not doing any checkpointing</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>215</bug_id> + + <creation_ts>2011-10-09 11:32:00 +0000</creation_ts> + <short_desc>Make -fpbits parameter available in HowToRun section of model editor</short_desc> + <delta_ts>2011-10-09 12:00:48 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>657</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-09 11:32:16 +0000</bug_when> + <thetext>Add UI for the newly added fpbits parameter (see bug #210).</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>658</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-09 12:00:47 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>659</commentid> + <comment_count>2</comment_count> + <attachid>118</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-09 12:00:48 +0000</bug_when> + <thetext>Created attachment 118 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>118</attachid> + <date>2011-10-09 12:00:00 +0000</date> + <delta_ts>2011-10-09 12:00:48 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>6726</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>216</bug_id> + + <creation_ts>2011-10-10 10:02:00 +0000</creation_ts> + <short_desc>"-1 workers registered" in TLC distributed mode</short_desc> + <delta_ts>2011-12-06 20:01:35 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>662</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-10 10:02:00 +0000</bug_when> + <thetext>Chris Newcombe: + +Is the count of remote workers supposed to be accurate? + +I have 6 worker hosts, with 8 workers (cores) each. +I started all workers (after restoring from a checkpoint), and it only reached 40 workers, not 48. I don’t know why. +So I killed all workers, intending to restart them. +I noticed that after I killed them, the master says there are -1 workers (see partial screenshot, below/attached) + +I then tried restarting workers, but won’t go higher than 4. I suspect the server has stopped, although the workers don’t complain on their side. +The tail end of the TLC log on the master says the following. + + java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + +Tail of long master log: +… +@!@!@STARTMSG 1000:1 @!@!@ +%1% +@!@!@ENDMSG 1000 @!@!@ +java.lang.NullPointerException + at tlc2.tool.distributed.TLCServer.getNewStates(TLCServer.java:485) + at tlc2.tool.distributed.TLCServer.modelCheck(TLCServer.java:422) + at tlc2.tool.distributed.TLCServer.main(TLCServer.java:554) +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at rmi://ip-10-166-53-61.us-west-1.compute.internal:60641 completed (2011-10-10 05:23:43) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at rmi://ip-10-166-53-61.us-west-1.compute.internal:56161 completed (2011-10-10 05:23:44) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at rmi://ip-10-166-53-61.us-west-1.compute.internal:49840 completed (2011-10-10 05:23:46) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at rmi://ip-10-166-53-61.us-west-1.compute.internal:56686 completed (2011-10-10 05:23:48) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at rmi://ip-10-166-53-61.us-west-1.compute.internal:51983 completed (2011-10-10 05:23:49) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 2129:1 @!@!@ +DiskGraph.toString() +@!@!@ENDMSG 2129 @!@!@ +java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:207) + at tlc2.tool.fp.DiskFPSet.diskLookup(DiskFPSet.java:458) + at tlc2.tool.fp.DiskFPSet.contains(DiskFPSet.java:287) + at tlc2.tool.fp.FPSet.containsBlock(FPSet.java:110) + at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) + at sun.rmi.transport.Transport$1.run(Transport.java:159) + at java.security.AccessController.doPrivileged(Native Method) + at sun.rmi.transport.Transport.serviceCall(Transport.java:155) + at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) + at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) + at java.lang.Thread.run(Thread.java:662)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>721</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-06 20:01:32 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>722</commentid> + <comment_count>2</comment_count> + <attachid>137</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-06 20:01:35 +0000</bug_when> + <thetext>Created attachment 137 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>137</attachid> + <date>2011-12-06 20:01:00 +0000</date> + <delta_ts>2011-12-06 20:01:35 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>6726</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>217</bug_id> + + <creation_ts>2011-10-10 10:06:00 +0000</creation_ts> + <short_desc>Deactivate "Model Overview" worker count if distributed is on</short_desc> + <delta_ts>2011-10-10 10:06:58 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>663</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-10 10:06:58 +0000</bug_when> + <thetext>Worker count has no effect in distributed TLC, thus it should be deactivated if distributed mode is turned on.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>218</bug_id> + + <creation_ts>2011-10-13 15:58:00 +0000</creation_ts> + <short_desc>NPE in TLCWorker KeepAlive Timer task</short_desc> + <delta_ts>2011-10-13 15:59:24 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>664</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-13 15:58:00 +0000</bug_when> + <thetext>Exception in thread "TLCWorker KeepAlive Timer" java.lang.NullPointerException + at tlc2.tool.queue.StateQueue.sEnqueue(StateQueue.java:66) + at tlc2.tool.distributed.TLCServerThread.handleRemoteWorkerLost(TLCServerThread.java:210) + at tlc2.tool.distributed.TLCServerThread.access$3(TLCServerThread.java:208) + at tlc2.tool.distributed.TLCServerThread$TLCTimerTask.run(TLCServerThread.java:278) + at java.util.TimerThread.mainLoop(Timer.java:512) + at java.util.TimerThread.run(Timer.java:462)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>665</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-13 15:59:23 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>666</commentid> + <comment_count>2</comment_count> + <attachid>119</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-13 15:59:24 +0000</bug_when> + <thetext>Created attachment 119 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>119</attachid> + <date>2011-10-13 15:59:00 +0000</date> + <delta_ts>2011-10-13 15:59:24 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1580</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>219</bug_id> + + <creation_ts>2011-10-13 16:00:00 +0000</creation_ts> + <short_desc>NPE in TLCServer when TLCWorker disconnect unexpectedly</short_desc> + <delta_ts>2011-10-13 21:37:41 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>667</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-13 16:00:29 +0000</bug_when> + <thetext>java.lang.NullPointerException + at tlc2.tool.distributed.TLCServer.getNewStates(TLCServer.java:485) + at tlc2.tool.distributed.TLCServer.modelCheck(TLCServer.java:422) + at tlc2.tool.distributed.TLCServer.main(TLCServer.java:554)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>668</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-13 21:37:38 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>669</commentid> + <comment_count>2</comment_count> + <attachid>120</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-13 21:37:41 +0000</bug_when> + <thetext>Created attachment 120 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>120</attachid> + <date>2011-10-13 21:37:00 +0000</date> + <delta_ts>2011-10-13 21:37:41 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>56628</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>220</bug_id> + + <creation_ts>2011-10-17 12:17:00 +0000</creation_ts> + <short_desc>Toolbox not reporting TLC error.</short_desc> + <delta_ts>2011-10-17 15:10:23 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Windows Vista</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + <dependson>145</dependson> + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>670</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-10-17 12:17:24 +0000</bug_when> + <thetext>I ran TLC and the Console showed an error while the Toolbox showed just a starting time, no ending time, and the status "not running". The Eclipse console output shows six instances of an assertion failure at TLCModelLaunchDataProvider.java:249. If Bugzilla lets me, I will attach the relevant files and output below.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>671</commentid> + <comment_count>1</comment_count> + <attachid>121</attachid> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-10-17 12:19:37 +0000</bug_when> + <thetext>Created attachment 121 +The .toolbox directory</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>672</commentid> + <comment_count>2</comment_count> + <attachid>122</attachid> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-10-17 12:21:00 +0000</bug_when> + <thetext>Created attachment 122 +The relevant part of the Eclipse console. + +I was running the Toolbox under Eclipse</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>673</commentid> + <comment_count>3</comment_count> + <attachid>123</attachid> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-10-17 12:22:03 +0000</bug_when> + <thetext>Created attachment 123 +the Toolbox's TLC Console</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>674</commentid> + <comment_count>4</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-10-17 12:24:36 +0000</bug_when> + <thetext>This has happened before but wasn't reproducible. It now seems to be reproducible. I'm attaching the TLA+ input below just in case the version saved in the .toolbox directory is corrupted. + +-------------------------------- MODULE Test -------------------------------- +EXTENDS Integers, TLAPS + +R==42 + +\*a \leq b == IF a = b THEN TRUE ELSE a < b + +THEOREM 4+5=9 +BY SMT + +THEOREM ASSUME \A a, b \in R : (a \leq b) = (IF a = b THEN TRUE ELSE a < b) + PROVE \A a, b \in R : + a < b => + {r \in R : a \leq r /\ r \leq b} = + {r \in R : a < r /\ r < b} \union {a, b} +OBVIOUS + +VARIABLE x, y +Init == x = 0 /\ y = 0 +Next == x'=(x+1) /\ y' = y + + + +=============================================================================</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>675</commentid> + <comment_count>5</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-10-17 12:31:49 +0000</bug_when> + <thetext>Sorry, not completely reproducible. Closing the Toolbox and restarting it fixes things. So the Toolbox's data structures had somehow gotten into a bad state, and I failed to save them. Anyway, I hope that the location of the failed assertion will allow some kind of patch that will allow the Toolbox to do something reasonable despite the assertion not holding.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>683</commentid> + <comment_count>6</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-17 15:10:23 +0000</bug_when> + <thetext>Hi, + +this appears to be a duplicate of bug #145. Both stack traces look the same. Thus, marking as a depends.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>121</attachid> + <date>2011-10-17 12:19:00 +0000</date> + <delta_ts>2011-10-17 12:19:37 +0000</delta_ts> + <desc>The .toolbox directory</desc> + <filename>Test.toolbox.zip</filename> + <type>application/octet-stream</type> + <size>8147</size> + <attacher name="Leslie Lamport">lamport</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>122</attachid> + <date>2011-10-17 12:21:00 +0000</date> + <delta_ts>2011-10-17 12:21:00 +0000</delta_ts> + <desc>The relevant part of the Eclipse console.</desc> + <filename>test-eclipse-console.txt</filename> + <type>text/plain</type> + <size>20814</size> + <attacher name="Leslie Lamport">lamport</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>123</attachid> + <date>2011-10-17 12:22:00 +0000</date> + <delta_ts>2011-10-17 12:22:03 +0000</delta_ts> + <desc>the Toolbox's TLC Console</desc> + <filename>test-tlc-console.txt</filename> + <type>text/plain</type> + <size>5485</size> + <attacher name="Leslie Lamport">lamport</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>221</bug_id> + + <creation_ts>2011-10-17 14:01:00 +0000</creation_ts> + <short_desc>TLC trace and exception output gets mixed in distributed mode causing parsing problems in the Toolbox</short_desc> + <delta_ts>2011-11-28 23:57:06 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + <dependson>229</dependson> + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>676</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-17 14:01:28 +0000</bug_when> + <thetext>CN: "The state in the pane below +… + +/\ logStreamB = << [seq |-> 1, type |-> "EpochChange", lock |-> 1, pel |-> 0, epoch |-> 1], + [seq |-> 2, java.rmi.ConnectException: Connection refused to host: 10.167.25.202; nested exception is: + java.net.ConnectException: Connection refused +type |-> "Data", lock |-> 1, epoch |-> 1], + [seq |-> 3, type |-> "Data", lock |-> 1, epoch |-> 1] > +>… + + +The ascii value of that variable from the previous state in the trace + +<< [seq |-> 1, type |-> "EpochChange", lock |-> 1, pel |-> 0, epoch |-> 1], + [seq |-> 2, type |-> "Data", lock |-> 1, epoch |-> 1], + [seq |-> 3, type |-> "Data", lock |-> 1, epoch |-> 1] >> +"</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>677</commentid> + <comment_count>1</comment_count> + <attachid>124</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-17 14:02:01 +0000</bug_when> + <thetext>Created attachment 124 +Toolbox Screenshot</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>678</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-17 14:03:16 +0000</bug_when> + <thetext>LL: "I don’t know how the Java runtime is supposed to handle concurrent print statements. If it allows the output to be mixed, then calls to the print method should be synchronized. It’s unlikely that all of them are—especially ones reporting an exception. If the runtime is supposed to interleave calls to the print method, then it’s a Java problem."</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>682</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-17 14:17:29 +0000</bug_when> + <thetext>I wonder if the ConnectionException should even be printed to the console (System.out|System.err). What about logging non-functional errors/warnings to a dedicated logging facility? That would make it easier for users to distinguish real model checking errors.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>699</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-11-23 20:45:47 +0000</bug_when> + <thetext>Concurrent writes to ToolIO.out and ToolIO.err are not synchronized and will be interleaved randomly.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>700</commentid> + <comment_count>5</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-11-24 00:10:44 +0000</bug_when> + <thetext>Released a change to HEAD that makes all console writes go to ToolIO.out. This prevents interleaved output.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>701</commentid> + <comment_count>6</comment_count> + <attachid>130</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-11-24 00:10:47 +0000</bug_when> + <thetext>Created attachment 130 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>705</commentid> + <comment_count>7</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-11-28 23:57:06 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>124</attachid> + <date>2011-10-17 14:02:00 +0000</date> + <delta_ts>2011-10-17 14:02:01 +0000</delta_ts> + <desc>Toolbox Screenshot</desc> + <filename>image001.png</filename> + <type>image/png</type> + <size>282966</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>130</attachid> + <date>2011-11-24 00:10:00 +0000</date> + <delta_ts>2011-11-24 00:10:47 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>3595</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>222</bug_id> + + <creation_ts>2011-10-17 14:08:00 +0000</creation_ts> + <short_desc>java.io.IOException: Bad file descriptor in distributed mode</short_desc> + <delta_ts>2011-12-07 17:20:06 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>Linux</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>679</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-17 14:08:11 +0000</bug_when> + <thetext>@!@!@STARTMSG 7002:0 @!@!@ +TLC worker rmi://ip-10-166-191-183.us-west-1.compute.internal:42289 disconnected (2011-10-12 22:58:55) +@!@!@ENDMSG 7002 @!@!@ +@!@!@STARTMSG 2196:0 @!@!@ +Checkpointing completed at (2011-10-12 22:58:55) +@!@!@ENDMSG 2196 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +%1% +@!@!@ENDMSG 1000 @!@!@ +java.lang.NullPointerException + at tlc2.tool.distributed.TLCServer.getNewStates(TLCServer.java:485) + at tlc2.tool.distributed.TLCServer.modelCheck(TLCServer.java:422) + at tlc2.tool.distributed.TLCServer.main(TLCServer.java:554) +@!@!@STARTMSG 1000:1 @!@!@ +Bad file descriptor +@!@!@ENDMSG 1000 @!@!@ +java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.flushBuffer(BufferedRandomAccessFile.java:173) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:203) + at tlc2.util.BufferedRandomAccessFile.write(BufferedRandomAccessFile.java:308) + at java.io.RandomAccessFile.writeLong(RandomAccessFile.java:1001) + at tlc2.tool.TLCTrace.writeState(TLCTrace.java:69) + at tlc2.tool.TLCTrace.writeState(TLCTrace.java:56) + at tlc2.tool.distributed.TLCServerThread.run(TLCServerThread.java:171) +@!@!@STARTMSG 2129:1 @!@!@ +DiskGraph.toString() +@!@!@ENDMSG 2129 @!@!@ +java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:207) + at tlc2.tool.fp.DiskFPSet.diskLookup(DiskFPSet.java:458) + at tlc2.tool.fp.DiskFPSet.put(DiskFPSet.java:232) + at tlc2.tool.fp.FPSet.putBlock(FPSet.java:96) + at tlc2.tool.distributed.FPSetManager.putBlock(FPSetManager.java:150) + at tlc2.tool.distributed.TLCServerThread.run(TLCServerThread.java:160) +@!@!@STARTMSG 2129:1 @!@!@ +DiskGraph.toString() +@!@!@ENDMSG 2129 @!@!@ +java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:207) + at tlc2.tool.fp.DiskFPSet.diskLookup(DiskFPSet.java:458) + at tlc2.tool.fp.DiskFPSet.contains(DiskFPSet.java:287) + at tlc2.tool.fp.FPSet.containsBlock(FPSet.java:110) + at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) + at sun.rmi.transport.Transport$1.run(Transport.java:159) + at java.security.AccessController.doPrivileged(Native Method) + at sun.rmi.transport.Transport.serviceCall(Transport.java:155) + at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) + at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) + at java.lang.Thread.run(Thread.java:662) +@!@!@STARTMSG 2129:1 @!@!@ +DiskGraph.toString() +@!@!@ENDMSG 2129 @!@!@ +java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:207) + at tlc2.tool.fp.DiskFPSet.diskLookup(DiskFPSet.java:458) + at tlc2.tool.fp.DiskFPSet.contains(DiskFPSet.java:287) + at tlc2.tool.fp.FPSet.containsBlock(FPSet.java:110) + at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) + at sun.rmi.transport.Transport$1.run(Transport.java:159) + at java.security.AccessController.doPrivileged(Native Method) + at sun.rmi.transport.Transport.serviceCall(Transport.java:155) + at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) + at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) + at java.lang.Thread.run(Thread.java:662) +@!@!@STARTMSG 2129:1 @!@!@ +DiskGraph.toString() +@!@!@ENDMSG 2129 @!@!@ +java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:207) + at tlc2.tool.fp.DiskFPSet.diskLookup(DiskFPSet.java:458) + at tlc2.tool.fp.DiskFPSet.put(DiskFPSet.java:232) + at tlc2.tool.fp.FPSet.putBlock(FPSet.java:96) + at tlc2.tool.distributed.FPSetManager.putBlock(FPSetManager.java:150) + at tlc2.tool.distributed.TLCServerThread.run(TLCServerThread.java:160) +@!@!@STARTMSG 2129:1 @!@!@ +DiskGraph.toString() +@!@!@ENDMSG 2129 @!@!@ +java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:207) + at tlc2.tool.fp.DiskFPSet.diskLookup(DiskFPSet.java:458) + at tlc2.tool.fp.DiskFPSet.put(DiskFPSet.java:232) + at tlc2.tool.fp.FPSet.putBlock(FPSet.java:96) + at tlc2.tool.distributed.FPSetManager.putBlock(FPSetManager.java:150) + at tlc2.tool.distributed.TLCServerThread.run(TLCServerThread.java:160) +@!@!@STARTMSG 2129:1 @!@!@ +DiskGraph.toString() +@!@!@ENDMSG 2129 @!@!@ +java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:207) + at tlc2.tool.fp.DiskFPSet.diskLookup(DiskFPSet.java:458) + at tlc2.tool.fp.DiskFPSet.contains(DiskFPSet.java:287) + at tlc2.tool.fp.FPSet.containsBlock(FPSet.java:110) + at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) + at sun.rmi.transport.Transport$1.run(Transport.java:159) + at java.security.AccessController.doPrivileged(Native Method) + at sun.rmi.transport.Transport.serviceCall(Transport.java:155) + at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) + at java.lang.Thread.run(Thread.java:662)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>728</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-07 17:18:43 +0000</bug_when> + <thetext>Master and workers are: + Ubuntu 11.04 Natty Narwhal + Sun Java SE 1.6.0_26.b03 + Java HotSpot 20.1-b02 mixed-mode</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>729</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-07 17:20:06 +0000</bug_when> + <thetext>Stack copied over from bug #216 (deals with counter turning negative): + +I then tried restarting workers, but won’t go higher than 4. I suspect the +server has stopped, although the workers don’t complain on their side. +The tail end of the TLC log on the master says the following. + + java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + +Tail of long master log: +… +@!@!@STARTMSG 1000:1 @!@!@ +%1% +@!@!@ENDMSG 1000 @!@!@ +java.lang.NullPointerException + at +tlc2.tool.distributed.TLCServer.getNewStates(TLCServer.java:485) + at +tlc2.tool.distributed.TLCServer.modelCheck(TLCServer.java:422) + at tlc2.tool.distributed.TLCServer.main(TLCServer.java:554) +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at +rmi://ip-10-166-53-61.us-west-1.compute.internal:60641 completed (2011-10-10 +05:23:43) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at +rmi://ip-10-166-53-61.us-west-1.compute.internal:56161 completed (2011-10-10 +05:23:44) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at +rmi://ip-10-166-53-61.us-west-1.compute.internal:49840 completed (2011-10-10 +05:23:46) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at +rmi://ip-10-166-53-61.us-west-1.compute.internal:56686 completed (2011-10-10 +05:23:48) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 7001:0 @!@!@ +Registration for worker at +rmi://ip-10-166-53-61.us-west-1.compute.internal:51983 completed (2011-10-10 +05:23:49) +@!@!@ENDMSG 7001 @!@!@ +@!@!@STARTMSG 2129:1 @!@!@ +DiskGraph.toString() +@!@!@ENDMSG 2129 @!@!@ +java.io.IOException: Bad file descriptor + at java.io.RandomAccessFile.seek(Native Method) + at +tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:207) + at tlc2.tool.fp.DiskFPSet.diskLookup(DiskFPSet.java:458) + at tlc2.tool.fp.DiskFPSet.contains(DiskFPSet.java:287) + at tlc2.tool.fp.FPSet.containsBlock(FPSet.java:110) + at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source) + at +sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:597) + at +sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) + at sun.rmi.transport.Transport$1.run(Transport.java:159) + at java.security.AccessController.doPrivileged(Native Method) + at sun.rmi.transport.Transport.serviceCall(Transport.java:155) + at +sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) + at +sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) + at +sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) + at +java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) + at +java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) + at java.lang.Thread.run(Thread.java:662)</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>223</bug_id> + + <creation_ts>2011-10-20 11:02:00 +0000</creation_ts> + <short_desc>Garbage in the error message shown in Toolbox console</short_desc> + <delta_ts>2011-10-20 11:03:08 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>684</commentid> + <comment_count>0</comment_count> + <attachid>125</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-20 11:02:31 +0000</bug_when> + <thetext>Created attachment 125 +spec + +In the screen shot below, note the garbage in the error message. Further below +is the Toolbox console output. The problem repeats when I close the spec and +stop and restart the Toolbox. My guess is that the code is getting confused +because the location of the error is in the MC file, and this should be easy to +fix. The Eclipse console shows no error. + +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.03 of 20 July 2011 +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running in Model-Checking mode. +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file MC.tla +Parsing file Test.tla +Parsing file +C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\TLC.tla +Parsing file +C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Integers.tla +Parsing file TLAPS.tla +Parsing file +C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\FiniteSets.tla +Parsing file +C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Naturals.tla +Parsing file +C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module TLAPS +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module Test +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2011-10-18 04:37:59) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2105:1 @!@!@ +Evaluating assumption line 10, col 8 to line 10, col 65 of module MC failed. +Attempted to compare string "a" with non-string: +1 +@!@!@ENDMSG 2105 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished. (2011-10-18 04:37:59) +@!@!@ENDMSG 2186 @!@!@</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>685</commentid> + <comment_count>1</comment_count> + <attachid>126</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-20 11:03:08 +0000</bug_when> + <thetext>Created attachment 126 +Screenshot</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>125</attachid> + <date>2011-10-20 11:02:00 +0000</date> + <delta_ts>2011-10-20 11:02:31 +0000</delta_ts> + <desc>spec</desc> + <filename>Test.toolbox (2).zip</filename> + <type>application/zip</type> + <size>8216</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>126</attachid> + <date>2011-10-20 11:03:00 +0000</date> + <delta_ts>2011-10-20 11:03:08 +0000</delta_ts> + <desc>Screenshot</desc> + <filename>image001.png</filename> + <type>image/png</type> + <size>61110</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>224</bug_id> + + <creation_ts>2011-10-24 13:51:00 +0000</creation_ts> + <short_desc>Add reusable TLCWorker process (based on OSGi)</short_desc> + <delta_ts>2011-11-29 00:09:44 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>686</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-10-24 13:51:37 +0000</bug_when> + <thetext>Missing support for re-initialization makes the TLCWorker process unusable for multiple invocations with different models. However, from a users perspective, reusing a TLCWorker process for multiple different model checker runs is desirable.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>225</bug_id> + + <creation_ts>2011-10-29 10:11:00 +0000</creation_ts> + <short_desc>Minor problem in Toolbox reporting of "Current status"</short_desc> + <delta_ts>2015-02-11 14:44:59 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Windows Vista</op_sys> + <bug_status>ASSIGNED</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>687</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-10-29 10:11:33 +0000</bug_when> + <thetext>I started a TLC run a couple of hours ago. The Toolbox reports the correct start time, but reports the current status as "not running". This is an unusual spec because it causes TLC to run forever computing the values of constants, before doing any actual checking. Here's the relevant part of the console output. + +TLC2 Version 2.03 of 20 July 2011 +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running in Model-Checking mode. +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file MC.tla +Parsing file CarTalkPuzzle.tla +... +Semantic processing of module Naturals +... +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2011-10-28 22:57:47) +@!@!@ENDMSG 2185 @!@!@</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>226</bug_id> + + <creation_ts>2011-11-13 13:22:00 +0000</creation_ts> + <short_desc>Proof obligation line height calculation broken on Mac OSx Lion 10.7</short_desc> + <delta_ts>2011-12-14 16:58:48 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4</version> + <rep_platform>Other</rep_platform> + <op_sys>Mac OS</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + <dependson>235</dependson> + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>688</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-11-13 13:22:20 +0000</bug_when> + <thetext>On Mac OSx Lion the proof obligation view is small hiding the lower part of the proof making it unreadable. +The attached image shows the problem.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>689</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-11-13 13:22:58 +0000</bug_when> + <thetext>https://bugs.eclipse.org/353503 tracks the underlying issue upstream. Unfortunately, it has only been fixed in Eclipse 3.7.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>690</commentid> + <comment_count>2</comment_count> + <attachid>127</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-11-13 13:23:37 +0000</bug_when> + <thetext>Created attachment 127 +Screenshot</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>732</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-14 16:58:33 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>733</commentid> + <comment_count>4</comment_count> + <attachid>140</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-14 16:58:48 +0000</bug_when> + <thetext>Created attachment 140 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>127</attachid> + <date>2011-11-13 13:23:00 +0000</date> + <delta_ts>2011-11-13 13:23:37 +0000</delta_ts> + <desc>Screenshot</desc> + <filename>TLAPS-problem.png</filename> + <type>image/png</type> + <size>81669</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>140</attachid> + <date>2011-12-14 16:58:00 +0000</date> + <delta_ts>2011-12-14 16:58:48 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>969</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>227</bug_id> + + <creation_ts>2011-11-22 05:51:00 +0000</creation_ts> + <short_desc>Canceling change to assignment of value to CONSTANT does not cancel</short_desc> + <delta_ts>2011-11-22 23:43:21 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Windows 7</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>691</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-11-22 05:51:35 +0000</bug_when> + <thetext>Create a spec with a CONSTANT parameter A. Let A have the value 22. Then edit the assignment to A, change the 22 to 33, but click Cancel instead of Finish. The value 22 is displayed. Then run TLC on the model. The spec will be run with, and the model editor will then show, the assignment of 33 to A. + +This sure looks like an Eclipse bug.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>692</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-11-22 20:39:09 +0000</bug_when> + <thetext>It is a Toolbox bug. The problem is that org.lamport.tla.toolbox.tool.tlc.ui.wizard.AssignmentWizardPage.dispose() is setting the Assignment object to the typed value regardless of whether Finish or Cancel was typed. This same problem probably occurs with the various other fields that use this dispose() method.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>694</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-11-22 23:43:19 +0000</bug_when> + <thetext>Fix released to HEAD + +Check canceled flag in org.lamport.tla.toolbox.tool.tlc.ui.wizard.AssignmentWizardPage.dispose()</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>695</commentid> + <comment_count>3</comment_count> + <attachid>128</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-11-22 23:43:21 +0000</bug_when> + <thetext>Created attachment 128 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>128</attachid> + <date>2011-11-22 23:43:00 +0000</date> + <delta_ts>2011-11-22 23:43:21 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>3015</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>228</bug_id> + + <creation_ts>2011-11-22 22:01:00 +0000</creation_ts> + <short_desc>Adding variables and a behavioral spec to a constant spec causes existing models to produce a spurious error.</short_desc> + <delta_ts>2011-11-23 18:42:44 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Windows 7</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>693</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-11-22 22:01:12 +0000</bug_when> + <thetext>Step 1. Create a new spec with nothing in it. Create a new model. Put 22 in the "Evaluate Constant Expression" field (probably unnecessary) and run TLC on the model. + +Step 2. Add the following to the spec: + +EXTENDS Integers +VARIABLE y +Init == y = 0 +Next == y' = (y+1)%5 + +and edit the model to use Init and Next as the initial predicate and next-state action. Run TLC on the model. The Toolbox produces the following in the error window: + +231594371 +While working on the initial state: +y = 0 + +The error occurred when TLC was evaluating the nested +expressions at the following positions: + The error call stack is empty. + +The MC.tla and MC.cfg files seem to be fine; TLC runs them correctly from outside the Toolbox. + +A new model may (or perhaps may not) run TLC fine. The old model always produces the same error.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>696</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-11-23 00:53:21 +0000</bug_when> + <thetext>The changing of the spec was a red herring. This is a problem triggered by the introduction of the fpbits parameter that Markus will soon fix.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>697</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-11-23 18:42:39 +0000</bug_when> + <thetext>Fix released to HEAD + +If fpBits equals 0, a DiskFPSet will be used. Else if fpBits > 0, a MultiFPSet.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>698</commentid> + <comment_count>3</comment_count> + <attachid>129</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-11-23 18:42:44 +0000</bug_when> + <thetext>Created attachment 129 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>129</attachid> + <date>2011-11-23 18:42:00 +0000</date> + <delta_ts>2011-11-23 18:42:44 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>141845</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>229</bug_id> + + <creation_ts>2011-11-28 22:58:00 +0000</creation_ts> + <short_desc>Hide certain error codes from TLC errors view</short_desc> + <delta_ts>2011-11-28 23:55:04 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + <blocked>221</blocked> + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>702</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-11-28 22:58:46 +0000</bug_when> + <thetext>With bug #221, network errors are logged like regular TLC errors. To not confuse the user, these errors must not show up in either the TLC Errors nor user output.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>703</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-11-28 23:55:01 +0000</bug_when> + <thetext>Released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>704</commentid> + <comment_count>2</comment_count> + <attachid>131</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-11-28 23:55:04 +0000</bug_when> + <thetext>Created attachment 131 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>131</attachid> + <date>2011-11-28 23:55:00 +0000</date> + <delta_ts>2011-11-28 23:55:04 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>47403</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>230</bug_id> + + <creation_ts>2011-11-29 21:05:00 +0000</creation_ts> + <short_desc>Toolbox not handling multiple errors reported by PlusCal in a single message.</short_desc> + <delta_ts>2015-02-11 14:45:11 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Windows 7</op_sys> + <bug_status>ASSIGNED</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>709</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-11-29 21:05:01 +0000</bug_when> + <thetext>The methods in the PlusCal class PcalSymTab accumulate multiple errors in the String errorReport and then report them as a single error. After I fixed these error messages, the Toolbox puts an error marker on, and sets the PCal Translation Error window to be a link to, the location reported for the first of those errors. + +The error marker is added by the call of TLAMarkerHelper.installProblemMarker in the Toolbox's TranslatorJob module's runInWorkspace method (currently at line 136). It should be easy to recode this to detect and add multiple markers, by putting that call inside a loop and modifying the module's detectLocation method to take an argument saying where to start looking for a location and returning a value indicating where to look in the message for the next location. I presume that the magic that removes those error markers when the translator is called will remove all of them, but I haven't tried it. + +It would be nice if the window could have links to each of the errors. However, I suspect that if we want that, the best approach is to create separate PCal Translator Error subwindows for each of the parser errors. It is impossible to figure out from the Toolbox code how to do that. The The subwindow is created by a call to the createPartControl method in ProblemView, which got there as the result of a call to UIHelper.openView, which was called by a runnable launched by Activator.resourceChanged, which was called from the bowels of Eclipse. But the code is so inscrutable it would take me weeks to figure out how it actually works and how one could make the PCal translator and the Toolbox work together to produce the separate error subwindows.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>231</bug_id> + + <creation_ts>2011-11-29 22:48:00 +0000</creation_ts> + <short_desc>TLCWorker handles OutOfMemoryError like a model exception</short_desc> + <delta_ts>2011-12-06 22:08:13 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>710</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-11-29 22:48:06 +0000</bug_when> + <thetext>If a TLCWorker dies due to an OutOfMemoryError, the error ripples through to the server like a WorkerException (e.g. invariant violation). This effectively terminates model checking right away. +Thus, an OOM error should be wrapped in a RemoteException. This additionally allows the TLCServer to reduce the amount of new states send for the worker to calculate the next states.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>726</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-06 22:08:11 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>727</commentid> + <comment_count>2</comment_count> + <attachid>139</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-06 22:08:13 +0000</bug_when> + <thetext>Created attachment 139 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>139</attachid> + <date>2011-12-06 22:08:00 +0000</date> + <delta_ts>2011-12-06 22:08:13 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>4583</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>232</bug_id> + + <creation_ts>2011-12-01 22:16:00 +0000</creation_ts> + <short_desc>Unexport all remotly available UnicastRemoteObjs to gracefully shutdown TLCServer</short_desc> + <delta_ts>2011-12-01 22:17:54 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>711</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-01 22:16:28 +0000</bug_when> + <thetext>With the change to use a MultiFPSet instead of a more simple DiskFPSet in TLCServer (bug #215), unexporting nested FPSets becomes necessary. The TLCServer process does not shutdown gracefully anymore otherwise.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>712</commentid> + <comment_count>1</comment_count> + <attachid>133</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-01 22:17:54 +0000</bug_when> + <thetext>Created attachment 133 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>133</attachid> + <date>2011-12-01 22:17:00 +0000</date> + <delta_ts>2011-12-01 22:17:54 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>3483</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>233</bug_id> + + <creation_ts>2011-12-02 23:09:00 +0000</creation_ts> + <short_desc>Find Uses command throwing a null pointer exception</short_desc> + <delta_ts>2011-12-04 20:28:24 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Windows Vista</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>713</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-12-02 23:09:08 +0000</bug_when> + <thetext>Trying to run the Find Uses command (F6) on any token in the spec to be attached does nothing because of a null pointer exception at + + at org.lamport.tla.toolbox.util.ResourceHelper.innerGetUsesOfSymbol(ResourceHelper.java:1526)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>714</commentid> + <comment_count>1</comment_count> + <attachid>134</attachid> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-12-02 23:10:39 +0000</bug_when> + <thetext>Created attachment 134 +The offending spec</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>715</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-03 00:39:28 +0000</bug_when> + <thetext>Here's the full ST. + +java.lang.NullPointerException + at org.lamport.tla.toolbox.util.ResourceHelper.innerGetUsesOfSymbol(ResourceHelper.java:1526) + at org.lamport.tla.toolbox.util.ResourceHelper.innerGetUsesOfSymbol(ResourceHelper.java:1528) + at org.lamport.tla.toolbox.util.ResourceHelper.innerGetUsesOfSymbol(ResourceHelper.java:1528) + at org.lamport.tla.toolbox.util.ResourceHelper.innerGetUsesOfSymbol(ResourceHelper.java:1528) + at org.lamport.tla.toolbox.util.ResourceHelper.innerGetUsesOfSymbol(ResourceHelper.java:1528) + at org.lamport.tla.toolbox.util.ResourceHelper.innerGetUsesOfSymbol(ResourceHelper.java:1528) + at org.lamport.tla.toolbox.util.ResourceHelper.innerGetUsesOfSymbol(ResourceHelper.java:1528) + at org.lamport.tla.toolbox.util.ResourceHelper.getUsesOfSymbol(ResourceHelper.java:1366) + at org.lamport.tla.toolbox.editor.basic.handlers.ShowUsesHandler.execute(ShowUsesHandler.java:406) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:468) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:786) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:885) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:567) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:508) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:123) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1262) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1052) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062) + at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1104) + at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1100) + at org.eclipse.swt.widgets.Widget.wmKeyDown(Widget.java:1809) + at org.eclipse.swt.widgets.Control.WM_KEYDOWN(Control.java:4892) + at org.eclipse.swt.widgets.Control.windowProc(Control.java:4560) + at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341) + at org.eclipse.swt.widgets.Display.windowProc(Display.java:4985) + at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method) + at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2531) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3752) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:601) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) + at org.eclipse.equinox.launcher.Main.main(Main.java:1386)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>716</commentid> + <comment_count>3</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-12-03 00:57:34 +0000</bug_when> + <thetext>Here's a simpler example that produces the bug: + + ------ MODULE Test ---- + Foo == CASE TRUE -> TRUE [] + OTHER -> FALSE + ============================ + + Just try the Find Uses command on Foo. The bug seems to be in handling the OTHER clause in the CASE</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>717</commentid> + <comment_count>4</comment_count> + <attachid>135</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-03 01:40:05 +0000</bug_when> + <thetext>Created attachment 135 +Determine ExprNode array size depending on otherarm case</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>718</commentid> + <comment_count>5</comment_count> + <attachid>136</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-03 01:40:10 +0000</bug_when> + <thetext>Created attachment 136 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>719</commentid> + <comment_count>6</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-03 18:35:35 +0000</bug_when> + <thetext>Here's how org.lamport.tla.toolbox.util.ResourceHelper.innerGetUsesOfSymbol(SymbolNode, SemanticNode, Vector<SemanticNode>) line 1524 to 1530 adds an extra null check to avoid the NPE. + + for (int i = 0; i < children.length; i++) + { + final SemanticNode sn = children[i]; + if (sn != null && node.getLocation().source().equals(sn.getLocation().source())) { + innerGetUsesOfSymbol(symbol, sn, found); + } + } + return;</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>720</commentid> + <comment_count>7</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2011-12-04 20:28:24 +0000</bug_when> + <thetext>Fixed, essentially as indicated by Markus's preceding comment. See the comments in the code for an explanation of the bug.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>134</attachid> + <date>2011-12-02 23:10:00 +0000</date> + <delta_ts>2011-12-02 23:10:39 +0000</delta_ts> + <desc>The offending spec</desc> + <filename>TLAToPCal.tla</filename> + <type>application/octet-stream</type> + <size>22280</size> + <attacher name="Leslie Lamport">lamport</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="1" isprivate="0"> + <attachid>135</attachid> + <date>2011-12-03 01:40:00 +0000</date> + <delta_ts>2011-12-03 01:40:05 +0000</delta_ts> + <desc>Determine ExprNode array size depending on otherarm case</desc> + <filename>patch.txt</filename> + <type>text/plain</type> + <size>1467</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>136</attachid> + <date>2011-12-03 01:40:00 +0000</date> + <delta_ts>2011-12-03 01:40:10 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1586</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>234</bug_id> + + <creation_ts>2011-12-06 21:59:00 +0000</creation_ts> + <short_desc>Potential race condition in StateQueue synchronization</short_desc> + <delta_ts>2011-12-06 22:06:52 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>723</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-06 21:59:36 +0000</bug_when> + <thetext>In valid cases tlc2.tool.distributed.TLCServerThread.handleRemoteWorkerLost(StateQueue) is executed multiple times for a single worker. Thus, all methods executed by this method have to be idempotent to not cause havoc. +Calling tlc2.TLCGlobals.incNumWorkers(int) is such a method and thus needs proper guarding against multiple invocations.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>724</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-06 22:06:50 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>725</commentid> + <comment_count>2</comment_count> + <attachid>138</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-06 22:06:52 +0000</bug_when> + <thetext>Created attachment 138 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>138</attachid> + <date>2011-12-06 22:06:00 +0000</date> + <delta_ts>2011-12-06 22:06:52 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>4373</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>235</bug_id> + + <creation_ts>2011-12-13 20:29:00 +0000</creation_ts> + <short_desc>[releng] Define 3rd party (OSGi) dependencies in .target definition file only</short_desc> + <delta_ts>2011-12-14 17:00:47 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + <blocked>226</blocked> + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>731</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-13 20:29:38 +0000</bug_when> + <thetext>So far we've been using two separate definitions of 3rd party dependencies (.target def file and <repository> def in parent pom). The .target def file should become the only definition used by both the Maven Tycho build as well as the Eclipse IDE.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>734</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-14 17:00:45 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>735</commentid> + <comment_count>2</comment_count> + <attachid>141</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-14 17:00:47 +0000</bug_when> + <thetext>Created attachment 141 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>141</attachid> + <date>2011-12-14 17:00:00 +0000</date> + <delta_ts>2011-12-14 17:00:47 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1314</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>236</bug_id> + + <creation_ts>2011-12-16 18:24:00 +0000</creation_ts> + <short_desc>Overflow in tlc2.tool.ModelChecker.reportSuccess() causing negative "calculated" probability</short_desc> + <delta_ts>2011-12-16 21:50:10 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>736</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-16 18:24:59 +0000</bug_when> + <thetext>With big models, the amount of states causes an overflow in lc2.tool.ModelChecker.reportSuccess(FPSet, long) resulting in a negative probability for a hash collision reported.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>737</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-16 21:50:06 +0000</bug_when> + <thetext>Released to master</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>738</commentid> + <comment_count>2</comment_count> + <attachid>142</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-16 21:50:10 +0000</bug_when> + <thetext>Created attachment 142 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>142</attachid> + <date>2011-12-16 21:50:00 +0000</date> + <delta_ts>2011-12-16 21:50:10 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>84724</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>237</bug_id> + + <creation_ts>2011-12-19 21:43:00 +0000</creation_ts> + <short_desc>Expose TLC's "-fp" parameter in Toolbox</short_desc> + <delta_ts>2011-12-20 00:32:23 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>739</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-19 21:43:53 +0000</bug_when> + <thetext>TLC's "-fp" parameter is currently not supported by the Toolbox. Hence, it should be exposed on the advanced tab of the Toolbox's model editor page.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>740</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-19 23:12:00 +0000</bug_when> + <thetext>Released (preliminary) version to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>741</commentid> + <comment_count>2</comment_count> + <attachid>143</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-19 23:12:04 +0000</bug_when> + <thetext>Created attachment 143 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>742</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-20 00:32:17 +0000</bug_when> + <thetext>Reworked with spinner instead of input box, marking as fixed</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>743</commentid> + <comment_count>4</comment_count> + <attachid>144</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-20 00:32:23 +0000</bug_when> + <thetext>Created attachment 144 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>143</attachid> + <date>2011-12-19 23:12:00 +0000</date> + <delta_ts>2011-12-19 23:12:04 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>112214</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>144</attachid> + <date>2011-12-20 00:32:00 +0000</date> + <delta_ts>2011-12-20 00:32:23 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>194366</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>238</bug_id> + + <creation_ts>2011-12-20 18:44:00 +0000</creation_ts> + <short_desc>Add missing TLC parameters to Toolbox UI (dump, gzip, nowarning, terse)</short_desc> + <delta_ts>2012-01-03 16:36:08 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>744</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-20 18:44:30 +0000</bug_when> + <thetext>The Toolbox does not provide support for the following TLC command line parameters: + +-dump file + dump all the states into file + +-gzip + control if gzip is applied to value input/output stream. Defaults + to use gzip + +-terse + do not expand values in Print statement. Defaults to expand value if + not specified + +-nowarning + disable all the warnings. Defaults to report warnings if not specified</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>239</bug_id> + + <creation_ts>2011-12-20 20:58:00 +0000</creation_ts> + <short_desc>Add back and forward navigation to Toolbox</short_desc> + <delta_ts>2011-12-22 21:24:19 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>745</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-20 20:58:04 +0000</bug_when> + <thetext>http://wiki.eclipse.org/FAQ_How_do_I_hook_my_editor_to_the_Back_and_Forward_buttons%3F</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>746</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-20 21:02:01 +0000</bug_when> + <thetext>Released change for TLAEditor</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>747</commentid> + <comment_count>2</comment_count> + <attachid>145</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-20 21:02:03 +0000</bug_when> + <thetext>Created attachment 145 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>748</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-22 21:23:57 +0000</bug_when> + <thetext>Released support for FormPages to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>749</commentid> + <comment_count>4</comment_count> + <attachid>146</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-22 21:24:19 +0000</bug_when> + <thetext>Created attachment 146 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>145</attachid> + <date>2011-12-20 21:02:00 +0000</date> + <delta_ts>2011-12-20 21:02:03 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>4600</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>146</attachid> + <date>2011-12-22 21:24:00 +0000</date> + <delta_ts>2011-12-22 21:24:19 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>587990</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>240</bug_id> + + <creation_ts>2011-12-23 18:12:00 +0000</creation_ts> + <short_desc>Add scale to ModelEditor to adjust physical system memory used by nested TLC process</short_desc> + <delta_ts>2012-01-14 22:11:43 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA Tools</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>750</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-23 18:12:10 +0000</bug_when> + <thetext>The Toolbox's tuning options for the TLC model checker are limited. The "How to run" section of the "Model Overview" page only comes with with text input for the JVM heap size. + +To better aid the user with tuning the TLC model checker, a slider should allow users to select the amount of memory allocated to the nested JVM from the available physical system memory. Storing this as a ratio rather than absolute values prevents the model from becoming machine dependent.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>751</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-23 18:19:37 +0000</bug_when> + <thetext>s/slider/scale</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>788</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-14 21:01:12 +0000</bug_when> + <thetext>Enhancement released to HEAD (a while ago)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>789</commentid> + <comment_count>3</comment_count> + <attachid>158</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-14 21:01:15 +0000</bug_when> + <thetext>Created attachment 158 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>158</attachid> + <date>2012-01-14 21:01:00 +0000</date> + <delta_ts>2012-01-14 21:01:15 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1992</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>241</bug_id> + + <creation_ts>2011-12-29 02:21:00 +0000</creation_ts> + <short_desc>Please add keyboard command "Go to matching bracket"</short_desc> + <delta_ts>2012-01-26 18:57:14 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Chris Newcombe">chris.newcombe</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>752</commentid> + <comment_count>0</comment_count> + <who name="Chris Newcombe">chris.newcombe</who> + <bug_when>2011-12-29 02:21:38 +0000</bug_when> + <thetext>I've started writing PlusCal in the toolbox. + +I immediately *really* miss the "Go to matching bracket" key in Eclipse. +This is normally bound to 'Ctrl Shift P'. +I tried adding it via File ... Preferences ... General ... Keys, but the function isn't even listed, so I can't bind it to a key. + +Other modern Eclipse features are already supported by the toolbox editor (e.g. 'Alt Shift A' toggles between selecting a range of lines and selecting a block of columns, allowing easy bulk indent/outdent of multiple lines). + +Please could we have the 'Go to matching bracket function too'? + +many thanks, + +Chris</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>834</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-26 18:57:14 +0000</bug_when> + <thetext>Fixed by LL</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>242</bug_id> + + <creation_ts>2011-12-30 02:19:00 +0000</creation_ts> + <short_desc>int overflow with tlc2.tool.fp.DiskFPSet.maxTblCnt when maxMem for DiskFPSet reaches 2^31</short_desc> + <delta_ts>2012-01-03 17:42:34 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>critical</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>753</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2011-12-30 02:19:42 +0000</bug_when> + <thetext>This overflow causes the in-memory DiskFPSet storage to be flushed to disk on every put call and heavily degrades performance.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>756</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-03 17:42:32 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>757</commentid> + <comment_count>2</comment_count> + <attachid>147</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-03 17:42:34 +0000</bug_when> + <thetext>Created attachment 147 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>147</attachid> + <date>2012-01-03 17:42:00 +0000</date> + <delta_ts>2012-01-03 17:42:34 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1231</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>243</bug_id> + + <creation_ts>2012-01-03 16:15:00 +0000</creation_ts> + <short_desc>Add -fpMemRatio parameter to set percentage of RAM dedicated to fingerprint sets</short_desc> + <delta_ts>2012-01-04 17:29:59 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + <blocked>79</blocked> + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>754</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-03 16:15:53 +0000</bug_when> + <thetext>-fpmem takes an absolute value for how much RAM is allocated to FPs which makes this parameter machine dependent. + +Additionally, it also depends on how much memory has been dedicated to the JVM via -Vmx in the first place. A user might miss that though. And -fpmem handling doesn't take into account that what the users passes with -Vmx isn't what Runtime.maxMemory() returns (not all heap mem is available). This means that the user allocates 75% heap mem to FPs even if one doesn't want to. + +The existing -fpMem option is going to stay. It will be removed from the documentation. If a user sets both parameters simultaneously an error with be returned.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>760</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-04 17:29:55 +0000</bug_when> + <thetext>Enhancement released to HEAD +(No documentation referring to old fpmem found)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>761</commentid> + <comment_count>2</comment_count> + <attachid>149</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-04 17:29:59 +0000</bug_when> + <thetext>Created attachment 149 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>149</attachid> + <date>2012-01-04 17:29:00 +0000</date> + <delta_ts>2012-01-04 17:29:59 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>2145</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>244</bug_id> + + <creation_ts>2012-01-03 16:34:00 +0000</creation_ts> + <short_desc>Expose TLC statistics via Java management extensions (MXBeans)</short_desc> + <delta_ts>2012-01-14 20:25:50 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>755</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-03 16:34:14 +0000</bug_when> + <thetext>In order to understand (and enhance) the runtime behavior of TLC with large models (billion of states) and/or in distributed mode, detailed statistics about TLC's internals become important. + +Java management extension [0][1] provides a framework for Java applications to expose such kind of statistics will little code changes. Building on JMX also has the advantage, that existing Java monitoring tools (e.g. jconsole) will support TLC statistics automatically. + +[0] http://docs.oracle.com/javase/tutorial/jmx/mbeans/mxbeans.html +[1] https://en.wikipedia.org/wiki/Java_Management_Extensions</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>758</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-03 23:32:28 +0000</bug_when> + <thetext>Started with stats for DiskFPSet</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>759</commentid> + <comment_count>2</comment_count> + <attachid>148</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-03 23:32:31 +0000</bug_when> + <thetext>Created attachment 148 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>762</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-04 21:43:01 +0000</bug_when> + <thetext>Added ModelChecker metrics showing: + +tlc2.tool:type=ModelChecker + +with +- distinct states generated +- distinct states generated per min +- states generated +- states generated per min +- progress</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>763</commentid> + <comment_count>4</comment_count> + <attachid>150</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-04 21:43:04 +0000</bug_when> + <thetext>Created attachment 150 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>764</commentid> + <comment_count>5</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-05 07:17:14 +0000</bug_when> + <thetext>Changed collecting stats to accept dirty reads on distinct generated states counter if FPSet backing store is DiskFPSet implementation to reduce lock contention.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>765</commentid> + <comment_count>6</comment_count> + <attachid>151</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-05 07:17:16 +0000</bug_when> + <thetext>Created attachment 151 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>769</commentid> + <comment_count>7</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-07 03:27:13 +0000</bug_when> + <thetext>Add worker count + +tlc2.tool.ModelCheccker#workerCount</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>784</commentid> + <comment_count>8</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-14 20:25:50 +0000</bug_when> + <thetext>Figured need lock (contention) statistics for: + +- StateQueue +- DiskFPSet or tlc2.util.ReadersWriterLock in general</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>148</attachid> + <date>2012-01-03 23:32:00 +0000</date> + <delta_ts>2012-01-03 23:32:31 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>24035</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>150</attachid> + <date>2012-01-04 21:43:00 +0000</date> + <delta_ts>2012-01-04 21:43:04 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>9314</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>151</attachid> + <date>2012-01-05 07:17:00 +0000</date> + <delta_ts>2012-01-05 07:17:16 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1719</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>245</bug_id> + + <creation_ts>2012-01-07 01:43:00 +0000</creation_ts> + <short_desc>Add -fpmem parameter to TLCServer</short_desc> + <delta_ts>2012-01-07 02:24:57 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>Windows 7</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>766</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-07 01:43:38 +0000</bug_when> + <thetext>tlc2.tool.distributed.TLCServer is missing support for the -fpmem parameter. This is how it can be used (also with non-distributed tlc2.TLC): + + // -fpmem can be used in two ways: + // a) to set the relative memory to be used for fingerprints (being machine independent) + // b) to set the absolute memory to be used for fingerprints + // + // In order to set memory relatively, a value in the domain [0.0, 1.0] is interpreted as a fraction. + // A value in the [2, Double.MaxValue] domain allocates memory absolutely. + // + // Independently of relative or absolute mem allocation, + // a user cannot allocate more than JVM heap space + // available. Conversely there is the lower hard limit TLC#MinFpMemSize.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>767</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-07 02:24:51 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>768</commentid> + <comment_count>2</comment_count> + <attachid>152</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-07 02:24:57 +0000</bug_when> + <thetext>Created attachment 152 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>152</attachid> + <date>2012-01-07 02:24:00 +0000</date> + <delta_ts>2012-01-07 02:24:57 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1108</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>246</bug_id> + + <creation_ts>2012-01-07 16:41:00 +0000</creation_ts> + <short_desc>Error: Requested array size exceeds VM limit in DiskFPSet</short_desc> + <delta_ts>2012-01-14 20:24:01 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Linux</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>770</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-07 16:41:23 +0000</bug_when> + <thetext>Error: Requested array size exceeds VM limit +java.lang.OutOfMemoryError: Requested array size exceeds VM limit + at tlc2.tool.fp.DiskFPSet.flushTable(DiskFPSet.java:606) + at tlc2.tool.fp.DiskFPSet.put(DiskFPSet.java:326) + at tlc2.tool.fp.FPSet.putBlock(FPSet.java:130) + at tlc2.tool.distributed.FPSetManager.putBlock(FPSetManager.java:150) + at tlc2.tool.distributed.TLCServerThread.run(TLCServerThread.java:181)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>771</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-07 17:28:53 +0000</bug_when> + <thetext>This happened exactly when DiskFPSet flushed the in-memory cache to disk the first time. MC.fp has never been written successfully: + +kuppe@domU-12-31-39-18-15-75:~/git/tla/general/performance/states/12-01-07-01-04-57$ ls -la MC* +-rw-rw-r-- 1 kuppe kuppe 0 2012-01-07 01:04 MC.fp +-rw-rw-r-- 1 kuppe kuppe 32722883156 2012-01-07 12:15 MC.st +-rw-rw-r-- 1 kuppe kuppe 16 2012-01-07 12:08 MC.st.chkpt + +Corresponding runtime statistics can be found at https://tla.msr-inria.inria.fr/rrdtool/domU-12-31-39-18-15-75/www/</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>772</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-07 17:38:15 +0000</bug_when> + <thetext>Exact same exception at same moment got thrown by https://tla.msr-inria.inria.fr/rrdtool/ip-10-218-65-156 + +A similar looking behavior could be observed by a non-distributed TLC last week.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>781</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-14 20:09:19 +0000</bug_when> + <thetext>The root cause for the previously observed behavior comes from a refactoring in tlc2.tool.ModelChecker.ModelChecker(String, String, String, boolean, String, FilenameToStream, SpecObj, long, int). The code used to divide the long parameter (which represents memInBytes) by 20. This was done due to DiskFPSet's runtime memory requirements. It allocates auxiliary storage (temporary buffer used in tlc2.tool.fp.DiskFPSet.flushTable() + tlc2.tool.fp.DiskFPSet.index) which exceeds 50% of its dedicated memory. + +Reintroducing the auxiliary storage reserve makes the OOM exception disappear.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>782</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-14 20:23:59 +0000</bug_when> + <thetext>Fixed in HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>783</commentid> + <comment_count>5</comment_count> + <attachid>155</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-14 20:24:01 +0000</bug_when> + <thetext>Created attachment 155 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>155</attachid> + <date>2012-01-14 20:24:00 +0000</date> + <delta_ts>2012-01-14 20:24:01 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>15650</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>247</bug_id> + + <creation_ts>2012-01-09 19:20:00 +0000</creation_ts> + <short_desc>Push TLCRuntime down into tlatools/src/util package</short_desc> + <delta_ts>2012-01-09 19:25:15 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>773</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-09 19:20:04 +0000</bug_when> + <thetext>TLCRuntime should be pushed down from the Toolbox code into tlatools/src/util.TLCRuntime.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>774</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-09 19:25:13 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>775</commentid> + <comment_count>2</comment_count> + <attachid>153</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-09 19:25:15 +0000</bug_when> + <thetext>Created attachment 153 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>153</attachid> + <date>2012-01-09 19:25:00 +0000</date> + <delta_ts>2012-01-09 19:25:15 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>10422</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>248</bug_id> + + <creation_ts>2012-01-10 17:52:00 +0000</creation_ts> + <short_desc>Make TLC print stacktraces when programming error</short_desc> + <delta_ts>2012-01-10 20:06:03 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>776</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-10 17:52:20 +0000</bug_when> + <thetext>TLC tends to swallow stacktraces even with -debug enabled. This makes it impossible to diagnose error cases when TLC isn't run in a debugger. Thus, with -debug present, stacktraces should always be logged.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>777</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-10 18:05:59 +0000</bug_when> + <thetext>As part of this ticket, -debug is going to be added to TLCServer#main(String[]).</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>778</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-10 20:06:00 +0000</bug_when> + <thetext>It turns out that -debug activates functionality that is more commonly referred to as tracing. Thus, for the moment, only those catch stmts will additionally log the stack that indicate a bug in TLC (and not in the user model) to regular MP.printError(...).</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>779</commentid> + <comment_count>3</comment_count> + <attachid>154</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-10 20:06:03 +0000</bug_when> + <thetext>Created attachment 154 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>154</attachid> + <date>2012-01-10 20:06:00 +0000</date> + <delta_ts>2012-01-10 20:06:03 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>4613</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>249</bug_id> + + <creation_ts>2012-01-14 19:51:00 +0000</creation_ts> + <short_desc>Link PlusCal code (via TLA+ to PlusCal mapper) in Toolbox UI</short_desc> + <delta_ts>2012-02-16 20:01:04 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA Tools</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>lamport</cc> + <cf_target_version>1.4.2</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>780</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-14 19:51:24 +0000</bug_when> + <thetext>LL: "Anyplace where clicking now takes us to a region of the spec, we want Alt-Click (actually, I think Shift-Click would be better unless you have a reason for preferring Alt-Click) to take us to the region obtained by calling TLAtoPCalMapping.ApplyMapping with that region and the most recent TLAtoPCalMapping produced by the translator as arguments. (If the call returns null, then it takes us to the same region as an ordinary click.) The places I can think of where that applies are: + + - A TLA+ Parsing Error in the Parsing Error window. + (As I said earlier, it doesn't matter if that's also done on + a PCal translation error, since ApplyMapping will return + null in that case.) + - The TLC Error window. + - An action line in the TLC error trace window. (Since in this + case double-clicking takes you to the spec, it should be Alt + or Shift double-click.) + - A location entry in the coverage information."</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>797</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-17 21:35:35 +0000</bug_when> + <thetext>First step is to persistently store the pcal mapping as part of the spec</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>798</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-18 00:21:16 +0000</bug_when> + <thetext>The persistent mapping will not survive spec filename (corresponding .tla) renames.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>799</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-19 00:14:11 +0000</bug_when> + <thetext>Persistent mapping storage considered done</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>800</commentid> + <comment_count>4</comment_count> + <attachid>159</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-19 00:14:14 +0000</bug_when> + <thetext>Created attachment 159 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>801</commentid> + <comment_count>5</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-01-19 01:13:37 +0000</bug_when> + <thetext>I ran a translation, closed the spec, reopened it, and the mapping still worked. I then closed the spec, closed the Toolbox, then restarted the Toolbox. The console log, appended below, reported a relevant exception. When I opened the spec, the mapping no longer worked. + + +osgi> TLA+ Toolbox started without arguments. +!SESSION 2012-01-18 16:07:14.627 ----------------------------------------------- +eclipse.buildId=unknown +java.version=1.6.0_29 +java.vendor=Sun Microsystems Inc. +BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US +Framework arguments: -product org.lamport.tla.toolbox.product.standalone.product +Command-line arguments: -product org.lamport.tla.toolbox.product.standalone.product -data C:\lamport\tla\newtools\tla2-inria-workspace/../runtime-org.lamport.tla.toolbox.product.product.product -dev file:C:/lamport/tla/newtools/tla2-inria-workspace/.metadata/.plugins/org.eclipse.pde.core/org.lamport.tla.toolbox.product.product.product/dev.properties -os win32 -ws win32 -arch x86 -console -consolelog + +!ENTRY org.eclipse.core.resources 2 10035 2012-01-18 16:07:15.759 +!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes. +footFileName = C:\lamport\tla\newtools\tlapm\examples\bySMT\Allocator.tla +footFileName = C:\lamport\papers\paxos\simple\byztla\BPConProof.tla +footFileName = C:\lamport\books\hyper-tla\specs\Channel\BoundedBuffer.tla +footFileName = C:\lamport\books\hyper-tla\specs\Channel\BoundedBuffer2.tla +footFileName = C:\lamport\books\hyper-tla\specs\Channel\BoundedChannel.tla +footFileName = C:\lamport\papers\proof\Calculus.tla +footFileName = C:\lamport\reviews\vonneumann\CandidateRanking.tla +footFileName = C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\examples\CarTalkPuzzle\CarTalkPuzzle.tla +footFileName = C:\lamport\books\hyper-tla\specs\cookbook\CookBook.tla +footFileName = C:\lamport\talks\pluscal\FastMutex.tla +footFileName = C:\lamport\talks\lada12\LevelSpec.tla +footFileName = C:\lamport\tla\newtools\tlapm\examples\NaturalsInduction.tla +footFileName = C:\lamport\talks\lada12\specs\P2TCommit.tla +footFileName = C:\lamport\talks\lada12\specs\P2TwoPhase.tla +footFileName = C:\lamport\books\hyper-tla\specs\Channel\PCalBoundedBuffer.tla +footFileName = C:\lamport\talks\lada12\specs\PTCommit.tla +footFileName = C:\lamport\talks\lada12\specs\PTwoPhase.tla +footFileName = C:\lamport\tla\newtools\tlapm\doc\vstte12\Peterson.tla +footFileName = C:\lamport\mytemp\SumAndMax.tla +footFileName = C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\general\docs\TLAToPCal.tla +footFileName = C:\lamport\mytemp\Test.tla +footFileName = C:\lamport\mytemp\Test2.tla +footFileName = C:\lamport\mytemp\Test_Bug.tla +footFileName = C:\lamport\mytemp\Test_PM.tla +footFileName = C:\lamport\tla\newtools\tlapm\examples\WellFoundedInduction.tla +footFileName = C:\lamport\tla\newtools\tlapm\examples\WellFoundedOpInduction.tla +footFileName = C:\lamport\tla\pluscal\bugs\bug_11_09_13.tla +java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: pcal.TLAtoPCalMapping + at java.io.ObjectInputStream.readObject0(Unknown Source) + at java.io.ObjectInputStream.readObject(Unknown Source) + at org.lamport.tla.toolbox.util.ResourceHelper.readTLAtoPCalMapping(ResourceHelper.java:1648) + at org.lamport.tla.toolbox.spec.Spec.getTpMapping(Spec.java:452) + at org.lamport.tla.toolbox.spec.Spec.initProjectProperties(Spec.java:198) + at org.lamport.tla.toolbox.spec.Spec.<init>(Spec.java:123) + at org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.<init>(WorkspaceSpecManager.java:77) + at org.lamport.tla.toolbox.Activator.getSpecManager(Activator.java:303) + at org.lamport.tla.toolbox.spec.nature.TLAParsingBuilder.build(TLAParsingBuilder.java:52) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +Caused by: java.io.NotSerializableException: pcal.TLAtoPCalMapping + at java.io.ObjectOutputStream.writeObject0(Unknown Source) + at java.io.ObjectOutputStream.writeObject(Unknown Source) + at org.lamport.tla.toolbox.util.ResourceHelper.writeTLAtoPCalMapping(ResourceHelper.java:1676) + at org.lamport.tla.toolbox.spec.Spec.setTpMapping(Spec.java:500) + at org.lamport.tla.toolbox.job.TranslatorJob.runInWorkspace(TranslatorJob.java:130) + at org.lamport.tla.toolbox.job.TranslatorJob$1.run(TranslatorJob.java:169) + at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121) + +!ENTRY org.eclipse.equinox.p2.ui.sdk.scheduler 4 0 2012-01-18 16:07:18.024 +!MESSAGE The update checker service is not initialized + +!ENTRY org.eclipse.equinox.p2.ui.sdk.scheduler 4 0 2012-01-18 16:07:18.024 +!MESSAGE The update checker service is not initialized +ERROR: Duplicate alias. Failed to register resource for [alias="/", contributor="org.eclipse.help.webapp[83]"] +Spec build invoked on Test ... +Resulting status is: parsed +... build invocation finished. +Added a parse result listener. +There are now 1 listeners.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>802</commentid> + <comment_count>6</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-19 02:10:14 +0000</bug_when> + <thetext>I cannot reproduce this in my local workspace with the step you mentioned, can you? If yes, please send me your spec.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>883</commentid> + <comment_count>7</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-16 20:01:04 +0000</bug_when> + <thetext>Fix a while ago</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>159</attachid> + <date>2012-01-19 00:14:00 +0000</date> + <delta_ts>2012-01-19 00:14:14 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>17740</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>250</bug_id> + + <creation_ts>2012-01-14 20:41:00 +0000</creation_ts> + <short_desc>StackOverflow in org.eclipse.core.internal.dtree.DeltaDataTree.reroot(DeltaDataTree) during Toolbox startup</short_desc> + <delta_ts>2015-02-11 14:42:27 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA Tools</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>ASSIGNED</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>785</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-14 20:41:18 +0000</bug_when> + <thetext>A dialog pops up at startup showing: + +JVM terminated. Exit code=1 +/usr/bin/java +-Xmx1000m +-Dorg.eclipse.equinox.http.jetty.http.port=10996 +-jar /tlc_master/toolbox/plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar +-os linux +-ws gtk +-arch x86_64 +-showsplash +-launcher /tlc_master/toolbox/toolbox +-name Toolbox +--launcher.library /tlc_master/toolbox/plugins/rg.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.2.R36x_v20101019_1345/eclipse_1310.so +-startup /tlc_master/toolbox/plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar +-exitdata 8000e +-vm /usr/bin/java +-vmargs +-Xmx1000m +-Dorg.eclipse.equinox.http.jetty.http.port=10996 +-jar /tlc_master/toolbox/plugins/org.eclipse.equinox.launcher_1.1.1.R36x_v20101122_1400.jar</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>786</commentid> + <comment_count>1</comment_count> + <attachid>156</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-14 20:44:30 +0000</bug_when> + <thetext>Created attachment 156 +The Eclipse .log file. The stackoverflow is at the end of the file. + +The BadLocation exception and assertion errors at the beginning of the log appear to be a red herring in the context of the stackoverflow. They have to be analyzed separatetly.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>787</commentid> + <comment_count>2</comment_count> + <attachid>157</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-14 20:47:47 +0000</bug_when> + <thetext>Created attachment 157 +The output of ls -la for the Toolbox metadata directory</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>156</attachid> + <date>2012-01-14 20:44:00 +0000</date> + <delta_ts>2012-01-14 20:44:30 +0000</delta_ts> + <desc>The Eclipse .log file. The stackoverflow is at the end of the file.</desc> + <filename>Eclipse.log</filename> + <type>text/plain</type> + <size>929881</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>157</attachid> + <date>2012-01-14 20:47:00 +0000</date> + <delta_ts>2012-01-14 20:47:47 +0000</delta_ts> + <desc>The output of ls -la for the Toolbox metadata directory</desc> + <filename>directorylisting.txt</filename> + <type>text/plain</type> + <size>2070234</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>251</bug_id> + + <creation_ts>2012-01-15 16:57:00 +0000</creation_ts> + <short_desc>The default FPSet tlc2.tool.fp.DiskFPSet.DiskFPSet never creates a checkpoint unless used through tlc2.tool.distributed.FPSetManager</short_desc> + <delta_ts>2012-01-15 18:35:18 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>DUPLICATE</resolution> + <dup_id>252</dup_id> + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>critical</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>791</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-15 16:57:14 +0000</bug_when> + <thetext>TLC's default FPSet implementation tlc2.tool.fp.DiskFPSet.DiskFPSet turns tlc2.tool.fp.FPSet.beginChkpt() and tlc2.tool.fp.FPSet.commitChkpt() into a no-op. This results in no checkpoints ever written for non-distributed and distributed TLC (unless the distributed FPSetManager facade is used). + +There is no indication or explanation given as to why both methods are no-ops. One possible reason might be performance degradation (see bug #214) if DiskFPSet flushes to disk to excessively. + +All mem-based FPSet implementation delegate from no-arg beginChkpt/commitChkpt to their String-arg method implementation.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>793</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-15 18:35:18 +0000</bug_when> + <thetext> + +*** This bug has been marked as a duplicate of bug 252 ***</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>252</bug_id> + + <creation_ts>2012-01-15 16:57:00 +0000</creation_ts> + <short_desc>The default FPSet tlc2.tool.fp.DiskFPSet.DiskFPSet never creates a checkpoint unless used through tlc2.tool.distributed.FPSetManager</short_desc> + <delta_ts>2012-01-17 19:19:42 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>critical</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>792</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-15 16:57:35 +0000</bug_when> + <thetext>TLC's default FPSet implementation tlc2.tool.fp.DiskFPSet.DiskFPSet turns tlc2.tool.fp.FPSet.beginChkpt() and tlc2.tool.fp.FPSet.commitChkpt() into a no-op. This results in no checkpoints ever written for non-distributed and distributed TLC (unless the distributed FPSetManager facade is used). + +There is no indication or explanation given as to why both methods are no-ops. One possible reason might be performance degradation (see bug #214) if DiskFPSet flushes to disk too excessively. + +All mem-based FPSet implementation delegate from no-arg beginChkpt/commitChkpt to their String-arg method implementation.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>794</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-15 18:35:18 +0000</bug_when> + <thetext>*** Bug 251 has been marked as a duplicate of this bug. ***</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>795</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-17 19:19:42 +0000</bug_when> + <thetext>In non-distributed TLC, tlc2.tool.fp.DiskFPSet.recover() does not recovery from its corresponding MC.fp. It recreates the DiskFPSet state from the TLCTrace file.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>253</bug_id> + + <creation_ts>2012-01-17 21:01:00 +0000</creation_ts> + <short_desc>Default for memory slider should make a better initial suggestion than 50%</short_desc> + <delta_ts>2012-02-16 22:17:51 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA Tools</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + + <cf_target_version>1.4.2</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>796</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-17 21:01:08 +0000</bug_when> + <thetext>LL: "When I create a new TLC model on my laptop and open the "How to run" section, I find that it has set the memory allocation to 50% (1 Gbyte), which is colored bright red. I don't know if 1G is really too big on a 4G machine, but the default should not be a value that the Toolbox tells the user is too big."</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>884</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-16 22:17:05 +0000</bug_when> + <thetext>New default is 25% which should not exceed what a 32bit VM can handle (otherwise it dies with a "Could now create java virtual machine").</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>885</commentid> + <comment_count>2</comment_count> + <attachid>181</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-16 22:17:07 +0000</bug_when> + <thetext>Created attachment 181 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>181</attachid> + <date>2012-02-16 22:17:00 +0000</date> + <delta_ts>2012-02-16 22:17:07 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>2790</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>254</bug_id> + + <creation_ts>2012-01-19 02:48:00 +0000</creation_ts> + <short_desc>Enablement of handlers causes NPE if executed on unparsed spec/not fully initialized editor</short_desc> + <delta_ts>2012-02-16 20:33:32 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>1.4.2</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>803</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-19 02:48:30 +0000</bug_when> + <thetext>!ENTRY org.eclipse.ui 4 0 2012-01-18 17:19:59.512 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NullPointerException + at org.lamport.tla.toolbox.ui.handler.PCalTranslateModuleHandler.execute(PCalTranslateModuleHandler.java:43) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:820) + at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:806) + at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:796) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:601) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>825</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-25 22:58:10 +0000</bug_when> + <thetext>The root cause of this bug is how the Toolbox ignores the API contract of +org.eclipse.ui.IWorkbenchPage.getActiveEditor(). Javadoc states that null is a valid return value if no editor is active.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>829</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-25 23:06:32 +0000</bug_when> + <thetext>Fix released to HEAD by not enabling handlers if no active editor could be found.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>830</commentid> + <comment_count>3</comment_count> + <attachid>168</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-25 23:06:34 +0000</bug_when> + <thetext>Created attachment 168 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>168</attachid> + <date>2012-01-25 23:06:00 +0000</date> + <delta_ts>2012-01-25 23:06:34 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>2849</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>255</bug_id> + + <creation_ts>2012-01-19 17:53:00 +0000</creation_ts> + <short_desc>Release Toolbox/TLC/PlusCal 1.4.1 release</short_desc> + <delta_ts>2012-01-20 20:14:30 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>804</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-19 17:53:31 +0000</bug_when> + <thetext>- Increment Toolbox versions in: + +/general/docs/microsoft-release.txt +/org.lamport.tla.toolbox/welcome/welcomeView.html +/org.lamport.tla.toolbox.product.product/org.lamport.tla.toolbox.product.product.product +/org.lamport.tla.toolbox.product.standalone/plugin.xml + +- TLC + +/tlatools/src/tlc2/ tlc2.TLCGlobals.versionOfTLC</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>805</commentid> + <comment_count>1</comment_count> + <attachid>160</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-19 17:55:36 +0000</bug_when> + <thetext>Created attachment 160 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>815</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-20 20:14:28 +0000</bug_when> + <thetext>Done</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>816</commentid> + <comment_count>3</comment_count> + <attachid>164</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-20 20:14:30 +0000</bug_when> + <thetext>Created attachment 164 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>160</attachid> + <date>2012-01-19 17:55:00 +0000</date> + <delta_ts>2012-01-19 17:55:36 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1735</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>164</attachid> + <date>2012-01-20 20:14:00 +0000</date> + <delta_ts>2012-01-20 20:14:30 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>2116</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>256</bug_id> + + <creation_ts>2012-01-19 20:52:00 +0000</creation_ts> + <short_desc>Running PlusCal translation on a dirty editor throws NPE due to uninitialized progress dialog</short_desc> + <delta_ts>2012-01-19 20:59:34 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.3</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>806</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-19 20:52:12 +0000</bug_when> + <thetext>!ENTRY org.eclipse.ui 4 0 2012-01-19 11:43:23.451 +!MESSAGE Unhandled event loop exception +!STACK 0 +java.lang.NullPointerException + at org.eclipse.jface.dialogs.ProgressMonitorDialog$ProgressMonitor.done(ProgressMonitorDialog.java:192) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2356) + at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:118) + at org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:75) + at org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:65) + at org.eclipse.ui.editors.text.TextFileDocumentProvider.executeOperation(TextFileDocumentProvider.java:456) + at org.eclipse.ui.editors.text.TextFileDocumentProvider.saveDocument(TextFileDocumentProvider.java:772) + at org.eclipse.ui.texteditor.AbstractTextEditor.performSave(AbstractTextEditor.java:5048) + at org.eclipse.ui.texteditor.AbstractTextEditor.doSave(AbstractTextEditor.java:4837) + at org.lamport.tla.toolbox.editor.basic.TLAEditor.doSave(TLAEditor.java:502) + at org.lamport.tla.toolbox.editor.basic.TLAEditorAndPDFViewer.doSave(TLAEditorAndPDFViewer.java:121) + at org.lamport.tla.toolbox.ui.handler.PCalTranslateModuleHandler.execute(PCalTranslateModuleHandler.java:50) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:468) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:786) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:885) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:567) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:508) + at org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:123) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1262) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1052) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062) + at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1104) + at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1100) + at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1509) + at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:4640) + at org.eclipse.swt.widgets.Canvas.WM_CHAR(Canvas.java:345) + at org.eclipse.swt.widgets.Control.windowProc(Control.java:4528) + at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341) + at org.eclipse.swt.widgets.Display.windowProc(Display.java:4972) + at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method) + at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2531) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3752) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) + at java.lang.reflect.Method.invoke(Method.java:592) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) + at org.eclipse.equinox.launcher.Main.main(Main.java:1386) +Spec build invoked on Semantics ...</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>807</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-19 20:59:32 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>808</commentid> + <comment_count>2</comment_count> + <attachid>161</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-19 20:59:34 +0000</bug_when> + <thetext>Created attachment 161 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>161</attachid> + <date>2012-01-19 20:59:00 +0000</date> + <delta_ts>2012-01-19 20:59:34 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>17133</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>257</bug_id> + + <creation_ts>2012-01-19 21:09:00 +0000</creation_ts> + <short_desc>Move fpbits input from "How to run" section on main model editor page to advanced page</short_desc> + <delta_ts>2012-01-19 22:44:34 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>809</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-19 21:09:23 +0000</bug_when> + <thetext>fpbits logically belongs together with the fingerprint index. The best known place to be to date is under TLC options on the advanced model page.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>810</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-19 22:44:30 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>811</commentid> + <comment_count>2</comment_count> + <attachid>162</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-19 22:44:34 +0000</bug_when> + <thetext>Created attachment 162 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>162</attachid> + <date>2012-01-19 22:44:00 +0000</date> + <delta_ts>2012-01-19 22:44:34 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>82296</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>258</bug_id> + + <creation_ts>2012-01-20 00:06:00 +0000</creation_ts> + <short_desc>Replace worker input field with spinner</short_desc> + <delta_ts>2012-02-16 20:00:06 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>1.4.1</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>812</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-20 00:06:11 +0000</bug_when> + <thetext>Replace worker input field with spinner on main moduleditor page to prevent the user from entering non-numerical characters. This saves some load during validation.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>813</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-20 19:24:38 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>814</commentid> + <comment_count>2</comment_count> + <attachid>163</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-20 19:24:41 +0000</bug_when> + <thetext>Created attachment 163 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>163</attachid> + <date>2012-01-20 19:24:00 +0000</date> + <delta_ts>2012-01-20 19:24:41 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1803</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>259</bug_id> + + <creation_ts>2012-01-20 20:16:00 +0000</creation_ts> + <short_desc>Prompt user to save spec first when translate to PlusCal is executed on dirty editor</short_desc> + <delta_ts>2012-02-16 20:33:21 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>1.4.2</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>817</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-20 20:16:47 +0000</bug_when> + <thetext>If the user does not save the dirty editor before running the PlusCal translation, the Toolbox saves the spec automatically without raising a modal dialog confirming this action. This should be aligned how the editor generally behaves.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>826</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-25 23:00:32 +0000</bug_when> + <thetext>Fix released to HEAD for all handlers that need an active editor to be present</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>827</commentid> + <comment_count>2</comment_count> + <attachid>167</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-25 23:00:35 +0000</bug_when> + <thetext>Created attachment 167 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>828</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-25 23:02:46 +0000</bug_when> + <thetext>Arg, meant to close bug #254 instead of this one!</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>831</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-26 00:54:54 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>832</commentid> + <comment_count>5</comment_count> + <attachid>169</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-26 00:54:58 +0000</bug_when> + <thetext>Created attachment 169 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>167</attachid> + <date>2012-01-25 23:00:00 +0000</date> + <delta_ts>2012-01-25 23:00:35 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>50817</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>169</attachid> + <date>2012-01-26 00:54:00 +0000</date> + <delta_ts>2012-01-26 00:54:58 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>99203</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>260</bug_id> + + <creation_ts>2012-01-24 18:37:00 +0000</creation_ts> + <short_desc>Deadlock in startup code when WorkspaceSpecManager initialization and spec parser create cyclic wait graph</short_desc> + <delta_ts>2012-02-16 19:59:26 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + <dependson>261</dependson> + <blocked>195</blocked> + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>1.4.2</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>818</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-24 18:37:07 +0000</bug_when> + <thetext>A TLA spec parser (org.lamport.tla.toolbox.spec.nature.TLAParsingBuilder.build(int, Map, IProgressMonitor)) requires to retrieve the WorkspaceSpecManager from org.lamport.tla.toolbox.Activator.getSpecManager() once scheduled by the org.eclipse.core.internal.jobs.JobManager. However, this call might block if another thread (e.g. org.lamport.tla.toolbox.ui.contribution.SizeControlContribution) has acquired the mutex already and is now itself waiting to be schedule by the JobManager.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>823</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-25 22:26:20 +0000</bug_when> + <thetext>Fixed, the WorkspaceSpecManager (WSM) is now eagerly initialized right after the .toolbox bundle has finished its OSGi life cycle change to either RESOLVED or ACTIVE (classloading succeeds in both states) and before a org.lamport.tla.toolbox.spec.nature.TLAParsingBuilder can scheduled.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>824</commentid> + <comment_count>2</comment_count> + <attachid>166</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-25 22:26:21 +0000</bug_when> + <thetext>Created attachment 166 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>166</attachid> + <date>2012-01-25 22:26:00 +0000</date> + <delta_ts>2012-01-25 22:26:21 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>3244</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>261</bug_id> + + <creation_ts>2012-01-25 17:47:00 +0000</creation_ts> + <short_desc>ProverUI uses foreign preference store causing activation of foreign bundle</short_desc> + <delta_ts>2012-02-16 19:59:19 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + <blocked>260</blocked> + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>1.4.2</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>819</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-25 17:47:24 +0000</bug_when> + <thetext>The ProverUI bundle stores its preferences in the org.eclipse.ui.editors' bundle preference store. This action is performed as part of ProverUI's bundle activation which in turn triggers activation of bundle org.eclipse.ui.editors.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>821</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-25 22:19:31 +0000</bug_when> + <thetext>WONTFIX right now as I have found a way to work around it to address bug #260.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>822</commentid> + <comment_count>2</comment_count> + <attachid>165</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-25 22:19:34 +0000</bug_when> + <thetext>Created attachment 165 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>872</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-14 16:46:22 +0000</bug_when> + <thetext>Unfortunately we cannot get away with it, because it is creating a cyclic wait graph intermittently.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>873</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-14 21:04:41 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>874</commentid> + <comment_count>5</comment_count> + <attachid>178</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-14 21:04:48 +0000</bug_when> + <thetext>Created attachment 178 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>165</attachid> + <date>2012-01-25 22:19:00 +0000</date> + <delta_ts>2012-01-25 22:19:34 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>18658</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>178</attachid> + <date>2012-02-14 21:04:00 +0000</date> + <delta_ts>2012-02-14 21:04:48 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>293382</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>262</bug_id> + + <creation_ts>2012-01-26 18:48:00 +0000</creation_ts> + <short_desc>java.io.IOEXception: Stream Closed exceptions when clients call TLCTrace#getLevel() after model checking has finished</short_desc> + <delta_ts>2012-02-16 19:59:12 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>1.4.1</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>833</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-26 18:48:52 +0000</bug_when> + <thetext>1, + 0, + 0, + 0, + 0, + 1, + 0 >> + +Error: The error occurred when TLC was evaluating the nested +expressions at the following positions: + The error call stack is empty. + +5275343700 states generated, 375321149 distinct states found, 215462328 states left on queue. +The depth of the complete state graph search is 14. +java.io.IOException: Stream Closed + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:207) + at tlc2.tool.TLCTrace.getPrev(TLCTrace.java:78) + at tlc2.tool.TLCTrace.getLevel(TLCTrace.java:143) + at tlc2.tool.TLCTrace.getLevelForReporting(TLCTrace.java:109) + at tlc2.tool.management.ModelCheckerMXWrapper.getProgress(ModelCheckerMXWrapper.java:76) + at sun.reflect.GeneratedMethodAccessor46.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:111) + at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:45) + at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:226) + at com.sun.jmx.mbeanserver.PerInterface.getAttribute(PerInterface.java:83) + at com.sun.jmx.mbeanserver.MBeanSupport.getAttribute(MBeanSupport.java:205) + at javax.management.StandardMBean.getAttribute(StandardMBean.java:372) + at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:683) + at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:672) + at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1427) + at javax.management.remote.rmi.RMIConnectionImpl.access$200(RMIConnectionImpl.java:90) + at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1285) + at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1383) + at javax.management.remote.rmi.RMIConnectionImpl.getAttribute(RMIConnectionImpl.java:619) + at sun.reflect.GeneratedMethodAccessor20.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322) + at sun.rmi.transport.Transport$1.run(Transport.java:177) + at java.security.AccessController.doPrivileged(Native Method) + at sun.rmi.transport.Transport.serviceCall(Transport.java:173) + at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808) + at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) + at java.lang.Thread.run(Thread.java:679) +Finished. (2012-01-16 13:05:17)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>835</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-26 20:35:58 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>836</commentid> + <comment_count>2</comment_count> + <attachid>170</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-26 20:36:01 +0000</bug_when> + <thetext>Created attachment 170 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>170</attachid> + <date>2012-01-26 20:36:00 +0000</date> + <delta_ts>2012-01-26 20:36:01 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>99817</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>263</bug_id> + + <creation_ts>2012-01-27 23:48:00 +0000</creation_ts> + <short_desc>InvalidThreadAccess exception when installing markers during startup</short_desc> + <delta_ts>2012-02-16 19:58:58 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>Linux</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>1.4.2</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>837</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-27 23:48:42 +0000</bug_when> + <thetext>Restarting Toolbox with Parsing Errors View open causes Exception at next startup: + +osgi> TLA+ Toolbox started without arguments. +!SESSION 2012-01-27 14:46:14.410 ----------------------------------------------- +eclipse.buildId=unknown +java.version=1.6.0_26 +java.vendor=Sun Microsystems Inc. +BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US +Framework arguments: -product org.lamport.tla.toolbox.product.standalone.product +Command-line arguments: -product org.lamport.tla.toolbox.product.standalone.product -data /usr/local/src/eclipse/tlatoolbox/../newTLAToolbox -dev file:/usr/local/src/eclipse/tlatoolbox/.metadata/.plugins/org.eclipse.pde.core/TLAToolbox/dev.properties -os linux -ws gtk -arch x86_64 -consoleLog -console -clean + +!ENTRY org.eclipse.core.resources 2 10035 2012-01-27 14:46:19.704 +!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes. +footFileName = /usr/local/src/models/3-acc-2-ballots/PConProof.tla +footFileName = /usr/local/src/models/Semantics/Semantics.tla +footFileName = /usr/local/src/models/ConcatSequenceUniqueStringTest/Test.tla +Spec build invoked on Semantics ... + +!ENTRY org.eclipse.osgi 4 0 2012-01-27 14:46:21.171 +!MESSAGE An error occurred while automatically activating bundle org.eclipse.ui.editors (105). +!STACK 0 +org.osgi.framework.BundleException: Exception in org.eclipse.ui.internal.editors.text.EditorsPlugin.start() of bundle org.eclipse.ui.editors. + at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734) + at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) + at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) + at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:299) + at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440) + at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:268) + at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107) + at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:462) + at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) + at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400) + at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35) + at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:473) + at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429) + at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417) + at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) + at java.lang.ClassLoader.loadClass(ClassLoader.java:247) + at org.lamport.tla.toolbox.util.TLAMarkerHelper$1.run(TLAMarkerHelper.java:145) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) + at org.lamport.tla.toolbox.util.TLAMarkerHelper.installProblemMarker(TLAMarkerHelper.java:186) + at org.lamport.tla.toolbox.util.TLAMarkerHelper.installProblemMarkers(TLAMarkerHelper.java:364) + at org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:104) + at org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:57) + at org.lamport.tla.toolbox.spec.parser.SpecificationParserLauncher.parseSpecification(SpecificationParserLauncher.java:38) + at org.lamport.tla.toolbox.spec.nature.ParserHelper$2.run(ParserHelper.java:75) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2326) + at org.lamport.tla.toolbox.spec.nature.ParserHelper.rebuildSpec(ParserHelper.java:81) + at org.lamport.tla.toolbox.spec.nature.TLAParsingBuilder.build(TLAParsingBuilder.java:69) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +Caused by: org.eclipse.swt.SWTException: Invalid thread access + at org.eclipse.swt.SWT.error(SWT.java:4282) + at org.eclipse.swt.SWT.error(SWT.java:4197) + at org.eclipse.swt.SWT.error(SWT.java:4168) + at org.eclipse.swt.widgets.Display.error(Display.java:1210) + at org.eclipse.swt.widgets.Display.checkDevice(Display.java:752) + at org.eclipse.swt.widgets.Display.disposeExec(Display.java:1187) + at org.eclipse.jface.resource.ColorRegistry.hookDisplayDispose(ColorRegistry.java:268) + at org.eclipse.jface.resource.ColorRegistry.<init>(ColorRegistry.java:123) + at org.eclipse.jface.resource.ColorRegistry.<init>(ColorRegistry.java:106) + at org.eclipse.ui.internal.themes.WorkbenchThemeManager.<init>(WorkbenchThemeManager.java:98) + at org.eclipse.ui.internal.themes.WorkbenchThemeManager.getInstance(WorkbenchThemeManager.java:58) + at org.eclipse.ui.internal.Workbench.getThemeManager(Workbench.java:3449) + at org.eclipse.ui.internal.editors.text.EditorsPlugin.start(EditorsPlugin.java:214) + at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) + at java.security.AccessController.doPrivileged(Native Method) + at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) + ... 39 more +Root exception: +org.eclipse.swt.SWTException: Invalid thread access + at org.eclipse.swt.SWT.error(SWT.java:4282) + at org.eclipse.swt.SWT.error(SWT.java:4197) + at org.eclipse.swt.SWT.error(SWT.java:4168) + at org.eclipse.swt.widgets.Display.error(Display.java:1210) + at org.eclipse.swt.widgets.Display.checkDevice(Display.java:752) + at org.eclipse.swt.widgets.Display.disposeExec(Display.java:1187) + at org.eclipse.jface.resource.ColorRegistry.hookDisplayDispose(ColorRegistry.java:268) + at org.eclipse.jface.resource.ColorRegistry.<init>(ColorRegistry.java:123) + at org.eclipse.jface.resource.ColorRegistry.<init>(ColorRegistry.java:106) + at org.eclipse.ui.internal.themes.WorkbenchThemeManager.<init>(WorkbenchThemeManager.java:98) + at org.eclipse.ui.internal.themes.WorkbenchThemeManager.getInstance(WorkbenchThemeManager.java:58) + at org.eclipse.ui.internal.Workbench.getThemeManager(Workbench.java:3449) + at org.eclipse.ui.internal.editors.text.EditorsPlugin.start(EditorsPlugin.java:214) + at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) + at java.security.AccessController.doPrivileged(Native Method) + at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) + at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) + at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) + at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:299) + at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440) + at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:268) + at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107) + at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:462) + at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) + at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400) + at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35) + at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:473) + at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429) + at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417) + at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) + at java.lang.ClassLoader.loadClass(ClassLoader.java:247) + at org.lamport.tla.toolbox.util.TLAMarkerHelper$1.run(TLAMarkerHelper.java:145) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) + at org.lamport.tla.toolbox.util.TLAMarkerHelper.installProblemMarker(TLAMarkerHelper.java:186) + at org.lamport.tla.toolbox.util.TLAMarkerHelper.installProblemMarkers(TLAMarkerHelper.java:364) + at org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:104) + at org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:57) + at org.lamport.tla.toolbox.spec.parser.SpecificationParserLauncher.parseSpecification(SpecificationParserLauncher.java:38) + at org.lamport.tla.toolbox.spec.nature.ParserHelper$2.run(ParserHelper.java:75) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2326) + at org.lamport.tla.toolbox.spec.nature.ParserHelper.rebuildSpec(ParserHelper.java:81) + at org.lamport.tla.toolbox.spec.nature.TLAParsingBuilder.build(TLAParsingBuilder.java:69) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +!ENTRY org.eclipse.core.resources 4 2 2012-01-27 14:46:21.203 +!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.core.resources". +!STACK 0 +java.lang.NoClassDefFoundError: org/eclipse/ui/editors/text/FileDocumentProvider + at org.lamport.tla.toolbox.util.TLAMarkerHelper$1.run(TLAMarkerHelper.java:145) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) + at org.lamport.tla.toolbox.util.TLAMarkerHelper.installProblemMarker(TLAMarkerHelper.java:186) + at org.lamport.tla.toolbox.util.TLAMarkerHelper.installProblemMarkers(TLAMarkerHelper.java:364) + at org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:104) + at org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:57) + at org.lamport.tla.toolbox.spec.parser.SpecificationParserLauncher.parseSpecification(SpecificationParserLauncher.java:38) + at org.lamport.tla.toolbox.spec.nature.ParserHelper$2.run(ParserHelper.java:75) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2326) + at org.lamport.tla.toolbox.spec.nature.ParserHelper.rebuildSpec(ParserHelper.java:81) + at org.lamport.tla.toolbox.spec.nature.TLAParsingBuilder.build(TLAParsingBuilder.java:69) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +Caused by: org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter$TerminatingClassNotFoundException: An error occurred while automatically activating bundle org.eclipse.ui.editors (105). + at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:122) + at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:462) + at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) + at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400) + at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35) + at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:473) + at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429) + at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417) + at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) + at java.lang.ClassLoader.loadClass(ClassLoader.java:247) + ... 24 more +Caused by: org.osgi.framework.BundleException: Exception in org.eclipse.ui.internal.editors.text.EditorsPlugin.start() of bundle org.eclipse.ui.editors. + at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734) + at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) + at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) + at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:299) + at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440) + at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:268) + at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107) + ... 33 more +Caused by: org.eclipse.swt.SWTException: Invalid thread access + at org.eclipse.swt.SWT.error(SWT.java:4282) + at org.eclipse.swt.SWT.error(SWT.java:4197) + at org.eclipse.swt.SWT.error(SWT.java:4168) + at org.eclipse.swt.widgets.Display.error(Display.java:1210) + at org.eclipse.swt.widgets.Display.checkDevice(Display.java:752) + at org.eclipse.swt.widgets.Display.disposeExec(Display.java:1187) + at org.eclipse.jface.resource.ColorRegistry.hookDisplayDispose(ColorRegistry.java:268) + at org.eclipse.jface.resource.ColorRegistry.<init>(ColorRegistry.java:123) + at org.eclipse.jface.resource.ColorRegistry.<init>(ColorRegistry.java:106) + at org.eclipse.ui.internal.themes.WorkbenchThemeManager.<init>(WorkbenchThemeManager.java:98) + at org.eclipse.ui.internal.themes.WorkbenchThemeManager.getInstance(WorkbenchThemeManager.java:58) + at org.eclipse.ui.internal.Workbench.getThemeManager(Workbench.java:3449) + at org.eclipse.ui.internal.editors.text.EditorsPlugin.start(EditorsPlugin.java:214) + at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) + at java.security.AccessController.doPrivileged(Native Method) + at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) + ... 39 more + +!ENTRY org.eclipse.core.resources 4 75 2012-01-27 14:46:21.434 +!MESSAGE Errors occurred during the build. +!SUBENTRY 1 org.lamport.tla.toolbox 4 75 2012-01-27 14:46:21.435 +!MESSAGE Errors running builder 'TLA+ Syntax Parser' on project 'Semantics'. +!STACK 0 +java.lang.NoClassDefFoundError: org/eclipse/ui/editors/text/FileDocumentProvider + at org.lamport.tla.toolbox.util.TLAMarkerHelper$1.run(TLAMarkerHelper.java:145) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) + at org.lamport.tla.toolbox.util.TLAMarkerHelper.installProblemMarker(TLAMarkerHelper.java:186) + at org.lamport.tla.toolbox.util.TLAMarkerHelper.installProblemMarkers(TLAMarkerHelper.java:364) + at org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:104) + at org.lamport.tla.toolbox.spec.parser.ModuleParserLauncher.parseModule(ModuleParserLauncher.java:57) + at org.lamport.tla.toolbox.spec.parser.SpecificationParserLauncher.parseSpecification(SpecificationParserLauncher.java:38) + at org.lamport.tla.toolbox.spec.nature.ParserHelper$2.run(ParserHelper.java:75) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) + at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2326) + at org.lamport.tla.toolbox.spec.nature.ParserHelper.rebuildSpec(ParserHelper.java:81) + at org.lamport.tla.toolbox.spec.nature.TLAParsingBuilder.build(TLAParsingBuilder.java:69) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +Caused by: org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter$TerminatingClassNotFoundException: An error occurred while automatically activating bundle org.eclipse.ui.editors (105). + at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:122) + at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:462) + at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) + at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400) + at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35) + at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:473) + at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429) + at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417) + at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) + at java.lang.ClassLoader.loadClass(ClassLoader.java:247) + ... 24 more +Caused by: org.osgi.framework.BundleException: Exception in org.eclipse.ui.internal.editors.text.EditorsPlugin.start() of bundle org.eclipse.ui.editors. + at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734) + at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683) + at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381) + at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:299) + at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440) + at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:268) + at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107) + ... 33 more +Caused by: org.eclipse.swt.SWTException: Invalid thread access + at org.eclipse.swt.SWT.error(SWT.java:4282) + at org.eclipse.swt.SWT.error(SWT.java:4197) + at org.eclipse.swt.SWT.error(SWT.java:4168) + at org.eclipse.swt.widgets.Display.error(Display.java:1210) + at org.eclipse.swt.widgets.Display.checkDevice(Display.java:752) + at org.eclipse.swt.widgets.Display.disposeExec(Display.java:1187) + at org.eclipse.jface.resource.ColorRegistry.hookDisplayDispose(ColorRegistry.java:268) + at org.eclipse.jface.resource.ColorRegistry.<init>(ColorRegistry.java:123) + at org.eclipse.jface.resource.ColorRegistry.<init>(ColorRegistry.java:106) + at org.eclipse.ui.internal.themes.WorkbenchThemeManager.<init>(WorkbenchThemeManager.java:98) + at org.eclipse.ui.internal.themes.WorkbenchThemeManager.getInstance(WorkbenchThemeManager.java:58) + at org.eclipse.ui.internal.Workbench.getThemeManager(Workbench.java:3449) + at org.eclipse.ui.internal.editors.text.EditorsPlugin.start(EditorsPlugin.java:214) + at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711) + at java.security.AccessController.doPrivileged(Native Method) + at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702) + ... 39 more</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>838</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-28 00:30:17 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>839</commentid> + <comment_count>2</comment_count> + <attachid>171</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-01-28 00:30:20 +0000</bug_when> + <thetext>Created attachment 171 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>171</attachid> + <date>2012-01-28 00:30:00 +0000</date> + <delta_ts>2012-01-28 00:30:20 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>26542</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>264</bug_id> + + <creation_ts>2012-01-31 18:38:00 +0000</creation_ts> + <short_desc>Make TLC bound on cardinality of a set settable by user.</short_desc> + <delta_ts>2012-03-22 01:23:34 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Windows 7</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>bugzilla.tlaplus.net</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>840</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-01-31 18:38:58 +0000</bug_when> + <thetext>Make the setBound parameter in the TLCGlobals class user-settable, which requires adding a command-line option to set it and modifying the Toolbox to allow the user to set it. This parameter, which is the maximum cardinality of a set that TLC will allow, also limits the number of initial states. Allowing the user to increase it will make it possible to check inductive invariance on larger models.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>881</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-16 00:29:52 +0000</bug_when> + <thetext>*** Bug 274 has been marked as a duplicate of this bug. ***</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>894</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-03-08 12:54:02 +0000</bug_when> + <thetext>Enhancement released to HEAD ++ -maxSetSize parameter for TLC ++ UI on advanced model page (UI probably needs rewording)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>895</commentid> + <comment_count>3</comment_count> + <attachid>184</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-03-08 12:54:04 +0000</bug_when> + <thetext>Created attachment 184 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>902</commentid> + <comment_count>4</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-03-22 01:23:34 +0000</bug_when> + <thetext>This feature is stable and will be released in Version 1.4.3.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>184</attachid> + <date>2012-03-08 12:54:00 +0000</date> + <delta_ts>2012-03-08 12:54:04 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>51534</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>265</bug_id> + + <creation_ts>2012-02-01 00:26:00 +0000</creation_ts> + <short_desc>UI enablement broken after spec open leaving actions and handler in disabled state</short_desc> + <delta_ts>2012-02-16 20:01:18 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>1.4.2</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>841</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-01 00:26:16 +0000</bug_when> + <thetext>Opening a spec does not correctly updates the Toolbox enablement state. This causes several actions and handlers to be disabled. + +As a workaround, the user can manually triggering the re-evaluation of the enablement state by cycling the active workbench page (e.g. opening spec explorer).</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>842</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-01 00:33:38 +0000</bug_when> + <thetext>Committed a workaround that cycles workbench page activation to cause a selection changed event to occur that triggers the re-evaluation of the workbench's enablement state.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>843</commentid> + <comment_count>2</comment_count> + <attachid>172</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-01 00:33:40 +0000</bug_when> + <thetext>Created attachment 172 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>172</attachid> + <date>2012-02-01 00:33:00 +0000</date> + <delta_ts>2012-02-01 00:33:40 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>2028</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>266</bug_id> + + <creation_ts>2012-02-01 17:59:00 +0000</creation_ts> + <short_desc>Add (general) preference page to set TLC library path</short_desc> + <delta_ts>2012-02-16 19:58:36 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>1.4.2</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>844</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-01 17:59:47 +0000</bug_when> + <thetext>A new (general) preference page is needed for the user to set extra TLC library/module lookup paths. Additionally, the path vars have to be passed to TLC as a system property.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>845</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-02 17:36:14 +0000</bug_when> + <thetext>Enhancement released to HEAD + +Project specific library path replaces the global preference. Additionally to TLC, the path variable is set for SANY.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>846</commentid> + <comment_count>2</comment_count> + <attachid>173</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-02 17:36:17 +0000</bug_when> + <thetext>Created attachment 173 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>173</attachid> + <date>2012-02-02 17:36:00 +0000</date> + <delta_ts>2012-02-02 17:36:17 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>13620</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>267</bug_id> + + <creation_ts>2012-02-03 21:59:00 +0000</creation_ts> + <short_desc>AssertionFailedException: null argument:Found a plus cal assertion failed location without a TLC error location with the module name.</short_desc> + <delta_ts>2012-02-16 19:58:01 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>Windows Vista</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>1.4.2</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>847</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-03 21:59:35 +0000</bug_when> + <thetext>footFileName = C:\lamport\talks\lada12\RemoveRedundantParens.tla +Writing files to: Model_1\ +Skipping resource: Model_1/MC.tla +Skipping resource: Model_1/RemoveRedundantParens.tla +Final check for the modelcheck mode. The result of the check is true +TLC ARGUMENTS: [-checkpoint, 3, -fpbits, 0, -fp, 0, -config, MC.cfg, -coverage, 3, -workers, 1, -tool, -metadir, C:\lamport\talks\lada12\RemoveRedundantParens.toolbox\Model_1, MC] + +!ENTRY org.lamport.tla.toolbox.tool.tlc.ui 1 0 2012-02-03 12:34:13.120 +!MESSAGE TLCOutputSourceRegistry for model checking maintains 2 sources. + +!ENTRY org.lamport.tla.toolbox.tool.tlc.ui 1 0 2012-02-03 12:34:13.120 +!MESSAGE The source RemoveRedundantParens___Model_1.launch has 4 prio and 1 listeners + +!ENTRY org.lamport.tla.toolbox.tool.tlc.ui 1 0 2012-02-03 12:34:13.120 +!MESSAGE The source Test2___Model_2.launch has 4 prio and 1 listeners + +!ENTRY org.eclipse.ui 4 0 2012-02-03 12:34:15.165 +!MESSAGE Unhandled event loop exception +!STACK 0 +org.eclipse.swt.SWTException: Failed to execute runnable (org.eclipse.core.runtime.AssertionFailedException: null argument:Found a plus cal assertion failed location without a TLC error location with the module name.) + at org.eclipse.swt.SWT.error(SWT.java:4083) + at org.eclipse.swt.SWT.error(SWT.java:3998) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:137) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4041) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3660) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.lamport.tla.toolbox.Application.start(Application.java:42) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) + at java.lang.reflect.Method.invoke(Unknown Source) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) + at org.eclipse.equinox.launcher.Main.run(Main.java:1408) + at org.eclipse.equinox.launcher.Main.main(Main.java:1384) +Caused by: org.eclipse.core.runtime.AssertionFailedException: null argument:Found a plus cal assertion failed location without a TLC error location with the module name. + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at org.lamport.tla.toolbox.tool.tlc.ui.util.TLCUIHelper.setTLCLocationHyperlinks(TLCUIHelper.java:117) + at org.lamport.tla.toolbox.tool.tlc.ui.view.TLCErrorView.fill(TLCErrorView.java:221) + at org.lamport.tla.toolbox.tool.tlc.ui.view.TLCErrorView.updateErrorView(TLCErrorView.java:632) + at org.lamport.tla.toolbox.tool.tlc.ui.editor.page.ResultPage$2.run(ResultPage.java:232) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) + ... 23 more + +!ENTRY org.eclipse.text 4 2 2012-02-03 12:34:16.112 +!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.text". +!STACK 0 +org.eclipse.core.runtime.AssertionFailedException: null argument:The state encountered without the error describing the reason for it. This is a bug. + at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85) + at org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.onOutput(TLCModelLaunchDataProvider.java:249) + at org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:89) + at org.lamport.tla.toolbox.tool.tlc.output.source.CachingTLCOutputSource.onOutput(CachingTLCOutputSource.java:57) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:226) + at org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:611) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:755) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:736) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:721) + at org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:796) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1191) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1210) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:324) + at org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.addIncrement(ParsingTLCOutputSink.java:47) + at org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:39) + at org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + at org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + at org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + at org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + at org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + at java.lang.Thread.run(Unknown Source) +Job 'TLC run for Model_1' terminated with status: { Done }</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>848</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-04 01:56:20 +0000</bug_when> + <thetext>TLC process output causing this bug: + + +TLC2 Version 2.04 of 19 January 2012 +Running in Model-Checking mode. +Parsing file MC.tla +Parsing file RemoveRedundantParens.tla +Parsing file /usr/local/src/tla/tlatools/class/tla2sany/StandardModules/TLC.tla +Parsing file /usr/local/src/tla/tlatools/class/tla2sany/StandardModules/Integers.tla +Parsing file /usr/local/src/tla/tlatools/class/tla2sany/StandardModules/Sequences.tla +Parsing file /usr/local/src/tla/tlatools/class/tla2sany/StandardModules/Naturals.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module TLC +Semantic processing of module RemoveRedundantParens +Semantic processing of module MC +Starting... (2012-02-03 16:51:38) +Computing initial states... +Finished computing initial states: 1374 distinct states generated. +Progress(3) at 2012-02-03 16:51:44: 4120 states generated (4120 s/min), 4120 distinct states found (4120 ds/min), 1372 states left on queue. +Progress(3) at 2012-02-03 16:52:44: 4120 states generated (0 s/min), 4120 distinct states found (0 ds/min), 1372 states left on queue. +Progress(3) at 2012-02-03 16:53:44: 4120 states generated (0 s/min), 4120 distinct states found (0 ds/min), 1372 states left on queue. +Progress(3) at 2012-02-03 16:54:44: 4120 states generated (0 s/min), 4120 distinct states found (0 ds/min), 1372 states left on queue. +Error: Attempted to apply the operator overridden by the Java method +public static tlc2.value.Value tlc2.module.TLC.Assert(tlc2.value.Value,tlc2.value.Value), +but it produced the following error: +The first argument of Assert evaluated to FALSE; the second argument was: +"Failure of assertion at line 150, column 5." +tlc2.tool.EvalException: Attempted to apply the operator overridden by the Java method +public static tlc2.value.Value tlc2.module.TLC.Assert(tlc2.value.Value,tlc2.value.Value), +but it produced the following error: +The first argument of Assert evaluated to FALSE; the second argument was: +"Failure of assertion at line 150, column 5." + at tlc2.value.MethodValue.apply(MethodValue.java:62) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:849) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:776) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:862) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:878) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:975) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:878) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:975) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:776) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:1029) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:878) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:700) + at tlc2.tool.ModelChecker.doNext(ModelChecker.java:404) + at tlc2.tool.Worker.run(Worker.java:75) +Error: The behavior up to this point is: +State 1: <Initial predicate> +/\ out = <<>> +/\ unmatchedLeft = <<>> +/\ lastMatchedLeft = -1 +/\ i = 1 +/\ in = << >> +/\ lastAddedRight = -1 +/\ pc = "Lbl_1"</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>849</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-04 01:57:08 +0000</bug_when> + <thetext>Error: The error occurred when TLC was evaluating the nested +expressions at the following positions: +0. Line 169, column 13 to line 169, column 24 in RemoveRedundantParens +1. Line 170, column 13 to line 200, column 53 in RemoveRedundantParens +2. Line 189, column 24 to line 195, column 38 in RemoveRedundantParens +3. Line 195, column 35 to line 195, column 38 in RemoveRedundantParens +4. Line 196, column 24 to line 197, column 76 in RemoveRedundantParens + + +4120 states generated, 4120 distinct states found, 1372 states left on queue. +The depth of the complete state graph search is 3. +Finished. (2012-02-03 16:56:39)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>850</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-06 21:13:12 +0000</bug_when> + <thetext>Correctly parsed output: + +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.04 of 19 January 2012 +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running in Model-Checking mode. +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file MC.tla +Parsing file Test.tla +Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\TLC.tla +Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Integers.tla +Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Sequences.tla +Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Naturals.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module TLC +Semantic processing of module Test +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2012-02-06 10:35:52) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +Attempted to check equality of integer 2 with non-integer: +"3" +@!@!@ENDMSG 1000 @!@!@ +java.lang.RuntimeException: Attempted to check equality of integer 2 with non-integer: +"3" + at util.Assert.fail(Assert.java:25) + at tlc2.value.IntValue.equals(IntValue.java:64) + at tlc2.tool.Tool.evalAppl(Tool.java:1803) + at tlc2.tool.Tool.eval(Tool.java:1212) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:1010) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:776) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:1021) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:776) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:1029) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:878) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:700) + at tlc2.tool.ModelChecker.doNext(ModelChecker.java:404) + at tlc2.tool.Worker.run(Worker.java:75) +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: <Initial predicate> +/\ var = defaultInitValue +/\ qvar = <<defaultInitValue, defaultInitValue, defaultInitValue>> +/\ xx = defaultInitValue +/\ zz = <<defaultInitValue, defaultInitValue, defaultInitValue>> +/\ x = defaultInitValue +/\ y = defaultInitValue +/\ pc = <<"lab", "lab", "lab">> + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2103:1 @!@!@ +The error occurred when TLC was evaluating the nested +expressions at the following positions: +0. Line 39, column 17 to line 39, column 32 in Test +1. Line 40, column 17 to line 40, column 23 in Test +2. Line 41, column 17 to line 41, column 23 in Test + + +@!@!@ENDMSG 2103 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2012-02-06 10:35:52 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 12 to line 25, col 12 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 15 to line 25, col 16 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 19 to line 25, col 19 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 22 to line 25, col 24 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 27 to line 25, col 28 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 31 to line 25, col 34 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 37 to line 25, col 38 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 40, col 17 to line 40, col 23 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 42, col 17 to line 42, col 50 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 43, col 30 to line 43, col 31 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 43, col 34 to line 43, col 34 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 43, col 37 to line 43, col 39 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 43, col 42 to line 43, col 45 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 43, col 48 to line 43, col 49 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(1) at 2012-02-06 10:35:52: 1 states generated (638 s/min), 1 distinct states found (638 ds/min), 0 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +1 states generated, 1 distinct states found, 0 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2194:0 @!@!@ +The depth of the complete state graph search is 1. +@!@!@ENDMSG 2194 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished. (2012-02-06 10:35:52) +@!@!@ENDMSG 2186 @!@!@</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>851</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-06 21:13:41 +0000</bug_when> + <thetext>Output making the Toolbox choke: + +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.04 of 19 January 2012 +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running in Model-Checking mode. +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file MC.tla +Parsing file Test.tla +Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\TLC.tla +Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Integers.tla +Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Sequences.tla +Parsing file C:\lamport\tla\newtools\tla2-inria-workspace\tla2-inria\tlatools\class\tla2sany\StandardModules\Naturals.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module TLC +Semantic processing of module Test +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2012-02-06 10:36:45) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +@!@!@STARTMSG 2154:0 @!@!@ +Attempted to apply the operator overridden by the Java method +public static tlc2.value.Value tlc2.module.TLC.Assert(tlc2.value.Value,tlc2.value.Value), +but it produced the following error: +@!@!@STARTMSG 2132:0 @!@!@ +The first argument of Assert evaluated to FALSE; the second argument was: +"Failure of assertion." +@!@!@ENDMSG 2132 @!@!@ +@!@!@ENDMSG 2154 @!@!@ +@!@!@ENDMSG 1000 @!@!@ +tlc2.tool.EvalException: @!@!@STARTMSG 2154:0 @!@!@ +Attempted to apply the operator overridden by the Java method +public static tlc2.value.Value tlc2.module.TLC.Assert(tlc2.value.Value,tlc2.value.Value), +but it produced the following error: +@!@!@STARTMSG 2132:0 @!@!@ +The first argument of Assert evaluated to FALSE; the second argument was: +"Failure of assertion." +@!@!@ENDMSG 2132 @!@!@ +@!@!@ENDMSG 2154 @!@!@ + at tlc2.value.MethodValue.apply(MethodValue.java:62) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:849) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:776) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:1021) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:776) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:1029) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStatesAppl(Tool.java:878) + at tlc2.tool.Tool.getNextStates(Tool.java:710) + at tlc2.tool.Tool.getNextStates(Tool.java:700) + at tlc2.tool.ModelChecker.doNext(ModelChecker.java:404) + at tlc2.tool.Worker.run(Worker.java:75) +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: <Initial predicate> +/\ var = defaultInitValue +/\ qvar = <<defaultInitValue, defaultInitValue, defaultInitValue>> +/\ xx = defaultInitValue +/\ zz = <<defaultInitValue, defaultInitValue, defaultInitValue>> +/\ x = defaultInitValue +/\ y = defaultInitValue +/\ pc = <<"lab", "lab", "lab">> + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2103:1 @!@!@ +The error occurred when TLC was evaluating the nested +expressions at the following positions: +0. Line 39, column 17 to line 39, column 32 in Test +1. Line 40, column 17 to line 40, column 23 in Test +2. Line 41, column 17 to line 41, column 54 in Test + + +@!@!@ENDMSG 2103 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2012-02-06 10:36:45 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 12 to line 25, col 12 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 15 to line 25, col 16 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 19 to line 25, col 19 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 22 to line 25, col 24 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 27 to line 25, col 28 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 31 to line 25, col 34 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 25, col 37 to line 25, col 38 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 40, col 17 to line 40, col 23 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 42, col 17 to line 42, col 50 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 43, col 30 to line 43, col 31 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 43, col 34 to line 43, col 34 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 43, col 37 to line 43, col 39 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 43, col 42 to line 43, col 45 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 43, col 48 to line 43, col 49 of module Test: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(1) at 2012-02-06 10:36:45: 1 states generated (483 s/min), 1 distinct states found (483 ds/min), 0 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +1 states generated, 1 distinct states found, 0 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2194:0 @!@!@ +The depth of the complete state graph search is 1. +@!@!@ENDMSG 2194 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished. (2012-02-06 10:36:45) +@!@!@ENDMSG 2186 @!@!@</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>852</commentid> + <comment_count>5</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-07 17:32:53 +0000</bug_when> + <thetext>Added test case</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>853</commentid> + <comment_count>6</comment_count> + <attachid>174</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-07 17:32:56 +0000</bug_when> + <thetext>Created attachment 174 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>854</commentid> + <comment_count>7</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-07 17:59:55 +0000</bug_when> + <thetext>The offending text in the output is: + +@!@!@STARTMSG 2154:0 @!@!@ +Attempted to apply the operator overridden by the Java method +public static tlc2.value.Value tlc2.module.TLC.Assert(tlc2.value.Value,tlc2= +.value.Value), +but it produced the following error: +@!@!@STARTMSG 2132:0 @!@!@ +The first argument of Assert evaluated to FALSE; the second argument was: +"Failure of assertion." +@!@!@ENDMSG 2132 @!@!@ +@!@!@ENDMSG 2154 @!@!@</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>867</commentid> + <comment_count>8</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-14 16:23:31 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>174</attachid> + <date>2012-02-07 17:32:00 +0000</date> + <delta_ts>2012-02-07 17:32:56 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>3647</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>268</bug_id> + + <creation_ts>2012-02-07 23:45:00 +0000</creation_ts> + <short_desc>GotoMatchingParen markers override ShowUses markers</short_desc> + <delta_ts>2012-02-16 19:56:57 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4.1</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>1.4.2</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>855</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-07 23:45:21 +0000</bug_when> + <thetext>LL: "Also, I've encountered a mysterious bug. The markers which are added +by the ShowUses command used to get the color specified by an +annotationType entry in a plugin.xml file that I defined for that +command. When I added the GotoMatchingParen command, I defined a +different annotationType entry for the marker it displays. The +markers added by the ShowUses command now have the color specified by +the annotationType I created for the GotoMatchingParen command. Do +you understand markers well enough to be able to figure this out +easily?"</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>860</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-08 21:25:37 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>861</commentid> + <comment_count>2</comment_count> + <attachid>176</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-08 21:25:41 +0000</bug_when> + <thetext>Created attachment 176 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>176</attachid> + <date>2012-02-08 21:25:00 +0000</date> + <delta_ts>2012-02-08 21:25:41 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>32837</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>269</bug_id> + + <creation_ts>2012-02-07 23:47:00 +0000</creation_ts> + <short_desc>Hyperlink (StyledRange) in TLC error view go to a subrange dependning on where the users clicks</short_desc> + <delta_ts>2012-02-16 19:56:46 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4.1</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>1.4.2</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>856</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-07 23:47:28 +0000</bug_when> + <thetext>LL: "Another weird thing I observe is that if I click (or Control-click) +on location number 0, depending on where I click, it highlights +either the entire TLA+ formula + +pc = "Lbl_1" + +or just the last double-quote. + +The Eclipse console shows nothing when I do the clicking."</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>857</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-08 17:03:38 +0000</bug_when> + <thetext>Bug got most probably introduces with revision 17310 - Added hyperlinking of failed assertion locations printed by the PlusCal translator.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>858</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-08 17:04:08 +0000</bug_when> + <thetext>Fixed in HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>859</commentid> + <comment_count>3</comment_count> + <attachid>175</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-08 17:04:11 +0000</bug_when> + <thetext>Created attachment 175 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>175</attachid> + <date>2012-02-08 17:04:00 +0000</date> + <delta_ts>2012-02-08 17:04:11 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1245</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>270</bug_id> + + <creation_ts>2012-02-13 17:31:00 +0000</creation_ts> + <short_desc>Spec#rootfile initializes to null, causing NPE in Spec.initProjectProperties and failing Toolbox to start</short_desc> + <delta_ts>2012-02-13 17:55:59 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4.1</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>1.4.2</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>863</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-13 17:31:46 +0000</bug_when> + <thetext>!ENTRY org.eclipse.core.jobs 4 2 2012-02-12 23:20:31.690 +!MESSAGE An internal error occurred during: "Calculating specification size...". +!STACK 0 +java.lang.NullPointerException + at org.lamport.tla.toolbox.spec.Spec.initProjectProperties(Spec.java:200) + at org.lamport.tla.toolbox.spec.Spec.<init>(Spec.java:125) + at org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager.<init>(WorkspaceSpecManager.java:77) + at org.lamport.tla.toolbox.Activator.getSpecManager(Activator.java:303) + at org.lamport.tla.toolbox.ui.contribution.ParseStatusContributionItem$1.run(ParseStatusContributionItem.java:85) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +!ENTRY org.lamport.tla.toolbox 4 0 2012-02-12 23:20:31.752 +!MESSAGE A spec did not load correctly, probably because it was modified outside the Toolbox. + Error occurred in toolbox/spec/Spec.initProjectProperties()</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>864</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-13 17:34:36 +0000</bug_when> + <thetext>Fix released to HEAD by safeguarding against NPE +(proper fix would IMO guard against Spec#rootFile becoming null in the first place)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>865</commentid> + <comment_count>2</comment_count> + <attachid>177</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-13 17:34:38 +0000</bug_when> + <thetext>Created attachment 177 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>177</attachid> + <date>2012-02-13 17:34:00 +0000</date> + <delta_ts>2012-02-13 17:34:38 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>2934</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>271</bug_id> + + <creation_ts>2012-02-14 16:18:00 +0000</creation_ts> + <short_desc>Unify Toolbox logging to use .log file</short_desc> + <delta_ts>2012-02-16 19:54:26 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4.1</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>1.4.2</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>866</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-14 16:18:32 +0000</bug_when> + <thetext>In many places the Toolbox logs to System.out instead of .metadata/.log. This means one has to search two different locations log output with System.out being hidden when the Toolbox runs in default mode (without "-console" parameter).</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>882</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-16 19:54:26 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>272</bug_id> + + <creation_ts>2012-02-14 16:25:00 +0000</creation_ts> + <short_desc>Add common superclass to TLC domain specific exceptions</short_desc> + <delta_ts>2012-02-14 16:25:43 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4.1</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>868</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-14 16:25:43 +0000</bug_when> + <thetext>All TLC domain specific exceptions should be superclassed with a common TLCException to easily distinguish domain exception from regular Java programming exceptions. Bug #267 shows the usefulness.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>273</bug_id> + + <creation_ts>2012-02-14 16:27:00 +0000</creation_ts> + <short_desc>TLC model editor memory slides has to handle pre-existing model values</short_desc> + <delta_ts>2012-02-16 19:53:36 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4.1</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>1.4.2</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>869</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-14 16:27:29 +0000</bug_when> + <thetext>LL: "When I open an existing model created before the addition of the way to specify the fraction of memory allocated to TLC was added, that value appears as 99%. This is not good, because if someone updates and then goes to rerun an existing model, he’s not likely to open up the “How to Run” field to check if something has changed. If this can’t be fixed, then we’ll have to warn users of this."</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>878</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-16 00:20:55 +0000</bug_when> + <thetext>Fix released to HEAD that raises a warning if legacy value is detected.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>879</commentid> + <comment_count>2</comment_count> + <attachid>180</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-16 00:20:58 +0000</bug_when> + <thetext>Created attachment 180 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>180</attachid> + <date>2012-02-16 00:20:00 +0000</date> + <delta_ts>2012-02-16 00:20:58 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>2755</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>274</bug_id> + + <creation_ts>2012-02-14 16:36:00 +0000</creation_ts> + <short_desc>Add TLA+ set upper bound command line parameter and Toolbox UI</short_desc> + <delta_ts>2012-02-16 00:29:52 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4.1</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>DUPLICATE</resolution> + <dup_id>264</dup_id> + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>870</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-14 16:36:16 +0000</bug_when> + <thetext>tlc2.TLCGlobals.setBound defines an upper bound for the size of a TLA+ set. Currently this value is hard coded to 1.000.000. +Some models require a larger upper bound though, and thus a command line parameter as well as corresponding Toolbox UI becomes necessary.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>880</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-16 00:29:52 +0000</bug_when> + <thetext> + +*** This bug has been marked as a duplicate of bug 264 ***</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>275</bug_id> + + <creation_ts>2012-02-14 16:45:00 +0000</creation_ts> + <short_desc>Set eclipse.buildId at build time to log Toolbox version in .log file</short_desc> + <delta_ts>2012-02-14 16:45:07 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4.1</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>871</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-14 16:45:07 +0000</bug_when> + <thetext>Set eclipse.buildId at build time to log Toolbox version in .log file. This is done by setting the system property "eclipse.buidId" in the .product file. To avoid hard coding the build value, a version bump to Tycho 0.14.x is necessary.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>276</bug_id> + + <creation_ts>2012-02-15 22:48:00 +0000</creation_ts> + <short_desc>Nested TLC VM might differ from Toolbox VM</short_desc> + <delta_ts>2012-02-15 22:57:02 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4.1</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>1.4.2</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>875</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-15 22:48:29 +0000</bug_when> + <thetext>Due to the way the Toolbox creates the nested JVM (used to launch the TLC model checker), it might use a different one (e.g. 64bit Toolbox vs. 32bit nested JVM). This can cause errors if for example the heap space has been calculated on 64bit and does not work on 32bit.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>876</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-15 22:57:00 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>877</commentid> + <comment_count>2</comment_count> + <attachid>179</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-02-15 22:57:02 +0000</bug_when> + <thetext>Created attachment 179 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>179</attachid> + <date>2012-02-15 22:57:00 +0000</date> + <delta_ts>2012-02-15 22:57:02 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>2680</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>277</bug_id> + + <creation_ts>2012-02-25 09:43:00 +0000</creation_ts> + <short_desc>TLC does not seem to terminate on SAT problem</short_desc> + <delta_ts>2012-02-25 16:17:22 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>1.4.1</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Mac OS</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>INVALID</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Michael Leuschel">leuschel</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>lamport</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>886</commentid> + <comment_count>0</comment_count> + <who name="Michael Leuschel">leuschel</who> + <bug_when>2012-02-25 09:43:25 +0000</bug_when> + <thetext>Background: For experimentation purposes I have encoded a few SAT problems in TLA+ and wanted to check how TLC performs on them (also compared to ProB with our new TLA2B converter; of course if one has a pure SAT problem one is better off using a pure SAT solver; but the idea is that in TLA+ or B one can of course mix the SAT problem with other types of constraints). + +Problem Description: +If I use Init == TypeInv /\ Sol then I was not able to find a solution with TLC (after 5 hours). I hence tried to provide part of a solution with the OneSol definition. +In the specification below, if I change OneSol to: + +OneSol == (~x1 /\ ~x2 /\ ~x3 /\ ~x4 /\ ~x5 /\ + ~x6 /\ x7 /\ x8 /\ ~x9 /\ ~x10 /\ + ~x11 /\ ~x12 /\ ~x13 /\ x14 /\ x15 /\ + x16 (* /\ ~x17/\ ~x18 /\ x19 /\ ~x20 *)) (* encode part of first solution found by ProB *) + +and perform model checking with TLC (toolbox 1.4.1 64 bit on Mac OS X 10.7.3) TLC runs for about a second and then I get the message "Too many possible next states for the last state in the trace.". +I don't understand why this message appears. +Have I encoded something badly in TLA+ ? + +If I use the version of OneSol provided below, TLC does not seem to terminate. +OneSol == (~x1 /\ ~x2 /\ ~x3 /\ ~x4 /\ ~x5 /\ + ~x6 /\ x7 /\ x8 /\ ~x9 /\ ~x10 /\ + ~x11 /\ ~x12 /\ ~x13 /\ x14 /\ x15 (* /\ + x16 /\ ~x17/\ ~x18 /\ x19 /\ ~x20 *)) (* encode part of first solution found by ProB *) + +I am not sure what is going wrong here; there should only be 2^5 = 32 possibilities to try out? +Probably I did something wrong in my TLA+ encoding of the SAT problem ?? + +----- MODULE uf20_02_partial ----- +(* CNF Translated to TLA *) +(* ProB can find all 29 solutions in much less than a second *) +(* TLC says either with partial or full Sol provided: "Too many possible next states for the last state in the trace." *) +(* this works for up to 4 remaining variables; with 5 remaining variables x16-x20 to be found: at least 35 min runtime *) +VARIABLES +x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20 +TypeInv == + x1\in BOOLEAN /\ x2\in BOOLEAN /\ x3\in BOOLEAN /\ x4\in BOOLEAN /\ x5\in BOOLEAN /\ + x6\in BOOLEAN /\ x7\in BOOLEAN /\ x8\in BOOLEAN /\ x9\in BOOLEAN /\ x10\in BOOLEAN /\ + x11\in BOOLEAN /\ x12\in BOOLEAN /\ x13\in BOOLEAN /\ x14\in BOOLEAN /\ x15\in BOOLEAN /\ + x16\in BOOLEAN /\ x17\in BOOLEAN /\ x18\in BOOLEAN /\ x19\in BOOLEAN /\ x20\in BOOLEAN + Sol == + ( ~x10 \/ ~x16 \/ x5 ) /\ + ( x16 \/ ~x6 \/ x5 ) /\ + ( ~x17 \/ ~x14 \/ ~x18 ) /\ + ( ~x10 \/ ~x15 \/ x19 ) /\ + ( ~x1 \/ ~x9 \/ ~x18 ) /\ + ( x3 \/ x7 \/ ~x6 ) /\ + ( ~x13 \/ x1 \/ x6 ) /\ + ( ~x2 \/ ~x16 \/ ~x20 ) /\ + ( x7 \/ x8 \/ x18 ) /\ + ( ~x7 \/ x10 \/ ~x20 ) /\ + ( x2 \/ ~x14 \/ ~x17 ) /\ + ( x2 \/ x1 \/ x19 ) /\ + ( x7 \/ ~x20 \/ ~x1 ) /\ + ( ~x11 \/ x1 \/ ~x17 ) /\ + ( x3 \/ ~x12 \/ x19 ) /\ + ( ~x3 \/ ~x13 \/ x6 ) /\ + ( ~x13 \/ x3 \/ ~x12 ) /\ + ( x5 \/ ~x7 \/ ~x12 ) /\ + ( x20 \/ x8 \/ ~x16 ) /\ + ( ~x13 \/ ~x6 \/ x19 ) /\ + ( ~x5 \/ x1 \/ x14 ) /\ + ( x9 \/ ~x5 \/ x18 ) /\ + ( ~x12 \/ ~x17 \/ ~x1 ) /\ + ( ~x20 \/ ~x16 \/ x19 ) /\ + ( x12 \/ x10 \/ ~x11 ) /\ + ( x6 \/ ~x7 \/ ~x2 ) /\ + ( x13 \/ ~x10 \/ x17 ) /\ + ( ~x20 \/ x8 \/ ~x16 ) /\ + ( ~x10 \/ ~x1 \/ ~x8 ) /\ + ( ~x7 \/ ~x3 \/ x19 ) /\ + ( x19 \/ ~x1 \/ ~x6 ) /\ + ( x19 \/ ~x2 \/ x13 ) /\ + ( ~x2 \/ x20 \/ ~x9 ) /\ + ( ~x8 \/ ~x20 \/ x16 ) /\ + ( ~x13 \/ ~x1 \/ x11 ) /\ + ( x15 \/ ~x12 \/ ~x6 ) /\ + ( ~x17 \/ ~x19 \/ x9 ) /\ + ( x19 \/ ~x18 \/ x16 ) /\ + ( x7 \/ ~x8 \/ ~x19 ) /\ + ( ~x3 \/ ~x7 \/ ~x1 ) /\ + ( x7 \/ ~x17 \/ ~x16 ) /\ + ( ~x2 \/ ~x14 \/ x1 ) /\ + ( ~x18 \/ ~x10 \/ ~x8 ) /\ + ( ~x16 \/ x5 \/ x8 ) /\ + ( x4 \/ x8 \/ x10 ) /\ + ( ~x20 \/ ~x11 \/ ~x19 ) /\ + ( x8 \/ ~x16 \/ ~x6 ) /\ + ( x18 \/ x12 \/ x8 ) /\ + ( ~x5 \/ ~x20 \/ ~x10 ) /\ + ( x16 \/ x17 \/ x3 ) /\ + ( x7 \/ ~x1 \/ ~x17 ) /\ + ( x17 \/ ~x4 \/ x7 ) /\ + ( x20 \/ ~x9 \/ ~x13 ) /\ + ( x13 \/ x18 \/ x16 ) /\ + ( ~x16 \/ ~x6 \/ x5 ) /\ + ( x5 \/ x17 \/ x7 ) /\ + ( ~x12 \/ ~x17 \/ ~x6 ) /\ + ( ~x20 \/ x19 \/ ~x5 ) /\ + ( x9 \/ ~x19 \/ x16 ) /\ + ( ~x13 \/ ~x16 \/ x11 ) /\ + ( ~x4 \/ ~x19 \/ ~x18 ) /\ + ( ~x13 \/ x10 \/ ~x15 ) /\ + ( x16 \/ ~x7 \/ ~x14 ) /\ + ( ~x19 \/ ~x7 \/ ~x18 ) /\ + ( ~x20 \/ x5 \/ x13 ) /\ + ( x12 \/ ~x6 \/ x4 ) /\ + ( x7 \/ x9 \/ ~x13 ) /\ + ( x16 \/ x3 \/ x7 ) /\ + ( x9 \/ ~x1 \/ x12 ) /\ + ( ~x3 \/ x14 \/ x7 ) /\ + ( x1 \/ x15 \/ x14 ) /\ + ( ~x8 \/ ~x11 \/ x18 ) /\ + ( x19 \/ ~x9 \/ x7 ) /\ + ( ~x10 \/ x6 \/ x2 ) /\ + ( x14 \/ x18 \/ ~x11 ) /\ + ( ~x9 \/ ~x16 \/ x14 ) /\ + ( x1 \/ x11 \/ ~x20 ) /\ + ( x11 \/ x12 \/ ~x4 ) /\ + ( x13 \/ ~x11 \/ ~x14 ) /\ + ( x17 \/ ~x12 \/ x9 ) /\ + ( x14 \/ x9 \/ x1 ) /\ + ( x8 \/ x19 \/ x4 ) /\ + ( x6 \/ ~x13 \/ ~x20 ) /\ + ( ~x2 \/ ~x13 \/ x11 ) /\ + ( x14 \/ ~x13 \/ x17 ) /\ + ( x9 \/ ~x11 \/ x18 ) /\ + ( ~x13 \/ ~x6 \/ x5 ) /\ + ( x5 \/ x19 \/ ~x18 ) /\ + ( ~x4 \/ x10 \/ x11 ) /\ + ( ~x18 \/ ~x19 \/ ~x20 ) /\ + ( x3 \/ ~x9 \/ x8 ) /\ + TRUE +OneSol == (~x1 /\ ~x2 /\ ~x3 /\ ~x4 /\ ~x5 /\ + ~x6 /\ x7 /\ x8 /\ ~x9 /\ ~x10 /\ + ~x11 /\ ~x12 /\ ~x13 /\ x14 /\ x15 (* /\ + x16 /\ ~x17/\ ~x18 /\ x19 /\ ~x20 *)) (* encode part of first solution found by ProB *) +FullSol == (~x1 /\ ~x2 /\ ~x3 /\ ~x4 /\ ~x5 /\ + ~x6 /\ x7 /\ x8 /\ ~x9 /\ ~x10 /\ + ~x11 /\ ~x12 /\ ~x13 /\ x14 /\ x15 /\ + x16 /\ ~x17 /\ ~x18 /\ x19 /\ ~x20) (* encode first solution found by ProB *) +Init == TypeInv /\ OneSol /\ Sol +DLK == 1=2 /\ x1'=x1 (* always deadlocks *) +Next == DLK + =======================</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>887</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-02-25 16:17:22 +0000</bug_when> + <thetext>To compute the set of initial states from your initial predicate + + TypeInv /\ OneSol /\ Sol + +TLC first finds all states satisfying TypeInv and then throws away ones not satisfying OneSol or Sol. There are 2^20 states satisfying TypeInv, which is more than TLC will handle. Currently, TLC will handle at most 10^6 states; we intend to make that a settable parameter. However, the parameter will have to be small enough so all the states will fit in memory. + +Explicit-state and SAT-based model checking are inherently different and can do different things. You have discovered one thing that SAT solvers are better at. If you try running TLC on hundreds of machines, you'll see what explicit-state model checking is better at. + +A number of years ago a preliminary version of a SAT-solver based model checker for TLA+, called BTLC, was implemented as a summer project. It was promising, but we have never found anyone to finish it.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>278</bug_id> + + <creation_ts>2012-02-29 19:16:00 +0000</creation_ts> + <short_desc>TLC reports error when asked to print a function whose domain is a Cartesian product</short_desc> + <delta_ts>2012-03-07 21:04:20 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Windows 7</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>888</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-02-29 19:16:27 +0000</bug_when> + <thetext>Having the Toolbox evaluate the expression + + [i \in (1..2) \X (1..2) |-> TRUE] + +causes TLC to report an error in the Java method + + public static tlc2.value.Value tlc2.module.TLC.PrintT(tlc2.value.Value) + +This seems to happen on any function whose domain is a Cartesian product.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>889</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-03-07 21:04:20 +0000</bug_when> + <thetext>This was caused by a NullPointerException in tlc2/value/FcnLambdaValue.deepCopy(). Fixed by simply testing for a null value and not performing the operation that the method was trying to do if the value is null. + +This bug is mysterious because it was not present in the pre-tlc2 version, and I don't think there have been any changes to the code since then that would have caused it. Moreover, I think that a couple of times when debugging the problem, the exception did not occur on the input that was producing it. (But I may be mistaken about that.)</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>279</bug_id> + + <creation_ts>2012-03-08 00:26:00 +0000</creation_ts> + <short_desc>TLC bug caused by TLC's not preserving the semantics of CHOOSE</short_desc> + <delta_ts>2015-02-11 14:40:54 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Windows 7</op_sys> + <bug_status>ASSIGNED</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>890</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-03-08 00:26:08 +0000</bug_when> + <thetext>Running TLC on the spec written by Tom Rodeheffer that I will attach finds a deadlock (as it should) and then produces the following error when trying to generate the error trace: + + Failed to recover the initial state from its fingerprint. + This is probably a TLC bug(2). + +The problem occurs because the value that TLC computes for a CHOOSE depends on TLC's internal representation of its argument. To compute the 2nd state of the trace, TLC sets the variables 'set' and 'fun' to S1 and Ch(S1), respectively, where Ch(S1) equals CHOOSE of an expression containing S1. Fingerprinting that state causes TLC to canonicalize the representation of the value of 'set', changing its representation of the value of S1. When TLC constructs the error trace, it must re-execute the spec to get the states in the trace. When it tries to compute the 2nd state of the trace, it uses the canonicalized representation of S1, causing it to compute a different value of variable 'set' than it did the first time, so it doesn't find a state with the correct fingerprint as the next state of the trace. (Note that the error message is misleading, since it's not the intiial state that TLC fails to recover.) + +There seem to be two possible fixes. The first is to canonicalize the argument of CHOOSE whenever it is evaluated. The second is to create a separate deep copy of the state before fingerprinting it. The first seems like the best solution, since I can't think of any practical case in which this would cause performance problems. However, I will consult with Yuan Yu before doing anything about this.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>891</commentid> + <comment_count>1</comment_count> + <attachid>182</attachid> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-03-08 00:27:59 +0000</bug_when> + <thetext>Created attachment 182 +Spec exhibiting the bug</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>892</commentid> + <comment_count>2</comment_count> + <attachid>183</attachid> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-03-08 00:28:39 +0000</bug_when> + <thetext>Created attachment 183 +Configuration file for running outside Toolbox</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>893</commentid> + <comment_count>3</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-03-08 00:30:22 +0000</bug_when> + <thetext>Reassigning it to me.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>182</attachid> + <date>2012-03-08 00:27:00 +0000</date> + <delta_ts>2012-03-08 00:27:59 +0000</delta_ts> + <desc>Spec exhibiting the bug</desc> + <filename>InitStateBug.tla</filename> + <type>application/octet-stream</type> + <size>878</size> + <attacher name="Leslie Lamport">lamport</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>183</attachid> + <date>2012-03-08 00:28:00 +0000</date> + <delta_ts>2012-03-08 00:28:39 +0000</delta_ts> + <desc>Configuration file for running outside Toolbox</desc> + <filename>InitStateBug.cfg</filename> + <type>application/octet-stream</type> + <size>83</size> + <attacher name="Leslie Lamport">lamport</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>280</bug_id> + + <creation_ts>2012-03-17 21:05:00 +0000</creation_ts> + <short_desc>"Additional Definitions" entry being put in wrong part of MC.tla file</short_desc> + <delta_ts>2012-03-19 01:04:26 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4.2</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>896</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-03-17 21:05:22 +0000</bug_when> + <thetext>A model's user-specified definitions are being put in the MC.tla file after the definitions for the CONSTANT parameters. This makes it impossible for the values substituted for CONSTANT parameters to contain operators defined in those user-specified definitions. The user-specified definitions should go immediately after the EXTENDS statement in the MC.tla file.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>897</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-03-17 22:55:20 +0000</bug_when> + <thetext>The user-specified definitions should actually be added to the MC.tla file after the section containing the CONSTANT declarations for the model values (which come from declarations on the Advanced Model page and from substitutions of a set of model values for a declared CONSTANT) and before the section containing the definitions that define new symbols equal to the values substituted for CONSTANT parameters. The MC.tla file is written in the buildForLaunch method in the TLCModelLaunchDelegate class. These two sections are added to the file by the call of writer.addConstants, and the user-specified definitions are added by the call of writer.addFormulaList in that same class. Thus, the writer.addConstants method needs to be broken into two separate methods with the writer.addFormulaList call coming between them. + +It looks like the same change has to be made in the writeModelInfo method of the TraceExplorerDelegate module.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>898</commentid> + <comment_count>2</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-03-17 23:21:30 +0000</bug_when> + <thetext>Whoops, it's more complicated than I thought. The Writer.addConstants method also adds definitions for the SYMMETRY declarations for a CONSTANT instantiated with a symmetry set of model values. Those definitions have to come after the definitions for the values of CONSTANT parameters. + +It looks like the addConstants method should be broken into two pieces, the first adding +a section containing the CONSTANT declarations for the model values and the definitions for declared CONSTANTS that are instantiated by a set of model values, and the second adding a section containing the definitions for declared CONSTANTS that are instantiated by expressions (ordinary values).</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>899</commentid> + <comment_count>3</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-03-19 01:04:26 +0000</bug_when> + <thetext>Change made. TLC regression tests passed, as well as PlusCal regression tests.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>281</bug_id> + + <creation_ts>2012-03-19 04:56:00 +0000</creation_ts> + <short_desc>Apparent race condition between saving spec and running TLC</short_desc> + <delta_ts>2012-03-19 04:57:34 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4.2</version> + <rep_platform>All</rep_platform> + <op_sys>Windows Vista</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>WORKSFORME</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>900</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-03-19 04:56:03 +0000</bug_when> + <thetext>I got the following anomalous behavior, which was repeatable. However, when I closed the Toolbox and reran it, the behavior disappeared. I am therefore going to submit this and then immediately close the bug report, so there will be a record of this in case it happens again. + +I am running TLC on a spec with no behavior spec, only evaluating a constant expression. If I run TLC with the spec not saved, I get a popup asking if I want to save it. I click OK, and one of three things may happen. + +1. It runs TLC correctly. + +2. It pops up an error window saying something like the model can't be checked because the spec is unparsed. If I click OK, it the proceeds to run TLC. + +3. It runs TLC, but reports bogus errors in the expression I'm trying to evaluate--possibly because it's reading a really old MC.tla file. If I hit run again it sometimes gets another similar error, and it sometimes runs TLC correctly. If I hit run a third time, it runs TLC correctly. + +The behavior is locally repeatable--that is, if one of these things happens, I make a trivial modification to the spec and run TLC again, the same thing probably happens. If I wait a while, I can get a different behavior.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>901</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-03-19 04:57:34 +0000</bug_when> + <thetext>As promised, I'm now closing the report.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>282</bug_id> + + <creation_ts>2012-03-28 23:47:00 +0000</creation_ts> + <short_desc>The F5 menu (Find Definition or Declaration) doesn't handle infix operator symbols properly.</short_desc> + <delta_ts>2012-03-30 00:47:23 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Windows 7</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>903</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-03-28 23:47:46 +0000</bug_when> + <thetext>Typing into the F5 menu should restrict the choices to ones whose prefix has been typed. However, this doesn't work for the symbols ** and \succ, and presumably not for other symbols that are not all letters or numbers.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>904</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-03-30 00:47:23 +0000</bug_when> + <thetext>A trivial fix.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>283</bug_id> + + <creation_ts>2012-04-10 20:27:00 +0000</creation_ts> + <short_desc>java.lang.ClassFormatError: tlc2/util/Sort</short_desc> + <delta_ts>2012-04-11 01:23:02 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4.2</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows 7</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>INVALID</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Steve Glaser">bugs</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>lamport</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>905</commentid> + <comment_count>0</comment_count> + <who name="Steve Glaser">bugs</who> + <bug_when>2012-04-10 20:27:21 +0000</bug_when> + <thetext>Running on Windows 7 64 bit Enterprise, trying to check my first model (OneBitClock). +On MacOS / Lion, this works perfectly. + +On Windows, I get the following in the User Output panel under "TLC output generated by evaluating Print and PrintT expressions". + +java.lang.ClassFormatError: tlc2/util/Sort + at tlc2.tool.fp.DiskFPSet.flushTable(DiskFPSet.java:725) + at tlc2.tool.fp.DiskFPSet.checkFPs(DiskFPSet.java:932) + at tlc2.tool.ModelChecker.reportSuccess(ModelChecker.java:756) + at tlc2.tool.ModelChecker.modelCheck(ModelChecker.java:217) + at tlc2.TLC.process(TLC.java:661) + at tlc2.TLC.main(TLC.java:168) + +Model is: + +---------------------------- MODULE OneBitClock ---------------------------- +VARIABLE b + +Init1 == (b=0) \/ (b=1) + +Next1 == \/ /\ (b = 0) + /\ (b' = 1) + \/ /\ (b = 1) + /\ (b' = 0) + +============================================================================= +\* Modification History +\* Last modified Tue Apr 10 10:52:12 PDT 2012 by sglaser +\* Created Mon Apr 09 20:04:20 PDT 2012 by sglaser + +Initial predicate is "Init1", Next prediate is "Next1", Invariant is "b \in {0, 1}"</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>906</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-04-11 01:23:02 +0000</bug_when> + <thetext>The problem turned out to be corrupted files, and it went away when the Toolbox was downloaded again.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>284</bug_id> + + <creation_ts>2012-04-24 23:23:00 +0000</creation_ts> + <short_desc>Toolbox not handling TLC error message properly.</short_desc> + <delta_ts>2012-04-25 01:23:45 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Windows 7</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>907</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-04-24 23:23:45 +0000</bug_when> + <thetext>Create this spec + + VARIABLES F + Init == F \in BOOLEAN + Next == F' \in BOOLEAN + +Create a model that asks TLC to check the Property + + []<>[]F <=> <>[]F + +TLC produces this error message + +@!@!@STARTMSG 1000:1 @!@!@ +TLC threw the unexpected exception + java.lang.RuntimeException: @!@!@STARTMSG 2213:0 @!@!@ +TLC cannot handle the temporal formula line 14, col 1 to line 14, col 17 of module MC +@!@!@ENDMSG 2213 @!@!@ +This was probably caused by an error in the spec or model. +See the TLC Console for clues to what happened. +@!@!@ENDMSG 1000 @!@!@ + +which causes the Toolbox to throw an exception. I thought this might be a TLC bug for not starting message 2213:0 on a new line, but the Toolbox throws the same exception even if the @!@!@STARTMSG 2213:0 @!@!@ begins on a new line. The exception the Toolbox is throwing is: + +java.lang.IllegalArgumentException: Bug parsing the regions + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCAnalyzer.processTag(TagBasedTLCAnalyzer.java:189) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCAnalyzer.addTagEnd(TagBasedTLCAnalyzer.java:82) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser$TLCOutputPartitionChangeListener.documentPartitioningChanged(TagBasedTLCOutputIncrementalParser.java:217) + at org.eclipse.jface.text.AbstractDocument.fireDocumentPartitioningChanged(AbstractDocument.java:611) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged2(AbstractDocument.java:755) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:736) + at org.eclipse.jface.text.AbstractDocument.doFireDocumentChanged(AbstractDocument.java:721) + at org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:796) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1191) + at org.eclipse.jface.text.AbstractDocument.replace(AbstractDocument.java:1210) + at org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser.addIncrement(TagBasedTLCOutputIncrementalParser.java:324) + at org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.addIncrement(ParsingTLCOutputSink.java:47) + at org.lamport.tla.toolbox.tool.tlc.output.ParsingTLCOutputSink.appendText(ParsingTLCOutputSink.java:39) + at org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener.streamAppended(BroadcastStreamListener.java:44) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.run(OutputStreamMonitor.java:257) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.debug.internal.core.OutputStreamMonitor$ContentNotifier.notifyAppend(OutputStreamMonitor.java:267) + at org.eclipse.debug.internal.core.OutputStreamMonitor.fireStreamAppended(OutputStreamMonitor.java:116) + at org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:156) + at org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134) + at org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207) + at java.lang.Thread.run(Unknown Source)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>908</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-04-24 23:26:54 +0000</bug_when> + <thetext>I should have mentioned that this happens with one other error that TLC throws on a Property it can't check. I imagine there are a whole bunch of TLC error reports that will generate the same exception, which is thrown by a case that Simon decided not to handle.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>909</commentid> + <comment_count>2</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-04-25 01:23:45 +0000</bug_when> + <thetext>The problem turned out to be that in my recent changes to make the miscellaneous EC.GENERAL class of error messages more helpful, I inadvertently created a class of TLC nested error message that the Toolbox's parser for TLC output was not expected. This was an error message whose body consisted of: raw text followed by an error message with BEGIN and END tags followed by raw text. The error seems to be fixed by combining the second raw text item with the first. The correction will appear in the next minor release.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>285</bug_id> + + <creation_ts>2012-05-21 12:36:00 +0000</creation_ts> + <short_desc>Toolbox occasionally chooses old TLC version after software upgrade</short_desc> + <delta_ts>2012-05-23 17:46:06 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>910</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-05-21 12:36:38 +0000</bug_when> + <thetext>A software upgrade can install a newer TLC version into the Toolbox. This can lead to undefined behavior when model checking, because the classpath might still refer to the classes of the old model checker. Hence, the code needs to verify it only loads the latest TLC model checker version installed by the upgrade.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>911</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-05-23 17:46:04 +0000</bug_when> + <thetext>Fix released to HEAD</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>912</commentid> + <comment_count>2</comment_count> + <attachid>185</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-05-23 17:46:06 +0000</bug_when> + <thetext>Created attachment 185 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>185</attachid> + <date>2012-05-23 17:46:00 +0000</date> + <delta_ts>2012-05-23 17:46:06 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1125</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>286</bug_id> + + <creation_ts>2012-06-05 11:25:00 +0000</creation_ts> + <short_desc>Out of bounds array exception thrown when loading a spec</short_desc> + <delta_ts>2012-06-06 14:34:07 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Windows Vista</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>WORKSFORME</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>913</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-06-05 11:25:52 +0000</bug_when> + <thetext>When loading the spec that I will attach when Bugzilla lets me, the Toolbox throws an exception and leaves the editor in a state where, starting around line 160 and extending to the next comment, it colors everything as a comment. This fixes itself when the spec is modified and saved. Below is the relevant part of the console log. + +!ENTRY org.eclipse.ui 4 4 2012-06-05 02:13:03.818 +!MESSAGE Plugin org.lamport.tla.toolbox, extension org.eclipse.ui.perspectiveExtensions, id toolbox.view.ToolboxWelcomeView: Attribute 'relative' not defined. This attribute is required when relationship="left". + +!ENTRY org.eclipse.ui 4 4 2012-06-05 02:13:03.820 +!MESSAGE Unable to process element: view in perspective extension: null + +!ENTRY org.lamport.tla.toolbox 1 -1 2012-06-05 02:13:04.198 +!MESSAGE Spec build invoked on AtomicBakeryGInitialized ... + +!ENTRY org.lamport.tla.toolbox 1 -1 2012-06-05 02:13:08.568 +!MESSAGE Resulting status is: parsed +... build invocation finished. +Detailed state of 'BufferedDocumentScanner:' + fOffset= 760 + fBufferOffset= 27000 + fBufferLength= 760 + fRangeOffset= 0 + fRangeLength= 27760 +!ENTRY org.eclipse.core.resources 4 566 2012-06-05 02:13:10.121 +!MESSAGE An error occurred while traversing resources. +!STACK 0 +java.lang.ArrayIndexOutOfBoundsException: 1000 + at org.lamport.tla.toolbox.editor.basic.util.BufferedDocumentScanner.read(BufferedDocumentScanner.java:106) + at org.lamport.tla.toolbox.editor.basic.TLAPartitionScanner.nextToken(TLAPartitionScanner.java:96) + at org.eclipse.jface.text.rules.FastPartitioner.documentChanged2(FastPartitioner.java:388) + at org.eclipse.jface.text.AbstractDocument.updateDocumentStructures(AbstractDocument.java:696) + at org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:793) + at org.eclipse.jface.text.AbstractDocument.set(AbstractDocument.java:1237) + at org.eclipse.core.internal.filebuffers.SynchronizableDocument.set(SynchronizableDocument.java:219) + at org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.setDocumentContent(ResourceTextFileBuffer.java:575) + at org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.initializeFileBufferContent(ResourceTextFileBuffer.java:286) + at org.eclipse.core.internal.filebuffers.ResourceFileBuffer.create(ResourceFileBuffer.java:245) + at org.eclipse.core.internal.filebuffers.TextFileBufferManager.connect(TextFileBufferManager.java:112) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.getDocument(PCalDetectingBuilder.java:119) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.visit(PCalDetectingBuilder.java:75) + at org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:112) + at org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:64) + at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) + at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86) + at org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:74) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:110) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:94) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder.build(PCalDetectingBuilder.java:56) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +!ENTRY org.eclipse.core.resources 4 2 2012-06-05 02:13:10.208 +!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.core.resources". +!STACK 1 +org.eclipse.core.internal.resources.ResourceException(/AtomicBakeryGInitialized)[566]: java.lang.ArrayIndexOutOfBoundsException: 1000 + at org.lamport.tla.toolbox.editor.basic.util.BufferedDocumentScanner.read(BufferedDocumentScanner.java:106) + at org.lamport.tla.toolbox.editor.basic.TLAPartitionScanner.nextToken(TLAPartitionScanner.java:96) + at org.eclipse.jface.text.rules.FastPartitioner.documentChanged2(FastPartitioner.java:388) + at org.eclipse.jface.text.AbstractDocument.updateDocumentStructures(AbstractDocument.java:696) + at org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:793) + at org.eclipse.jface.text.AbstractDocument.set(AbstractDocument.java:1237) + at org.eclipse.core.internal.filebuffers.SynchronizableDocument.set(SynchronizableDocument.java:219) + at org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.setDocumentContent(ResourceTextFileBuffer.java:575) + at org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.initializeFileBufferContent(ResourceTextFileBuffer.java:286) + at org.eclipse.core.internal.filebuffers.ResourceFileBuffer.create(ResourceFileBuffer.java:245) + at org.eclipse.core.internal.filebuffers.TextFileBufferManager.connect(TextFileBufferManager.java:112) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.getDocument(PCalDetectingBuilder.java:119) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.visit(PCalDetectingBuilder.java:75) + at org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:112) + at org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:64) + at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) + at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86) + at org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:74) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:110) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:94) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder.build(PCalDetectingBuilder.java:56) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +!SUBENTRY 1 org.eclipse.core.resources 4 566 2012-06-05 02:13:10.251 +!MESSAGE An error occurred while traversing resources. +!STACK 0 +java.lang.ArrayIndexOutOfBoundsException: 1000 + at org.lamport.tla.toolbox.editor.basic.util.BufferedDocumentScanner.read(BufferedDocumentScanner.java:106) + at org.lamport.tla.toolbox.editor.basic.TLAPartitionScanner.nextToken(TLAPartitionScanner.java:96) + at org.eclipse.jface.text.rules.FastPartitioner.documentChanged2(FastPartitioner.java:388) + at org.eclipse.jface.text.AbstractDocument.updateDocumentStructures(AbstractDocument.java:696) + at org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:793) + at org.eclipse.jface.text.AbstractDocument.set(AbstractDocument.java:1237) + at org.eclipse.core.internal.filebuffers.SynchronizableDocument.set(SynchronizableDocument.java:219) + at org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.setDocumentContent(ResourceTextFileBuffer.java:575) + at org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.initializeFileBufferContent(ResourceTextFileBuffer.java:286) + at org.eclipse.core.internal.filebuffers.ResourceFileBuffer.create(ResourceFileBuffer.java:245) + at org.eclipse.core.internal.filebuffers.TextFileBufferManager.connect(TextFileBufferManager.java:112) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.getDocument(PCalDetectingBuilder.java:119) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.visit(PCalDetectingBuilder.java:75) + at org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:112) + at org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:64) + at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) + at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86) + at org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:74) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:110) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:94) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder.build(PCalDetectingBuilder.java:56) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +!SUBENTRY 1 org.eclipse.core.resources 4 566 2012-06-05 02:13:10.272 +!MESSAGE An error occurred while traversing resources. +!STACK 0 +java.lang.ArrayIndexOutOfBoundsException: 1000 + at org.lamport.tla.toolbox.editor.basic.util.BufferedDocumentScanner.read(BufferedDocumentScanner.java:106) + at org.lamport.tla.toolbox.editor.basic.TLAPartitionScanner.nextToken(TLAPartitionScanner.java:96) + at org.eclipse.jface.text.rules.FastPartitioner.documentChanged2(FastPartitioner.java:388) + at org.eclipse.jface.text.AbstractDocument.updateDocumentStructures(AbstractDocument.java:696) + at org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:793) + at org.eclipse.jface.text.AbstractDocument.set(AbstractDocument.java:1237) + at org.eclipse.core.internal.filebuffers.SynchronizableDocument.set(SynchronizableDocument.java:219) + at org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.setDocumentContent(ResourceTextFileBuffer.java:575) + at org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.initializeFileBufferContent(ResourceTextFileBuffer.java:286) + at org.eclipse.core.internal.filebuffers.ResourceFileBuffer.create(ResourceFileBuffer.java:245) + at org.eclipse.core.internal.filebuffers.TextFileBufferManager.connect(TextFileBufferManager.java:112) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.getDocument(PCalDetectingBuilder.java:119) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.visit(PCalDetectingBuilder.java:75) + at org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:112) + at org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:64) + at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) + at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86) + at org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:74) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:110) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:94) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder.build(PCalDetectingBuilder.java:56) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +!ENTRY org.eclipse.core.resources 4 75 2012-06-05 02:13:10.291 +!MESSAGE Errors occurred during the build. +!SUBENTRY 1 org.lamport.tla.toolbox 4 75 2012-06-05 02:13:10.291 +!MESSAGE Errors running builder 'PCal Algorthim Definition Detecting Builder' on project 'AtomicBakeryGInitialized'. +!STACK 1 +org.eclipse.core.internal.resources.ResourceException(/AtomicBakeryGInitialized)[566]: java.lang.ArrayIndexOutOfBoundsException: 1000 + at org.lamport.tla.toolbox.editor.basic.util.BufferedDocumentScanner.read(BufferedDocumentScanner.java:106) + at org.lamport.tla.toolbox.editor.basic.TLAPartitionScanner.nextToken(TLAPartitionScanner.java:96) + at org.eclipse.jface.text.rules.FastPartitioner.documentChanged2(FastPartitioner.java:388) + at org.eclipse.jface.text.AbstractDocument.updateDocumentStructures(AbstractDocument.java:696) + at org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:793) + at org.eclipse.jface.text.AbstractDocument.set(AbstractDocument.java:1237) + at org.eclipse.core.internal.filebuffers.SynchronizableDocument.set(SynchronizableDocument.java:219) + at org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.setDocumentContent(ResourceTextFileBuffer.java:575) + at org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.initializeFileBufferContent(ResourceTextFileBuffer.java:286) + at org.eclipse.core.internal.filebuffers.ResourceFileBuffer.create(ResourceFileBuffer.java:245) + at org.eclipse.core.internal.filebuffers.TextFileBufferManager.connect(TextFileBufferManager.java:112) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.getDocument(PCalDetectingBuilder.java:119) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.visit(PCalDetectingBuilder.java:75) + at org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:112) + at org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:64) + at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) + at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86) + at org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:74) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:110) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:94) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder.build(PCalDetectingBuilder.java:56) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +!SUBENTRY 2 org.eclipse.core.resources 4 566 2012-06-05 02:13:10.291 +!MESSAGE An error occurred while traversing resources. +!STACK 0 +java.lang.ArrayIndexOutOfBoundsException: 1000 + at org.lamport.tla.toolbox.editor.basic.util.BufferedDocumentScanner.read(BufferedDocumentScanner.java:106) + at org.lamport.tla.toolbox.editor.basic.TLAPartitionScanner.nextToken(TLAPartitionScanner.java:96) + at org.eclipse.jface.text.rules.FastPartitioner.documentChanged2(FastPartitioner.java:388) + at org.eclipse.jface.text.AbstractDocument.updateDocumentStructures(AbstractDocument.java:696) + at org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:793) + at org.eclipse.jface.text.AbstractDocument.set(AbstractDocument.java:1237) + at org.eclipse.core.internal.filebuffers.SynchronizableDocument.set(SynchronizableDocument.java:219) + at org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.setDocumentContent(ResourceTextFileBuffer.java:575) + at org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.initializeFileBufferContent(ResourceTextFileBuffer.java:286) + at org.eclipse.core.internal.filebuffers.ResourceFileBuffer.create(ResourceFileBuffer.java:245) + at org.eclipse.core.internal.filebuffers.TextFileBufferManager.connect(TextFileBufferManager.java:112) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.getDocument(PCalDetectingBuilder.java:119) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.visit(PCalDetectingBuilder.java:75) + at org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:112) + at org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:64) + at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) + at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86) + at org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:74) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:110) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:94) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder.build(PCalDetectingBuilder.java:56) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +!SUBENTRY 1 org.eclipse.core.resources 4 566 2012-06-05 02:13:10.292 +!MESSAGE An error occurred while traversing resources. +!STACK 0 +java.lang.ArrayIndexOutOfBoundsException: 1000 + at org.lamport.tla.toolbox.editor.basic.util.BufferedDocumentScanner.read(BufferedDocumentScanner.java:106) + at org.lamport.tla.toolbox.editor.basic.TLAPartitionScanner.nextToken(TLAPartitionScanner.java:96) + at org.eclipse.jface.text.rules.FastPartitioner.documentChanged2(FastPartitioner.java:388) + at org.eclipse.jface.text.AbstractDocument.updateDocumentStructures(AbstractDocument.java:696) + at org.eclipse.jface.text.AbstractDocument.fireDocumentChanged(AbstractDocument.java:793) + at org.eclipse.jface.text.AbstractDocument.set(AbstractDocument.java:1237) + at org.eclipse.core.internal.filebuffers.SynchronizableDocument.set(SynchronizableDocument.java:219) + at org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.setDocumentContent(ResourceTextFileBuffer.java:575) + at org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.initializeFileBufferContent(ResourceTextFileBuffer.java:286) + at org.eclipse.core.internal.filebuffers.ResourceFileBuffer.create(ResourceFileBuffer.java:245) + at org.eclipse.core.internal.filebuffers.TextFileBufferManager.connect(TextFileBufferManager.java:112) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.getDocument(PCalDetectingBuilder.java:119) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder$PCalDetectingVisitor.visit(PCalDetectingBuilder.java:75) + at org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:112) + at org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:64) + at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) + at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:86) + at org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:127) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:74) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:110) + at org.eclipse.core.internal.resources.Resource.accept(Resource.java:94) + at org.lamport.tla.toolbox.spec.nature.PCalDetectingBuilder.build(PCalDetectingBuilder.java:56) + at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:203) + at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:255) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:258) + at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:311) + at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:343) + at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) + at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:242) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +!ENTRY org.lamport.tla.toolbox 1 -1 2012-06-05 02:13:10.384 +!MESSAGE Added a parse result listener.There are now 1 listeners. + +!ENTRY org.lamport.tla.toolbox 1 -1 2012-06-05 02:14:10.304 +!MESSAGE Spec build invoked on AtomicBakeryGInitialized ... + +!ENTRY org.lamport.tla.toolbox 1 -1 2012-06-05 02:14:14.880 +!MESSAGE Resulting status is: parsed +... build invocation finished. + +!ENTRY org.lamport.tla.toolbox 1 -1 2012-06-05 02:15:54.097 +!MESSAGE Removed a parse result listener.There are now 0 listeners. + +!ENTRY org.eclipse.ui 4 4 2012-06-05 02:15:54.231 +!MESSAGE Plugin org.lamport.tla.toolbox, extension org.eclipse.ui.perspectiveExtensions, id toolbox.view.ToolboxWelcomeView: Attribute 'relative' not defined. This attribute is required when relationship="left". + +!ENTRY org.eclipse.ui 4 4 2012-06-05 02:15:54.238 +!MESSAGE Unable to process element: view in perspective extension: null + +!ENTRY org.lamport.tla.toolbox 1 -1 2012-06-05 02:16:01.042 +!MESSAGE Spec build invoked on AtomicBakeryGInitialized ... + +!ENTRY org.lamport.tla.toolbox 1 -1 2012-06-05 02:16:04.170 +!MESSAGE Resulting status is: parsed +... build invocation finished. + +!ENTRY org.lamport.tla.toolbox 1 -1 2012-06-05 02:16:04.573 +!MESSAGE Added a parse result listener.There are now 1 listeners.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>914</commentid> + <comment_count>1</comment_count> + <attachid>186</attachid> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-06-05 11:27:23 +0000</bug_when> + <thetext>Created attachment 186 +The Spec File</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>915</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-06-06 14:01:05 +0000</bug_when> + <thetext>Hi Leslie, + +I cannot reproduce the behavior (exception) with the steps outlined in comment #1. No matter what I try, it (the spec) always loads fine (on Linux/64bit). + +Markus</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>916</commentid> + <comment_count>3</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-06-06 14:34:07 +0000</bug_when> + <thetext>After closing the Toolbox, rebooting my system, getting a good night's sleep, and cleaning the screen, the error has disappeared for me too. Just another of the imponderables of Eclipse.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>186</attachid> + <date>2012-06-05 11:27:00 +0000</date> + <delta_ts>2012-06-05 11:27:23 +0000</delta_ts> + <desc>The Spec File</desc> + <filename>AtomicBakeryGInitialized.tla</filename> + <type>application/octet-stream</type> + <size>27762</size> + <attacher name="Leslie Lamport">lamport</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>287</bug_id> + + <creation_ts>2012-06-10 16:48:00 +0000</creation_ts> + <short_desc>Issues when TLC reports, "The variable x was changed while it is specified as UNCHANGED at %1"</short_desc> + <delta_ts>2012-06-10 17:11:17 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Chris Newcombe">chris.newcombe</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>917</commentid> + <comment_count>0</comment_count> + <who name="Chris Newcombe">chris.newcombe</who> + <bug_when>2012-06-10 16:48:30 +0000</bug_when> + <thetext>This is Version 1.4.3.b of 24 April 2012 and includes: + - SANY Version 2.1 of 20 July 2011 + - TLC Version 2.05 of 24 April 2012 + - PlusCal Version 1.8 of 30 March 2012 + - TLATeX Version .9 of 19 September 2007 + +Running on Windows 7 32-bit + +I'm writing a specification with about 10 variables and lots of complex nested if/then rules about when various subsets of the variables change. Each branch of each if/then contains an conjunct for UNCHANGED <<some list of vars>>. There's little commonality between them. + +If we make a mistake writing one of the UNCHANGED conjuncts, TLC will report an error like this:, + + The variable q_ingress_south was changed while it is specified as UNCHANGED at %1 + +There are 2 problems: + + - The error doesn't report the line number (it literally reports "%1") + - TLC doesn't stop when it reports the error, so we don't see the actions and states that caused it. + +So to find the cause of the errors, we have to do a 'binary search' by commenting out actions and parts of actions, and re-running the model checker to see if the error still happens. This is very tedious and takes quite a lot of time. + +Please could the above problem be fixed? + +thanks, + +Chris</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>918</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-06-10 17:11:17 +0000</bug_when> + <thetext>This bug was fixed on 18 May 2012. The fix will appear in the next release.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>288</bug_id> + + <creation_ts>2012-06-25 18:41:00 +0000</creation_ts> + <short_desc>FPSetManager reports negative distinct states due to int overflow</short_desc> + <delta_ts>2012-06-25 18:42:38 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Markus Alexander Kuppe">bugzilla.tlaplus.net</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>919</commentid> + <comment_count>0</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-06-25 18:41:14 +0000</bug_when> + <thetext>FPSetManager reports negative distinct states due to a 2^31 int overflow in tlc2.tool.distributed.FPSetManager.size(). The method implementation incorrectly uses an int variable to store an intermediate result.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>920</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-06-25 18:42:37 +0000</bug_when> + <thetext>Fix released to repo</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>921</commentid> + <comment_count>2</comment_count> + <attachid>187</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-06-25 18:42:38 +0000</bug_when> + <thetext>Created attachment 187 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>187</attachid> + <date>2012-06-25 18:42:00 +0000</date> + <delta_ts>2012-06-25 18:42:38 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>1407</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>289</bug_id> + + <creation_ts>2012-07-06 00:48:00 +0000</creation_ts> + <short_desc>apparent TLC DiskFPSet out of memory when maxTblCnt is Integer MAX_VALUE</short_desc> + <delta_ts>2012-10-19 09:51:57 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA Tools</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows 7</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Tom Rodeheffer">tomr</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>922</commentid> + <comment_count>0</comment_count> + <who name="Tom Rodeheffer">tomr</who> + <bug_when>2012-07-06 00:48:16 +0000</bug_when> + <thetext>I was running TLC 2.05 on a machine with 128 GB of physical memory. The Java heap size was set to 117 GB (command line option -Xmx117955m) and the TLC fpbits option was set to 0. + +I do not know what the toolbox uses for fpmem when invoking TLC, but assuming that TLC takes the default of fpMemSize = -1, TLCRuntime.getInstance().getFPMemSize would turn this into 0.25 * Runtime.getRuntime().maxMemory(). Now I don’t know for sure what that last routine does, but I assume it returns the maximum Java heap size. This would cause fpMemSize to be 29488 MB. + +Then ModelChecker calls FPSet.getFPSet(fpBits, fpMemSizeInBytes). FPSet.getFPSet converts from fpMemSizeInBytes to fpMemSizeInFPs by dividing by the size of a long, which would result in fpMemSizeInFPs = 3686 M. + +To get its maxMemCnt, DiskFPSet divides its maxInMemoryCapacity by its AuxiliaryStorageRequirement, which it has set at 2.5. So maxMemCnt = 1474 M. This results in computing logMaxMemCnt = 31. (Note that the computation of logMaxMemCnt rounds up.) + +Since logMaxMemCnt = 31, the truncation logic in the DiskFPSet constructor gives us maxTblCnt = Integer.MAX_VALUE. + + +Anyway, my TLC job ran for many hours never calling DiskFPSet.flushTable until finally it reached Integer.MAX_VALUE distinct fingerprints. I know that it never called flushTable because the MC.fp file was zero bytes long. I know that the number of distinct fingerprints was near Integer.MAX_VALUE because the last progress report on the console gave a number of distinct states found that was getting close to Integer.MAX_VALUE. + +Then my TLC job died with a Java "Out of Memory" exception. This error was reproducible: I ran the job a second time and (many hours later) got the same error. + + +I suspect that the call new long[this.tblCnt] in DiskFPSet.flushTable caused Java to raise its "Out of Memory" exception. Although *why* it would do so is a mystery, since it only needed 16 GB and presumably it still had plenty of room on its heap, since it was only at a commit size of 71 GB and its heap was supposed to be 117 GB. + +However, perhaps Java does not like to create an array that large.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>927</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-07-10 15:45:48 +0000</bug_when> + <thetext>Hi Tom, + +platform says 64bit, but is this also true for the JVM that you use? + +Btw. in Java a 2D array is actually an array of array objects. Not a simple matrix like in C. Thus you have to add 12+4 bytes for each first-level row for the object header and the length of the nested array. Assuming tblCnt get close to Integer.MAX_VALUE you end up with significant overhead.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>928</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-07-11 12:01:45 +0000</bug_when> + <thetext>For the record, here is Tom's response: + +"...the answer is, yes, I was using a 64bit JVM."</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>936</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-10-19 09:51:57 +0000</bug_when> + <thetext>Memory allocated for DiskFPSets has been changed to prevent it from exceeding the allocation limit. This should put an end to OOMs. + +For the space overhead observed, new DiskFPSet implementations show better characteristics.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>290</bug_id> + + <creation_ts>2012-07-06 01:02:00 +0000</creation_ts> + <short_desc>TLC getFPSet and MultiFPSet disagree on storage unit</short_desc> + <delta_ts>2012-07-07 10:28:38 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA Tools</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Tom Rodeheffer">tomr</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>bugzilla.tlaplus.net</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>923</commentid> + <comment_count>0</comment_count> + <who name="Tom Rodeheffer">tomr</who> + <bug_when>2012-07-06 01:02:19 +0000</bug_when> + <thetext>TLC version 2.05. + +FPSet.getFPSet() takes its fpMemSize parameter in bytes. When there is no custom factory and fpBits > 0, getFPSet invokes the MultiFPSet constructor with an fpMemSize parameter in FPs (having divided by the size of a long, i.e. 8). + +The MultiFPSet constructor divides its fpMemSize by the number of subsidiary fingerprint sets, and calls FPSet.getFPSet to create each of them. However, the MultiFPSet constructor fails to convert from FPs back to bytes, as expected by FPSet.getFPSet. + + +The result of this bug is that only 1/8th of the specified fingerprint memory is allocated when fpBits > 0. + +One easy fix to this bug would be to change the line in FPSet.getFPSet which currently reads + + set = new MultiFPSet(fpBits, fpMemSizeInFPs); + +to read instead + + set = new MultiFPSet(fpBits, fpMemSizeInBytes);</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>926</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-07-07 10:28:38 +0000</bug_when> + <thetext>Fixed in HEAD as suggest in comment #0</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>291</bug_id> + + <creation_ts>2012-07-06 01:36:00 +0000</creation_ts> + <short_desc>TLC MultiFPSet computes size as int</short_desc> + <delta_ts>2012-07-06 09:36:59 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA Tools</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Tom Rodeheffer">tomr</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>bugzilla.tlaplus.net</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>924</commentid> + <comment_count>0</comment_count> + <who name="Tom Rodeheffer">tomr</who> + <bug_when>2012-07-06 01:36:09 +0000</bug_when> + <thetext>TLC version 2.05. + +When using fpbits > 0, assuming no custom factory, the top-level FPSet is a MultiFPSet. + +In TLC's statistics summary or in a progress report, when it prints the number of distinct states found, the value it prints comes from theFPSet.size(). + +Note that FPSet.size() is declared to return a long, so that a correct number of fingerprints can be returned for models that have 2**31 or more distinct states. + +For MultiFPSet, the implementation of size() just sums up the sizes of each of its subsidiary fingerprint sets. Unfortunately, the variable "sum" that MultiFPSet.size uses to accumulate the sum is declared as an *int*. + +This means that when using fpbits > 0, the number of distinct states is reported incorrectly for models that have 2**31 or more distinct states. + + +An easy fix for this bug is to replace the line in MultiFPSet.size that reads + + int sum = 0; + +with a line that reads + + long sum = 0;</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>925</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-07-06 09:36:59 +0000</bug_when> + <thetext>Thx, I have fixed this separately already.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>292</bug_id> + + <creation_ts>2012-08-09 07:59:00 +0000</creation_ts> + <short_desc>PlusCal macro expansion clobbers local variables</short_desc> + <delta_ts>2012-08-11 03:40:27 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Mac OS</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter>michael.deardeuff</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + <cc>lamport</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>929</commentid> + <comment_count>0</comment_count> + <who name="">michael.deardeuff</who> + <bug_when>2012-08-09 07:59:52 +0000</bug_when> + <thetext>PlusCal macro expansion clobbers local variables of the same name. + + +With the given macro + + macro SendUDP(from, to, msg) \* has parameter named msg + begin + udp[channel(from, to)] := udp[channel(from, to)] \cup {msg}; + end macro + + +I'd expect this line + + \* has local variable named msg which is *not* passed as parameter to macro + SendUDP(self, {PrevNode(self, msg.newConfig)}, [type |-> "listen"]); + +to compile to + + \* the local variable msg stays intact + udp' = [udp EXCEPT + ![channel(self, ({PrevNode(self, msg.newConfig)}))] = + udp[channel(self, ({PrevNode(self, msg.newConfig)}))] \cup {([type |-> "listen"])}] + + +but what I get instead is + + \* the local variable msg is replaced with the macro's idea of "msg" + udp' = [udp EXCEPT + ![channel(self, ({PrevNode(self, ([type |-> "listen"]).newConfig)}))] = + udp[channel(self, ({PrevNode(self, ([type |-> "listen"]).newConfig)}))] \cup {([type |-> "listen"])}] + +Notice how the local variable msg got replaced with the value of msg according to the macro's point of view, even though 'msg' was assigned to some other value. + +Naming the last parameter of the macro something else (newMsg, for example) produces the expected behavior. + + + +Tool versions, as copied from About on the TLAToolbox + +This is Version 1.4.3.c of 24 May 2012 and includes: + - SANY Version 2.1 of 20 July 2011 + - TLC Version 2.05 of 18 May 2012 + - PlusCal Version 1.8 of 4 May 2012 + - TLATeX Version .9 of 19 September 2007</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>930</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-08-10 03:26:55 +0000</bug_when> + <thetext>The substitution of arguments for macro parameters in the body of the macro is done one argument at a time, instead of "simultaneously" for all arguments. The fix is a simple matter of reprogramming the method substituteForAll(Vector, Vector, boolean) in tlatools/src/pcal/TLAExpr.java. It will be done in the fullness of time.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>931</commentid> + <comment_count>2</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-08-11 03:40:27 +0000</bug_when> + <thetext>The fix will appear in the next public release, which should be within a week or three.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>293</bug_id> + + <creation_ts>2012-10-14 18:20:00 +0000</creation_ts> + <short_desc>Checking liveness failed with java.io.IOException: Negative seek offsetjava.io.IOException</short_desc> + <delta_ts>2015-04-07 19:55:46 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Linux</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Chris Newcombe">chris.newcombe</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>932</commentid> + <comment_count>0</comment_count> + <who name="Chris Newcombe">chris.newcombe</who> + <bug_when>2012-10-14 18:20:05 +0000</bug_when> + <thetext>Hi Markus, Leslie, + +Remember last year that I kept hitting ‘negative seek offset’ exceptions when checking safety on huge state-spaces? You guys fixed them all. + +I just started checking liveness for the first time, and I just hit a similar error: + +The error occurred when TLC was checking liveness. +The exception was a java.io.IOException: Negative seek offsetjava.io.IOException: Negative seek offset + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:212) + at tlc2.tool.liveness.DiskGraph.getNode(DiskGraph.java:145) + at tlc2.tool.liveness.DiskGraph.getPath(DiskGraph.java:309) + at tlc2.tool.liveness.LiveWorker.printTrace(LiveWorker.java:521) + at tlc2.tool.liveness.LiveWorker.checkComponent(LiveWorker.java:290) + at tlc2.tool.liveness.LiveWorker.checkSccs(LiveWorker.java:119) + at tlc2.tool.liveness.LiveWorker.run(LiveWorker.java:613) + +(I’ve pasted a longer piece of the TLC console log at the end of this email.) + +I’m using Markus’ branch as of Friday October 12th. As this is a liveness issue, I suspect that this would happen with the ‘mainline’ version too. +(I am not adding any extra JVM command-line parameters, so I’m using the default configuration.) + +wget http://tla.msr-inria.inria.fr/kuppe/memopt/products/TLAToolbox-1.4.3.f-linux.gtk.x86_64.zip + +I’m running on a x86_64 Ubuntu 12 (Precise Pangolin) machine. +The machine has 60+ GB of ram. I'm giving 93% (55730 mb) to TLC. + +In this model I’m only checking liveness, not invariants. I’m not using a state constraint, but the state-space should still be finite as I’m setting various CONSTANTS to be finite sets. + +It only took 15 minutes to hit this error. + +Last time we hit "negative seek offset" errors, one of the issues was that fingerprint files were bigger than 2GB. But this time all file-sizes are small: + +$ ls -lrt * +-rw-rw-r-- 1 ubuntu ubuntu 126944 Oct 14 05:39 GroverAbstractLSNs.tla +-rw-rw-r-- 1 ubuntu ubuntu 992 Oct 14 05:39 MC.tla +-rw-rw-r-- 1 ubuntu ubuntu 638 Oct 14 05:39 MC.cfg +-rw-rw-r-- 1 ubuntu ubuntu 18952 Oct 14 05:54 MC.out +-rw-rw-r-- 1 ubuntu ubuntu 18952 Oct 14 05:54 MC_TE.out + +12-10-14-05-39-33: +total 396856 +-rw-rw-r-- 1 ubuntu ubuntu 0 Oct 14 05:39 MC.fp +-rw-rw-r-- 1 ubuntu ubuntu 91196 Oct 14 05:39 0 +-rw-rw-r-- 1 ubuntu ubuntu 89143 Oct 14 05:40 1 +-rw-rw-r-- 1 ubuntu ubuntu 91392 Oct 14 05:40 2 +-rw-rw-r-- 1 ubuntu ubuntu 89971 Oct 14 05:40 3 +-rw-rw-r-- 1 ubuntu ubuntu 90594 Oct 14 05:40 4 +-rw-rw-r-- 1 ubuntu ubuntu 86240 Oct 14 05:40 5 +-rw-rw-r-- 1 ubuntu ubuntu 84231 Oct 14 05:40 6 +-rw-rw-r-- 1 ubuntu ubuntu 84507 Oct 14 05:41 7 +-rw-rw-r-- 1 ubuntu ubuntu 90005 Oct 14 05:41 8 +-rw-rw-r-- 1 ubuntu ubuntu 93901 Oct 14 05:41 9 +-rw-rw-r-- 1 ubuntu ubuntu 93858 Oct 14 05:41 10 +-rw-rw-r-- 1 ubuntu ubuntu 85201 Oct 14 05:41 11 +-rw-rw-r-- 1 ubuntu ubuntu 88321 Oct 14 05:41 12 +-rw-rw-r-- 1 ubuntu ubuntu 92285 Oct 14 05:42 13 +-rw-rw-r-- 1 ubuntu ubuntu 88822 Oct 14 05:42 14 +-rw-rw-r-- 1 ubuntu ubuntu 89402 Oct 14 05:42 15 +-rw-rw-r-- 1 ubuntu ubuntu 88027 Oct 14 05:42 16 +-rw-rw-r-- 1 ubuntu ubuntu 85350 Oct 14 05:42 17 +-rw-rw-r-- 1 ubuntu ubuntu 84216 Oct 14 05:43 18 +-rw-rw-r-- 1 ubuntu ubuntu 90258 Oct 14 05:43 19 +-rw-rw-r-- 1 ubuntu ubuntu 85403 Oct 14 05:43 20 +-rw-rw-r-- 1 ubuntu ubuntu 89137 Oct 14 05:43 21 +-rw-rw-r-- 1 ubuntu ubuntu 85349 Oct 14 05:43 22 +-rw-rw-r-- 1 ubuntu ubuntu 85298 Oct 14 05:43 23 +-rw-rw-r-- 1 ubuntu ubuntu 85461 Oct 14 05:43 24 +-rw-rw-r-- 1 ubuntu ubuntu 86292 Oct 14 05:43 25 +-rw-rw-r-- 1 ubuntu ubuntu 91264 Oct 14 05:44 26 +-rw-rw-r-- 1 ubuntu ubuntu 86471 Oct 14 05:44 27 +-rw-rw-r-- 1 ubuntu ubuntu 93909 Oct 14 05:44 28 +-rw-rw-r-- 1 ubuntu ubuntu 91947 Oct 14 05:44 29 +-rw-rw-r-- 1 ubuntu ubuntu 91771 Oct 14 05:44 30 +-rw-rw-r-- 1 ubuntu ubuntu 107299 Oct 14 05:45 31 +-rw-rw-r-- 1 ubuntu ubuntu 96079 Oct 14 05:45 32 +-rw-rw-r-- 1 ubuntu ubuntu 89403 Oct 14 05:45 33 +-rw-rw-r-- 1 ubuntu ubuntu 92515 Oct 14 05:45 34 +-rw-rw-r-- 1 ubuntu ubuntu 88907 Oct 14 05:45 35 +-rw-rw-r-- 1 ubuntu ubuntu 91888 Oct 14 05:45 36 +-rw-rw-r-- 1 ubuntu ubuntu 95905 Oct 14 05:46 37 +-rw-rw-r-- 1 ubuntu ubuntu 89007 Oct 14 05:46 38 +-rw-rw-r-- 1 ubuntu ubuntu 93472 Oct 14 05:46 39 +-rw-rw-r-- 1 ubuntu ubuntu 92524 Oct 14 05:46 40 +-rw-rw-r-- 1 ubuntu ubuntu 92667 Oct 14 05:47 41 +-rw-rw-r-- 1 ubuntu ubuntu 92455 Oct 14 05:47 42 +-rw-rw-r-- 1 ubuntu ubuntu 92121 Oct 14 05:47 43 +-rw-rw-r-- 1 ubuntu ubuntu 97391 Oct 14 05:47 44 +-rw-rw-r-- 1 ubuntu ubuntu 91336 Oct 14 05:47 45 +-rw-rw-r-- 1 ubuntu ubuntu 92986 Oct 14 05:48 46 +-rw-rw-r-- 1 ubuntu ubuntu 92133 Oct 14 05:48 47 +-rw-rw-r-- 1 ubuntu ubuntu 87972 Oct 14 05:48 48 +-rw-rw-r-- 1 ubuntu ubuntu 91020 Oct 14 05:48 49 +-rw-rw-r-- 1 ubuntu ubuntu 89989 Oct 14 05:48 50 +-rw-rw-r-- 1 ubuntu ubuntu 92158 Oct 14 05:48 51 +-rw-rw-r-- 1 ubuntu ubuntu 87648 Oct 14 05:49 52 +-rw-rw-r-- 1 ubuntu ubuntu 89554 Oct 14 05:49 53 +-rw-rw-r-- 1 ubuntu ubuntu 90250 Oct 14 05:49 54 +-rw-rw-r-- 1 ubuntu ubuntu 89254 Oct 14 05:49 55 +-rw-rw-r-- 1 ubuntu ubuntu 97444 Oct 14 05:49 56 +-rw-rw-r-- 1 ubuntu ubuntu 94853 Oct 14 05:49 57 +-rw-rw-r-- 1 ubuntu ubuntu 94462 Oct 14 05:50 58 +-rw-rw-r-- 1 ubuntu ubuntu 91076 Oct 14 05:50 59 +-rw-rw-r-- 1 ubuntu ubuntu 91081 Oct 14 05:50 60 +-rw-rw-r-- 1 ubuntu ubuntu 92830 Oct 14 05:50 61 +-rw-rw-r-- 1 ubuntu ubuntu 94807 Oct 14 05:50 62 +-rw-rw-r-- 1 ubuntu ubuntu 94674 Oct 14 05:51 63 +-rw-rw-r-- 1 ubuntu ubuntu 90176 Oct 14 05:51 64 +-rw-rw-r-- 1 ubuntu ubuntu 91334 Oct 14 05:51 65 +-rw-rw-r-- 1 ubuntu ubuntu 92464 Oct 14 05:51 66 +-rw-rw-r-- 1 ubuntu ubuntu 89912 Oct 14 05:51 67 +-rw-rw-r-- 1 ubuntu ubuntu 91776 Oct 14 05:51 68 +-rw-rw-r-- 1 ubuntu ubuntu 91597 Oct 14 05:52 69 +-rw-rw-r-- 1 ubuntu ubuntu 92623 Oct 14 05:52 70 +-rw-rw-r-- 1 ubuntu ubuntu 90377 Oct 14 05:52 71 +-rw-rw-r-- 1 ubuntu ubuntu 93229 Oct 14 05:52 72 +-rw-rw-r-- 1 ubuntu ubuntu 90329 Oct 14 05:52 73 +-rw-rw-r-- 1 ubuntu ubuntu 92656 Oct 14 05:52 74 +-rw-rw-r-- 1 ubuntu ubuntu 92673 Oct 14 05:53 75 +-rw-rw-r-- 1 ubuntu ubuntu 98171 Oct 14 05:53 76 +-rw-rw-r-- 1 ubuntu ubuntu 92580 Oct 14 05:53 77 +-rw-rw-r-- 1 ubuntu ubuntu 92234 Oct 14 05:53 78 +-rw-rw-r-- 1 ubuntu ubuntu 92532 Oct 14 05:53 79 +-rw-rw-r-- 1 ubuntu ubuntu 96655 Oct 14 05:54 80 +-rw-rw-r-- 1 ubuntu ubuntu 96008 Oct 14 05:54 81 +-rw-rw-r-- 1 ubuntu ubuntu 92763 Oct 14 05:54 82 +-rw-rw-r-- 1 ubuntu ubuntu 6141600 Oct 14 05:54 ptrs_6 +-rw-rw-r-- 1 ubuntu ubuntu 5982832 Oct 14 05:54 ptrs_5 +-rw-rw-r-- 1 ubuntu ubuntu 4045280 Oct 14 05:54 ptrs_4 +-rw-rw-r-- 1 ubuntu ubuntu 5661856 Oct 14 05:54 ptrs_3 +-rw-rw-r-- 1 ubuntu ubuntu 6908384 Oct 14 05:54 ptrs_2 +-rw-rw-r-- 1 ubuntu ubuntu 7586496 Oct 14 05:54 ptrs_1 +-rw-rw-r-- 1 ubuntu ubuntu 7934336 Oct 14 05:54 ptrs_0 +-rw-rw-r-- 1 ubuntu ubuntu 4045280 Oct 14 05:54 ptrs_9 +-rw-rw-r-- 1 ubuntu ubuntu 5015744 Oct 14 05:54 ptrs_8 +-rw-rw-r-- 1 ubuntu ubuntu 5775968 Oct 14 05:54 ptrs_7 +-rw-rw-r-- 1 ubuntu ubuntu 21089904 Oct 14 05:54 nodes_9 +-rw-rw-r-- 1 ubuntu ubuntu 21089904 Oct 14 05:54 nodes_4 +-rw-rw-r-- 1 ubuntu ubuntu 28015740 Oct 14 05:54 nodes_8 +-rw-rw-r-- 1 ubuntu ubuntu 35775612 Oct 14 05:54 nodes_7 +-rw-rw-r-- 1 ubuntu ubuntu 30279168 Oct 14 05:54 nodes_3 +-rw-rw-r-- 1 ubuntu ubuntu 38965260 Oct 14 05:54 nodes_6 +-rw-rw-r-- 1 ubuntu ubuntu 36855300 Oct 14 05:54 nodes_5 +-rw-rw-r-- 1 ubuntu ubuntu 36989040 Oct 14 05:54 nodes_2 +-rw-rw-r-- 1 ubuntu ubuntu 40312068 Oct 14 05:54 nodes_1 +-rw-rw-r-- 1 ubuntu ubuntu 41744676 Oct 14 05:54 nodes_0 +-rw-rw-r-- 1 ubuntu ubuntu 8314680 Oct 14 05:54 MC.st + + +A longer piece of the tail of the TLC log (i.e. this includes the end of the log) + +… snip … +Progress(12) at 2012-10-14 05:53:37: 1175984 states generated (86,041 s/min), 656319 distinct states found (44,641 ds/min), 420203 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2192:0 @!@!@ +Checking temporal properties for the current state space... +@!@!@ENDMSG 2192 @!@!@ +@!@!@STARTMSG 2116:1 @!@!@ +Temporal properties were violated. + +@!@!@ENDMSG 2116 @!@!@ +@!@!@STARTMSG 2264:1 @!@!@ +The following behavior constitutes a counter-example: + +@!@!@ENDMSG 2264 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +TLC threw an unexpected exception. +This was probably caused by an error in the spec or model. +The error occurred when TLC was checking liveness. +The exception was a java.io.IOException: Negative seek offsetjava.io.IOException: Negative seek offset + at java.io.RandomAccessFile.seek(Native Method) + at tlc2.util.BufferedRandomAccessFile.seek(BufferedRandomAccessFile.java:212) + at tlc2.tool.liveness.DiskGraph.getNode(DiskGraph.java:145) + at tlc2.tool.liveness.DiskGraph.getPath(DiskGraph.java:309) + at tlc2.tool.liveness.LiveWorker.printTrace(LiveWorker.java:521) + at tlc2.tool.liveness.LiveWorker.checkComponent(LiveWorker.java:290) + at tlc2.tool.liveness.LiveWorker.checkSccs(LiveWorker.java:119) + at tlc2.tool.liveness.LiveWorker.run(LiveWorker.java:613) + +@!@!@ENDMSG 1000 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2012-10-14 05:54:40 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1205, col 16 to line 1205, col 59 of module GroverAbstractLSNs: 600344 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1206, col 28 to line 1206, col 37 of module GroverAbstractLSNs: 600344 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1206, col 39 to line 1206, col 55 of module GroverAbstractLSNs: 600344 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1206, col 57 to line 1206, col 67 of module GroverAbstractLSNs: 600344 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1254, col 16 to line 1254, col 58 of module GroverAbstractLSNs: 183985 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1255, col 28 to line 1255, col 37 of module GroverAbstractLSNs: 183985 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1255, col 39 to line 1255, col 55 of module GroverAbstractLSNs: 183985 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1255, col 57 to line 1255, col 67 of module GroverAbstractLSNs: 183985 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1275, col 8 to line 1275, col 35 of module GroverAbstractLSNs: 9379 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1305, col 14 to line 1305, col 105 of module GroverAbstractLSNs: 9379 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1307, col 14 to line 1309, col 79 of module GroverAbstractLSNs: 9379 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1310, col 14 to line 1310, col 55 of module GroverAbstractLSNs: 9379 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1430, col 13 to line 1430, col 84 of module GroverAbstractLSNs: 1251836 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 1431, col 13 to line 1431, col 62 of module GroverAbstractLSNs: 1251836 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 278, col 108 to line 278, col 121 of module GroverAbstractLSNs: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 278, col 14 to line 278, col 23 of module GroverAbstractLSNs: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 278, col 26 to line 278, col 35 of module GroverAbstractLSNs: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 278, col 38 to line 278, col 48 of module GroverAbstractLSNs: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 278, col 51 to line 278, col 67 of module GroverAbstractLSNs: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 278, col 70 to line 278, col 105 of module GroverAbstractLSNs: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 918, col 15 to line 924, col 69 of module GroverAbstractLSNs: 458128 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 925, col 15 to line 925, col 56 of module GroverAbstractLSNs: 458128 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 926, col 27 to line 926, col 36 of module GroverAbstractLSNs: 458128 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 926, col 38 to line 926, col 48 of module GroverAbstractLSNs: 458128 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(12) at 2012-10-14 05:54:40: 1251837 states generated (82,864 s/min), 692890 distinct states found (45,865 ds/min), 440060 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +1251837 states generated, 692890 distinct states found, 440060 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished. (2012-10-14 05:54:40) +@!@!@ENDMSG 2186 @!@!@</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>1011</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2015-03-20 15:50:22 +0000</bug_when> + <thetext>Studying the code it occurred to me that besides an obvious long overflow, it could also be the case that the DiskGraph does not contain the node requested (in which case it returns -1). Pity that the exception does not show the actual negative value.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>1013</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2015-03-27 14:53:37 +0000</bug_when> + <thetext>The illustrated behavior graph [1] as part of Codeplex bug #8 shows an init state (137.0) without a self loop. + +Technically this means that the state has been added to the behavior graph via DiskGraph#addInitNode(..) only. It has not been visisted subsequently (which would mean it gets added with DiskGraph#addNextNode(..)) again, which is the case for all the other init states in this behavior graph. + +Such an init state's file pointer is always -1, which would result in the negative seek offset IOExecption reported by this bug. + +[1] https://www.codeplex.com/Download/AttachmentDownload.ashx?ProjectName=tlaplus&WorkItemId=8&FileAttachmentId=1441621</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>1014</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2015-03-31 13:51:24 +0000</bug_when> + <thetext>(In reply to Markus Alexander Kuppe from comment #2) +> The illustrated behavior graph [1] as part of Codeplex bug #8 shows an init +> state (137.0) without a self loop. +> +> Technically this means that the state has been added to the behavior graph +> via DiskGraph#addInitNode(..) only. It has not been visisted subsequently +> (which would mean it gets added with DiskGraph#addNextNode(..)) again, which +> is the case for all the other init states in this behavior graph. +> +> Such an init state's file pointer is always -1, which would result in the +> negative seek offset IOExecption reported by this bug. +> +> [1] +> https://www.codeplex.com/Download/AttachmentDownload. +> ashx?ProjectName=tlaplus&WorkItemId=8&FileAttachmentId=1441621 + + +This analysis is incorrect in that the state 137.0 has indeed been added via DiskGraph#addNextNode() but due to its tableau index being 0 not equipped with a self loop. The same applies to state 504.0 that is also missing a self loop. + +The tableau particle with index 0 is: + +{<>/\ (x=2) + /\ ([]-(x=1)), + ()<>/\ (x=2) + /\ ([]-(x=1))} + +and the corresponding states to 137 and 504 are: + +/\ b = FALSE +/\ x = 0 + +and + +/\ b = FALSE +/\ x = 2</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>1015</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2015-04-07 19:55:46 +0000</bug_when> + <thetext>The mku-liveness branch now contains a fix [1] for the IOException. + +The IOException is throw when a model has one or more successor-less initial states AND a counterexample has to be returned due to a violation of a liveness property. This makes it a rare condition which is probably why we haven't seen more reports. + +The path construction (DiskGraph#getPath(long)) starts its (breadth-first) search from all initial states. If only one of the initial states has no successors, its disk file pointer will be -1 and subsequently cause the IOException. The pointer value is -1 because the initial state has been added to the DiskGraph as an initial state only but never "upgraded" to be a state with successors. The code writes an initial state only to disk, if it is upgraded. + +The fix is to simply skip such initial states during the path construction. Since the initial state has no successors, it won't be the end of any path (except for the path with length one starting and ending at the very initial state. This case is handled separately.). + + +[1] http://tlaplus.codeplex.com/SourceControl/changeset/070bcee9436bfac34527e6752730e86ccf4b1f56</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>294</bug_id> + + <creation_ts>2012-10-16 18:21:00 +0000</creation_ts> + <short_desc>TLC crash: ArrayIndexOutOfBoundsException: -1073741821 in tlc2.util.Sort</short_desc> + <delta_ts>2012-10-23 11:09:13 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>blocker</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Chris Newcombe">chris.newcombe</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>933</commentid> + <comment_count>0</comment_count> + <who name="Chris Newcombe">chris.newcombe</who> + <bug_when>2012-10-16 18:21:48 +0000</bug_when> + <thetext>I was running Markus’ memopt branch, as of around October 12th 2012. +I was running in single-machine mode, not distributed. The machine is x86_64 running Ubuntu 12. It has 60+ GB of RAM and I gave TLC about 55GB. + +But Markus says this is likely an existing bug in TLC: + >>It appears to be caused by an int overflow in TLC's quicksort implementation when the size of the array gets close to Integer.MAX_VALUE. %) + +I’ve listed the number and sizes of on-disk files at the end of this email. +The machine has 60+ GB ram, with ~ 55 GB given to TLC. I am not passing any extra args to the JVM command-line. + +The progress stats (see snip of the tail of the TLC log) show that TLC didn’t discover any new states in the minute or so before the crash. It went from finding 3 million states per minute to finding 0 states per minute, and crashed shortly after that. + +The exception was a java.lang.ArrayIndexOutOfBoundsException: -1073741821java.lang.ArrayIndexOutOfBoundsException: -1073741821 + at tlc2.util.Sort.quickSort(Sort.java:191) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.LongArray(Sort.java:182) + at tlc2.tool.fp.LSBDiskFPSet$LSBFlusher.prepareTable(LSBDiskFPSet.java:65) + at tlc2.tool.fp.DiskFPSet$Flusher.flushTable(DiskFPSet.java:1209) + at tlc2.tool.fp.DiskFPSet.put(DiskFPSet.java:400) + at tlc2.tool.ModelChecker.doNext(ModelChecker.java:438) + at tlc2.tool.Worker.run(Worker.java:75) + +Snip of the tail of the TLC log: + +Progress(16) at 2012-10-14 23:21:32: 1962435307 states generated (4,979,084 s/min), 1067311637 distinct states found (2,598,569 ds/min), 797699699 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(16) at 2012-10-14 23:22:32: 1971144096 states generated (8,708,789 s/min), 1071850754 distinct states found (4,539,117 ds/min), 801017556 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(16) at 2012-10-14 23:23:32: 1974837733 states generated (3,693,637 s/min), 1073741838 distinct states found (1,891,084 ds/min), 802392525 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(16) at 2012-10-14 23:24:32: 1974837733 states generated (0 s/min), 1073741838 distinct states found (0 ds/min), 802392525 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +… snip coverage statistics +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +TLC threw an unexpected exception. +This was probably caused by an error in the spec or model. +See the TLC Console for clues to what happened. +The exception was a java.lang.ArrayIndexOutOfBoundsException: -1073741821java.lang.ArrayIndexOutOfBoundsException: -1073741821 + at tlc2.util.Sort.quickSort(Sort.java:191) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.quickSort(Sort.java:209) + at tlc2.util.Sort.LongArray(Sort.java:182) + at tlc2.tool.fp.LSBDiskFPSet$LSBFlusher.prepareTable(LSBDiskFPSet.java:65) + at tlc2.tool.fp.DiskFPSet$Flusher.flushTable(DiskFPSet.java:1209) + at tlc2.tool.fp.DiskFPSet.put(DiskFPSet.java:400) + at tlc2.tool.ModelChecker.doNext(ModelChecker.java:438) + at tlc2.tool.Worker.run(Worker.java:75) + + +$ ls –lrt * + +-rw-rw-r-- 1 ubuntu ubuntu 2493 Oct 14 19:23 MC.tla +-rw-rw-r-- 1 ubuntu ubuntu 964 Oct 14 19:23 MC.cfg +-rw-rw-r-- 1 ubuntu ubuntu 278614 Oct 14 23:26 MC.out +-rw-rw-r-- 1 ubuntu ubuntu 278614 Oct 14 23:26 MC_TE.out + +There are a lot of files in this subdirectory of the above directory: + +$ ls -lrt 12-10-14-19-23-41/ | wc -l +99700 + +Here are the most interesting ones: + +12-10-14-19-23-41: +total 26266404 +-rw-rw-r-- 1 ubuntu ubuntu 0 Oct 14 19:23 MC.fp +-rw-rw-r-- 1 ubuntu ubuntu 125957 Oct 14 20:21 31377 +-rw-rw-r-- 1 ubuntu ubuntu 126518 Oct 14 20:21 31378 +-rw-rw-r-- 1 ubuntu ubuntu 125278 Oct 14 20:21 31379 +… snip a lot of files… +-rw-rw-r-- 1 ubuntu ubuntu 127395 Oct 14 23:22 131068 +-rw-rw-r-- 1 ubuntu ubuntu 126343 Oct 14 23:22 131069 +-rw-rw-r-- 1 ubuntu ubuntu 126384 Oct 14 23:22 131070 +-rw-rw-r-- 1 ubuntu ubuntu 14291272184 Oct 14 23:23 MC.st</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>934</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-10-17 10:23:24 +0000</bug_when> + <thetext>Local tests show that this is indeed caused by a bug in tlc2.util.Sort when the length of the array to be sorted gets close to Integer.MAX_VALUE. Since (basic) performance comparison between tlc2.util.Sort and java.util.Arrays show the JDK implementation come out as the winner, I am going to replace tlc2.util.Sort with java.util.Arrays in tlc2.tool.fp.LSBDiskFPSet.LSBFlusher.prepareTable(), tlc2.tool.fp.DiskFPSet.completeRecovery() and tlc2.tool.fp.DiskFPSet.recoverFP(long). +This fix only applies to my memopt branch. trunk probably does not exhibit this behavior anyway as it tends to crash with OOM before hitting the overflow in Sort. + +I am going to leave this bug open for now though. Dead code in tlc2.util.BigSet and tlc2.util.SetOfLong still makes use of tlc2.util.Sort. I would suggest to replace tlc2.util.Sort with java.util.Arrays generally, but will wait for Leslie to make a decision.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>935</commentid> + <comment_count>2</comment_count> + <attachid>188</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-10-17 10:23:35 +0000</bug_when> + <thetext>Created attachment 188 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>937</commentid> + <comment_count>3</comment_count> + <attachid>189</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-10-22 11:01:15 +0000</bug_when> + <thetext>Created attachment 189 +For the record, the unit tests that reproduces the ArrayIndexOutOfBounds exception and performance-compares with java.util.Arrays#sort</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>938</commentid> + <comment_count>4</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-10-23 11:09:10 +0000</bug_when> + <thetext>Replaced all tlc2.util.Sort references with java.util.Array. (java.util.Arrays - at least down to Java 1.5 - sorts longs (primitives) directly without any Object conversion.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>939</commentid> + <comment_count>5</comment_count> + <attachid>190</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-10-23 11:09:13 +0000</bug_when> + <thetext>Created attachment 190 +mylyn/context/zip</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>188</attachid> + <date>2012-10-17 10:23:00 +0000</date> + <delta_ts>2012-10-17 10:23:35 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>19232</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>189</attachid> + <date>2012-10-22 11:01:00 +0000</date> + <delta_ts>2012-10-22 11:01:15 +0000</delta_ts> + <desc>For the record, the unit tests that reproduces the ArrayIndexOutOfBounds exception and performance-compares with java.util.Arrays#sort </desc> + <filename>SortTest.java</filename> + <type>text/x-java</type> + <size>1552</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>190</attachid> + <date>2012-10-23 11:09:00 +0000</date> + <delta_ts>2012-10-23 11:09:13 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>4759</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>295</bug_id> + + <creation_ts>2012-11-25 23:06:00 +0000</creation_ts> + <short_desc>Suggestion for more control over checkpoints</short_desc> + <delta_ts>2012-11-26 11:28:16 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>1.5</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Chris Newcombe">chris.newcombe</reporter> + <assigned_to name="Markus Alexander Kuppe">bugzilla.tlaplus.net</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>940</commentid> + <comment_count>0</comment_count> + <who name="Chris Newcombe">chris.newcombe</who> + <bug_when>2012-11-25 23:06:37 +0000</bug_when> + <thetext>In addition to being able to completely disable checkpoints with '-checkpoint 0', it would be great to have an option to disable periodic checkpoints, but write a checkpoint if an error is encountered. + +As mentioned previously, I don’t need periodic checkpoints as a fault-tolerance measure, and the cost is prohibitive with billions of states. +But after an error occurs, it is sometimes possible to fix a formula in a way that does not invalidate the existing behaviors and states. + +E.g. This just happened to me because my spec hit a deadlock that was due to a missing case in my ‘legitimate termination’ condition. I fixed the condition but had to restart model-checking from scratch. + +It would be important to be able to disable writing even this checkpoint, as for huge state/behavior spaces, writing even a single checkpoint may take too long. + +thanks, + +Chris</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>941</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2012-11-26 11:28:16 +0000</bug_when> + <thetext>FWIW while working on distributed TLC, a JMX method to forcefully create a checkpoint has been implemented. In order to satisfy this use case, I would thus be sufficient to prompt the user with a y/n before terminating the TLC process. The yes case is then just a matter of calling the JMX method. + +Btw. the JMX method can either be triggered from inside the TLC process or from the Toolbox.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>296</bug_id> + + <creation_ts>2012-12-06 10:12:00 +0000</creation_ts> + <short_desc>TLAPM doesn't handle complex nested EXCEPT expressions</short_desc> + <delta_ts>2013-01-10 09:42:34 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Stephan Merz">stephan.merz</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>lamport</cc> + + <cc>Stephan.Merz</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>942</commentid> + <comment_count>0</comment_count> + <attachid>191</attachid> + <who name="Stephan Merz">stephan.merz</who> + <bug_when>2012-12-06 10:12:23 +0000</bug_when> + <thetext>Created attachment 191 +TLA+ module exhibiting the bug + +The PM doesn't correctly translate EXCEPT expressions of the form + + [ [arr EXCEPT ![x][y] = foo] EXCEPT ![u][v] = bar] + +where a nested array access appears on the left-hand side of an EXCEPT. + +The corresponding expressions generated (at least) for Zenon and Isabelle are +syntactically not well-formed and lead to parse errors.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>954</commentid> + <comment_count>1</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-01-09 11:35:51 +0000</bug_when> + <thetext>Hi Stephan, + +before I close the bug, I wanted to make sure this is the intended normalization of the expression. It looks the right one for me and I have added the corresponding test case which passes successfully now. + +[[arr EXCEPT ![x] = [arr[x] EXCEPT ![y] = foo]] EXCEPT ![u] = [[arr EXCEPT ![x] = [arr[x] EXCEPT ![y] = foo]][u] EXCEPT ![v] = bar]] + +If this is the intended behaviour, please notify me so I can close the bug. + +Best regards, +Tomer</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>957</commentid> + <comment_count>2</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-01-09 13:00:08 +0000</bug_when> + <thetext>Normalization was approved by Stephan.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>958</commentid> + <comment_count>3</comment_count> + <who name="Stephan Merz">Stephan.Merz</who> + <bug_when>2013-01-10 09:42:34 +0000</bug_when> + <thetext>Hi Tomer, + +yes, this looks like it is the right expansion. + +Thanks, +Stephan + +> Hi Stephan, +> +> before I close the bug, I wanted to make sure this is the intended +> normalization of the expression. It looks the right one for me and I have added +> the corresponding test case which passes successfully now. +> +> [[arr EXCEPT ![x] = [arr[x] EXCEPT ![y] = foo]] EXCEPT ![u] = [[arr EXCEPT ![x] +> = [arr[x] EXCEPT ![y] = foo]][u] EXCEPT ![v] = bar]] +> +> If this is the intended behaviour, please notify me so I can close the bug. +> +> Best regards, +> Tomer</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>191</attachid> + <date>2012-12-06 10:12:00 +0000</date> + <delta_ts>2012-12-06 10:12:23 +0000</delta_ts> + <desc>TLA+ module exhibiting the bug</desc> + <filename>NestedArrayLeft.tla</filename> + <type>application/octet-stream</type> + <size>781</size> + <attacher name="Stephan Merz">stephan.merz</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>297</bug_id> + + <creation_ts>2012-12-07 15:25:00 +0000</creation_ts> + <short_desc>Flattening of modules generates duplicate copies</short_desc> + <delta_ts>2012-12-28 12:15:10 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Tomer">tomer.libal</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>lamport</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>943</commentid> + <comment_count>0</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2012-12-07 15:25:52 +0000</bug_when> + <thetext>When the PM flatten the modules dependencies, it might add the same submodules several times. For example for: + A + / \ + B C + \ / + D + +it will add A twice as it computes recursively the flattened version of B and C. + +The above occurs also on simpler cases</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>944</commentid> + <comment_count>1</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2012-12-07 15:28:48 +0000</bug_when> + <thetext>First set a testing environment (choose between Kaputt and OUnit) and add a specification tests for the required behavior of the specific function +module/m_dep.schedule + +The required behavior is to load only one instance of each module in the flattened version of the target modules (the ones specified in the command line).</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>947</commentid> + <comment_count>2</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2012-12-28 12:15:10 +0000</bug_when> + <thetext>Two tests were added to m_dep.mlt to assert the problem. +The issue was fixed by Damien and passes the tests</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>298</bug_id> + + <creation_ts>2012-12-09 20:51:00 +0000</creation_ts> + <short_desc>Soundness bug due to error in translating EXCEPT</short_desc> + <delta_ts>2013-01-09 11:44:16 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>critical</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Stephan Merz">stephan.merz</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>lamport</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>945</commentid> + <comment_count>0</comment_count> + <who name="Stephan Merz">stephan.merz</who> + <bug_when>2012-12-09 20:51:19 +0000</bug_when> + <thetext>A very weird bug in the translation of EXCEPT can lead to unsoundness. Specifically, EXCEPT expressions with multiple right-hand sides are translated incompletely. + +The PM omits the updates to record component "b" in the following theorem, making Isabelle succeed in the proof of the truncated expression. + +LEMMA ASSUME NEW foo, NEW bar, + foo = [a |-> 1, b |-> 2, c |-> 3], + bar = [a |-> 2, b |-> 2, c |-> 2] + PROVE [foo EXCEPT !.a = 3, + !.b = 4, + !.c = 1] + = [bar EXCEPT !.c = 1, + !.b = 5, + !.a = 3] +OBVIOUS + +The translation should indeed yield the following, which is not proved. + +LEMMA ASSUME NEW foo, NEW bar, + foo = [a |-> 1, b |-> 2, c |-> 3], + bar = [a |-> 2, b |-> 2, c |-> 2] + PROVE [[[foo EXCEPT !.a = 3] + EXCEPT !.b = 4] + EXCEPT !.c = 1] + = [[[bar EXCEPT !.c = 1] + EXCEPT !.b = 5] + EXCEPT !.a = 3] +OBVIOUS + +First observed with TLAPM 1.1.2 (svn rev. 30034).</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>955</commentid> + <comment_count>1</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-01-09 11:44:16 +0000</bug_when> + <thetext>This bug (and others) were fixed with the help of Kaustuv and Damien. +Tests t1-t5 in e_elab.mlt pass successfully now.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>299</bug_id> + + <creation_ts>2012-12-19 20:26:00 +0000</creation_ts> + <short_desc>TLAPS does not accept "_" in a proof-step name.</short_desc> + <delta_ts>2012-12-19 20:26:11 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>lamport</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>946</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2012-12-19 20:26:11 +0000</bug_when> + <thetext>TLA+ syntax allows “_” to be used in a step name, as in <3>a_x . TLAPS doesn’t accept it. + +I don’t think anyone needs to delay their holiday plans to fix this.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>300</bug_id> + + <creation_ts>2012-12-31 16:01:00 +0000</creation_ts> + <short_desc>SMT backend loops on proof obligation</short_desc> + <delta_ts>2013-01-02 11:21:53 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Stephan Merz">stephan.merz</reporter> + <assigned_to>hernan.vanzetto</assigned_to> + <cc>lamport</cc> + + <cc>tomer.libal</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>948</commentid> + <comment_count>0</comment_count> + <who name="Stephan Merz">stephan.merz</who> + <bug_when>2012-12-31 16:01:30 +0000</bug_when> + <thetext>Launch tlapm on the attached module for lines 184-185 from the Toolbox or the command line, like so: + + $ tlapm --toolbox 184 185 TwoProcsOneBitMutexNoDeadlock.tla + +The PM goes into what seems like an infinite loop. The console output is: + +---------------------------------------------------------------------------------- +(* TLAPM version 1.1.2 (commit 30027) *) +(* launched at 2012-12-31 15:51:13 with command line: *) +(* tlapm --toolbox 184 185 TwoProcsOneBitMutexNoDeadlock.tla *) + +(* loading fingerprints in "TwoProcsOneBitMutexNoDeadlock.tlaps/fingerprints" *) +@!!BEGIN +@!!type:obligation +@!!id:60 +@!!loc:185:19:185:21 +@!!status:to be proved +@!!END + +@!!BEGIN +@!!type:obligation +@!!id:61 +@!!loc:185:22:185:24 +@!!status:to be proved +@!!END + +@!!BEGIN +@!!type:obligation +@!!id:62 +@!!loc:185:26:185:30 +@!!status:to be proved +@!!END + +@!!BEGIN +@!!type:obligation +@!!id:63 +@!!loc:185:32:185:36 +@!!status:to be proved +@!!END + +@!!BEGIN +@!!type:obligation +@!!id:64 +@!!loc:185:38:185:42 +@!!status:to be proved +@!!END + +@!!BEGIN +@!!type:obligation +@!!id:65 +@!!loc:185:44:185:48 +@!!status:to be proved +@!!END + +@!!BEGIN +@!!type:obligationsnumber +@!!count:6 +@!!END + +check_trivial = false for 60 +before expand_defs +after expand_defs +after normalize +---------------------------------------------------------------------------------- + +After interrupting one gets the following additional output: + +>>> Type assignments: + Next :: * + Procs :: SetOf(Int) + SafetyInv :: * + TypeInv :: * + i :: Int + pc :: (* -> *) + self :: Int + vars :: * + x :: (* -> *) +>>> Unexpanded operators: SafetyInv, vars, Procs, TypeInv, Next + +---------------------------------------------------------------------------------- + +Remove "SMT" and Zenon proves the step immediately, so the problem is with the SMT backend (the Z3 and Yices backends have the same problem). + +NB: Trying to interrupt the prover from the Toolbox has no effect, the process must be killed from the shell. This is a separate bug (or enhancement request). + +Bug reported by Chris Newcombe and confirmed by Stephan.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>950</commentid> + <comment_count>1</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-01-02 11:21:53 +0000</bug_when> + <thetext>Hi Hernan, + +I re-assign the bug per Stephan's comment. +I will create another bug assigned to me with regard to terminating threads from the toolbox and will cc you.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>301</bug_id> + + <creation_ts>2013-01-02 10:39:00 +0000</creation_ts> + <short_desc>SMT backend doesn't handle CASE properly</short_desc> + <delta_ts>2013-01-02 11:42:29 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Stephan Merz">stephan.merz</reporter> + <assigned_to>hernan.vanzetto</assigned_to> + <cc>lamport</cc> + + <cc>tomer.libal</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>949</commentid> + <comment_count>0</comment_count> + <who name="Stephan Merz">stephan.merz</who> + <bug_when>2013-01-02 10:39:34 +0000</bug_when> + <thetext>Below is a TLA+ module (submitted by Chris Newcombe) in which the initial condition contains a CASE expression for which the SMT backend throws an exception: + +----- +>>> Type assignments: + Procs :: SetOf(*) + flag :: (* -> Bool) + pc :: (Int -> Str) + turn :: Int +>>> Unexpanded operators: Procs + +File "/Users/merz/projects/INRIA-MSR/examples/PetersonTwoProcs.tla", line 172, characters 11-15: +Error: Cannot infer type of +<<CASE >> +File "/Users/merz/projects/INRIA-MSR/examples/PetersonTwoProcs.tla", line 172, characters 11-15: +Error: SMT backend translation error. Cannot process the expression +CASE + +[SMT] Error: unknown exception in + \/ IF 0 = 1 THEN FALSE ELSE (CASE ) = "ncs0" +\/ IF 0 = 1 THEN FALSE ELSE (CASE ) = "e0a" +\/ IF 0 = 1 THEN FALSE ELSE (CASE ) = "e0b" +\/ IF 0 = 1 THEN FALSE ELSE (CASE ) = "e0c" +\/ IF 0 = 1 THEN FALSE ELSE (CASE ) = "cs0" +@!!BEGIN +@!!type:obligation +@!!id:14 +@!!loc:173:13:173:15 +@!!status:failed +@!!prover:smt3 +@!!meth:time-limit: 5 +@!!reason:SMT backend: wrong conclusion +@!!already:false +@!!obl: +ASSUME NEW VARIABLE flag, + NEW VARIABLE turn, + NEW VARIABLE pc, + flag = [p \in Procs |-> FALSE], + turn = 0, + pc = + [self \in {0} \union {1} |-> + CASE self = 0 -> "ncs0" + [] self = 1 -> "ncs1"] +PROVE pc[0] \in {"ncs0", "e0a", "e0b", "e0c", "cs0"} +----- + +Interestingly, the second arm of the CASE doesn't throw the exception. + +-------------------------- MODULE PetersonTwoProcs -------------------------- +EXTENDS TLC, TLAPS + +Procs == {0,1} + +(* +--algorithm PetersonTwoProcs { + +variables + flag = [p \in Procs |-> FALSE], + turn = 0; + +process (p0 = 0) { +ncs0: while (TRUE) { + skip; +e0a: flag[0] := TRUE; +e0b: turn := 1; +e0c: await ~(flag[1] /\ turn = 1); +cs0: skip; + flag[0] := FALSE; + } +} + +process (p1 = 1) { +ncs1: while (TRUE) { + skip; +e1a: flag[1] := TRUE; +e1b: turn := 0; +e1c: await ~(flag[0] = TRUE /\ turn = 0); +cs1: skip; + flag[1] := FALSE; + } +} + +} \* end algorithm +*) + + +\* BEGIN TRANSLATION +VARIABLES flag, turn, pc + +vars == << flag, turn, pc >> + +ProcSet == {0} \cup {1} + +Init == (* Global variables *) + /\ flag = [p \in Procs |-> FALSE] + /\ turn = 0 + /\ pc = [self \in ProcSet |-> CASE self = 0 -> "ncs0" + [] self = 1 -> "ncs1"] +(* Manual re-write of last conjunct above, to work with proofs: + /\ pc = [self \in ProcSet |-> IF self = 0 THEN "ncs0" + ELSE "ncs1"] +*) + +ncs0 == /\ pc[0] = "ncs0" + /\ TRUE + /\ pc' = [pc EXCEPT ![0] = "e0a"] + /\ UNCHANGED << flag, turn >> + +e0a == /\ pc[0] = "e0a" + /\ flag' = [flag EXCEPT ![0] = TRUE] + /\ pc' = [pc EXCEPT ![0] = "e0b"] + /\ turn' = turn + +e0b == /\ pc[0] = "e0b" + /\ turn' = 1 + /\ pc' = [pc EXCEPT ![0] = "e0c"] + /\ flag' = flag + +e0c == /\ pc[0] = "e0c" + /\ ~(flag[1] /\ turn = 1) + /\ pc' = [pc EXCEPT ![0] = "cs0"] + /\ UNCHANGED << flag, turn >> + +cs0 == /\ pc[0] = "cs0" + /\ TRUE + /\ flag' = [flag EXCEPT ![0] = FALSE] + /\ pc' = [pc EXCEPT ![0] = "ncs0"] + /\ turn' = turn + +p0 == ncs0 \/ e0a \/ e0b \/ e0c \/ cs0 + +ncs1 == /\ pc[1] = "ncs1" + /\ TRUE + /\ pc' = [pc EXCEPT ![1] = "e1a"] + /\ UNCHANGED << flag, turn >> + +e1a == /\ pc[1] = "e1a" + /\ flag' = [flag EXCEPT ![1] = TRUE] + /\ pc' = [pc EXCEPT ![1] = "e1b"] + /\ turn' = turn + +e1b == /\ pc[1] = "e1b" + /\ turn' = 0 + /\ pc' = [pc EXCEPT ![1] = "e1c"] + /\ flag' = flag + +e1c == /\ pc[1] = "e1c" + /\ ~(flag[0] = TRUE /\ turn = 0) + /\ pc' = [pc EXCEPT ![1] = "cs1"] + /\ UNCHANGED << flag, turn >> + +cs1 == /\ pc[1] = "cs1" + /\ TRUE + /\ flag' = [flag EXCEPT ![1] = FALSE] + /\ pc' = [pc EXCEPT ![1] = "ncs1"] + /\ turn' = turn + +p1 == ncs1 \/ e1a \/ e1b \/ e1c \/ cs1 + +Next == p0 \/ p1 + +Spec == Init /\ [][Next]_vars + +\* END TRANSLATION + + +InCS(i) == pc[i] = "cs" +p0Labels == {"ncs0", "e0a", "e0b", "e0c", "cs0"} +p1Labels == {"ncs1", "e1a", "e1b", "e1c", "cs1"} + +TypeInv == + /\ flag \in [Procs -> BOOLEAN] + /\ turn \in Procs + /\ pc \in [ProcSet -> p0Labels \union p1Labels] + /\ pc[0] \in p0Labels + /\ pc[1] \in p1Labels + +MutexInv == ~(InCS(0) /\ InCS(1)) + +\* Not yet inductive +InductiveInv == + /\ TypeInv + /\ MutexInv + + +USE DEF ProcSet + +Range(f) == {f[x] : x \in DOMAIN f} + +THEOREM Spec => []MutexInv + +<1>1. Init => InductiveInv +(* If I change the definition of Init generated by PlusCal to + /\ pc = [self \in ProcSet |-> IF self = 0 THEN "ncs0" + ELSE "ncs1"] + then this leaf-proof works: + BY Z3 DEF Init, InductiveInv, TypeInv, Procs, p0Labels, p1Labels, MutexInv, InCS + or the following proof also works: +*) + <2> SUFFICES ASSUME Init + PROVE InductiveInv + OBVIOUS + <2>1. TypeInv + <3>1. flag \in [Procs -> BOOLEAN] + BY DEF Init, Procs \** SMT works + <3>2. turn \in Procs + BY DEF Init, Procs \** SMT works + <3>3. pc \in [ProcSet -> p0Labels \union p1Labels] + BY DEF Init, p0Labels, p1Labels \** SMT fails +(* + <4>1. DOMAIN pc = ProcSet + BY Z3 DEF Init, p0Labels, p1Labels + <4>2. Range(pc) = {"ncs0", "ncs1"} + BY Z3 DEF Init, Range + <4>3. {"ncs0", "ncs1"} \subseteq p0Labels \union p1Labels + BY DEF p0Labels, p1Labels + <4> QED + BY Z3, <4>1, <4>2, <4>3 DEF Init, Range, p0Labels, p1Labels +*) + <3>4. pc[0] \in p0Labels + BY DEF Init, p0Labels \** SMT fails + <3>5. pc[1] \in p1Labels + BY DEF Init, p1Labels \** SMT works (?!) + <3>6. QED + BY <3>1, <3>2, <3>3, <3>4, <3>5 DEF TypeInv + <2>2. MutexInv + BY Z3 DEF Init, InductiveInv, TypeInv, Procs, p0Labels, p1Labels, MutexInv, InCS + <2>3. QED + BY <2>1, <2>2 DEF InductiveInv + +<1>2. InductiveInv /\ [Next]_vars => InductiveInv' + +<1>3. InductiveInv => MutexInv + BY DEF InductiveInv, MutexInv + +<1> QED + OMITTED \* BY <1>1, <1>2, <1>3 and rule INV1 of TLA + + +=============================================================================</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>951</commentid> + <comment_count>1</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-01-02 11:42:29 +0000</bug_when> + <thetext>Hi Hernán, + +Per Stephan's request, I re-assign this bug to you as well. In case you think that the problem is in the tlapm part and not in the smt-backend part, please re-assign it to me.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>302</bug_id> + + <creation_ts>2013-01-02 11:49:00 +0000</creation_ts> + <short_desc>Pressing cancel in the toolbox does not interrupt the SMT backend</short_desc> + <delta_ts>2013-01-02 11:52:09 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Tomer">tomer.libal</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>hernan.vanzetto</cc> + + <cc>lamport</cc> + + <cc>Stephan.Merz</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>952</commentid> + <comment_count>0</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-01-02 11:49:05 +0000</bug_when> + <thetext/> + </long_desc><long_desc isprivate="0"> + <commentid>953</commentid> + <comment_count>1</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-01-02 11:52:09 +0000</bug_when> + <thetext>[I am sorry for the partial bug report. It was sent by mistake] + +Pressing "Cancel" grays out the button, but doesn't actually kill the PM process. + +This can be tested on the example from bug 300.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>303</bug_id> + + <creation_ts>2013-01-09 11:46:00 +0000</creation_ts> + <short_desc>An improvement to the Visitor pattern</short_desc> + <delta_ts>2013-01-09 11:46:51 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Tomer">tomer.libal</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>damien.doligez</cc> + + <cc>lamport</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>956</commentid> + <comment_count>0</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-01-09 11:46:51 +0000</bug_when> + <thetext>Right now the map Visitor visits every node and in order to override we must override the visiting function (expr). + +It is less powerful but safer to separate the visiting from the creation of the expressions so we will need to override only the creation of the specific element (EXCEPT in this case). This can be achieved by either: +1) supplying the visitor with a factory method for expressions which overrides a default factory method that creates the expressions without any action. +2) calling a specific create (i.e. create_except) after traversing the arguments of the expr. Then we need to override only this method in order to normalize the expression.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>304</bug_id> + + <creation_ts>2013-01-16 13:26:00 +0000</creation_ts> + <short_desc>Module dependencies not resolved correctly for external modules with standard modules names</short_desc> + <delta_ts>2013-02-12 11:37:30 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Tomer">tomer.libal</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>lamport</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>959</commentid> + <comment_count>0</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-01-16 13:26:46 +0000</bug_when> + <thetext>When tlapm loads a module which depends on another local modules, whose name is the same as a standard module, the local modules is not being loaded and its members are not inserted into the main module.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>960</commentid> + <comment_count>1</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-01-16 15:52:05 +0000</bug_when> + <thetext>now external modules are loaded even if they have the same name as a standard module. there remains a small problem with error propagation as I am using an exception for the workflow but exceptions are also handled locally and therefore an error massage will be printed. + +the fix was committed and I will make some patch for the error massage</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>961</commentid> + <comment_count>2</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-01-16 17:52:26 +0000</bug_when> + <thetext>Hi Leslie, + +It is not that trivial to remove the error message as it is being printed inside a signature method and I dont want to change the signature (I am not sure who is using it). + +If you approve the bug is corrected, I will close this bug and add another one for the printed error message of which I will consult with Damien. + +btw, I have added unit tests for confirming that I have fixed the bug so we can skip the approval step if you prefer (for now and for future bugs)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>965</commentid> + <comment_count>3</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-02-12 11:37:30 +0000</bug_when> + <thetext>m_save mli changed so load_module function, which is not called outside of m_save, is removed. The error message could be fixed now</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>305</bug_id> + + <creation_ts>2013-01-25 11:11:00 +0000</creation_ts> + <short_desc>tlapm hanging</short_desc> + <delta_ts>2013-02-12 20:31:47 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Tomer">tomer.libal</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>lamport</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>962</commentid> + <comment_count>0</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-01-25 11:11:14 +0000</bug_when> + <thetext>Running the prover on the nonsense theorem on line 21 causes tlapm to loop and not respond to kill requests. The console output is below. This is not a problem of interacting with the Toolbox. It hangs when run from the command line. + + +---------------- New Prover Launch -------------- + +warning: --isaprove is deprecated + + + +(* TLAPM version 1.1.4 (commit 30325) *) + +(* launched at 2013-01-25 00:06:40 with command line: *) + +(* /usr/local/bin/tlapm --toolbox 21 33 --isaprove --cleanfp -I C:\lamport\tla\newtools\tlapm\library\ C:\lamport\mytemp\Test.tla *) + + + +(* fingerprints file "Test.tlaps/fingerprints" removed *) + +@!!BEGIN + +@!!type:obligation + +@!!id:1 + +@!!loc:33:5:33:7 + +@!!status:to be proved + +@!!END + + + +@!!BEGIN + +@!!type:obligation + +@!!id:2 + +@!!loc:33:8:33:12 + +@!!status:to be proved + +@!!END + + + +@!!BEGIN + +@!!type:obligation + +@!!id:3 + +@!!loc:33:14:33:18 + +@!!status:to be proved + +@!!END + + + +@!!BEGIN + +@!!type:obligation + +@!!id:4 + +@!!loc:25:5:25:7 + +@!!status:to be proved + +@!!END + + + +@!!BEGIN + +@!!type:obligationsnumber + +@!!count:4 + +@!!END</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>966</commentid> + <comment_count>1</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-02-12 20:31:47 +0000</bug_when> + <thetext>Comment by Leslie: + +So far, I’ve only seen this bug when using numbers as formulas—something that’s not going to be very common. It’s worth examining only to see if it can cause hanging in more reasonable cases.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>306</bug_id> + + <creation_ts>2013-01-30 14:18:00 +0000</creation_ts> + <short_desc>TLAPM returns error code 0 also when not all theorems are successfully proven</short_desc> + <delta_ts>2013-01-30 21:25:36 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>INVALID</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Tomer">tomer.libal</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>lamport</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>963</commentid> + <comment_count>0</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-01-30 14:18:53 +0000</bug_when> + <thetext>is this the intended behaviour? Should it return a specific error code in this case and reserve error code 0 for a fully successful execution?</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>964</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2013-01-30 21:25:36 +0000</bug_when> + <thetext>Dan Ricketts points out that the documentation for the tlapm/Toolbox interface says that tlapm can return the following completion codes: + + 0 - successful completion + 1 - error of the pm. Normally a module parsing error. + 2 - problem reading command line arguments + 255 - tlapm interrupted</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>307</bug_id> + + <creation_ts>2013-02-20 23:51:00 +0000</creation_ts> + <short_desc>Can't cancel status checking</short_desc> + <delta_ts>2013-02-20 23:51:51 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>lamport</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>967</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2013-02-20 23:51:51 +0000</bug_when> + <thetext>Hitting cancel on the Status Checking Launch dialog does nothing when running a status check.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>308</bug_id> + + <creation_ts>2013-02-21 03:28:00 +0000</creation_ts> + <short_desc>tlapm reports a bug with error code -1073741819</short_desc> + <delta_ts>2013-02-21 03:28:34 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>lamport</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>968</commentid> + <comment_count>0</comment_count> + <attachid>192</attachid> + <who name="Leslie Lamport">lamport</who> + <bug_when>2013-02-21 03:28:34 +0000</bug_when> + <thetext>Created attachment 192 +File SetEuclid.tla + +Running the prover on step <1>2 on lines 253 of the attached file produces: + +Error running tlapm. Report a bug with the error code to the developers at +http://bugzilla.tlaplus.net/. + + Error code: -1073741819</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>192</attachid> + <date>2013-02-21 03:28:00 +0000</date> + <delta_ts>2013-02-21 03:28:34 +0000</delta_ts> + <desc>File SetEuclid.tla</desc> + <filename>SetEuclid.tla</filename> + <type>text/plain</type> + <size>21930</size> + <attacher name="Leslie Lamport">lamport</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>309</bug_id> + + <creation_ts>2013-02-25 10:51:00 +0000</creation_ts> + <short_desc>tlapm typo in definition of IsFiniteSet</short_desc> + <delta_ts>2013-02-25 14:45:13 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Tomer">tomer.libal</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>damien.doligez</cc> + + <cc>lamport</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>969</commentid> + <comment_count>0</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-02-25 10:51:03 +0000</bug_when> + <thetext>The tlapm typo in the definition of IsFiniteSet is still not fixed. I am using TLAPM version 1.1.4 (commit 30325). Try proving: + + + +EXTENDS Naturals, Sequences, FiniteSets + + + +THEOREM IsFiniteSetDef == + + \A S : IsFiniteSet(S) = \E seq \in Seq(S) : \A s \in S : \E n \in 1..Len(seq) : seq[n] = s + +BY DEF IsFiniteSet + + + +See the attached TLA file and console log. I originally reported this problem on June 4, 2012.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>310</bug_id> + + <creation_ts>2013-02-25 10:53:00 +0000</creation_ts> + <short_desc>instance of a module that extends TLAPS confounds tlapm with SMTT(10)</short_desc> + <delta_ts>2013-03-08 11:30:57 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Tomer">tomer.libal</reporter> + <assigned_to name="Damien Doligez">damien.doligez</assigned_to> + <cc>lamport</cc> + + <cc>tomer.libal</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>970</commentid> + <comment_count>0</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-02-25 10:53:59 +0000</bug_when> + <thetext>I have a module (SubMod.tla attached) that extends TLAPS and contains some definitions and proofs. + + + +I have a module (BugInstanceTlaps.tla attached) that takes an instance of SubMod and then also contains some definitions and proofs. This module also extends TLAPS, because I want to reference some of the tlapm pragmas in its proofs. In fact, I want to instruct tlapm to appeal to SMT with a timeout of 10 seconds. So for this purpose I write SMTT(10) in the BY clause on the relevant deduction. + + + +Unfortunately, it seems that tlapm gets confused about this. See the attached console log. It seems that tlapm fails to realize that SMTT(10) is a pragma. + + + +In this particular case, I do not actually need the timeout, so I can just write SMT and tlapm will do the correct thing. However, I have extracted this example from a much more complicated situation in which I have found that SMT occasionally needs the extra time, so I have gotten into the habit of always writing SMTT(10). And, of course, the SMTT(10) pragma should work, anyway.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>972</commentid> + <comment_count>1</comment_count> + <who name="Damien Doligez">damien.doligez</who> + <bug_when>2013-02-25 14:41:35 +0000</bug_when> + <thetext>fixed in revision 31051 + +should add a regression test</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>973</commentid> + <comment_count>2</comment_count> + <who name="Damien Doligez">damien.doligez</who> + <bug_when>2013-03-08 11:30:57 +0000</bug_when> + <thetext>Fixed in revision 31051.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>311</bug_id> + + <creation_ts>2013-02-25 10:55:00 +0000</creation_ts> + <short_desc>tlapm parser failure on instance with operator substitution</short_desc> + <delta_ts>2013-03-08 11:38:48 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Tomer">tomer.libal</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>damien.doligez</cc> + + <cc>lamport</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>971</commentid> + <comment_count>0</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-02-25 10:55:48 +0000</bug_when> + <thetext>I have a module that takes a couple of constant parameters: + + + +--------------------------- MODULE PartialOrders --------------------------- + +CONSTANT S + +CONSTANT _ \preceq _ + + + +IsPartialOrder == + + /\ \A a,b \in S : (a \preceq b) \in BOOLEAN + + /\ \A a \in S : a \preceq a + + /\ \A a,b \in S : a \preceq b /\ b \preceq a => a = b + + /\ \A a,b,c \in S : a \preceq b /\ b \preceq c => a \preceq c + +============================================================================= + + + +And I have a module that takes an instance of that module: + + + +--------------------------- MODULE BugInstanceOp --------------------------- + +EXTENDS Integers, TLAPS + +INSTANCE PartialOrders WITH S <- Int, \preceq <- \leq + +THEOREM IsPartialOrder BY SMT + +============================================================================= + + + +This is all proper TLA+ according to the tool box. However, when I ask tlapm to prove the theorem, it blows up with a parse error: + + + +File "<unknown>":Error: Could not parse "C:\\Users\\tomr\\Documents\\All Projects\\TLAPS Bugs\\BugInstanceOp\\BugInstanceOp.tla" successfully. + +tlapm ending abnormally with Failure("Module.Parser.parse_file") + +Raised at file "pervasives.ml", line 22, characters 22-33 + +Called from file "m_save.ml", line 24, characters 16-20 + +Called from file "tlapm.ml", line 300, characters 19-92 + +Called from file "list.ml", line 74, characters 24-34 + +Called from file "tlapm.ml", line 298, characters 4-373 + +Called from file "tlapm.ml", line 334, characters 8-33 + + + +It would appear that the tlapm parser is confused by the operator substitution in the instance statement. See attached TLA files and console log. + + + +If this is supposed to be an unsupported language feature it is not documented on http://msr-inria.inria.fr/~doligez/tlaps/content/Download/Unsupported.html</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>974</commentid> + <comment_count>1</comment_count> + <who name="Damien Doligez">damien.doligez</who> + <bug_when>2013-03-08 11:38:48 +0000</bug_when> + <thetext>fixed in revision 31237.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>312</bug_id> + + <creation_ts>2013-04-20 21:21:00 +0000</creation_ts> + <short_desc>Silly application of '/' (division operator), e.g. to sets, should ideally cause TLC to report an error</short_desc> + <delta_ts>2014-07-08 16:28:37 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Chris Newcombe">chris.newcombe</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + <cc>lamport</cc> + + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>975</commentid> + <comment_count>0</comment_count> + <who name="Chris Newcombe">chris.newcombe</who> + <bug_when>2013-04-20 21:21:55 +0000</bug_when> + <thetext>(I'm running on Windows 7 64-bit, using 32-bit Sun Java 6 update 45, and the Win32 build of the latest toolbox release (1.4.6) -- and I also tried an older version.) + +While writing a spec, I accidentally mis-typed the set-difference operator. +I wrote ‘/’ instead of ‘\’, in a context similar to the following: + + { "a", "b", "c" } / {"b"} + +TLC accepted that. I got strange very results when model-checking. +TLC evaluates the above expression as: + + {{"b"}, {"b", "c", "a"}} + +I then realized that TLC was only accepting the above because my spec uses “EXTENDS Reals” because I need the definition of Infinity. I had forgotten that the Reals module also defines ‘/’ as the division operator, because I’ve never used division in a spec. (IIRC TLC doesn't support reals.) + +I understand that this behavior is consistent with the untyped semantics of TLA+[*]. But it would be nice if TLC reported this usage as an error. + +Cheers, + +Chris + +[*] Page 347 of ‘Specifying Systems’ says that the Reals module contains this definition for '/' : + a / b == CHOOSE c \in Real : a = b * c +So that can evaluate to any arbitrary value, for the erroneous usage earlier.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>976</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2013-04-23 20:08:36 +0000</bug_when> + <thetext>Here is the explanation of the bug. The official standard modules +Naturals, Integers, and Reals given in "Specifying Systems" define the +semantics of the arithmetic operators, but they are of no use to any +tool. So, to speed up parsing, dummy versions of those modules are +used by the parser. The dummy versions of Naturals and Integers are +ignored by TLC and TLAPS. However, the dummy version of Reals is used +by TLC and I presume by TLAPS. The body of that module is: + + EXTENDS Integers + Real == { } + a / b == {a, b} + Infinity == 999999999 + +The question is, what should the definitions be. It's easy to make up +definitions that will cause errors when TLC tries to evaluate these +definitions. However, can we do anything that will make this module +usable by TLAPS? I don't see how, since I think we should maintain the +semantics that Int is a subset of Real and the arithemetic operators +like + and * on integers are the restrictions of the ones on reals. +But I'm open to suggestions. + +We can make TLC produce appropriate error messages when the Reals +operators are used without the use of a suitable dummy Reals module: +we can write a Java Reals class for TLC that overrides these +definitions. I'm not going to do that myself, but I'll be happy to +consider adding such a module if someone else wants to write it. +(It should be easy to figure out how it's done by searching the +source code for the Naturals.java and Integers.java classes.) + +Barring other suggestions, I will modify the dummy Reals module. I +welcome suggestions for what I should do. For example, should we keep +the current definition of Infinity? Should I change the definition of +Real so that TLC will always produce an error in evaluating exp \in +Real? Or should it evaluate -3 \in Real to TRUE? I'll move discussion of this to the Google group.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>313</bug_id> + + <creation_ts>2013-05-06 13:07:00 +0000</creation_ts> + <short_desc>tlapm bug in printing obligations</short_desc> + <delta_ts>2014-07-08 16:26:08 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Tomer">tomer.libal</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>lamport</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>977</commentid> + <comment_count>0</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-05-06 13:07:38 +0000</bug_when> + <thetext>When printing obligations, tlapm seems to think that + has higher precedence than % , so it prints + + + + 0 + 1 % N = 1 + + + +However, that’s not a legal TLA+ expression, since TLA+ defines + and % to have overlapping precedences, so parentheses are required.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>314</bug_id> + + <creation_ts>2013-05-06 13:09:00 +0000</creation_ts> + <short_desc>Failure to report an error</short_desc> + <delta_ts>2014-07-08 16:31:19 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Tomer">tomer.libal</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>lamport</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>978</commentid> + <comment_count>0</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-05-06 13:09:23 +0000</bug_when> + <thetext>Leslie wrote: + +When I tell TLAPS to prove the bogus WITNESS step in + + + + THEOREM \E i \in {1, 2, 3} : TRUE + + <1> WITNESS 2 + + <1> QED + + + +I find this in the log + + + + (* TLAPM version 1.1.5 (commit 31536) *) + + (* launched at 2013-05-02 20:17:12 with command line: *) + + (* /usr/local/bin/tlapm --toolbox 11 13 --isaprove -I C:\lamport\tla\newtools\tlapm\library\ + C:\lamport\mytemp\Test1.tla *) + + + + File "C:\\lamport\\mytemp\\Test1.tla", line 12, characters 1-13: + + Error: WITNESS argument + + 2 + + does not match pattern + + i \in {1, 2, 3} + + + +However, the Toolbox doesn’t raise an error window. My guess is that TLAPM is not returning the error report in the right format. Please check on that.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>315</bug_id> + + <creation_ts>2013-05-24 09:22:00 +0000</creation_ts> + <short_desc>make standard modules visible to the PM</short_desc> + <delta_ts>2013-06-11 11:09:29 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Stephan Merz">stephan.merz</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>lamport</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>979</commentid> + <comment_count>0</comment_count> + <who name="Stephan Merz">stephan.merz</who> + <bug_when>2013-05-24 09:22:30 +0000</bug_when> + <thetext>When attempting to prove the following theorem in a module extending the Sequences module + +THEOREM ConcatDef == + \A s1, s2 : s1 \o s2 = + [i \in 1..(Len(s1)+Len(s2)) |-> + IF i \leq Len(s1) THEN s1[i] + ELSE s2[i-Len(s1)]] +BY DEF \o + +the definition of \o is not expanded because the definitions given in standard modules are not available to the PM. I suggest that this be changed, perhaps excluding the modules for Naturals, Integers, and Reals whose definitions are arguably not useful in a proof. + +Current workaround: add theorems like the above that basically restate the definitions, omit their proofs, and work from there.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>980</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2013-06-04 17:49:21 +0000</bug_when> + <thetext>It appears that the standard modules distributed with the Toolbox have always been the real ones, except for the numbers modules Naturals, Integers, and Reals. (They must have been put in the standalone distribution when the Toolbox was first released, if they weren't already there.) Moreover, there is no Sequences.tla file in the tlapm repository. It appears that Sequences is one of the modules that are built into the tlapm code, with bogus definitions. We need to check if Bags and FiniteSets are there as well.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>983</commentid> + <comment_count>2</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2013-06-11 11:09:29 +0000</bug_when> + <thetext>Is fixed in the source and will fix will appear in the next release.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>316</bug_id> + + <creation_ts>2013-06-11 10:39:00 +0000</creation_ts> + <short_desc>Toolbox not displaying error report by TLC</short_desc> + <delta_ts>2013-10-29 18:31:07 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLC Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>981</commentid> + <comment_count>0</comment_count> + <attachid>193</attachid> + <who name="Leslie Lamport">lamport</who> + <bug_when>2013-06-11 10:39:07 +0000</bug_when> + <thetext>Created attachment 193 +Specification SimpleLiveness + +The spec that I will attach as soon as Bugzilla allows me to has a bad Behavior +Spec, with [Next]_vars instead of [][Next]_vars. Therefore, TLC reports an +error when it is run. However, there seem to be two Toolbox bugs: + +1. Instead of recognizing it as an error, the Toolbox thinks there's a bug. + +2. The Toolbox displays neither the error nor the bug report to the user. + +This bug is in the inscrutable code for parsing TLC errors, so it may be hard +to fix.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>1004</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2013-10-29 18:31:07 +0000</bug_when> + <thetext>A fix to the SANY parser makes the example no longer parse. However, I believe it was a manifestation of a bug that was fixed in the version of the code checked in on 23 October 2013.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>193</attachid> + <date>2013-06-11 10:39:00 +0000</date> + <delta_ts>2013-06-11 10:39:07 +0000</delta_ts> + <desc>Specification SimpleLiveness</desc> + <filename>SimpleSpec.tla</filename> + <type>text/plain</type> + <size>2856</size> + <attacher name="Leslie Lamport">lamport</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>317</bug_id> + + <creation_ts>2013-06-19 10:53:00 +0000</creation_ts> + <short_desc>Sometimes 'create pdf version' command fails to produce new version of pdf file</short_desc> + <delta_ts>2013-07-20 04:07:22 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLATEX Component</component> + <version>unspecified</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows 7</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P4</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>984</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2013-06-19 10:53:09 +0000</bug_when> + <thetext>The following behavior sometimes occurs: When running with "Use built-in PDF viewer" preference, I have to delete the pdf viewer window in order to create a new pdf version. If I don't, when running under the debugger, the console log reports + +org.eclipse.core.internal.resources.ResourceException: Resource '/SimpleSpec/SimpleSpecTrans.pdf' does not exist. + at org.eclipse.core.internal.resources.Resource.checkExists(Resource.java:320) + at org.eclipse.core.internal.resources.Resource.checkAccessible(Resource.java:194) + at org.eclipse.core.internal.resources.Resource.checkAccessibleAndLocal(Resource.java:200) + at org.eclipse.core.internal.resources.Resource.touch(Resource.java:1901) + at org.lamport.tla.toolbox.tool.tla2tex.handler.EmbeddedPDFViewerRunnable.setFile(EmbeddedPDFViewerRunnable.java:48) + at org.lamport.tla.toolbox.tool.tla2tex.handler.ProducePDFHandler$2.runInWorkspace(ProducePDFHandler.java:270) + at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +If I close the spec and close and reopen the Toolbox, and bow three times to Mecca, the problem goes away. I presume this is the result of an Eclipse feature. (Since there is no documentation explaining what Eclipse methods are supposed to do, there are no bugs in Eclipse.)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>985</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2013-06-19 21:42:59 +0000</bug_when> + <thetext>Hi Leslie, + +to narrow it down. Might it be somehow possible that you trigger two concurrent PDF generator jobs? The generator job is visible to the user.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>986</commentid> + <comment_count>2</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2013-06-19 21:49:11 +0000</bug_when> + <thetext>Leslie, + +try adding +"+ System.currentTimeMillis()" + +to org.lamport.tla.toolbox.tool.tla2tex.handler.ProducePDFHandler on line 265 where it concats the filename to make the filename unique for each job.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>987</commentid> + <comment_count>3</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2013-06-20 11:28:53 +0000</bug_when> + <thetext>Hi Leslie, + +please check if my commit [1] fixes the problem for you. It forces an Eclipse project resource refresh after creating the PDF file. My assumption is that the filesystem and what Eclipse sees in its project is out of sync due to the fact that the PDF does not get created through the Eclipse resource layer. + +[1] https://tlaplus.codeplex.com/SourceControl/changeset/fa2b69324b226e7aa2589863d8c0bbfdbbc8384b + +PS: Suffixing the PDF filename with a timestamp has the side effect that the built-in PDF viewer open a view for each file and does not reuse the old one.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>988</commentid> + <comment_count>4</comment_count> + <attachid>194</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2013-06-20 11:31:30 +0000</bug_when> + <thetext>Created attachment 194 +Suffix PDF file name with timestamp to make it unique + +(just for the sake of completeness - not intended to be committed)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>989</commentid> + <comment_count>5</comment_count> + <attachid>195</attachid> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2013-06-20 11:31:32 +0000</bug_when> + <thetext>Created attachment 195 +mylyn/context/zip</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>991</commentid> + <comment_count>6</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2013-07-20 04:07:22 +0000</bug_when> + <thetext>I haven't seen this bug since Markus's fix, so I will declare it resolved.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="1" isprivate="0"> + <attachid>194</attachid> + <date>2013-06-20 11:31:00 +0000</date> + <delta_ts>2013-06-20 11:31:30 +0000</delta_ts> + <desc>Suffix PDF file name with timestamp to make it unique</desc> + <filename>clipboard.txt</filename> + <type>text/plain</type> + <size>1780</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>195</attachid> + <date>2013-06-20 11:31:00 +0000</date> + <delta_ts>2013-06-20 11:31:32 +0000</delta_ts> + <desc>mylyn/context/zip</desc> + <filename>mylyn-context.zip</filename> + <type>application/octet-stream</type> + <size>4581</size> + <attacher name="Markus Alexander Kuppe">bugzilla.tlaplus.net</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>318</bug_id> + + <creation_ts>2013-07-14 18:13:00 +0000</creation_ts> + <short_desc>Sometimes Toolbox does not show TLC errors arising from 'Evaluate Constant Expression'</short_desc> + <delta_ts>2015-02-11 14:42:58 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>ASSIGNED</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Chris Newcombe">chris.newcombe</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>990</commentid> + <comment_count>0</comment_count> + <who name="Chris Newcombe">chris.newcombe</who> + <bug_when>2013-07-14 18:13:47 +0000</bug_when> + <thetext>(This is not terribly serious as there is a workaround, but it's clearly a bug so I'm reporting it anyway.) + +I found a case in which the Toolbox does not show an error that is reported by TLC when doing ‘Evaluate Constant Expression’. I suspect this is related to the size of the error-output in the TLC console log. + +The attached module contains a dumb bug; on line 52 the definition of the co-domain of a recursive function is too small. + +When I use TLC to ‘Evaluate Constant Expression’ on the following: +TestAllShortestDistances +then + +a. If the following values are used for constants, then the Toolbox fails to report the error, and does not print any output in “Value” box. +MaxNumEdgeWeights = 1 +MaxNumNodes = 3 + +b. If the following smaller values are used for constants, then the Toolbox correctly reports the error. +MaxNumEdgeWeights = 1 +MaxNumNodes = 2 + +In both cases, the TLC console log does contain the correct error. +I suspect this problem is related to the size of the error output in the log, as in case (a) above, the error report in the TLC console log is quite large, due to the combinatorics of this function definition. +In the extract from the log below, the “… snip lots of output ..” part hides the large part. + +Version info + +Windows 7 Enterprise + +OS is 64-bit, but software is 32-bit. + +32-bit Oracle Java 1.7: + java version "1.7.0_25" + Java(TM) SE Runtime Environment (build 1.7.0_25-b16) + Java HotSpot(TM) Client VM (build 23.25-b01, mixed mode) + +32-bit Toolbox & TLC (TLAToolbox-1.4.7-win32.win32.x86) + + This is Version 1.4.7 of 24 April 2013 and includes: + - SANY Version 2.1 of 27 March 2013 + - TLC Version 2.05 of 24 October 2012 + - PlusCal Version 1.8 of 2 April 2013 + - TLATeX Version 1.0 of 12 April 2013 + +Chris + +Starting... (2013-07-14 08:56:53) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2105:1 @!@!@ +Evaluating assumption line 20, col 8 to line 20, col 66 of module MC failed. +In applying the function +[args \in ({(<<1, 1>> :> 1 @@ ... snip lots of output ...} X {{}, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}}) |-> <expression line 53, col 13 to line 66, col 62 of module ToolboxBug_FailureToReportErrorEvaluatingConstantExpression>], +the first argument is: +<< ( <<1, 1>> :> 999999999 @@ + <<1, 2>> :> 1 @@ + <<1, 3>> :> 999999999 @@ + <<2, 1>> :> 1 @@ + <<2, 2>> :> 2 @@ + <<2, 3>> :> 999999999 @@ + <<3, 1>> :> 999999999 @@ + <<3, 2>> :> 999999999 @@ + <<3, 3>> :> 999999999 ), + {2, 3} >> +which is not in its domain.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>319</bug_id> + + <creation_ts>2013-08-02 14:11:00 +0000</creation_ts> + <short_desc>Soundness bug due to coagulation or primes ignoring bound variables</short_desc> + <delta_ts>2013-08-14 12:15:55 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>critical</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Tomer">tomer.libal</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>damien.doligez</cc> + + <cc>lamport</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>992</commentid> + <comment_count>0</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-08-02 14:11:18 +0000</bug_when> + <thetext>The following can be proved in the toolbox: + +VARIABLE Y + +P(a,x) == IF Y THEN x ELSE x + +THEOREM 1 = 2 +<1>1. \A z : P(Y,z)' = z + BY DEF P +<1>2. QED BY <1>1 + +The primes distribution does not distribute the primes over P(Y,z)' as Y is not constant. + +The backends of Isabelle and zenon, when encountering primes, are doing coagulation as follows: +Given op(args)' +- if args are empty, return hash(op) +- if all args are constants, return hash(op)(args) +- if at least one arg is not a constant, return hash(op(args)) + +the result is that if some arg is a bound variable, as in the above example, we get a coagulation based on the bound variable name. + +Fixing the bug is expected to take at most one week. For now I have added a test for this bug in the soundness_tests.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>993</commentid> + <comment_count>1</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-08-02 14:13:18 +0000</bug_when> + <thetext>a minor correction + +The primes distribution does not distribute the primes over P(Y,z)' as P is not +constant.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>994</commentid> + <comment_count>2</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-08-02 14:40:27 +0000</bug_when> + <thetext>steps to do: + +1) remove prime handling from backends and add it to an action backend. isabelle/zenon/SMT/etc. should report an errror if encountering primes +2) remove prime distribution from backends and add it to action backend. the action backend is a default middle-backend to normalize formulas when we send the obligation to a fol theorem prover. +3) in the action backend, we do as follows: +3a) expend definitions of UNCHANGED, [A]_v and <<A>>_v +3b) distribute primes over constant operators +3c) for a leibniz non-constant operator op, distribute primes over hash(op) (we treat all non-constant operators right now, see comment below) +3d) primed atoms: constant atoms -> do nothing, else +3e) coalesce all non-leibniz operators and primed non-leibniz operators (postponed, see comment below). + +comment: +this will be done only after we integrate the SANY parser to TLAPM as we dont have the leibnizicy information right now in TLAPM.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>995</commentid> + <comment_count>3</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-08-02 14:45:08 +0000</bug_when> + <thetext>3d) primed atoms a: constant atoms -> a, else -> hash(a) (make sure hashing a variable name does not cause problems to backends due to naming conventions)</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>996</commentid> + <comment_count>4</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-08-14 12:15:55 +0000</bug_when> + <thetext>fixed except the comment. I will add another issue for dealing with that.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>320</bug_id> + + <creation_ts>2013-08-14 12:21:00 +0000</creation_ts> + <short_desc>TLAPM doesnt handle multiple except expressions correctly</short_desc> + <delta_ts>2013-08-14 12:21:21 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>major</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Tomer">tomer.libal</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>lamport</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>997</commentid> + <comment_count>0</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-08-14 12:21:21 +0000</bug_when> + <thetext>Leslie, Stephan, Damien, + + + +I have encountered an error in the TLAPS interpretation of the EXCEPT AT construct. Namely, when you have a construct with multiple exceptions, each with an @: + + + + [A EXCEPT ![x] = @+1, ![x] = @+2] + + + +Please refer to page 304 in Specifying Systems. A multi-EXCEPT is interpreted as a recursive structure of single-EXCEPTs: + + + + [[A EXCEPT ![x] = @+1] EXCEPT ![x] = @+2] + + + +And then to interpret the @ in the context of each single-EXCEPT you interpolate a local definition: + + + + LET B == + + LET @ == A[x] IN [A EXCEPT ![x] = @+1] + + IN + + LET @ == B[x] IN [B EXCEPT ![x] = @+2] + + + +In other words, each @ reflects whatever changes might have happened to its component by any previously-applied exception clauses. + + + +But that is not how TLAPS interprets the EXCEPT AT construct. TLAPS thinks that each @ refers to its component in the original function. + +I am using TLAPM version 1.1.5 (commit 31530) + + + +See for example the following module (ZIP attached): + + + +------------------------------- MODULE BugAt ------------------------------- + +EXTENDS Naturals, TLC, TLAPS + + + +VARIABLE A + + + +Init == A = [i \in {0} |-> 0] + +Next == IF A[0] = 0 THEN A' = [A EXCEPT ![0] = @+1, ![0] = @+2] ELSE A' = A + + + +Inv == + + /\ A \in [{0} -> Nat] + + /\ A[0] # 3 + + + +THEOREM ThmInit == Init => Inv BY SMT DEF Init, Inv + +THEOREM ThmNext == Inv /\ Next => Inv' BY SMT DEF Inv, Next + + + +============================================================================= + + + +TLAPS happily proves both of the theorems. Taken together, these theorems imply that Inv is an invariant of the specification. However, running the model checker quickly shows that the invariant is violated after the first action. + + + +-Tom Rodeheffer</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>321</bug_id> + + <creation_ts>2013-08-14 12:23:00 +0000</creation_ts> + <short_desc>go over all regressions tests in attached file</short_desc> + <delta_ts>2013-08-14 12:24:48 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Tomer">tomer.libal</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>lamport</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>998</commentid> + <comment_count>0</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-08-14 12:23:58 +0000</bug_when> + <thetext>and add them to the respective testing units: +- expression normalization (EXCEPT, etc.) -> unit tests +- soundness bugs -> soundness tests +- regression tests -> regression tests +- others -< try first unit tests</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>999</commentid> + <comment_count>1</comment_count> + <attachid>196</attachid> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-08-14 12:24:48 +0000</bug_when> + <thetext>Created attachment 196 +regerssiin tests</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>196</attachid> + <date>2013-08-14 12:24:00 +0000</date> + <delta_ts>2013-08-14 12:24:48 +0000</delta_ts> + <desc>regerssiin tests</desc> + <filename>all-tests.zip</filename> + <type>text/plain</type> + <size>79955</size> + <attacher name="Tomer">tomer.libal</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>322</bug_id> + + <creation_ts>2013-08-14 12:27:00 +0000</creation_ts> + <short_desc>Integrate the SANY parser to TLAPM</short_desc> + <delta_ts>2013-08-14 12:30:29 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + <blocked>323</blocked> + <everconfirmed>1</everconfirmed> + <reporter name="Tomer">tomer.libal</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>lamport</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>1000</commentid> + <comment_count>0</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-08-14 12:27:42 +0000</bug_when> + <thetext>- work has already started. Create a branch and add all changes made to the branch. + +TLAPM should use the java SANY parser in order to parser TLA specs. SANY already exports its data in an XML stream. + +TLAPM should call the SANY exporter jar correctly and parse the output XML.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>323</bug_id> + + <creation_ts>2013-08-14 12:30:00 +0000</creation_ts> + <short_desc>finish the Action frontend</short_desc> + <delta_ts>2013-08-14 12:30:29 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>All</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + <dependson>322</dependson> + + <everconfirmed>1</everconfirmed> + <reporter name="Tomer">tomer.libal</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>lamport</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>1001</commentid> + <comment_count>0</comment_count> + <who name="Tomer">tomer.libal</who> + <bug_when>2013-08-14 12:30:29 +0000</bug_when> + <thetext>all steps below were done except those with the comment + +1) remove prime handling from backends and add it to an action backend. +isabelle/zenon/SMT/etc. should report an errror if encountering primes +2) remove prime distribution from backends and add it to action backend. the +action backend is a default middle-backend to normalize formulas when we send +the obligation to a fol theorem prover. +3) in the action backend, we do as follows: +3a) expend definitions of UNCHANGED, [A]_v and <<A>>_v +3b) distribute primes over constant operators +3c) for a leibniz non-constant operator op, distribute primes over hash(op) (we +treat all non-constant operators right now, see comment below) +3d) primed atoms: constant atoms -> do nothing, else +3e) coalesce all non-leibniz operators and primed non-leibniz operators +(postponed, see comment below). + +comment: +this will be done only after we integrate the SANY parser to TLAPM as we dont +have the leibnizicy information right now in TLAPM.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>324</bug_id> + + <creation_ts>2013-09-05 22:19:00 +0000</creation_ts> + <short_desc>show uses fails to check inside labeled sub-expression</short_desc> + <delta_ts>2013-10-16 15:01:56 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLA+ Editor</component> + <version>1.4</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>FIXED</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>minor</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Tom Rodeheffer">tomr</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + <cc>simon</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>1002</commentid> + <comment_count>0</comment_count> + <attachid>197</attachid> + <who name="Tom Rodeheffer">tomr</who> + <bug_when>2013-09-05 22:19:54 +0000</bug_when> + <thetext>Created attachment 197 +TLA file illustrating the bug + +I am using version 1.4.7 of the TLA+ Toolbox. + +If I have a symbol whose only use is inside a labeled sub-expression, the +editor "Show Uses" command says that the symbol has no uses.</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>1003</commentid> + <comment_count>1</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2013-10-16 15:01:56 +0000</bug_when> + <thetext>This was caused by a simple bug and will be fixed in the next release. Thanks for the report.</thetext> + </long_desc> + + <attachment isobsolete="0" ispatch="0" isprivate="0"> + <attachid>197</attachid> + <date>2013-09-05 22:19:00 +0000</date> + <delta_ts>2013-09-05 22:19:54 +0000</delta_ts> + <desc>TLA file illustrating the bug</desc> + <filename>BugUseNv.tla</filename> + <type>application/octet-stream</type> + <size>355</size> + <attacher name="Tom Rodeheffer">tomr</attacher> + + + </attachment> + + + </bug> + <bug> + <bug_id>325</bug_id> + + <creation_ts>2013-11-19 20:13:00 +0000</creation_ts> + <short_desc>The Toolbox knows what file you REALLY want.</short_desc> + <delta_ts>2015-02-11 14:43:27 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>unspecified</version> + <rep_platform>All</rep_platform> + <op_sys>Windows 7</op_sys> + <bug_status>ASSIGNED</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P3</priority> + <bug_severity>normal</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Leslie Lamport">lamport</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>1005</commentid> + <comment_count>0</comment_count> + <who name="Leslie Lamport">lamport</who> + <bug_when>2013-11-19 20:13:13 +0000</bug_when> + <thetext>I have two versions of a spec file with the same name in two different directories. I opened one of them in the Toolbox. I closed it and told the Toolbox to Forget the spec. I then opened the other one. The Spec explorer said that the spec's root file was in the new (correct) directory. However, the file opened in the editor is the old (incorrect) one. + +Restarting the Toolbox didn't fix the problem. Re-installing the Toolbox would probably make it forget about the original file (although Eclipse works very hard to cache things, so I will not go out on a limb to say that it will). Short of that, opening the new file under a new spec name seemed to be the only way to solve the problem. + +I did the essentially the same thing on a different machine and this did not happen. I don't expect anyone to read the 10^7 lines of Eclipse code required to figure ot what happened. I am just filing this bug report to document the problem.</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>326</bug_id> + + <creation_ts>2015-04-15 11:03:00 +0000</creation_ts> + <short_desc>Toolbox crashes with a dump</short_desc> + <delta_ts>2015-04-15 11:29:43 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>Core Component</component> + <version>1.4.2</version> + <rep_platform>x86 64-bit</rep_platform> + <op_sys>Linux</op_sys> + <bug_status>RESOLVED</bug_status> + <resolution>WONTFIX</resolution> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P5</priority> + <bug_severity>blocker</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="RWShore">rwsmob</reporter> + <assigned_to name="Leslie Lamport">lamport</assigned_to> + <cc>bugzilla.tlaplus.net</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>1016</commentid> + <comment_count>0</comment_count> + <who name="RWShore">rwsmob</who> + <bug_when>2015-04-15 11:03:58 +0000</bug_when> + <thetext>UNAME: Linux sherpa-rws 3.13.0-46-generic #79-Ubuntu SMP Tue Mar 10 20:06:50 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux + +This is a desktop VM running in the Azure cloud. The "toolbox" command shows the splash screen and then a crash (hs_err*.log attached). STDOUT/ERR contains the following: + +$ ./toolbox +# +# A fatal error has been detected by the Java Runtime Environment: +# +# SIGSEGV (0xb) at pc=0x00007f6eb8e1c2a1, pid=6033, tid=140115494958848 +# +# JRE version: Java(TM) SE Runtime Environment (7.0_75-b13) (build 1.7.0_75-b13) +# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.75-b04 mixed mode linux-amd64 compressed oops) +# Problematic frame: +# C [libsoup-2.4.so.1+0x6c2a1] soup_session_feature_detach+0x11 +# +# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again +# +# An error report file with more information is saved as: +# /data/extra/rwshore/TLA/toolbox/hs_err_pid6033.log +# +# If you would like to submit a bug report, please visit: +# http://bugreport.sun.com/bugreport/crash.jsp +# The crash happened outside the Java Virtual Machine in native code. +# See problematic frame for where to report the bug. +# + + +NOTE: this is a headless VM (no GPU or "real" graphics adapter). I'm accessing it in graphics mode via an RDP connection, which actually runs VNC under the covers. Other IDEs, including J2EE Eclipse, NetBeans, and Android Studio run fine in this environment. However, given where Java reports the crash, I suspect that the lack of a graphics adapter is the underlying problem</thetext> + </long_desc><long_desc isprivate="0"> + <commentid>1017</commentid> + <comment_count>1</comment_count> + <who name="Markus Alexander Kuppe">bugzilla.tlaplus.net</who> + <bug_when>2015-04-15 11:29:43 +0000</bug_when> + <thetext>Hi, + +this is a known problem [1][2] with the Toolbox's underlying Eclipse foundation. Please either add "-Dorg.eclipse.swt.browser.DefaultType=mozilla" to toolbox.ini (at the end of the file) or use the (soon to be released) Toolbox nightly build [3]. + +I suggest to do use the nightly. + +Thanks +Markus + +[1] https://bugs.eclipse.org/bugs/show_bug.cgi?id=404776 +[2] https://bugs.eclipse.org/bugs/show_bug.cgi?id=405786 +[3] http://tla.msr-inria.inria.fr/tlatoolbox/ci/products/</thetext> + </long_desc> + + + + </bug> + <bug> + <bug_id>327</bug_id> + + <creation_ts>2015-08-25 13:56:00 +0000</creation_ts> + <short_desc>Incorrect assertion proved</short_desc> + <delta_ts>2015-08-25 13:56:34 +0000</delta_ts> + <reporter_accessible>1</reporter_accessible> + <cclist_accessible>1</cclist_accessible> + <classification_id>1</classification_id> + <classification>Unclassified</classification> + <product>TLA+ Toolbox</product> + <component>TLAPS</component> + <version>1.5</version> + <rep_platform>Other</rep_platform> + <op_sys>Windows</op_sys> + <bug_status>NEW</bug_status> + <resolution/> + + + <bug_file_loc/> + <status_whiteboard/> + <keywords/> + <priority>P5</priority> + <bug_severity>enhancement</bug_severity> + <target_milestone>---</target_milestone> + + + <everconfirmed>1</everconfirmed> + <reporter name="Saksham Chand">schand</reporter> + <assigned_to name="Tomer">tomer.libal</assigned_to> + <cc>lamport</cc> + <cf_target_version>---</cf_target_version> + + + + + + + + <comment_sort_order>oldest_to_newest</comment_sort_order> + <long_desc isprivate="0"> + <commentid>1020</commentid> + <comment_count>0</comment_count> + <who name="Saksham Chand">schand</who> + <bug_when>2015-08-25 13:56:34 +0000</bug_when> + <thetext>TLA can verify: + +<4>21. \A x, y \in Nat \cup {-1} : x > y => x..y = {} + +However it also proves the following: + +Ballots == Nat +<4> DEFINE mm == [type |-> "1b", bal |-> m.bal, voted |-> acceptorVoted[a], from |-> a] +<4>9. \A s \in Slots : MaxVotedBallotInSlot(mm.voted, s)+1 \in Ballots +. +. +. +<4>13. \A s \in Slots, c \in Ballots : c \in MaxVotedBallotInSlot(mm.voted, s)+1..mm.bal-1 => + c > MaxVotedBallotInSlot(mm.voted, s) + <5> SUFFICES ASSUME NEW s \in Slots, NEW c \in Ballots, + c \in MaxVotedBallotInSlot(mm.voted, s)+1..mm.bal-1 + PROVE c > MaxVotedBallotInSlot(mm.voted, s) + OBVIOUS + <5>1. CASE MaxVotedBallotInSlot(mm.voted, s)+1 > mm.bal-1 + <6>0. mm.bal \in Ballots + <6>1. MaxVotedBallotInSlot(mm.voted, s)+1..mm.bal-1 # {} + BY <5>1, <6>0, <4>9, <4>21 + <6> QED BY <5>1 + <5>2. CASE MaxVotedBallotInSlot(mm.voted, s)+1 = mm.bal-1 + <6>1. c = MaxVotedBallotInSlot(mm.voted, s)+1 + BY <4>9, <5>2 + <6> QED BY <6>1, <4>11, <4>7 + <5>3. CASE MaxVotedBallotInSlot(mm.voted, s)+1 < mm.bal-1 + <5> QED + BY <5>1, <5>2, <5>3 + +And <6>1 passes through TLAPS. This I don't understand. PFA full proof.</thetext> + </long_desc> + + + + </bug> + +</bugzilla> \ No newline at end of file diff --git a/general/docs/contributions.md b/general/docs/contributions.md new file mode 100644 index 0000000000000000000000000000000000000000..56831eefe1b0a8d0d29927aa442acf45e4549351 --- /dev/null +++ b/general/docs/contributions.md @@ -0,0 +1,39 @@ +List of projects to extend/improve TLA+, TLC, TLAPS or the Toolbox +================================================================== + +Please also consult the [issues tracker](https://github.com/tlaplus/tlaplus/issues) if you want to get started with contributing to TLA+. The items listed here likely fall in the range of man-months. + +TLC model checker +----------------- +#### Concurrent search for strongly connected components (difficulty: high) (skills: Java, TLA+) +One part of TLC's procedure to check liveness properties, is to find the liveness graph's [strongly connected components](https://en.wikipedia.org/wiki/Strongly_connected_component) (SCC). TLC's implementation uses [Tarjan's](https://en.wikipedia.org/wiki/Strongly_connected_component) canonical solution to this problem. Tarjan's algorithm is a sequential algorithm that runs in linear time. While the time complexity is acceptable, its sequential nature causes TLC's liveness checking not to scale. Recently, concurrent variants of the algorithm have been proposed and [studied in the scope of other model checkers](https://wwwhome.ewi.utwente.nl/~laarman/papers/scc_ppopp_2016.pdf). This work will require writing a TLA+ specification and ideally a formal proof of the algorithm's correctness. + +#### Liveness checking under symmetry (difficulty: high) (skills: Java, TLA+) +[Symmetry reduction](http://www.cs.cmu.edu/~emc/papers/Conference%20Papers/Symmetry%20Reductions%20in%20Model%20Checking.pdf) techniques can significantly reduce the size of the state graph generated and checked by TLC. For safety checking, symmetry reduction is well studied and has long been implemented in TLC. TLC's liveness checking procedure however, can fail to find property violations if symmetry is declared. Yet, there is no reason why symmetry reduction cannot be applied to liveness checking. This work will require writing a TLA+ specification and ideally a formal proof of the algorithm's correctness. + +#### TLC error reporting 2.0 (difficulty: moderate) (skills: Java) +TLC can only check a subset of TLA+ specifications. This subset is left implicit and a user might use language constructs and/or models that cause TLC to fail. Not infrequently, it comes up with the very helpful report “null”. To lower to barrier to learning TLA+, TLC error reporting has to better guide a user. + +#### Improved runtime API for TLC (difficulty: moderate) (skills: Java) +The TLC process can be long running. It possibly runs for days, weeks or months. Today, the Toolbox interfaces with the TLC process via the command line. The Toolbox parses TLC's output and visualizes it in its UI. This is a brittle and read-only interface. Instead, communication should be done via a bidirectional network API such as RMI, JMX or REST. A network interface would even allow users to inspect and control remotely running TLC instances, e.g. those running in the cloud started through [cloud-based distributed TLC](https://tla.msr-inria.inria.fr/tlatoolbox/doc/cloudtlc/index.html). A network interface is likely to require some sort of persistence mechanism to store model runs. Persistence of model runs is trivially possible with today's text based solution. Desirable user stories are: + - Pause/Resume TLC + - Reduce/Increase number workers + - Trigger checkpoints and gracefully terminate + - Trigger liveness checking + - Inspection hatch to see states currently being generated + - Metrics overall and for fingerprint set, state queue, trace + - ... + + +TLAPS +----- +TBD + +TLA Toolbox +----------- +#### Port Toolbox to e4 (difficulty: easy) (skills: Java, Eclipse) +[e4](http://www.vogella.com/tutorials/EclipseRCP/article.html) represents the newest programming model for Eclipse RCP applications. e4 provides higher flexibility while simultaneously reducing boilerplate code. The TLA Toolbox has been implemented on top of Eclipse RCP 3.x and thus is more complex than it has to. + +#### Package Toolbox for Debian and Fedora based Linux distributions (difficulty: easy) (skills: Eclipse, Linux) +The current Toolbox installation requires Linux users to download a zip file, to extract it and manually integrate the Toolbox into the System. Packaging the Toolbox for Debian (.deb) and Fedora (.rpm) based Linux distributions would not only simplify the installation procedure, it would also create more visible for TLA+ within the Linux community. + diff --git a/general/docs/microsoft-release.txt b/general/docs/microsoft-release.txt index 8a3ef836bc68e028c6d9080bd98546e8e0769e75..24c9dbdd779a28d6a018f0a34f636cfba3e44520 100644 --- a/general/docs/microsoft-release.txt +++ b/general/docs/microsoft-release.txt @@ -52,8 +52,8 @@ Step 1: Get the right version numbers to appear: -- In org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/view/ToolboxWelcomeView.java Update date and version --- In org.lamport.tla.toolbox.product.product/pom.xml around line 73 change the archiveFileName - XML tag to have the correct version number. This tag defines how the zip files will be named. +-- In org.lamport.tla.toolbox.product.product/pom.xml around line 22 change the property + product.version to the product version. -- In org.lamport.tla.toolbox.doc/META-INF/MANIFEST.MF, update the version (major.minor.micro). But do _not_ replace the last (".qualifier") segment. It is automatically replaced by the build. diff --git a/general/docs/roadmap.txt b/general/docs/roadmap.txt index a8d0c791bee6899e5dabc57d2119779092ebc3dd..d1695c2424fc7fdd3447e362a77d06cf4382e5d3 100644 --- a/general/docs/roadmap.txt +++ b/general/docs/roadmap.txt @@ -1,6 +1,7 @@ To Fix Eclipse if it can't find a bunch of imported classes: Try re-setting the target platform. To do so, open the - TLAToolbox.target platform and click the "Set as Target Platform" + org.lamport.tla.toolbox.product.product/TLAToolbox.target file + and click the "Set as Target Platform" label in the right upper corner. After a while (Eclipse might download stuff), it should re-compile your workspace. If that doesn't work, select all the URLs shown in that window diff --git a/general/ide/README.md b/general/ide/README.md new file mode 100644 index 0000000000000000000000000000000000000000..04e6c3f1021a90ad59e7ab845dfaed234aed777b --- /dev/null +++ b/general/ide/README.md @@ -0,0 +1,26 @@ +Eclipse Oomph is a tool to simplify and automate the setup of Eclipse development environments. In this case, it creates a development environment for the TLA+Tools (TLC, SANY, ...) and the Eclipse-based TLA+Toolbox. In order to use the TLA.setup script in this folder, one has to: + +[A screencast is available that captures the written instructions below.](https://vimeo.com/190224035) + +0. Requires a recent - at the time of writing this is 1.8 - JDK (Java Development Environment) +1. Install the Oomph Eclipse installer from https://wiki.eclipse.org/Eclipse_Installer +2. Start the downloaded Oomph installer +3. Switch to "Advanced Mode" by clicking the button in the right upper corner depicted with three horizontal lines +4. Select "Eclipse Platform" on the Product list (expand "Eclipse.org" node) + 1. Choose "Neon" as the product version at the bottom  +5. On the next screen, expand "Github Project" in the tree and select the check-box left to "TLA+" + 1. Verify that "TLA+" shows up under "Project" at the bottom table and that the "Master" stream is selected  +6. On the next page, select whether to use anonymous Github access (read-only) from the "TLA+ Github Repository" dropdown list  + 1. Most users will want to chose read-only access. + 2. If you know that you have write access to the tlaplus/tlaplus Github repository, make sure you: + 1. [Generate an SSH key](https://help.github.com/articles/generating-an-ssh-key/) + 2. [Uploaded your public SSH key (id_rsa.pub or id_dsa.pub) to Github](https://github.com/settings/keys) (Settings > SSH and GPG keys > New SSH key) +7. Hit Finish and have a coffee or tea (though you might have to accept a license dialog...) +8. After a few minutes, the Eclipse IDE will start up. At this point, the workspace will be empty. Click the spinning arrows to open the progress dialog.  +9. Check the progress dialog for any errors.  + 1. If you opted for write access in 6. and the dialog shows an "auth failure" when it tries to clone the git repository, it is likely that Eclipse uses the wrong SSH key. In Eclipse, go to Window > Preferences > General > Network Connections > SSH2 and make sure the path in "SSH2 Home" is correct and restart the setup task via Windows > Perform Setup Task. +  +10. You are now set to start the TLAToolbox from within Eclipse: + 1. In Eclipse, open the file org.lamport.tla.toolbox.product.product/org.lamport.tla.toolbox.product.product.product + 2. Hit on the green launch arrow in the right upper corner of the Product editor.  + diff --git a/general/ide/TLA.setup b/general/ide/TLA.setup new file mode 100644 index 0000000000000000000000000000000000000000..4c867312cc2fe42dc56e4580fd43472727620ed0 --- /dev/null +++ b/general/ide/TLA.setup @@ -0,0 +1,179 @@ +<?xml version="1.0" encoding="UTF-8"?> +<setup:Project + xmi:version="2.0" + xmlns:xmi="http://www.omg.org/XMI" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:git="http://www.eclipse.org/oomph/setup/git/1.0" + xmlns:jdt="http://www.eclipse.org/oomph/setup/jdt/1.0" + xmlns:pde="http://www.eclipse.org/oomph/setup/pde/1.0" + xmlns:predicates="http://www.eclipse.org/oomph/predicates/1.0" + xmlns:projects="http://www.eclipse.org/oomph/setup/projects/1.0" + xmlns:setup="http://www.eclipse.org/oomph/setup/1.0" + xmlns:setup.p2="http://www.eclipse.org/oomph/setup/p2/1.0" + xmlns:setup.workingsets="http://www.eclipse.org/oomph/setup/workingsets/1.0" + xmlns:workingsets="http://www.eclipse.org/oomph/workingsets/1.0" + xsi:schemaLocation="http://www.eclipse.org/oomph/setup/git/1.0 http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/Git.ecore http://www.eclipse.org/oomph/setup/jdt/1.0 http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/JDT.ecore http://www.eclipse.org/oomph/setup/pde/1.0 http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/PDE.ecore http://www.eclipse.org/oomph/predicates/1.0 http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/Predicates.ecore http://www.eclipse.org/oomph/setup/projects/1.0 http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/Projects.ecore http://www.eclipse.org/oomph/setup/workingsets/1.0 http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/SetupWorkingSets.ecore http://www.eclipse.org/oomph/workingsets/1.0 http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/models/WorkingSets.ecore" + name="tlaplus" + label="TLA+"> + <setupTask + xsi:type="jdt:JRETask" + version="JavaSE-1.7" + location="${jre.location-1.7}"> + <description>Define the JRE needed to compile and run the Java projects of ${scope.project.label}</description> + </setupTask> + <setupTask + xsi:type="setup:EclipseIniTask" + option="-Xmx" + value="1024m" + vm="true"> + <description>Set the heap space needed to work with the projects of ${scope.project.label}</description> + </setupTask> + <setupTask + xsi:type="setup:EclipseIniTask" + option="-cssTheme" + value="none"> + <description>Turn off CSS styling</description> + </setupTask> + <setupTask + xsi:type="setup:EclipseIniTask" + excludedTriggers="STARTUP" + option="-perspective" + value="org.eclipse.jdt.ui.JavaPerspective"> + <description>Set the initial perspective to be Java instead of Resources</description> + </setupTask> + <setupTask + xsi:type="setup:ResourceCreationTask" + excludedTriggers="STARTUP MANUAL" + content="<?xml version="1.0" encoding="UTF-8"?>
<section name="Workbench">
	<section name="org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart">
		<item value="true" key="group_libraries"/>
		<item value="false" key="linkWithEditor"/>
		<item value="2" key="layout"/>
		<item value="2" key="rootMode"/>
		<item value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#x0D;&#x0A;&lt;packageExplorer configured=&quot;true&quot; group_libraries=&quot;1&quot; layout=&quot;2&quot; linkWithEditor=&quot;0&quot; rootMode=&quot;2&quot; sortWorkingSets=&quot;false&quot; workingSetName=&quot;&quot;&gt;&#x0D;&#x0A;&lt;localWorkingSetManager&gt;&#x0D;&#x0A;&lt;workingSet editPageId=&quot;org.eclipse.jdt.internal.ui.OthersWorkingSet&quot; factoryID=&quot;org.eclipse.ui.internal.WorkingSetFactory&quot; id=&quot;1382792884467_1&quot; label=&quot;Other Projects&quot; name=&quot;Other Projects&quot;/&gt;&#x0D;&#x0A;&lt;/localWorkingSetManager&gt;&#x0D;&#x0A;&lt;activeWorkingSet workingSetName=&quot;Other Projects&quot;/&gt;&#x0D;&#x0A;&lt;allWorkingSets workingSetName=&quot;Other Projects&quot;/&gt;&#x0D;&#x0A;&lt;/packageExplorer&gt;" key="memento"/>
	</section>
</section>
" + targetURL="${workspace.location|uri}/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml" + encoding="UTF-8"> + <description>Initialize JDT's package explorer to show working sets as its root objects</description> + </setupTask> + <setupTask + xsi:type="setup:VariableTask" + name="eclipse.target.platform" + defaultValue="Mars" + storageURI="scope://Workspace"/> + <setupTask + xsi:type="setup.p2:P2Task"> + <requirement + name="org.eclipse.swtbot.eclipse.feature.group" + filter=""/> + <requirement + name="org.eclipse.swtbot.feature.group"/> + <requirement + name="org.eclipse.ajdt.feature.group"/> + <requirement + name="org.eclipse.m2e.feature.feature.group"/> + <requirement + name="org.eclipse.pde.feature.group"/> + <requirement + name="org.eclipse.egit.feature.group"/> + <requirement + name="com.abstratt.eclipsegraphviz.feature.feature.group"/> + <repository + url="http://download.eclipse.org/technology/swtbot/releases/latest/"/> + <repository + url="http://download.eclipse.org/tools/ajdt/45/dev/update/"/> + <repository + url="http://download.eclipse.org/technology/m2e/releases/"/> + <repository + url="jar:http://repository-textuml.forge.cloudbees.com/snapshot/com/abstratt/mdd/com.abstratt.mdd.oss.repository/2.1/com.abstratt.mdd.oss.repository-2.1.zip!/"/> + <description>Install the tools needed in the IDE to work with the source code for ${scope.project.label}</description> + </setupTask> + <setupTask + xsi:type="git:GitCloneTask" + id="git.clone" + remoteURI="tlaplus/tlaplus"> + <annotation + source="http://www.eclipse.org/oomph/setup/InducedChoices"> + <detail + key="inherit"> + <value>github.remoteURIs</value> + </detail> + <detail + key="label"> + <value>${scope.project.label} Github repository</value> + </detail> + <detail + key="target"> + <value>remoteURI</value> + </detail> + </annotation> + <description>${scope.project.label}</description> + </setupTask> + <setupTask + xsi:type="projects:ProjectsImportTask"> + <sourceLocator + rootFolder="${git.clone.location}"/> + </setupTask> + <setupTask + xsi:type="pde:TargetPlatformTask" + name="TLA+ Toolbox"> + <description>This target platform contains all dependencies needed by tlatools and TLA+Toolbox</description> + </setupTask> + <setupTask + xsi:type="setup.workingsets:WorkingSetTask"> + <workingSet + name="TLA+ToolboxFeatures"> + <predicate + xsi:type="predicates:OrPredicate"> + <operand + xsi:type="predicates:AndPredicate"> + <operand + xsi:type="predicates:NamePredicate" + pattern="org.lamport.*feature.*"/> + <operand + xsi:type="predicates:NaturePredicate" + nature="org.eclipse.pde.FeatureNature"/> + </operand> + <operand + xsi:type="predicates:NamePredicate" + pattern="org.lamport.tla.toolbox.p2repository"/> + </predicate> + </workingSet> + <workingSet + name="TLA+ToolboxTests"> + <predicate + xsi:type="predicates:NamePredicate" + pattern="org.lamport.tla.toolbox.*test.*"/> + </workingSet> + <workingSet + name="TLA+Toolbox"> + <predicate + xsi:type="predicates:AndPredicate"> + <operand + xsi:type="predicates:NamePredicate" + pattern="org.lamport.tla.toolbox.*"/> + <operand + xsi:type="workingsets:ExclusionPredicate" + excludedWorkingSet="//@setupTasks.10/@workingSets.0 //@setupTasks.10/@workingSets.1"/> + </predicate> + </workingSet> + <workingSet + name="TLA+Tools"> + <predicate + xsi:type="predicates:OrPredicate"> + <operand + xsi:type="predicates:NamePredicate" + pattern="tlatools"/> + <operand + xsi:type="predicates:NamePredicate" + pattern="general"/> + <operand + xsi:type="predicates:NamePredicate" + pattern="examples"/> + </predicate> + </workingSet> + <description>The dynamic working sets for ${scope.project.label}</description> + </setupTask> + <stream name="master" + label="Master"/> + <logicalProjectContainer + xsi:type="setup:ProjectCatalog" + href="index:/org.eclipse.setup#//@projectCatalogs[name='com.github']"/> + <description>TLA+ provides the tlatools and the TLA+Toolbox</description> + <setup:PreferenceTask + key="/instance/org.eclipse.ui/defaultPerspectiveId" + value="org.eclipse.jdt.ui.JavaPerspective"/> +</setup:Project> diff --git a/general/ide/images/00_PlatformSelection.png b/general/ide/images/00_PlatformSelection.png new file mode 100644 index 0000000000000000000000000000000000000000..82994e4a73b4134112ffd33c7b5ff198d508955d Binary files /dev/null and b/general/ide/images/00_PlatformSelection.png differ diff --git a/general/ide/images/01_ProjectSelection.png b/general/ide/images/01_ProjectSelection.png new file mode 100644 index 0000000000000000000000000000000000000000..0e4e802591891c40636cc6cc08dcadaf5bd62a25 Binary files /dev/null and b/general/ide/images/01_ProjectSelection.png differ diff --git a/general/ide/images/02_Variables.png b/general/ide/images/02_Variables.png new file mode 100644 index 0000000000000000000000000000000000000000..02de7998046a10f699a158516a3d679266776f1b Binary files /dev/null and b/general/ide/images/02_Variables.png differ diff --git a/general/ide/images/03_Status.png b/general/ide/images/03_Status.png new file mode 100644 index 0000000000000000000000000000000000000000..aa8235e372e49e47190a17e81dce80138953d366 Binary files /dev/null and b/general/ide/images/03_Status.png differ diff --git a/general/ide/images/04_Progress.png b/general/ide/images/04_Progress.png new file mode 100644 index 0000000000000000000000000000000000000000..060c1b13292056072d76e14343553743a2c0eaf8 Binary files /dev/null and b/general/ide/images/04_Progress.png differ diff --git a/general/ide/images/05_SSHKey.png b/general/ide/images/05_SSHKey.png new file mode 100644 index 0000000000000000000000000000000000000000..700ce09213146abdbd53cfb34b2cc87d102b2443 Binary files /dev/null and b/general/ide/images/05_SSHKey.png differ diff --git a/general/ide/images/06_Toolbox.png b/general/ide/images/06_Toolbox.png new file mode 100644 index 0000000000000000000000000000000000000000..eb0451538fe76c003917538a42621781154262c4 Binary files /dev/null and b/general/ide/images/06_Toolbox.png differ diff --git a/general/performance/Grid5k.tla b/general/performance/Grid5k.tla index 3ed7a1931a62b20b310cd30df70086a5b6925b42..ec2532584f1cb21a3b990c049cfa4d8a6c7ee357 100644 --- a/general/performance/Grid5k.tla +++ b/general/performance/Grid5k.tla @@ -1,27 +1,32 @@ --------------------------------- MODULE Grid5k ------------------------------- +-------------------------------- MODULE Grid5k -------------------------------- \* This spec executes \* variable x = [i \in 1..N |-> 0]; \* while (TRUE) { \* with (i \in 1..N) { \* x[i] := (x[i] + 1) % K ; -\* await SUBSET 1..L \subseteq SUBSET 1..L +\* \* SUBSET 1..L causes TLC to generate the power set of the set 1..L. +\* \* For each set in the power set, TLC evaluates if the set's +\* \* cardinality is L... KaBOOM! +\* await \E s \in SUBSET (1..L): Cardinality(s) = L \* } \* } \* Thus, - N is the number of states computed for each evaluation of the \* next-state action \* - K^N is the total number of distinct states \* - The time to compute a single state is asymptotically -\* proportional to 2^L +\* proportional to 2^L. +\* - C defines the number of initial states. Let C=n +\* then the state graph has n isomorphic disjunct subgraphs. EXTENDS Integers, FiniteSets -CONSTANTS N, K, L -VARIABLE x +CONSTANTS N, K, L, C +VARIABLE x, y -Init == x = [i \in 1..N |-> 0] +Init == /\ x = [i \in 1..N |-> 0] + /\ y \in 1..C -Next == - \E i \in 1..N : /\ x' = [x EXCEPT ![i] = (@ + 1) % K] - /\ SUBSET (1..L) \subseteq SUBSET (1..L) +Next == /\ UNCHANGED y + /\ \E i \in 1..N : /\ x' = [x EXCEPT ![i] = (@ + 1) % K] + /\ \E s \in SUBSET (1..L): Cardinality(s) = L ============================================================================= - diff --git a/general/performance/MC.cfg b/general/performance/MC.cfg deleted file mode 100644 index 5ec6a4a133ffab0dee98ab2df377774826ef2778..0000000000000000000000000000000000000000 --- a/general/performance/MC.cfg +++ /dev/null @@ -1,16 +0,0 @@ -\* CONSTANT definitions -CONSTANT -K <- const_132504183736117000 -\* CONSTANT definitions -CONSTANT -L <- const_132504183737118000 -\* CONSTANT definitions -CONSTANT -N <- const_132504183738119000 -\* INIT definition -INIT -init_132504183739120000 -\* NEXT definition -NEXT -next_132504183740121000 - diff --git a/general/performance/MC.tla b/general/performance/MC.tla deleted file mode 100644 index 6470c62dadc88b567ba959968abac319bbfcf54c..0000000000000000000000000000000000000000 --- a/general/performance/MC.tla +++ /dev/null @@ -1,30 +0,0 @@ ----- MODULE MC ---- -EXTENDS Grid5k, TLC - -\* CONSTANT definitions @modelParameterConstants:0K -const_132504183736117000 == -2 ----- - -\* CONSTANT definitions @modelParameterConstants:1L -const_132504183737118000 == -1 ----- - -\* CONSTANT definitions @modelParameterConstants:2N -const_132504183738119000 == -21 ----- - -\* INIT definition @modelBehaviorInit:0 -init_132504183739120000 == -Init ----- -\* NEXT definition @modelBehaviorNext:0 -next_132504183740121000 == -Next ----- -============================================================================= -\* Modification History -\* Created Wed Dec 28 03:10:37 UTC 2011 by kuppe - diff --git a/general/performance/measure.sh b/general/performance/measure.sh new file mode 100755 index 0000000000000000000000000000000000000000..c2c1b9c50d003037277c0b268fcac6928c839e08 --- /dev/null +++ b/general/performance/measure.sh @@ -0,0 +1,72 @@ +#!/bin/bash + +SPEC="Grid5k" + +# Check Grid5k.tla for semantical meaning +K=${1-"04"} +L=${2-"01"} +N=${3-"10"} +C=${4-"04"} +MODEL='k'$K'_l'$L'_n'$N'_c'$C + +# Performance related properties +WORKERS=${5-"$(nproc --all)"} +HEAP_MEM=${6-"128G"} +DIRECT_MEM=${7-"128g"} +FPSET_IMPL="tlc2.tool.fp.OffHeapDiskFPSet" + +# TLC version +REV=$(git rev-parse HEAD) + +# measure.sh's fs path +#DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +# TLC's code location +TLATOOLS_HOME=../../tlatools/ + +# Trap interrupts and exit instead of continuing the for loop below +trap "echo Exited!; exit;" SIGINT SIGTERM + +###################################### + +# Generate TLC's config on-the-fly +cat > $MODEL.cfg <<EOF +CONSTANT K = $K +CONSTANT L = $L +CONSTANT N = $N +CONSTANT C = $C +INIT Init +NEXT Next +EOF + +# Repeat N times to even out noise... +for i in {1..3}; do + # For varying worker (core) counts... + for ((w=$WORKERS; w > 0;w=w/2)); do + + # Output/log files + JFR_OUTPUT_FILE=$REV'_w'$w'_i'$i.jfr + TIME_OUTPUT_FILE=$REV-$w.txt + TLC_OUTPUT_FILE=$REV-$i-$w-tlc.txt + + /usr/bin/time --append --output=$TIME_OUTPUT_FILE \ + java -XX:+UnlockCommercialFeatures \ + -XX:+FlightRecorder \ + -XX:FlightRecorderOptions=defaultrecording=true,disk=true,repository=/tmp,dumponexit=true,dumponexitpath=$JFR_OUTPUT_FILE,maxage=12h,settings=$TLATOOLS_HOME/jfr/tlc.jfc \ + -javaagent:$TLATOOLS_HOME/jfr/jmx2jfr.jar=$TLATOOLS_HOME/jfr/jmxprobes.xml \ + -Xmx$HEAP_MEM -Xms$HEAP_MEM \ + -XX:MaxDirectMemorySize=$DIRECT_MEM \ + -Dtlc2.tool.fp.FPSet.impl=$FPSET_IMPL \ + -cp $TLATOOLS_HOME/class:$TLATOOLS_HOME/lib/* \ + -DspecName=$SPEC \ + -DmodelName=$MODEL \ + tlc2.TLC -deadlock -checkpoint 99999 -workers $w -config $MODEL $SPEC 2>&1 | tee $TLC_OUTPUT_FILE; + # newer TLC versions support "-checkpoint 0", but 99999 suffices. + + # cleanup left-over states/ directory to free disk space + rm -rf states/ + + # Notify user of completion + cat $TLC_OUTPUT_FILE | mail -s "Model: $MODEL Workers: $w" $(id -u -n) + done +done diff --git a/org.lamport.tla.toolbox.jnlp/keystore b/keystore similarity index 100% rename from org.lamport.tla.toolbox.jnlp/keystore rename to keystore diff --git a/org.lamport.tla.toolbox.doc/META-INF/MANIFEST.MF b/org.lamport.tla.toolbox.doc/META-INF/MANIFEST.MF index caf06fea8e722ae7f050fd461a68358ebfc8b67f..f1b0e4ee3f7d789ff6067c82e85e8c83666b2be0 100644 --- a/org.lamport.tla.toolbox.doc/META-INF/MANIFEST.MF +++ b/org.lamport.tla.toolbox.doc/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: TLA+ Toolbox Help Bundle-SymbolicName: org.lamport.tla.toolbox.doc; singleton:=true -Bundle-Version: 1.5.2.qualifier +Bundle-Version: 1.5.3.qualifier Bundle-RequiredExecutionEnvironment: J2SE-1.4 Bundle-Vendor: Simon Zambrovski, Leslie Lamport Bundle-ActivationPolicy: lazy diff --git a/org.lamport.tla.toolbox.doc/html/model/distributed-mode.html b/org.lamport.tla.toolbox.doc/html/model/distributed-mode.html index 45bd5f20ba7c476e47f66dfeda30f8ed89bd058d..bff2c62754fe0e44491bb09b529c48ddf4a8bf59 100644 --- a/org.lamport.tla.toolbox.doc/html/model/distributed-mode.html +++ b/org.lamport.tla.toolbox.doc/html/model/distributed-mode.html @@ -16,7 +16,8 @@ <pre> Contents - <a href="#how-it-works">How Distributed TLC Works</a> + <a href="#different-modes">Different modes of Distributed TLC</a> + <a href="#how-it-works">How Distributed TLC in <i>Ad Hoc</i> Mode Works</a> <a href="#running-master">Running the Master</a> <a href="#running-workers">Running the Slave Computers</a> <a href="#limitations">Limitations of Distributed Mode </a> @@ -24,7 +25,19 @@ Contents </pre> -<a name="how-it-works"></a><h2>How Distributed TLC Works</h2> +<a name="different-modes"></a><h2>Different modes of Distributed TLC</h2> + +The TLA+ Toolbox has support to run distributed TLC in different modes (<i>ad hoc</i>, <i>Azure</i>, <i>aws-ec2</i>), which can be +generalized into <i>ad hoc</i> mode and <i>Cloud Distributed TLC</i>. The former (ad hoc) runs +TLC on a set of your own computers. It is up to you to install all necessary +prerequisites (<a href="#how-it-works">see below</a>) on each of the computers. The latter mode (Cloud Distributed TLC) +on the other hand, moves Distributed TLC into the <a href="https://en.wikipedia.org/wiki/Cloud_computing">cloud</a> +and thus can automate all the install steps of ad hoc mode for you. It comes at the price service charges by the cloud compute providers. +For Cloud Distributed TLC, please <a href="../cloudtlc/index.html">switch over to its dedicated documentation</a> + +<hr> + +<a name="how-it-works"></a><h2>How Distributed TLC in <i>Ad Hoc</i> Mode Works</h2> TLC has a collection of worker threads that do the actual model checking--that is, they compute the graph of reachable states @@ -144,13 +157,6 @@ and the Toolbox's installation directory in /opt, the command line will look lik --> </p> -<div align="center"> -<div align="center" style="width:500px;height:85px;border:1px solid #000;"> -If you need to check liveness properties (see <a href="#limitations">Limitations</a> below) or cannot -leave the master computer running for days or weeks, you can switch to the new <a href="../cloudtlc/index.html">cloud-based distributed TLC</a> Toolbox feature. -</div> -</div> - <a name="running-workers"></a><h2>Running the Slave Computers</h2> <p> diff --git a/org.lamport.tla.toolbox.doc/html/model/model-values.html b/org.lamport.tla.toolbox.doc/html/model/model-values.html index b12cacbee2568d413facb061d51ea1d8c3387358..46323a970cce566ce8ced051daf294439236d444 100644 --- a/org.lamport.tla.toolbox.doc/html/model/model-values.html +++ b/org.lamport.tla.toolbox.doc/html/model/model-values.html @@ -169,10 +169,39 @@ typed model values with different types. TLC does not check if a set you declare to be a symmetry set really is one. If you declare a set to be a symmetry set and it isn't, then TLC can fail to find an error -that it otherwise would find. Also, beware that using symmetry sets can -cause TLC to make mistakes when checking liveness properties. Do not -use symmetry sets when checking liveness unless you know what you're -doing. +that it otherwise would find. + +An expression is <i>symmetric</i> for a set <code>S</code> if and only if +interchanging any two values of <code>S</code> does not +change the value of the expression. The expression + <code>{{v1, v2}, {v1, v3}, {v2, v3}}</code> +is symmetric for the set + <code>{v1, v2, v3}</code> -- +for example, interchanging <code>v1</code> and <code>v3</code> +in this expression produces + <code>{{v3, v2}, {v3, v1}, {v2, v1}}</code>, +which is equal to the original expression. + +You should declare a set <code>S</code> of model values to be a symmetry set only if +the specification and all properties you are checking are symmetric for <code>S</code> +after the substitutions for constants and defined operators specified by the model +are made. + +For example, you should not declare + <code>{v1, v2, v3}</code> +to be a symmetry set if the model substitutes <code>v1</code> for some constant. + +The only TLA+ operator that can produce a non-symmetric expression when applied to +a symmetric expression is <code>CHOOSE</code>. For example, the expression + <pre> CHOOSE x \in {v1, v2, v3} : TRUE </pre> +is not symmetric for <code>{v1, v2, v3}</code>. +</p> + + +<p> +Symmetry sets should not be used when checking liveness properties. +Doing so can make TLC fail to find errors, or to report nonexistent errors. + </p> <!-- <p> diff --git a/org.lamport.tla.toolbox.doc/html/spec/opening-closing.html b/org.lamport.tla.toolbox.doc/html/spec/opening-closing.html index 331575ee20e4d3dcf2ac4494fd7970c524c5041d..6693b20cf94390978c9b348aeea345e7953de8f9 100644 --- a/org.lamport.tla.toolbox.doc/html/spec/opening-closing.html +++ b/org.lamport.tla.toolbox.doc/html/spec/opening-closing.html @@ -1,220 +1,224 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> -<!-- This is file org.lamport.tla.toobox.doc/html/spec/opening-closing.html --> -<html> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> - <LINK href="../style.css" rel="stylesheet" type="text/css"> - -<title>Manipulating Specs</title> -</head> -<!-- a comment --> - -<body> -<h1>Manipulating Specs</h1> -<p> - -A specification has a <em>name</em> and a <em>root module</em>, which -is in a file whose extension is <code>.tla</code>. - -You will probably give your spec the same name as its root module, but -you need not. - -Two different specs cannot have the same name.� Here are the Toolbox's -spec operations. -</p> - -<p> -<b>Warning:</b> if you want to use the <a href="../model/model.html">model checker</a>, -your spec must not contain a module named� <code>MC</code>�. -</p> -<h3>Create</h3> - -You can create a new spec with the� <samp>File/Open Spec/Add New -Spec...�</samp> menu item. - -It raises a dialog asking you to choose the root file (which must have -the extension <code>.tla</code>) and the specification name. - - -<h3>Open</h3> - -You can open an existing spec by choosing it from the� <samp>File/Open -Spec</samp> menu. � - -You can also use the -<a name="spec-explorer"><em>Spec Explorer</em><a>, which is opened either -from the <samp>File</samp> menu or by clicking on the <IMG -SRC="spec-explorer-icon.gif" Align="bottom"/> icon on the left side of -the Toolbox, near the top. - -Right-click on the desired spec and select -<samp>Open</samp>. � - -If you open a spec when another spec is open, the other spec will -automatically be closed. - - -<h3>Close</h3> - -You can close a spec with the� <samp>File/Close Spec</samp>� menu. - -This returns you to the Welcome View. � - -However, remember that the Toolbox will close the current spec if you -open another one. - -<h3>Rename, Forget, and Delete</h3> - -Forgetting a spec means that the Toolbox removes it from the -Spec Explorer and the list of specs presented by the -<samp>File/Open Spec</samp> menu. - -If you later re-open a spec with the same name in the same folder, then -you will be able to import to previous spec's models. - -Deleting a spec means forgetting it and deleting its models, but not -any of its modules. - -Renaming a spec changes the spec's name, but not the name of its root -module. - - -You can rename, forget, or delete or rename an existing spec by opening the Spec Explorer -(described above), right-clicking on the desired spec, and making the -appropriate choice. - -<p> - -Note: here's how to change the name of both a spec and its root module from -<code>Foo</code> to <code>Bar</code>: Rename spec -<code>Foo</code> to <code>Bar</code>, save module <code>Foo</code> -as module <code>Bar</code> (using the <samp>File/Save As</samp> -command), Forget module <code>Bar</code>, and Open a new spec named -<code>Bar</code> with module <code>Bar</code> as its root module. - -<h3>Finding Your Spec</h3> - -It's easy to forget where in your file system a spec's module files are. -A file's complete path name should appear at the top of the editor window. -You can also find the root-module file's -complete path name by opening the -Spec Explorer view, right-clicking -on the spec's name, and selecting� <samp>Properties</samp> . � - - -(The rest of the spec's module files are in the same folder.) - - -<h3>Moving a Spec from Elsewhere</h3> - -<P> - -Here is how to move an existing spec named� <samp>SName</samp> to a -different folder (directory) on the same computer, or to a different -computer. � - -Copy all the spec's module files (the root-module file and its -imported module files) and the folder (directory) named� -<samp> SName.toolbox�</samp> to the new location. � - -(If you're using TLAPS, also copy the directory <samp>SName.tlaps</samp>.) � -</p> - -<p> -If the folder where you're putting the new spec does not have exactly -the same complete path name as the folder containing the original -spec, then you will have to edit the new copy of the file -<samp> SName.toolbox/.project�</samp>. That file contains complete -path names of the spec's module files (including modules contained -in libraries, but not standard modules). Those path names must be -modified in the obvious way to reflect the files' current locations. -</p> -<p> -If there is already a spec named�<samp>SName</samp> (which will be -the case if you're moving the spec to a different place on the same -computer), have the Toolbox forget or delete it. � - -Open a new specification named <samp>SName</samp> using the new -copy of the root-module file. - </P> - -<h3><A Name="multiple-copies">Keeping Copies of a Spec on Different Computers</A></h3> - - <p> -You may want to run the Toolbox on different machines for the same -spec. - -Once you've created a spec on one machine, copy the spec's module -files and <samp>.toolbox</samp> directory to the other machine -and use the instructions above to create a copy of the spec on that -machine. - -The Toolbox can get confused if a spec or its models is modified from -from outside the Toolbox. - -So, here's how to import changes to a spec or its models from another -computer onto the computer you're now using. - -<p> -<ol> <li> If the spec is open in the Toolbox, close it. - - <li> Move the spec's module files, its <samp>.toolbox</samp> directory, - and its <samp>.tlaps</samp> directory (if you're using TLAPS) - onto the current machine. - - However, you should either not copy the <samp>.project</samp> - file from the <samp>.toolbox</samp> directory or else edit - the new copy as described - above if the directories containing the two specifications - do not have the same complete path name. - - <li> Open the Toolbox's <a href="#spec-explorer">Spec Explorer</a>, - right-click on the spec, and execute - the <samp>Refresh</samp> command. -</ol> - You can then open the new version of the spec in the Toolbox. - If you change one or more of the spec's module - files--for example, by using an external text editor--close - the spec first and execute the <samp>Refresh</samp> command before - re-opening it. - Only the Toolbox (running on some computer) should modify files in the - <samp>.toolbox</samp> directory. There's no problem running - TLAPS outside the Toolbox. - -</p> - -<p> If you forget to close the spec before externally modifying its -files, closing the spec and refreshing it may solve the problem. -If it doesn't, -see - <a href="../trouble/trouble.html#trouble">Getting Out of Trouble</a>. -</p> - -<!-- -When you modify the spec or its models on one machine, just copy the -module files and <samp>.toolbox</samp> directory to the other -machine. - -Strange things can happen if a spec's files (its modules or -the files in its <samp>.toolbox</samp> directory) have changed -since the last time the Toolbox read or wrote them. - -It's therefore a good idea to close the Toolbox before copying a -new version of a spec from another machine. - -If a spec's files do change while the Toolbox is open, it's a good -idea to right-click on the spec in the <a href="#spec-explorer">Spec Explorer</a> and execute -the <samp>Refresh</samp> command. - -If strangeness still occurs, try closing and re-opening the -Toolbox. --> - - - -<hr/> - - -<a href="spec.html">↑ Managing Your Specifications</a> - -<hr/> - +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<!-- This is file org.lamport.tla.toobox.doc/html/spec/opening-closing.html --> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <LINK href="../style.css" rel="stylesheet" type="text/css"> + +<title>Manipulating Specs</title> +</head> +<!-- a comment --> + +<body> +<h1>Manipulating Specs</h1> +<p> + +A specification has a <em>name</em> and a <em>root module</em>, which +is in a file whose extension is <code>.tla</code>. + +You will probably give your spec the same name as its root module, but +you need not. + +Two different specs cannot have the same name.� Here are the Toolbox's +spec operations. +</p> + +<p> +<b>Warning:</b> if you want to use the <a href="../model/model.html">model checker</a>, +your spec must not contain a module named� <code>MC</code>�. +</p> +<h3>Create</h3> + +You can create a new spec with the� <samp>File/Open Spec/Add New +Spec...�</samp> menu item. + +It raises a dialog asking you to choose the root file (which must have +the extension <code>.tla</code>) and the specification name. + + +<h3>Open</h3> + +You can open an existing spec by choosing it from the� <samp>File/Open +Spec</samp> menu. � + +You can also use the +<a name="spec-explorer"><em>Spec Explorer</em><a>, which is opened either +from the <samp>File</samp> menu or by clicking on the <IMG +SRC="spec-explorer-icon.gif" Align="bottom"/> icon on the left side of +the Toolbox, near the top. + +Right-click on the desired spec and select +<samp>Open</samp>. � + +If you open a spec when another spec is open, the other spec will +automatically be closed. + + +<h3>Close</h3> + +You can close a spec with the� <samp>File/Close Spec</samp>� menu. + +This returns you to the Welcome View. � + +However, remember that the Toolbox will close the current spec if you +open another one. + +<h3>Rename, Forget, and Delete</h3> + +Forgetting a spec means that the Toolbox removes it from the +Spec Explorer and the list of specs presented by the +<samp>File/Open Spec</samp> menu. + +If you later re-open a spec with the same name in the same folder, then +you will be able to import to previous spec's models. + +Deleting a spec means forgetting it and deleting its models, but not +any of its modules. + +Renaming a spec changes the spec's name, but not the name of its root +module. + + +You can rename, forget, or delete or rename an existing spec by opening the Spec Explorer +(described above), right-clicking on the desired spec, and making the +appropriate choice. + +<p> + +Note: here's how to change the name of both a spec and its root module from +<code>Foo</code> to <code>Bar</code>: Rename spec +<code>Foo</code> to <code>Bar</code>, save module <code>Foo</code> +as module <code>Bar</code> (using the <samp>File/Save As</samp> +command), Forget module <code>Bar</code>, and Open a new spec named +<code>Bar</code> with module <code>Bar</code> as its root module. + +<h3>Finding Your Spec</h3> + +It's easy to forget where in your file system a spec's module files are. +A file's complete path name should appear at the top of the editor window. +You can also find the root-module file's +complete path name by opening the +Spec Explorer view, right-clicking +on the spec's name, and selecting� <samp>Properties</samp> . � + + +(The rest of the spec's module files are in the same folder.) + + +<h3>Moving a Spec from Elsewhere</h3> + +<P> + +Here is how to move an existing spec named� <samp>SName</samp> to a +different folder (directory) on the same computer, or to a different +computer. � + +Copy all the spec's module files (the root-module file and its +imported module files) and the folder (directory) named� +<samp> SName.toolbox�</samp> to the new location. � + +(If you're using TLAPS, also copy the directory <samp>SName.tlaps</samp>.) � +</p> + +<!-- +<p> +If the folder where you're putting the new spec does not have exactly +the same complete path name as the folder containing the original +spec, then you will have to edit the new copy of the file +<samp> SName.toolbox/.project�</samp>. That file contains complete +path names of the spec's module files (including modules contained +in libraries, but not standard modules). Those path names must be +modified in the obvious way to reflect the files' current locations. +</p> +--> +<p> +If there is already a spec named�<samp>SName</samp> (which will be +the case if you're moving the spec to a different place on the same +computer), have the Toolbox forget or delete it. � + +Open a new specification named <samp>SName</samp> using the new +copy of the root-module file. + </P> + +<h3><A Name="multiple-copies">Keeping Copies of a Spec on Different Computers</A></h3> + + <p> +You may want to run the Toolbox on different machines for the same +spec. + +Once you've created a spec on one machine, copy the spec's module +files and <samp>.toolbox</samp> directory to the other machine +and use the instructions above to create a copy of the spec on that +machine. + +The Toolbox can get confused if a spec or its models is modified from +from outside the Toolbox. + +So, here's how to import changes to a spec or its models from another +computer onto the computer you're now using. + +<p> +<ol> <li> If the spec is open in the Toolbox, close it. + + <li> Move the spec's module files, its <samp>.toolbox</samp> directory, + and its <samp>.tlaps</samp> directory (if you're using TLAPS) + onto the current machine. + + <!-- + However, you should either not copy the <samp>.project</samp> + file from the <samp>.toolbox</samp> directory or else edit + the new copy as described + above if the directories containing the two specifications + do not have the same complete path name. + --> + + <li> Open the Toolbox's <a href="#spec-explorer">Spec Explorer</a>, + right-click on the spec, and execute + the <samp>Refresh</samp> command. +</ol> + You can then open the new version of the spec in the Toolbox. + If you change one or more of the spec's module + files--for example, by using an external text editor--close + the spec first and execute the <samp>Refresh</samp> command before + re-opening it. + Only the Toolbox (running on some computer) should modify files in the + <samp>.toolbox</samp> directory. There's no problem running + TLAPS outside the Toolbox. + +</p> + +<p> If you forget to close the spec before externally modifying its +files, closing the spec and refreshing it may solve the problem. +If it doesn't, +see + <a href="../trouble/trouble.html#trouble">Getting Out of Trouble</a>. +</p> + +<!-- +When you modify the spec or its models on one machine, just copy the +module files and <samp>.toolbox</samp> directory to the other +machine. + +Strange things can happen if a spec's files (its modules or +the files in its <samp>.toolbox</samp> directory) have changed +since the last time the Toolbox read or wrote them. + +It's therefore a good idea to close the Toolbox before copying a +new version of a spec from another machine. + +If a spec's files do change while the Toolbox is open, it's a good +idea to right-click on the spec in the <a href="#spec-explorer">Spec Explorer</a> and execute +the <samp>Refresh</samp> command. + +If strangeness still occurs, try closing and re-opening the +Toolbox. --> + + + +<hr/> + + +<a href="spec.html">↑ Managing Your Specifications</a> + +<hr/> + diff --git a/org.lamport.tla.toolbox.doc/pom.xml b/org.lamport.tla.toolbox.doc/pom.xml index 78451b8ca64b36eb504bfda97e9bdfb2f2ec8fd4..e4f890e7189b6a21c1c20ce3e3b1ec56922b395a 100644 --- a/org.lamport.tla.toolbox.doc/pom.xml +++ b/org.lamport.tla.toolbox.doc/pom.xml @@ -11,6 +11,10 @@ </parent> <groupId>tlatoolbox</groupId> <artifactId>org.lamport.tla.toolbox.doc</artifactId> - <version>1.5.2-SNAPSHOT</version> + <version>1.5.3-SNAPSHOT</version> <packaging>eclipse-plugin</packaging> + <properties> + <!-- Do not include non-code project in Sonar reporting. --> + <sonar.skip>true</sonar.skip> + </properties> </project> diff --git a/org.lamport.tla.toolbox.editor.basic/META-INF/MANIFEST.MF b/org.lamport.tla.toolbox.editor.basic/META-INF/MANIFEST.MF index bacdae5f42e12115baae23433cdc56c964d0ac2c..59ba740b364815ba7c7d69c62d02b1a8c67e448a 100644 --- a/org.lamport.tla.toolbox.editor.basic/META-INF/MANIFEST.MF +++ b/org.lamport.tla.toolbox.editor.basic/META-INF/MANIFEST.MF @@ -17,6 +17,7 @@ Require-Bundle: org.eclipse.ui, org.eclipse.ui.forms Bundle-RequiredExecutionEnvironment: J2SE-1.5 Bundle-ActivationPolicy: lazy -Import-Package: org.eclipse.ui.forms +Import-Package: org.eclipse.e4.core.services.events, + org.eclipse.ui.forms Export-Package: org.lamport.tla.toolbox.editor.basic, org.lamport.tla.toolbox.editor.basic.util diff --git a/org.lamport.tla.toolbox.editor.basic/src/org/lamport/tla/toolbox/editor/basic/TLAEditor.java b/org.lamport.tla.toolbox.editor.basic/src/org/lamport/tla/toolbox/editor/basic/TLAEditor.java index bad580ade2e0391ffa67acf53983b7f629102b5a..5cb02aee43ce8df59e8e24b6c51826de767469a7 100644 --- a/org.lamport.tla.toolbox.editor.basic/src/org/lamport/tla/toolbox/editor/basic/TLAEditor.java +++ b/org.lamport.tla.toolbox.editor.basic/src/org/lamport/tla/toolbox/editor/basic/TLAEditor.java @@ -28,6 +28,7 @@ import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; +import org.eclipse.e4.core.services.events.IEventBroker; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IMenuManager; @@ -102,7 +103,13 @@ import pcal.TLAtoPCalMapping; */ public class TLAEditor extends TextEditor { - public static final String ID = "org.lamport.tla.toolbox.editor.basic.TLAEditor"; + /** + * The IEventBroker topic identifying the event sent out when the editor is + * saved. + */ + public static final String SAVE_EVENT = "TLAEditor/save"; + + public static final String ID = "org.lamport.tla.toolbox.editor.basic.TLAEditor"; private IContextService contextService = null; private IContextActivation contextActivation = null; @@ -139,6 +146,7 @@ public class TLAEditor extends TextEditor * Calls {@link TLAEditor#refresh()} when this happens. */ private IResourceChangeListener moduleFileChangeListener; + private IEventBroker service; /** * Constructor @@ -314,7 +322,8 @@ public class TLAEditor extends TextEditor refresh(); // tlapmColoring = new TLAPMColoringOutputListener(this); - + + service = this.getSite().getService(IEventBroker.class); } /** @@ -436,7 +445,8 @@ public class TLAEditor extends TextEditor */ public void doSave(IProgressMonitor progressMonitor) { - IDocument doc = this.getDocumentProvider().getDocument(this.getEditorInput()); + final IEditorInput editorInput = this.getEditorInput(); + IDocument doc = this.getDocumentProvider().getDocument(editorInput); String text = doc.get(); // Set historyStart to the offset at the start of the @@ -534,7 +544,17 @@ public class TLAEditor extends TextEditor } } // end if (historyStart > -1) - + + + // Send out a save event through the event bus. There might be parties + // interested in this, e.g. to regenerate the pretty printed pdf. + // This instanceof check should always evaluate to true. + if (editorInput instanceof FileEditorInput) { + final FileEditorInput fei = (FileEditorInput) editorInput; + final IFile spec = fei.getFile(); + service.post(SAVE_EVENT, spec); + } + super.doSave(progressMonitor); } diff --git a/org.lamport.tla.toolbox.editor.basic/src/org/lamport/tla/toolbox/editor/basic/util/BufferedDocumentScanner.java b/org.lamport.tla.toolbox.editor.basic/src/org/lamport/tla/toolbox/editor/basic/util/BufferedDocumentScanner.java index e4e92957a7dc48b98b3e5662030267c567f03095..050b2a49882768d79fa4f10689b2f2631d23b407 100644 --- a/org.lamport.tla.toolbox.editor.basic/src/org/lamport/tla/toolbox/editor/basic/util/BufferedDocumentScanner.java +++ b/org.lamport.tla.toolbox.editor.basic/src/org/lamport/tla/toolbox/editor/basic/util/BufferedDocumentScanner.java @@ -1,164 +1,175 @@ package org.lamport.tla.toolbox.editor.basic.util; import org.eclipse.core.runtime.Assert; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.rules.ICharacterScanner; +import org.lamport.tla.toolbox.editor.basic.TLAEditorActivator; /** - * Copied from org.eclipse.jdt.internal.ui.text.BufferedDocumentScanner - * Should be a part of public API + * Copied from org.eclipse.jdt.internal.ui.text.BufferedDocumentScanner Should + * be a part of public API + * * @author Simon Zambrovski * @version $Id$ * */ public class BufferedDocumentScanner implements ICharacterScanner { - /** The document being scanned. */ - private IDocument fDocument; - /** The offset of the document range to scan. */ - private int fRangeOffset; - /** The length of the document range to scan. */ - private int fRangeLength; - /** The delimiters of the document. */ - private char[][] fDelimiters; - - /** The buffer. */ - private final char[] fBuffer; - /** The offset of the buffer within the document. */ - private int fBufferOffset; - /** The valid length of the buffer for access. */ - private int fBufferLength; - /** The offset of the scanner within the buffer. */ - private int fOffset; - - - /** - * Creates a new buffered document scanner. - * The buffer size is set to the given number of characters. - * - * @param size the buffer size - */ - public BufferedDocumentScanner(int size) { - Assert.isTrue(size >= 1); - fBuffer= new char[size]; - } - - /** - * Fills the buffer with the contents of the document starting at the given offset. - * - * @param offset the document offset at which the buffer starts - */ - private final void updateBuffer(int offset) { - - fBufferOffset= offset; - - if (fBufferOffset + fBuffer.length > fRangeOffset + fRangeLength) - fBufferLength= fRangeLength - (fBufferOffset - fRangeOffset); - else - fBufferLength= fBuffer.length; - - try { - final String content= fDocument.get(fBufferOffset, fBufferLength); - content.getChars(0, fBufferLength, fBuffer, 0); - } catch (BadLocationException e) { - } - } - - /** - * Configures the scanner by providing access to the document range over which to scan. - * - * @param document the document to scan - * @param offset the offset of the document range to scan - * @param length the length of the document range to scan - */ - public final void setRange(IDocument document, int offset, int length) { - - fDocument= document; - fRangeOffset= offset; - fRangeLength= length; - - String[] delimiters= document.getLegalLineDelimiters(); - fDelimiters= new char[delimiters.length][]; - for (int i= 0; i < delimiters.length; i++) - fDelimiters[i]= delimiters[i].toCharArray(); - - updateBuffer(offset); - fOffset= 0; - } - - /* - * @see ICharacterScanner#read() - */ - public final int read() { - - if (fOffset == fBufferLength) { - int end= fBufferOffset + fBufferLength; - if (end == fDocument.getLength() || end == fRangeOffset + fRangeLength) - return EOF; - else { - updateBuffer(fBufferOffset + fBufferLength); - fOffset= 0; - } - } - - try { - return fBuffer[fOffset++]; - } catch (ArrayIndexOutOfBoundsException ex) { - StringBuffer buf= new StringBuffer(); - buf.append("Detailed state of 'BufferedDocumentScanner:'"); //$NON-NLS-1$ - buf.append("\n\tfOffset= "); //$NON-NLS-1$ - buf.append(fOffset); - buf.append("\n\tfBufferOffset= "); //$NON-NLS-1$ - buf.append(fBufferOffset); - buf.append("\n\tfBufferLength= "); //$NON-NLS-1$ - buf.append(fBufferLength); - buf.append("\n\tfRangeOffset= "); //$NON-NLS-1$ - buf.append(fRangeOffset); - buf.append("\n\tfRangeLength= "); //$NON-NLS-1$ - buf.append(fRangeLength); - System.out.print(buf.toString()); - throw ex; - } - } - - /* - * @see ICharacterScanner#unread - */ - public final void unread() { - - if (fOffset == 0) { - if (fBufferOffset == fRangeOffset) { - // error: BOF - } else { - updateBuffer(fBufferOffset - fBuffer.length); - fOffset= fBuffer.length - 1; - } - } else { - --fOffset; - } - } - - /* - * @see ICharacterScanner#getColumn() - */ - public final int getColumn() { - - try { - final int offset= fBufferOffset + fOffset; - final int line= fDocument.getLineOfOffset(offset); - final int start= fDocument.getLineOffset(line); - return offset - start; - } catch (BadLocationException e) { - } - - return -1; - } - - /* - * @see ICharacterScanner#getLegalLineDelimiters() - */ - public final char[][] getLegalLineDelimiters() { - return fDelimiters; - } + /** The document being scanned. */ + private IDocument fDocument; + /** The offset of the document range to scan. */ + private int fRangeOffset; + /** The length of the document range to scan. */ + private int fRangeLength; + /** The delimiters of the document. */ + private char[][] fDelimiters; + + /** The buffer. */ + private final char[] fBuffer; + /** The offset of the buffer within the document. */ + private int fBufferOffset; + /** The valid length of the buffer for access. */ + private int fBufferLength; + /** The offset of the scanner within the buffer. */ + private int fOffset; + + /** + * Creates a new buffered document scanner. The buffer size is set to the + * given number of characters. + * + * @param size + * the buffer size + */ + public BufferedDocumentScanner(int size) { + Assert.isTrue(size >= 1); + fBuffer = new char[size]; + } + + /** + * Fills the buffer with the contents of the document starting at the given + * offset. + * + * @param offset + * the document offset at which the buffer starts + */ + private final void updateBuffer(int offset) { + + fBufferOffset = offset; + + if (fBufferOffset + fBuffer.length > fRangeOffset + fRangeLength) + fBufferLength = fRangeLength - (fBufferOffset - fRangeOffset); + else + fBufferLength = fBuffer.length; + + try { + final String content = fDocument.get(fBufferOffset, fBufferLength); + content.getChars(0, fBufferLength, fBuffer, 0); + } catch (BadLocationException e) { + } + } + + /** + * Configures the scanner by providing access to the document range over + * which to scan. + * + * @param document + * the document to scan + * @param offset + * the offset of the document range to scan + * @param length + * the length of the document range to scan + */ + public final void setRange(IDocument document, int offset, int length) { + + fDocument = document; + fRangeOffset = offset; + fRangeLength = length; + + String[] delimiters = document.getLegalLineDelimiters(); + fDelimiters = new char[delimiters.length][]; + for (int i = 0; i < delimiters.length; i++) + fDelimiters[i] = delimiters[i].toCharArray(); + + updateBuffer(offset); + fOffset = 0; + } + + /* + * @see ICharacterScanner#read() + */ + public final int read() { + + if (fOffset == fBufferLength) { + int end = fBufferOffset + fBufferLength; + if (end == fDocument.getLength() || end == fRangeOffset + fRangeLength) + return EOF; + else { + updateBuffer(fBufferOffset + fBufferLength); + fOffset = 0; + } + } + + try { + return fBuffer[fOffset++]; + } catch (ArrayIndexOutOfBoundsException ex) { + StringBuffer buf = new StringBuffer(); + buf.append("Detailed state of 'BufferedDocumentScanner:'"); //$NON-NLS-1$ + buf.append("\n\tfOffset= "); //$NON-NLS-1$ + buf.append(fOffset); + buf.append("\n\tfBufferOffset= "); //$NON-NLS-1$ + buf.append(fBufferOffset); + buf.append("\n\tfBufferLength= "); //$NON-NLS-1$ + buf.append(fBufferLength); + buf.append("\n\tfRangeOffset= "); //$NON-NLS-1$ + buf.append(fRangeOffset); + buf.append("\n\tfRangeLength= "); //$NON-NLS-1$ + buf.append(fRangeLength); + TLAEditorActivator.getDefault().getLog() + .log(new Status(IStatus.WARNING, TLAEditorActivator.PLUGIN_ID, buf.toString(), ex)); + throw ex; + } + } + + /* + * @see ICharacterScanner#unread + */ + public final void unread() { + + if (fOffset == 0) { + if (fBufferOffset == fRangeOffset) { + // error: BOF + } else { + updateBuffer(fBufferOffset - fBuffer.length); + fOffset = fBuffer.length - 1; + } + } else { + --fOffset; + } + } + + /* + * @see ICharacterScanner#getColumn() + */ + public final int getColumn() { + + try { + final int offset = fBufferOffset + fOffset; + final int line = fDocument.getLineOfOffset(offset); + final int start = fDocument.getLineOffset(line); + return offset - start; + } catch (BadLocationException e) { + } + + return -1; + } + + /* + * @see ICharacterScanner#getLegalLineDelimiters() + */ + public final char[][] getLegalLineDelimiters() { + return fDelimiters; + } } diff --git a/org.lamport.tla.toolbox.feature.base/pom.xml b/org.lamport.tla.toolbox.feature.base/pom.xml index eff7ba91e14aafae1635222ccb5666accd335497..d24eaf4809225fae3f13443d365d837dd939d7a7 100644 --- a/org.lamport.tla.toolbox.feature.base/pom.xml +++ b/org.lamport.tla.toolbox.feature.base/pom.xml @@ -13,4 +13,8 @@ <artifactId>org.lamport.tla.toolbox.feature.base</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>eclipse-feature</packaging> + <properties> + <!-- Do not include non-code project in Sonar reporting. --> + <sonar.skip>true</sonar.skip> + </properties> </project> diff --git a/org.lamport.tla.toolbox.feature.branding/pom.xml b/org.lamport.tla.toolbox.feature.branding/pom.xml index 81770c7fe018f577c390992f71b6ceeeefb81a38..4c95cf4e8fbe3090d1032d0e4424d78c481ba84e 100644 --- a/org.lamport.tla.toolbox.feature.branding/pom.xml +++ b/org.lamport.tla.toolbox.feature.branding/pom.xml @@ -13,4 +13,8 @@ <artifactId>org.lamport.tla.toolbox.feature.branding</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>eclipse-feature</packaging> + <properties> + <!-- Do not include non-code project in Sonar reporting. --> + <sonar.skip>true</sonar.skip> + </properties> </project> diff --git a/org.lamport.tla.toolbox.feature.editor/pom.xml b/org.lamport.tla.toolbox.feature.editor/pom.xml index b6b6b7f4a2318119a6523816db7abad0c33d4735..6b9557a32249ec224385165ebdc2c3c6701b19b0 100644 --- a/org.lamport.tla.toolbox.feature.editor/pom.xml +++ b/org.lamport.tla.toolbox.feature.editor/pom.xml @@ -13,4 +13,8 @@ <artifactId>org.lamport.tla.toolbox.feature.editor</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>eclipse-feature</packaging> + <properties> + <!-- Do not include non-code project in Sonar reporting. --> + <sonar.skip>true</sonar.skip> + </properties> </project> diff --git a/org.lamport.tla.toolbox.feature.help/pom.xml b/org.lamport.tla.toolbox.feature.help/pom.xml index 9bac44c16e2b886bb40976911e4a68d48e25bdcb..0e64038ed3c02b970d08f85f506d8c9806b4f7e9 100644 --- a/org.lamport.tla.toolbox.feature.help/pom.xml +++ b/org.lamport.tla.toolbox.feature.help/pom.xml @@ -13,4 +13,8 @@ <artifactId>org.lamport.tla.toolbox.feature.help</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>eclipse-feature</packaging> + <properties> + <!-- Do not include non-code project in Sonar reporting. --> + <sonar.skip>true</sonar.skip> + </properties> </project> diff --git a/org.lamport.tla.toolbox.feature.jclouds/pom.xml b/org.lamport.tla.toolbox.feature.jclouds/pom.xml index 5c4d0cf76d420b51ad9f26f2fe1742d2daf21f31..1ac8592d52b13757099164861ade0325dd006546 100644 --- a/org.lamport.tla.toolbox.feature.jclouds/pom.xml +++ b/org.lamport.tla.toolbox.feature.jclouds/pom.xml @@ -13,4 +13,8 @@ <artifactId>org.lamport.tla.toolbox.feature.jclouds</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>eclipse-feature</packaging> + <properties> + <!-- Do not include non-code project in Sonar reporting. --> + <sonar.skip>true</sonar.skip> + </properties> </project> diff --git a/org.lamport.tla.toolbox.feature.jnlp/pom.xml b/org.lamport.tla.toolbox.feature.jnlp/pom.xml index 2811ad5b0753eeff8fad277f145c656eae57ca09..cde05573b3466c78ce6cd07665693ea77edf9bb8 100644 --- a/org.lamport.tla.toolbox.feature.jnlp/pom.xml +++ b/org.lamport.tla.toolbox.feature.jnlp/pom.xml @@ -13,4 +13,8 @@ <artifactId>org.lamport.tla.toolbox.feature.jnlp</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>eclipse-feature</packaging> + <properties> + <!-- Do not include non-code project in Sonar reporting. --> + <sonar.skip>true</sonar.skip> + </properties> </project> diff --git a/org.lamport.tla.toolbox.feature.prover/pom.xml b/org.lamport.tla.toolbox.feature.prover/pom.xml index 1736cc586b6c2f13a427643de7a8a5ed089e5b49..8198c10e0b5e07810541155814a76fefdca7120d 100644 --- a/org.lamport.tla.toolbox.feature.prover/pom.xml +++ b/org.lamport.tla.toolbox.feature.prover/pom.xml @@ -13,4 +13,8 @@ <artifactId>org.lamport.tla.toolbox.feature.prover</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>eclipse-feature</packaging> + <properties> + <!-- Do not include non-code project in Sonar reporting. --> + <sonar.skip>true</sonar.skip> + </properties> </project> diff --git a/org.lamport.tla.toolbox.feature.standalone/feature.xml b/org.lamport.tla.toolbox.feature.standalone/feature.xml index 1c1b0282c5f690af32fcbe606b1e956bf4d32de4..1793f1354e5a4c31e03e71b99d10afd778458676 100644 --- a/org.lamport.tla.toolbox.feature.standalone/feature.xml +++ b/org.lamport.tla.toolbox.feature.standalone/feature.xml @@ -106,6 +106,10 @@ id="org.apache.jclouds.feature" version="0.0.0"/> + <includes + id="com.abstratt.eclipsegraphviz.feature" + version="0.0.0"/> + <plugin id="org.lamport.tla.toolbox.product.standalone" download-size="0" @@ -190,4 +194,18 @@ version="0.0.0" unpack="false"/> + <plugin + id="org.apache.commons.beanutils" + download-size="0" + install-size="0" + version="0.0.0" + unpack="false"/> + + <plugin + id="org.apache.commons.collections" + download-size="0" + install-size="0" + version="0.0.0" + unpack="false"/> + </feature> diff --git a/org.lamport.tla.toolbox.feature.standalone/pom.xml b/org.lamport.tla.toolbox.feature.standalone/pom.xml index b78c4322145e01ef8bbb41a6900be28da43b0bb5..ccb8245f66ca0b7719763b26d76dc1a0ae1582ad 100644 --- a/org.lamport.tla.toolbox.feature.standalone/pom.xml +++ b/org.lamport.tla.toolbox.feature.standalone/pom.xml @@ -13,4 +13,8 @@ <artifactId>org.lamport.tla.toolbox.feature.standalone</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>eclipse-feature</packaging> + <properties> + <!-- Do not include non-code project in Sonar reporting. --> + <sonar.skip>true</sonar.skip> + </properties> </project> diff --git a/org.lamport.tla.toolbox.feature.tla2tex/pom.xml b/org.lamport.tla.toolbox.feature.tla2tex/pom.xml index 9e5a856d964d53704545b82b2f19b5effa89c201..705f70f8ce0a33ccce5e5033eddb121a66318ccd 100644 --- a/org.lamport.tla.toolbox.feature.tla2tex/pom.xml +++ b/org.lamport.tla.toolbox.feature.tla2tex/pom.xml @@ -13,4 +13,8 @@ <artifactId>org.lamport.tla.toolbox.feature.tla2tex</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>eclipse-feature</packaging> + <properties> + <!-- Do not include non-code project in Sonar reporting. --> + <sonar.skip>true</sonar.skip> + </properties> </project> diff --git a/org.lamport.tla.toolbox.feature.tlc/pom.xml b/org.lamport.tla.toolbox.feature.tlc/pom.xml index 4228c3372cef2dbd7be1aa587c45489e4af2d4f6..7b82dd1fa889163066295995598cfcaaf678f59a 100644 --- a/org.lamport.tla.toolbox.feature.tlc/pom.xml +++ b/org.lamport.tla.toolbox.feature.tlc/pom.xml @@ -13,4 +13,8 @@ <artifactId>org.lamport.tla.toolbox.feature.tlc</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>eclipse-feature</packaging> + <properties> + <!-- Do not include non-code project in Sonar reporting. --> + <sonar.skip>true</sonar.skip> + </properties> </project> diff --git a/org.lamport.tla.toolbox.jclouds/META-INF/MANIFEST.MF b/org.lamport.tla.toolbox.jclouds/META-INF/MANIFEST.MF index 7f29f76f9cd1cf3432ffa7a14a2afdd3a78112ee..27e616b51954f62089c043cd881971f3347a5d29 100644 --- a/org.lamport.tla.toolbox.jclouds/META-INF/MANIFEST.MF +++ b/org.lamport.tla.toolbox.jclouds/META-INF/MANIFEST.MF @@ -18,4 +18,6 @@ DynamicImport-Package: * Bundle-Activator: org.lamport.tla.toolbox.jcloud.JCloudActivator Import-Package: org.jclouds.aws.ec2.reference;version="1.7.3", org.jclouds.ec2.reference;version="1.7.3", - org.lamport.tla.toolbox.tool.tlc.job;resolution:=optional + org.lamport.tla.toolbox.tool.tlc.job;resolution:=optional, + tlc2.tool.distributed, + tlc2.tool.distributed.fp diff --git a/org.lamport.tla.toolbox.jclouds/cleanazure.sh b/org.lamport.tla.toolbox.jclouds/cleanazure.sh new file mode 100755 index 0000000000000000000000000000000000000000..590b003ebe77d2d2ff8ac9104e6f5a6bcf6a3df9 --- /dev/null +++ b/org.lamport.tla.toolbox.jclouds/cleanazure.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +## Get the output of `azure vm list`, extract the vm ids and loop over the result +## Terminate/delete each VM including its disk image (-d) +IMAGES=`azure vm list --json | grep 'VMName'| cut -d '"' -f 4` +for i in $IMAGES; do + azure vm delete --quiet --blob-delete $i +done + +## Get the output of `azure storage account list` +## Quietly (no confirmation prompt) delete all accounts +ACCOUNTS=`azure storage account list --json | grep '"name"' | cut -d '"' -f 4` +for a in $ACCOUNTS; do + azure storage account delete --quiet $a +done diff --git a/org.lamport.tla.toolbox.jclouds/src/org/lamport/tla/toolbox/jcloud/AzureCloudTLCInstanceParameters.java b/org.lamport.tla.toolbox.jclouds/src/org/lamport/tla/toolbox/jcloud/AzureCloudTLCInstanceParameters.java index 24412bde304e46b32013dfe5bf2219fa51f0e7e2..6ccd2fee6c43311c3dc5ffd67a7a2bddaced3a88 100644 --- a/org.lamport.tla.toolbox.jclouds/src/org/lamport/tla/toolbox/jcloud/AzureCloudTLCInstanceParameters.java +++ b/org.lamport.tla.toolbox.jclouds/src/org/lamport/tla/toolbox/jcloud/AzureCloudTLCInstanceParameters.java @@ -33,29 +33,44 @@ import org.jclouds.ContextBuilder; public class AzureCloudTLCInstanceParameters extends CloudTLCInstanceParameters { - public AzureCloudTLCInstanceParameters(final String tlcParams) { - super(tlcParams.trim()); + public AzureCloudTLCInstanceParameters(final String tlcParams, int numberOfWorkers) { + super(tlcParams.trim(), numberOfWorkers); } + + // vm args + /* (non-Javadoc) + * @see org.lamport.tla.toolbox.jcloud.CloudTLCInstanceParameters#getJavaVMArgs() + */ @Override - public String getJavaSystemProperties() { - return "-Dtlc2.tool.fp.FPSet.impl=tlc2.tool.fp.OffHeapDiskFPSet"; + public String getJavaVMArgs() { + if (numberOfWorkers == 1) { + return getJavaWorkerVMArgs(); + } + return "-Xmx96G -Xms96G"; } - + + /* (non-Javadoc) + * @see org.lamport.tla.toolbox.jcloud.CloudTLCInstanceParameters#getJavaWorkerVMArgs() + */ @Override - public String getJavaVMArgs() { + public String getJavaWorkerVMArgs() { return "-Xmx32G -Xms32G -XX:MaxDirectMemorySize=64g"; } - + /* (non-Javadoc) * @see org.lamport.tla.toolbox.jcloud.CloudTLCInstanceParameters#getTLCParameters() */ @Override public String getTLCParameters() { - if (tlcParams.length() > 0) { - return "-workers 16 " + tlcParams; + if (numberOfWorkers == 1) { + if (tlcParams.length() > 0) { + return "-workers 16 " + tlcParams; + } + return "-workers 16"; + } else { + return "-coverage 0 -checkpoint 0"; } - return "-workers 16"; } /* (non-Javadoc) @@ -71,7 +86,8 @@ public class AzureCloudTLCInstanceParameters extends CloudTLCInstanceParameters */ @Override public String getImageId() { - return "b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04_1-LTS-amd64-server-20150123-en-us-30GB"; + // azure vm image list |grep "Canonical" + return "b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04_4-LTS-amd64-server-20160222-en-us-30GB"; } /* (non-Javadoc) diff --git a/org.lamport.tla.toolbox.jclouds/src/org/lamport/tla/toolbox/jcloud/CloudDistributedTLCJob.java b/org.lamport.tla.toolbox.jclouds/src/org/lamport/tla/toolbox/jcloud/CloudDistributedTLCJob.java index 5a063e6841517614f9141592a88ffdb018b1f7e8..908dcbefd9f95784256e5a4743583596c5720614 100644 --- a/org.lamport.tla.toolbox.jclouds/src/org/lamport/tla/toolbox/jcloud/CloudDistributedTLCJob.java +++ b/org.lamport.tla.toolbox.jclouds/src/org/lamport/tla/toolbox/jcloud/CloudDistributedTLCJob.java @@ -55,8 +55,6 @@ import org.jclouds.compute.options.TemplateOptions; import org.jclouds.io.Payload; import org.jclouds.logging.slf4j.config.SLF4JLoggingModule; import org.jclouds.rest.AuthorizationException; -import org.jclouds.scriptbuilder.domain.Statement; -import org.jclouds.scriptbuilder.statements.java.InstallJDK; import org.jclouds.scriptbuilder.statements.login.AdminAccess; import org.jclouds.ssh.SshClient; import org.jclouds.sshj.config.SshjSshClientModule; @@ -86,13 +84,14 @@ public class CloudDistributedTLCJob extends Job { */ private final String groupNameUUID; private final Path modelPath; - private final int nodes = 1; //TODO only supports launching TLC on a single node for now + private final int nodes; private final Properties props; private final CloudTLCInstanceParameters params; public CloudDistributedTLCJob(String aName, File aModelFolder, int numberOfWorkers, final Properties properties, CloudTLCInstanceParameters params) { super(aName); + this.nodes = numberOfWorkers; this.params = params; //TODO groupNameUUID is used by some providers (azure) as a hostname/DNS name. Thus, format. groupNameUUID = aName.toLowerCase() + "-" + UUID.randomUUID().toString(); @@ -102,8 +101,9 @@ public class CloudDistributedTLCJob extends Job { @Override protected IStatus run(final IProgressMonitor monitor) { - monitor.beginTask("Starting TLC model checker in the cloud", 100); + final long startUp = System.currentTimeMillis(); + monitor.beginTask("Starting TLC model checker in the cloud", 85 + (nodes > 1 ? 20 : 0)); // Validate credentials and fail fast if null or syntactically incorrect if (!params.validateCredentials().equals(Status.OK_STATUS)) { return params.validateCredentials(); @@ -136,7 +136,7 @@ public class CloudDistributedTLCJob extends Job { .credentials(params.getIdentity(), params.getCredentials()).modules(modules) .overrides(properties); params.mungeBuilder(builder); - + monitor.subTask("Initializing " + builder.getApiMetadata().getName()); context = builder.buildView(ComputeServiceContext.class); final ComputeService compute = context.getComputeService(); @@ -144,7 +144,7 @@ public class CloudDistributedTLCJob extends Job { if (monitor.isCanceled()) { return Status.CANCEL_STATUS; } - + // start a node, but first configure it final TemplateOptions templateOptions = compute.templateOptions(); @@ -152,7 +152,7 @@ public class CloudDistributedTLCJob extends Job { // look at the munin/ stats generated for the OS as well as TLC specifically. // (See below where munin gets installed manually) // This now makes us dependent on EC2 (for now) - templateOptions.inboundPorts(22, 80); + templateOptions.inboundPorts(22, 80, 443); // note this will create a user with the same name as you on the // node. ex. you can connect via ssh public IP @@ -172,64 +172,98 @@ public class CloudDistributedTLCJob extends Job { if (monitor.isCanceled()) { return Status.CANCEL_STATUS; } + final long spinUp = System.currentTimeMillis(); - // Install Java - monitor.subTask("Provisioning Java on all node(s)"); - Statement installOpenJDK = InstallJDK.fromOpenJDK(); - compute.runScriptOnNodesMatching(inGroup(groupNameUUID), - installOpenJDK); - monitor.worked(20); - if (monitor.isCanceled()) { - return Status.CANCEL_STATUS; - } - - // Creating an entry in /etc/alias that makes sure system email sent - // to root ends up at the address given by the user. Note that this - // has to be done before postfix gets installed later. postfix - // re-generates the aliases file for us. - final String email = props.getProperty(TLCJobFactory.MAIL_ADDRESS); - monitor.subTask("Setting up root aliases to " + email - + " on all node(s)"); - compute.runScriptOnNodesMatching(inGroup(groupNameUUID), - exec("echo root: " + email + " >> /etc/aliases"), - new TemplateOptions().runAsRoot(true).wrapInInitScript(false)); - monitor.worked(10); - if (monitor.isCanceled()) { - return Status.CANCEL_STATUS; - } - // Install custom tailored jmx2munin to monitor the TLC process. Can // either monitor standalone tlc2.TLC or TLCServer. - monitor.subTask("Provisioning TLC Monitoring on all node(s)"); + monitor.subTask("Provisioning TLC environment on all node(s)"); + final String email = props.getProperty(TLCJobFactory.MAIL_ADDRESS); compute.runScriptOnNodesMatching( inGroup(groupNameUUID), - // Never be prompted for input - exec("export DEBIAN_FRONTEND=noninteractive && " + // Creating an entry in /etc/alias that makes sure system email sent + // to root ends up at the address given by the user. Note that this + // has to be done before postfix gets installed later. postfix + // re-generates the aliases file for us. + exec( "echo root: " + email + " >> /etc/aliases" + + " && " + // OS tuning parameters for (distributed) TLC: + // - Disable hugepage defragmentation (especially important on highmem instances) + + "echo never > /sys/kernel/mm/transparent_hugepage/defrag" + + " && " + // - Turn off NUMA balancing + + "echo 0 > /proc/sys/kernel/numa_balancing" + + " && " + // Don't want dpkg to require user interaction. + + "export DEBIAN_FRONTEND=noninteractive" + + " && " + // Update Ubuntu's package index. The public/remote + // package mirrors might have updated. Without + // update, we might try to install outdated packages + // below. This most likely fails with a 404 because + // the packages have been purged from the mirrors. + + "apt-get update" + + " && " + // Never be prompted for input // Download jmx2munin from the INRIA host // TODO make it part of Toolbox and upload from // there (it's tiny 48kb anyway) instead. // This needs some better build-time integration // between TLA and jmx2munin (probably best to make // jmx2munin a submodule of the TLA git repo). - + "wget https://lemmy.github.com/jmx2munin/jmx2munin_1.0_all.deb && " + // Download an explicit version (commit) to allow + // us to continue development in HEAD. Otherwise, + // an old Toolbox would use the newest jmx2munin + // which might not be compatible with its CDTLCJob. + + "wget https://github.com/lemmy/jmx2munin/raw/515e9b47f5a71fbfe2eeb517a341448b52fdb226/jmx2munin_1.0_all.deb" + + " && " // + "wget http://tla.msr-inria.inria.fr/jmx2munin/jmx2munin_1.0_all.deb && " // Install jmx2munin into the system + "dpkg -i jmx2munin_1.0_all.deb ; " // Force apt to download and install the // missing dependencies of jmx2munin without // user interaction - + "apt-get install -fy && " + + "apt-get install --no-install-recommends -fy" + + " && " + // Install all security relevant system packages + + "echo unattended-upgrades unattended-upgrades/enable_auto_updates boolean true | debconf-set-selections" + + " && " // screen is needed to allow us to re-attach // to the TLC process if logged in to the // instance directly (it's probably already - // installed). - + "apt-get install screen -y && " - // postfix is an MTA that is used to send warnings - // produced by munin off of the system. E.g. - // if the hard disc becomes full, the user - // will receive an email giving her a chance - // to free space and prevent TLC from crashing. - + "apt-get install postfix heirloom-mailx -y"), + // installed). zip is used to prepare the + // worker tla2tools.jar (strip spec) and + // unattended-upgrades makes sure the instance + // is up-to-date security-wise. + + "apt-get install --no-install-recommends mdadm e2fsprogs screen zip unattended-upgrades -y" + + " && " + // Create a raid0 out of the two instance store + // disks and optimize its fs towards performance + // by sacrificing data durability. + + "umount /mnt && " + + "/usr/bin/yes|/sbin/mdadm --create --force --auto=yes /dev/md0 --level=0 --raid-devices=2 --assume-clean --name=tlaplus /dev/xvdb /dev/xvdc && " + + "/sbin/mdadm --detail --scan >> /etc/mdadm/mdadm.conf && " + + "sed -i '\\?^/dev/xvdb?d' /etc/fstab && " + + "echo \"/dev/md127 /mnt ext4 defaults 0 0\" >> /etc/fstab && " + + "/sbin/mkfs.ext4 -O ^has_journal /dev/md0 && " + + "mount /dev/md0 /mnt" + // Install Oracle Java8. It supports Java Mission + // Control, an honest profiler. But first, + // automatically accept the Oracle license because + // installation will fail otherwise. +// + " && " +// + "echo debconf shared/accepted-oracle-license-v1-1 select true | debconf-set-selections && " +// + "add-apt-repository ppa:webupd8team/java -y && " +// + "apt-get update && " +// + "apt-get --no-install-recommends install oracle-java8-installer oracle-java8-set-default -y" + // Create /mnt/tlc and change permission to be world writable + // Requires package 'apache2' to be already installed. apache2 + // creates /var/www/html. + // "/mnt/tlc" is on the ephemeral and thus faster storage of the + // instance. + + " && " + + "mkdir -p /mnt/tlc/ && chmod 777 /mnt/tlc/ && " + + "ln -s /mnt/tlc/MC.out /var/www/html/MC.out && " + + "ln -s /mnt/tlc/MC.err /var/www/html/MC.err"), new TemplateOptions().runAsRoot(true).wrapInInitScript( false)); monitor.worked(10); @@ -238,109 +272,167 @@ public class CloudDistributedTLCJob extends Job { } // Install all security relevant system packages - monitor.subTask("Installing security relevant system packages (in background)"); + monitor.subTask("Installing security relevant system package upgrades (in background)"); compute.runScriptOnNodesMatching( inGroup(groupNameUUID), - exec("echo unattended-upgrades unattended-upgrades/enable_auto_updates boolean true | debconf-set-selections" - + " && " - + "apt-get install unattended-upgrades" - + " && " - + "/usr/bin/unattended-upgrades"), + exec("/usr/bin/unattended-upgrades"), new TemplateOptions().runAsRoot(true).wrapInInitScript( false).blockOnComplete(false).blockUntilRunning(false)); monitor.worked(5); - - // Create /mnt/tlc and change permission to be world writable - // Requires package 'apache2' to be already installed. apache2 - // creates /var/www/html. - monitor.subTask("Creating a TLC environment on all node(s)"); - compute.runScriptOnNodesMatching( - inGroup(groupNameUUID), - exec("mkdir /mnt/tlc/ && " - + "chmod 777 /mnt/tlc/ && " - + "ln -s /tmp/MC.out /var/www/html/MC.out && " - + "ln -s /tmp/MC.err /var/www/html/MC.err"), - new TemplateOptions().runAsRoot(true).wrapInInitScript( - false)); - monitor.worked(5); - if (monitor.isCanceled()) { - return Status.CANCEL_STATUS; - } + final long provision = System.currentTimeMillis(); - // TODO CloudD...TLC currently only supports a single tlc2.TLC - // process. Thus the Predicate and isMaster check is not used for - // the moment. // Choose one of the nodes to be the master and create an // identifying predicate. - monitor.subTask("Copying tla2tools.jar to master node"); final NodeMetadata master = Iterables.getLast(createNodesInGroup); - final Predicate<NodeMetadata> isMaster = new Predicate<NodeMetadata>() { - @Override - public boolean apply(NodeMetadata nodeMetadata) { - return nodeMetadata.equals(master); - }; - }; + // Copy tlatools.jar to _one_ remote host (do not exhaust upload of // the machine running the toolbox). // TODO Share the tla2tools.jar with the worker nodes by making it // available on the master's webserver for the clients to download. - // On the other hand this means we are making the spec world-readable. + // On the other hand this means we are making the spec + // world-readable. It is cloud-readable already through the RMI api. + monitor.subTask("Copying tla2tools.jar to master node"); SshClient sshClient = context.utils().sshForNode().apply(master); - sshClient.put("/mnt/tlc/tla2tools.jar", jarPayLoad); + sshClient.put("/tmp/tla2tools.jar", jarPayLoad); sshClient.disconnect(); monitor.worked(10); if (monitor.isCanceled()) { return Status.CANCEL_STATUS; } - // Run model checker master + // Run model checker master on master monitor.subTask("Starting TLC model checker process on the master node (in background)"); + // The predicate will be applied to ALL instances owned by the + // cloud account (ie AWS), even the ones in different regions + // completely unrelated to TLC. + final Predicate<NodeMetadata> isMaster = new Predicate<NodeMetadata>() { + private final String masterHostname = master.getHostname(); + public boolean apply(NodeMetadata nodeMetadata) { + // hostname can be null if instance is terminated. + final String hostname = nodeMetadata.getHostname(); + return masterHostname.equals(hostname); + }; + }; compute.runScriptOnNodesMatching( - isMaster, - // "/mnt/tlc" is on the ephemeral and thus faster storage of the - // instance. + isMaster, + exec(" cd /mnt/tlc/ && " + // Execute TLC (java) process inside screen + // and shutdown on TLC's completion. But + // detach from screen directly. Name screen + // session "tlc". + // (see http://stackoverflow.com/a/10126799) + + "screen -dm -S tlc bash -c \" " + // This requires a modified version where all parameters and + // all spec modules are stored in files in a model/ folder + // inside of the jar. + // This is done in anticipation of other cloud providers + // where one cannot easily pass in parameters on the command + // line because there is no command line. + + "java " + + params.getJavaVMArgs() + " " + // Write all tmp files to the ephemeral instance + // storage which is expected to have a higher IOPS + // compared to non-local storage. + + "-Djava.io.tmpdir=/mnt/tlc/ " + // These properties cannot be "backed" into + // the payload jar as java itself does not + // support this. + // It might be able to read the properties from + // the config file with 'com.sun.management.config.file=path', + // but I haven't tried if the path can point into the jar. + + "-Dcom.sun.management.jmxremote " + + "-Dcom.sun.management.jmxremote.port=5400 " + + "-Dcom.sun.management.jmxremote.ssl=false " + + "-Dcom.sun.management.jmxremote.authenticate=false " + // TLC tuning options + + params.getJavaSystemProperties() + " " + + "-jar /tmp/tla2tools.jar " + + params.getTLCParameters() + " " + + "&& " + // Let the machine power down immediately after + // finishing model checking to cut costs. However, + // do not shut down (hence "&&") when TLC finished + // with an error. + // It uses "sudo" because the script is explicitly + // run as a user. No need to run the TLC process as + // root. + + "sudo shutdown -h now" + + "\""), // closing opening '"' of screen/bash -c + new TemplateOptions().runAsRoot(false).wrapInInitScript( + true).blockOnComplete(false).blockUntilRunning(false)); + monitor.worked(5); + final long tlcStartUp = System.currentTimeMillis(); + + if (nodes > 1) { + // copy the tla2tools.jar to the root of the master's webserver + // to make it available to workers. However, strip the spec + // (*.tla/*.cfg/...) from the jar file to not share the spec + // with the world. + monitor.subTask("Make TLC code available to all worker node(s)"); + compute.runScriptOnNodesMatching( + isMaster, + exec("cp /tmp/tla2tools.jar /var/www/html/tla2tools.jar && " + + "zip -d /var/www/html/tla2tools.jar model/*.tla model/*.cfg model/generated.properties"), + new TemplateOptions().runAsRoot(true).wrapInInitScript( + false)); + monitor.worked(10); + if (monitor.isCanceled()) { + return Status.CANCEL_STATUS; + } + + // The predicate will be applied to ALL instances owned by the + // AWS account, even the ones in different regions completely + // unrelated to TLC. + final Predicate<NodeMetadata> onWorkers = new Predicate<NodeMetadata>() { + // Remove the master from the set of our nodes. + private final Iterable<? extends NodeMetadata> workers = Iterables.filter(createNodesInGroup, new Predicate<NodeMetadata>() { + private final String masterHostname = master.getHostname(); + public boolean apply(NodeMetadata nodeMetadata) { + // nodeMetadata.getHostname is null for terminated hosts. + return !masterHostname.equals(nodeMetadata.getHostname()); + }; + }); + public boolean apply(NodeMetadata nodeMetadata) { + return Iterables.contains(workers, nodeMetadata); + }; + }; + + // see master startup for comments + monitor.subTask("Starting TLC workers on the remaining node(s) (in background)"); + final String hostname = Iterables.getOnlyElement(master.getPrivateAddresses()); + compute.runScriptOnNodesMatching( + onWorkers, exec("cd /mnt/tlc/ && " - // Execute TLC (java) process inside screen - // and shutdown on TLC's completion. But - // detach from screen directly. Name screen - // session "tlc". - // (see http://stackoverflow.com/a/10126799) + + "wget http://" + hostname + "/tla2tools.jar && " + "screen -dm -S tlc bash -c \" " - // This requires a modified version where all parameters and - // all spec modules are stored in files in a model/ folder - // inside of the jar. - // This is done in anticipation of other cloud providers - // where one cannot easily pass in parameters on the command - // line because there is no command line. + "java " - + params.getJavaVMArgs() + " " - // These properties cannot be "backed" into - // the payload jar as java itself does not - // support this. - // It might be able to read the properties from - // the config file with 'com.sun.management.config.file=path', - // but I haven't tried if the path can point into the jar. + + params.getJavaWorkerVMArgs() + " " + + "-Djava.io.tmpdir=/mnt/tlc/ " + "-Dcom.sun.management.jmxremote " + "-Dcom.sun.management.jmxremote.port=5400 " + "-Dcom.sun.management.jmxremote.ssl=false " + "-Dcom.sun.management.jmxremote.authenticate=false " - // TLC tuning options - + params.getJavaSystemProperties() + " " - + "-jar /mnt/tlc/tla2tools.jar " - + params.getTLCParameters() + " " + + params.getJavaWorkerSystemProperties() + " " + + "-cp /mnt/tlc/tla2tools.jar " + + params.getTLCWorkerParameters() + " " + + hostname + " " // Use host's internal ip due to firewall reasons. + "&& " - // Let the machine power down immediately after - // finishing model checking to cut costs. However, - // do not shut down (hence "&&") when TLC finished - // with an error. - // It uses "sudo" because the script is explicitly - // run as a user. No need to run the TLC process as - // root. + // Terminate regardless of TLCWorker process + // exit value. E.g. TLCWorker can terminate due + // to a NoRouteToHostException when the master + // shut down caused by a violation among the + // init states. + "sudo shutdown -h now" - + "\""), // closing opening '"' of screen/bash -c + + "\""), new TemplateOptions().runAsRoot(false).wrapInInitScript( true).blockOnComplete(false).blockUntilRunning(false)); - monitor.worked(5); + monitor.worked(10); + } + + // Print runtimes of various work items. +// System.out.printf("%s spinUp\n%s provision\n%s start\n%s finish\n", (spinUp - startUp) / 1000, +// (provision - spinUp) / 1000, (tlcStartUp - provision) / 1000, +// (System.currentTimeMillis() - tlcStartUp) / 1000); // Communicate result to user monitor.done(); diff --git a/org.lamport.tla.toolbox.jclouds/src/org/lamport/tla/toolbox/jcloud/CloudTLCInstanceParameters.java b/org.lamport.tla.toolbox.jclouds/src/org/lamport/tla/toolbox/jcloud/CloudTLCInstanceParameters.java index 14ec4ec1fdd7ec08bc8f2a17b049b67985dd22aa..9f68746e653326192d0e348865aae61277ab9b5a 100644 --- a/org.lamport.tla.toolbox.jclouds/src/org/lamport/tla/toolbox/jcloud/CloudTLCInstanceParameters.java +++ b/org.lamport.tla.toolbox.jclouds/src/org/lamport/tla/toolbox/jcloud/CloudTLCInstanceParameters.java @@ -31,6 +31,8 @@ import java.util.Properties; import org.eclipse.core.runtime.IStatus; import org.jclouds.ContextBuilder; +import tlc2.tool.distributed.fp.TLCWorkerAndFPSet; + /** * This class serves two purposes. * @@ -40,26 +42,64 @@ import org.jclouds.ContextBuilder; public abstract class CloudTLCInstanceParameters { protected final String tlcParams; + protected final int numberOfWorkers; public CloudTLCInstanceParameters(String tlcParams) { + this(tlcParams, 1); + } + + public CloudTLCInstanceParameters(String tlcParams, int numberOfWorkers) { this.tlcParams = tlcParams; + this.numberOfWorkers = numberOfWorkers; } + // system properties + public String getJavaSystemProperties() { - return "-Dtlc2.tool.fp.FPSet.impl=tlc2.tool.fp.OffHeapDiskFPSet"; + if (numberOfWorkers == 1) { + return getJavaWorkerSystemProperties(); + } + //TODO Make this property be read from the generated.properties file + return "-Dtlc2.tool.distributed.TLCServer.expectedFPSetCount=" + (numberOfWorkers - 1); } + public String getJavaWorkerSystemProperties() { + //TODO Make this property be read from the generated.properties file + return "-Dtlc2.tool.fp.FPSet.impl=tlc2.tool.fp.OffHeapDiskFPSet"; + } + + // vm args + public String getJavaVMArgs() { + if (numberOfWorkers == 1) { + return getJavaWorkerVMArgs(); + } + return "-Xmx56G -Xms56G"; + } + + public String getJavaWorkerVMArgs() { return "-Xmx24G -Xms24G -XX:MaxDirectMemorySize=32g"; } + // tlc parameters + public String getTLCParameters() { - if (tlcParams.length() > 0) { - return "-workers 12 " + tlcParams; + if (numberOfWorkers == 1) { + if (tlcParams.length() > 0) { + return "-workers 32 " + tlcParams; + } + return "-workers 32"; + } else { + return "-coverage 0 -checkpoint 0"; } - return "-workers 12"; } + public String getTLCWorkerParameters() { + // TODO Ideally rewrite tla2tools.jar to replace the main-class in + // META-INF/MANIFEST.MF when the model/* stuff is stripped. + return TLCWorkerAndFPSet.class.getName(); + } + public abstract String getCloudProvider(); public abstract String getImageId(); diff --git a/org.lamport.tla.toolbox.jclouds/src/org/lamport/tla/toolbox/jcloud/CloudTLCJobFactory.java b/org.lamport.tla.toolbox.jclouds/src/org/lamport/tla/toolbox/jcloud/CloudTLCJobFactory.java index 182bf2b26c98b852f980df0c6ae54fc56f55a9fd..71ceb25ce0cc856990095538f1881e874efbdb7c 100644 --- a/org.lamport.tla.toolbox.jclouds/src/org/lamport/tla/toolbox/jcloud/CloudTLCJobFactory.java +++ b/org.lamport.tla.toolbox.jclouds/src/org/lamport/tla/toolbox/jcloud/CloudTLCJobFactory.java @@ -41,10 +41,13 @@ public class CloudTLCJobFactory implements TLCJobFactory { @Override public Job getTLCJob(String aName, File aModelFolder, int numberOfWorkers, final Properties props, String tlcparams) { Assert.isNotNull(aName); + Assert.isLegal(numberOfWorkers > 0); if (AWS_EC2.equals(aName)) { - return new CloudDistributedTLCJob(aName, aModelFolder, numberOfWorkers, props, new EC2CloudTLCInstanceParameters(tlcparams)); + return new CloudDistributedTLCJob(aName, aModelFolder, numberOfWorkers, props, + new EC2CloudTLCInstanceParameters(tlcparams, numberOfWorkers)); } else if (AZURECOMPUTE.equals(aName)) { - return new CloudDistributedTLCJob(aName, aModelFolder, numberOfWorkers, props, new AzureCloudTLCInstanceParameters(tlcparams)); + return new CloudDistributedTLCJob(aName, aModelFolder, numberOfWorkers, props, + new AzureCloudTLCInstanceParameters(tlcparams, numberOfWorkers)); } throw new IllegalArgumentException(aName + " is an unknown cloud"); } diff --git a/org.lamport.tla.toolbox.jclouds/src/org/lamport/tla/toolbox/jcloud/EC2CloudTLCInstanceParameters.java b/org.lamport.tla.toolbox.jclouds/src/org/lamport/tla/toolbox/jcloud/EC2CloudTLCInstanceParameters.java index 47eede7eb8694c5884a1f07e30075d459eb3bb13..c72bb0b09b412005c4a1c4fc3e12831daf3d1efc 100644 --- a/org.lamport.tla.toolbox.jclouds/src/org/lamport/tla/toolbox/jcloud/EC2CloudTLCInstanceParameters.java +++ b/org.lamport.tla.toolbox.jclouds/src/org/lamport/tla/toolbox/jcloud/EC2CloudTLCInstanceParameters.java @@ -31,11 +31,12 @@ import java.util.Properties; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.jclouds.aws.ec2.reference.AWSEC2Constants; +import org.jclouds.location.reference.LocationConstants; public class EC2CloudTLCInstanceParameters extends CloudTLCInstanceParameters { - public EC2CloudTLCInstanceParameters(final String tlcParams) { - super(tlcParams.trim()); + public EC2CloudTLCInstanceParameters(final String tlcParams, int numberOfWorkers) { + super(tlcParams.trim(), numberOfWorkers); } private String getOwnerId() { @@ -50,18 +51,21 @@ public class EC2CloudTLCInstanceParameters extends CloudTLCInstanceParameters { @Override public String getImageId() { - // Ubuntu 64bit 14.04.3 Trusty paravirtual/instance-store release + // Ubuntu 64bit 14.04.4 Trusty paravirtual/instance-store release // https://cloud-images.ubuntu.com/releases/14.04/release/ // or http://cloud-images.ubuntu.com/locator/ec2/ // See http://aws.amazon.com/amazon-linux-ami/instance-type-matrix/ // for paravirtual vs. hvm - return "us-east-1/ami-0a7a3f60"; + return getRegion() + "/ami-2ae6633c"; // "xenial,amd64,hvm:instance-store" + } + + private String getRegion() { + return "us-east-1"; } @Override public String getHardwareId() { - // m2 only support paravirtual - return "m2.4xlarge"; + return "c3.8xlarge"; } @Override @@ -98,7 +102,11 @@ public class EC2CloudTLCInstanceParameters extends CloudTLCInstanceParameters { */ @Override public void mungeProperties(Properties properties) { - properties.setProperty(AWSEC2Constants.PROPERTY_EC2_AMI_QUERY, - getOwnerId()); + properties.setProperty(AWSEC2Constants.PROPERTY_EC2_AMI_QUERY, getOwnerId()); + // Confine jclouds to a single region. Since the Toolbox only supports a + // single region, there is no point in querying others. This has been + // added because I was seeing intermittent timeouts with other regions + // (i.e. South America). + properties.setProperty(LocationConstants.PROPERTY_REGIONS, getRegion()); } } diff --git a/org.lamport.tla.toolbox.jnlp/pom.xml b/org.lamport.tla.toolbox.jnlp/pom.xml index c18fab9b369da4a0b27a6af537d0a245bd6f3473..ac2cd70c463b10b9ed89710c8f74974f510cddda 100644 --- a/org.lamport.tla.toolbox.jnlp/pom.xml +++ b/org.lamport.tla.toolbox.jnlp/pom.xml @@ -14,14 +14,16 @@ <version>1.0.0-SNAPSHOT</version> <packaging>eclipse-plugin</packaging> - <!-- These properties define a dummy certificate store that is used unless the developer passes overwrites to maven --> - <!-- see http://stackoverflow.com/a/3620575 for how such an overwrite would look like. --> - <properties> - <keystore.path>keystore</keystore.path> - <keystore.alias>msr</keystore.alias> - <keystore.store.password>secret</keystore.store.password> - <keystore.key.password>secret</keystore.key.password> - </properties> + <!-- Create a manual dependency towards the tlatools project. It creates + the tla2tools.jar that is signed here. Without the dependency, a concurrent + build will fail to sign when tlatools is built after this pom. --> + <dependencies> + <dependency> + <groupId>tlatoolbox</groupId> + <artifactId>org.lamport.tlatools</artifactId> + <version>1.0.0-SNAPSHOT</version> + </dependency> + </dependencies> <build> <plugins> @@ -171,31 +173,32 @@ <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jarsigner-plugin</artifactId> <version>1.4</version> - <configuration> - <archive>${project.build.directory}/../files/tla2tools.jar</archive> - <keystore>${keystore.path}</keystore> - <alias>${keystore.alias}</alias> - <storepass>${keystore.store.password}</storepass> - <keypass>${keystore.key.password}</keypass> - <verbose>false</verbose> - </configuration> <executions> <execution> - <phase>compile</phase> - <id>sign</id> + <configuration> + <archive>${project.build.directory}/../files/tla2tools.jar</archive> + <keystore>${keystore.path}</keystore> + <alias>${keystore.alias}</alias> + <storepass>${keystore.store.password}</storepass> + <keypass>${keystore.key.password}</keypass> + <verbose>false</verbose> + <arguments> + <!-- Embed a current timestamp in the signed content (file). With this timestamp, + the signature of the content remains valid *after* the signing certificate + expired. --> + <argument>${tsa.flag}</argument> + <argument>${tsa.server}</argument> + </arguments> + </configuration> + <phase>compile</phase> + <id>sign-jnlp</id> <goals> <goal>sign</goal> - </goals> - </execution> - <execution> - <id>verify</id> - <goals> <goal>verify</goal> </goals> </execution> </executions> </plugin> - <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-clean-plugin</artifactId> diff --git a/org.lamport.tla.toolbox.jnlp/src/org/lamport/tla/toolbox/distributed/IndexServlet.java b/org.lamport.tla.toolbox.jnlp/src/org/lamport/tla/toolbox/distributed/IndexServlet.java index d76ebc6341f86733e01fd5bfe118a93d55a5cc0f..44c89dfa733ab9ee60161b9d8877ae80a347e678 100644 --- a/org.lamport.tla.toolbox.jnlp/src/org/lamport/tla/toolbox/distributed/IndexServlet.java +++ b/org.lamport.tla.toolbox.jnlp/src/org/lamport/tla/toolbox/distributed/IndexServlet.java @@ -111,7 +111,7 @@ public class IndexServlet extends URLHttpServlet { "<li>\n" + "<p>Run from slave command line:</p>\n" + "<p><pre>" + - "javaws " + addr + " " + jnlpName + + "javaws " + addr + "/" + jnlpName + "</pre></p>\n" + "</li>"); diff --git a/org.lamport.tla.toolbox.p2repository/pom.xml b/org.lamport.tla.toolbox.p2repository/pom.xml index d2fb6b223520bf60f9401026b5234abf00b8cf2c..b653014bee563a13ff5485725c65dbf495409395 100644 --- a/org.lamport.tla.toolbox.p2repository/pom.xml +++ b/org.lamport.tla.toolbox.p2repository/pom.xml @@ -13,5 +13,8 @@ <artifactId>org.lamport.tla.toolbox.p2repository</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>eclipse-repository</packaging> - + <properties> + <!-- Do not include non-code project in Sonar reporting. --> + <sonar.skip>true</sonar.skip> + </properties> </project> diff --git a/org.lamport.tla.toolbox.product.product/TLAToolbox.target b/org.lamport.tla.toolbox.product.product/TLAToolbox.target index 742b8cb150325bb7347420d41d69b71c313f09d7..a9e9b8cf537e6a97c1ecf980da553cc9320c803f 100644 --- a/org.lamport.tla.toolbox.product.product/TLAToolbox.target +++ b/org.lamport.tla.toolbox.product.product/TLAToolbox.target @@ -1,14 +1,10 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<?pde version="3.8"?><target name="TLA+ Toolbox" sequenceNumber="70"> +<?pde version="3.8"?><target name="TLA+ Toolbox" sequenceNumber="74"> <locations> <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> <unit id="org.eclipse.contribution.weaving.feature.group" version="2.2.4.e45x-20150206-1600"/> <unit id="org.aspectj.feature.group" version="1.8.5.20150128171000"/> -<repository location="http://download.eclipse.org/tools/ajdt/mars/update/"/> -</location> -<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> -<unit id="de.vonloesch.pdf4eclipse.feature.feature.group" version="1.0.1.201502251926"/> -<repository location="http://lemmy.github.com/Pdf4Eclipse/"/> +<repository location="http://download.eclipse.org/tools/ajdt/mars/update/" id="eclipse-ajdt"/> </location> <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> <unit id="org.apache.log4j" version="1.2.15.v201012070815"/> @@ -20,36 +16,44 @@ <unit id="javax.activation" version="1.1.0.v201211130549"/> <unit id="javax.mail" version="1.4.0.v201005080615"/> <unit id="org.easymock" version="2.4.0.v20090202-0900"/> -<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20140114142710/repository/"/> +<repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20140114142710/repository/" id="eclipse-orbit"/> </location> <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> <unit id="org.eclipse.swtbot.ide.feature.group" version="2.2.1.201402241301"/> <unit id="org.eclipse.swtbot.eclipse.test.junit.feature.group" version="2.2.1.201402241301"/> <unit id="org.eclipse.swtbot.feature.group" version="2.2.1.201402241301"/> <unit id="org.eclipse.swtbot.eclipse.feature.group" version="2.2.1.201402241301"/> -<repository location="http://download.eclipse.org/technology/swtbot/releases/2.2.1/"/> +<repository location="http://download.eclipse.org/technology/swtbot/releases/2.2.1/" id="eclipse-swtbot"/> </location> <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> <unit id="org.apache.jclouds.feature.feature.group" version="0.0.0"/> <repository location="http://lemmy.github.com/jclouds2p2/"/> </location> <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> -<unit id="org.eclipse.rcp.id" version="4.5.1.M20150904-0015"/> -<unit id="org.eclipse.help.feature.group" version="2.1.1.v20150904-0015"/> -<unit id="org.eclipse.equinox.core.sdk.feature.group" version="3.11.1.v20150831-1342"/> -<unit id="org.eclipse.rcp.sdk.id" version="4.5.1.M20150904-0015"/> -<unit id="org.eclipse.platform.ide" version="4.5.1.M20150904-0015"/> -<unit id="org.eclipse.rcp.configuration.feature.group" version="1.0.101.v20150904-0015"/> -<unit id="org.eclipse.emf.ecore.feature.group" version="2.11.1.v20150805-0538"/> +<unit id="org.eclipse.rcp.id" version="4.5.2.M20160212-1500"/> +<unit id="org.eclipse.help.feature.group" version="2.1.2.v20160212-1500"/> +<unit id="org.eclipse.equinox.core.sdk.feature.group" version="3.11.2.v20160128-1406"/> +<unit id="org.eclipse.rcp.sdk.id" version="4.5.2.M20160212-1500"/> +<unit id="org.eclipse.platform.ide" version="4.5.2.M20160212-1500"/> +<unit id="org.eclipse.rcp.configuration.feature.group" version="1.0.102.v20160212-1500"/> +<unit id="org.eclipse.emf.ecore.feature.group" version="2.11.2.v20160208-0816"/> <unit id="org.eclipse.equinox.executable" version="3.6.200.v20150602-1417"/> -<unit id="org.eclipse.ecf.core.feature.feature.group" version="1.1.0.v20150810-1719"/> -<unit id="org.eclipse.e4.rcp.feature.group" version="1.4.0.v20150903-1804"/> -<unit id="org.eclipse.platform.sdk" version="4.5.1.M20150904-0015"/> -<unit id="org.eclipse.emf.common.feature.group" version="2.11.0.v20150805-0538"/> -<unit id="org.eclipse.equinox.sdk.feature.group" version="3.11.1.v20150831-1342"/> -<unit id="org.eclipse.core.runtime.feature.feature.group" version="1.1.101.v20150903-1804"/> -<unit id="org.eclipse.sdk.ide" version="4.5.1.M20150904-0015"/> -<repository location="http://download.eclipse.org/eclipse/updates/4.5/"/> +<unit id="org.eclipse.ecf.core.feature.feature.group" version="1.2.0.v20151130-0157"/> +<unit id="org.eclipse.e4.rcp.feature.group" version="1.4.1.v20160212-1350"/> +<unit id="org.eclipse.platform.sdk" version="4.5.2.M20160212-1500"/> +<unit id="org.eclipse.emf.common.feature.group" version="2.11.1.v20160208-0816"/> +<unit id="org.eclipse.equinox.sdk.feature.group" version="3.11.2.v20160202-2102"/> +<unit id="org.eclipse.core.runtime.feature.feature.group" version="1.1.102.v20160128-1558"/> +<unit id="org.eclipse.sdk.ide" version="4.5.2.M20160212-1500"/> +<repository location="http://download.eclipse.org/eclipse/updates/4.5/" id="eclipse"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="de.vonloesch.pdf4eclipse.feature.feature.group" version="1.1.0.201704071204"/> +<repository location="http://lemmy.github.com/Pdf4Eclipse/"/> +</location> +<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit"> +<unit id="com.abstratt.eclipsegraphviz.feature.feature.group" version="2.1.201501.201606262232"/> +<repository location="jar:http://repository-textuml.forge.cloudbees.com/snapshot/com/abstratt/eclipsegraphviz/com.abstratt.eclipsegraphviz.repository/2.1.201501/com.abstratt.eclipsegraphviz.repository-2.1.201501.zip!/"/> </location> </locations> <targetJRE path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/> diff --git a/org.lamport.tla.toolbox.product.product/createAptRepo.sh b/org.lamport.tla.toolbox.product.product/createAptRepo.sh new file mode 100755 index 0000000000000000000000000000000000000000..29346bd2222735927f1450916a34bcaed41cac63 --- /dev/null +++ b/org.lamport.tla.toolbox.product.product/createAptRepo.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +## Creates a basic apt repo from a single .deb file. +## Requires a passphrase-less GPG key to be available. + +REPO=$1 + +## Remove old left-overs +rm -f $REPO/Release +rm -f $REPO/Release.gpg +rm -f $REPO/Packages +rm -f $REPO/Packages.gz +rm -f $REPO/release.conf + +## Create config file for apt-archive +cat <<< ' +APT::FTPArchive::Release::Components "main"; +APT::FTPArchive::Release::Architectures "amd64"; +APT::FTPArchive::Release::Suite "stable"; +' > $REPO/release.conf + +## Create Packages and Packages.gz +dpkg-scanpackages $REPO /dev/null > $REPO/Packages +dpkg-scanpackages $REPO /dev/null | gzip -9c > $REPO/Packages.gz + +## Create Release file (refers to Packages*) +apt-ftparchive release -c $REPO/release.conf $REPO > $REPO/Release + +## Sign Release file and create Release.gpg +gpg --armor --detach-sign -o $REPO/Release.gpg --batch --no-tty --sign $REPO/Release diff --git a/org.lamport.tla.toolbox.product.product/ide/TLAPlusToolboxMavenReleaseBuild.launch b/org.lamport.tla.toolbox.product.product/ide/TLAPlusToolboxMavenReleaseBuild.launch new file mode 100644 index 0000000000000000000000000000000000000000..35678ee4cb8be97bd5da8b0a873b8de646d83221 --- /dev/null +++ b/org.lamport.tla.toolbox.product.product/ide/TLAPlusToolboxMavenReleaseBuild.launch @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType"> +<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/> +<stringAttribute key="M2_GOALS" value="-fae clean verify"/> +<booleanAttribute key="M2_NON_RECURSIVE" value="false"/> +<booleanAttribute key="M2_OFFLINE" value="false"/> +<stringAttribute key="M2_PROFILES" value=""/> +<listAttribute key="M2_PROPERTIES"> +<listEntry value="maven.test.failure.ignore=true"/> +</listAttribute> +<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/> +<booleanAttribute key="M2_SKIP_TESTS" value="false"/> +<intAttribute key="M2_THREADS" value="1"/> +<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/> +<stringAttribute key="M2_USER_SETTINGS" value=""/> +<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/> +<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${workspace}"/> +<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/> +<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${git_work_tree:tlatools}"/> +</launchConfiguration> diff --git a/org.lamport.tla.toolbox.product.product/org.lamport.tla.toolbox.product.product.product b/org.lamport.tla.toolbox.product.product/org.lamport.tla.toolbox.product.product.product index d0af1bd25cf69140657ebe0d52952d46f7796b9b..c179ab99520b4d5425d0149eaf2273486533b0c7 100644 --- a/org.lamport.tla.toolbox.product.product/org.lamport.tla.toolbox.product.product.product +++ b/org.lamport.tla.toolbox.product.product/org.lamport.tla.toolbox.product.product.product @@ -1,18 +1,18 @@ <?xml version="1.0" encoding="UTF-8"?> <?pde version="3.5"?> -<product name="TLA+ Toolbox" uid="org.lamport.tla.toolbox.product.product" id="org.lamport.tla.toolbox.product.standalone.product" application="org.lamport.tla.toolbox.application" version="1.5.2" useFeatures="true" includeLaunchers="true"> +<product name="TLA+ Toolbox" uid="org.lamport.tla.toolbox.product.product" id="org.lamport.tla.toolbox.product.standalone.product" application="org.lamport.tla.toolbox.application" version="1.5.3" useFeatures="true" includeLaunchers="true"> <aboutInfo> <image path="/org.lamport.tla.toolbox.product.standalone/images/splash_small.png"/> <text> TLA+ Toolbox provides a user interface for TLA+ Tools. -This is Version 1.5.2 of 21 December 2015 and includes: - - SANY Version 2.1 of 24 February 2014 - - TLC Version 2.08 of 21 December 2015 - - PlusCal Version 1.8 of 18 August 2015 - - TLATeX Version 1.0 of 12 April 2013 +This is Version 1.5.3 of 14 April 2017 and includes: + - SANY Version 2.1 of 10 February 2016 + - TLC Version 2.09 of 10 March 2017 + - PlusCal Version 1.8 of 07 December 2015 + - TLATeX Version 1.0 of 04 August 2015 Don't forget to click on help. You can learn about features that you never knew about or have forgotten. @@ -24,6 +24,13 @@ Please send us reports of problems or suggestions; see https://groups.google.com </configIni> <launcherArgs> + <programArgs>--launcher.defaultAction +openFile +-name +"TLA+ Toolbox" + </programArgs> + <programArgsLin>--launcher.GTK_version 2 + </programArgsLin> <vmArgs>-Xmx1000m -Dorg.eclipse.equinox.http.jetty.http.port=10996 -Dosgi.splashPath=platform:/base/ @@ -34,7 +41,6 @@ Please send us reports of problems or suggestions; see https://groups.google.com <windowImages i16="/org.lamport.tla.toolbox/icons/full/etool16/tla_launch_check_wiz_16.png" i32="/org.lamport.tla.toolbox/icons/full/etool16/tla_launch_check_wiz_32.png" i48="/org.lamport.tla.toolbox/icons/full/etool16/tla_launch_check_wiz_48.png" i64="/org.lamport.tla.toolbox/icons/full/etool16/tla_launch_check_wiz_64.png" i128="/org.lamport.tla.toolbox/icons/full/etool16/tla_launch_check_wiz_128.png" i256="/org.lamport.tla.toolbox/icons/full/etool16/tla_launch_check_wiz_256.png"/> - <launcher name="toolbox"> <solaris/> <win useIco="false"> @@ -71,7 +77,7 @@ Please send us reports of problems or suggestions; see https://groups.google.com <plugin id="org.eclipse.equinox.http.registry" autoStart="true" startLevel="3" /> <plugin id="org.lamport.tla.toolbox.jclouds" autoStart="true" startLevel="4" /> <plugin id="sts" autoStart="true" startLevel="4" /> - <property name="eclipse.buildId" value="1.5.2" /> + <property name="eclipse.buildId" value="1.5.3" /> </configurations> <repositories> diff --git a/org.lamport.tla.toolbox.product.product/pom.xml b/org.lamport.tla.toolbox.product.product/pom.xml index 30621dd4be57a9b1b4fb33ad23bb3892be411601..110cb785e85e8be60a46b9db09e1495dedb118be 100644 --- a/org.lamport.tla.toolbox.product.product/pom.xml +++ b/org.lamport.tla.toolbox.product.product/pom.xml @@ -14,6 +14,17 @@ <!-- Release version goes here. --> <version>1.4.0-SNAPSHOT</version> <packaging>eclipse-repository</packaging> + + <properties> + <!-- Align product.version with the version in + org.lamport.tla.toolbox.product.product.product + product.version. --> + <product.version>1.5.3</product.version> + <product.build>${maven.build.timestamp}</product.build> + <!-- Do not include non-code project in Sonar reporting. --> + <sonar.skip>true</sonar.skip> + </properties> + <build> <plugins> <!-- attach the .target file definition to is artifact so it can be referred @@ -75,7 +86,7 @@ over features. The version segment has to be manually increment upon a release. see https://bugs.eclipse.org/bugs/show_bug.cgi?id=357503#c22 --> - <archiveFileName>TLAToolbox-1.5.2</archiveFileName> + <archiveFileName>TLAToolbox-${product.version}</archiveFileName> <rootFolder>toolbox</rootFolder> <!-- This causes the Toolbox to be packaged as a single Application Bundle on Mac. Applciation Bundles are the default packaging for Mac where the single @@ -85,7 +96,88 @@ </products> </configuration> </plugin> - + + <!-- Package Toolbox's Linux zip for Debian/Ubuntu --> + <plugin> + <artifactId>jdeb</artifactId> + <groupId>org.vafer</groupId> + <version>1.5</version> + <executions> + <execution> + <phase>package</phase> + <goals> + <goal>jdeb</goal> + </goals> + <configuration> + <deb>${project.build.directory}/TLAToolbox-${product.version}-linux.gtk.amd64.deb</deb> + <snapshotExpand>true</snapshotExpand> + <verbose>false</verbose> + <dataSet> + <data> + <src>src/deb/usr/share/applications/tla+toolbox.desktop</src> + <type>file</type> + <mapper> + <type>perm</type> + <prefix>/usr/share/applications/</prefix> + <user>root</user> + <group>root</group> + </mapper> + </data> + <data> + <src>src/deb/usr/share/mime/packages/tla+toolbox.xml</src> + <type>file</type> + <mapper> + <type>perm</type> + <prefix>/usr/share/mime/packages/</prefix> + <user>root</user> + <group>root</group> + </mapper> + </data> + <data> + <src>src/deb/usr/share/icons/hicolor/32x32/apps/tla+toolbox.png</src> + <type>file</type> + <mapper> + <type>perm</type> + <prefix>/usr/share/icons/hicolor/32x32/apps/</prefix> + <user>root</user> + <group>root</group> + </mapper> + </data> + <data> + <src>src/deb/usr/share/icons/hicolor/48x48/apps/tla+toolbox.png</src> + <type>file</type> + <mapper> + <type>perm</type> + <prefix>/usr/share/icons/hicolor/48x48/apps/</prefix> + <user>root</user> + <group>root</group> + </mapper> + </data> + <data> + <src>${project.build.directory}/products/org.lamport.tla.toolbox.product.product/linux/gtk/x86_64/toolbox</src> + <type>directory</type> + <!-- Disable Toolbox's built-in update + manager. Using the .deb archives + is mutually exclusive with the + built-in updater. + + Technically, simply remove p2's + complete metadata from final + installation. + --> + <excludes>p2/</excludes> + <mapper> + <type>perm</type> + <prefix>/opt/TLA+Toolbox</prefix> + <user>root</user> + <group>root</group> + </mapper> + </data> + </dataSet> + </configuration> + </execution> + </executions> + </plugin> </plugins> </build> </project> diff --git a/org.lamport.tla.toolbox.product.product/src/deb/control/control b/org.lamport.tla.toolbox.product.product/src/deb/control/control new file mode 100644 index 0000000000000000000000000000000000000000..e16ba509dda940811dec24343d74bc38040f23e5 --- /dev/null +++ b/org.lamport.tla.toolbox.product.product/src/deb/control/control @@ -0,0 +1,10 @@ +Package: TLA+Toolbox +Version: [[product.version]]~[[product.build]] +Section: misc +Distribution: development +Priority: optional +Depends: default-jre (>= 1.7) +Recommends: texlive-latex-recommended, libwebkitgtk-1.0-0 +Architecture: amd64 +Description: The TLA Toolbox is an IDE (integrated development environment) for the TLA+ tools. +Maintainer: tlaplus@googlegroups.com diff --git a/org.lamport.tla.toolbox.product.product/src/deb/control/postinst b/org.lamport.tla.toolbox.product.product/src/deb/control/postinst new file mode 100644 index 0000000000000000000000000000000000000000..0dad5138297a00d8770ef64bd51ac97353766ded --- /dev/null +++ b/org.lamport.tla.toolbox.product.product/src/deb/control/postinst @@ -0,0 +1,25 @@ +#!/bin/sh + +## Fix permissions of executable +chmod 755 /opt/TLA+Toolbox/toolbox + +## Update mime database for x-tla type. +/usr/bin/update-mime-database /usr/share/mime + +## Place Toolbox's workspace directory +## in her home directory to support +## multi-user installation and not +## require user write access to +## /opt/TLA+Toolbox/. Also makes +## replacing the Toolbox less error +## prone when TLA+Toolbox is never +## touched except for dpkg. +## Having a fixed workspace location +## is also better than creating a +## workspace directory in ever directory +## from which the Toolbox is launched. +echo "-Dosgi.instance.area.default=@user.home/.tlaplus/" >> /opt/TLA+Toolbox/toolbox.ini + +#- Apt repo +#-- Jenkins Plugin +#-- https://github.com/theoweiss/apt-repo diff --git a/org.lamport.tla.toolbox.product.product/src/deb/control/postrm b/org.lamport.tla.toolbox.product.product/src/deb/control/postrm new file mode 100644 index 0000000000000000000000000000000000000000..1a2485251c33a70432394c93fb89330ef214bfc9 --- /dev/null +++ b/org.lamport.tla.toolbox.product.product/src/deb/control/postrm @@ -0,0 +1 @@ +#!/bin/sh diff --git a/org.lamport.tla.toolbox.product.product/src/deb/control/preinst b/org.lamport.tla.toolbox.product.product/src/deb/control/preinst new file mode 100644 index 0000000000000000000000000000000000000000..1a2485251c33a70432394c93fb89330ef214bfc9 --- /dev/null +++ b/org.lamport.tla.toolbox.product.product/src/deb/control/preinst @@ -0,0 +1 @@ +#!/bin/sh diff --git a/org.lamport.tla.toolbox.product.product/src/deb/control/prerm b/org.lamport.tla.toolbox.product.product/src/deb/control/prerm new file mode 100644 index 0000000000000000000000000000000000000000..1a2485251c33a70432394c93fb89330ef214bfc9 --- /dev/null +++ b/org.lamport.tla.toolbox.product.product/src/deb/control/prerm @@ -0,0 +1 @@ +#!/bin/sh diff --git a/org.lamport.tla.toolbox.product.product/src/deb/usr/share/applications/tla+toolbox.desktop b/org.lamport.tla.toolbox.product.product/src/deb/usr/share/applications/tla+toolbox.desktop new file mode 100644 index 0000000000000000000000000000000000000000..daf9c1752ab662d40be215391bc3c097ae08e3f9 --- /dev/null +++ b/org.lamport.tla.toolbox.product.product/src/deb/usr/share/applications/tla+toolbox.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=TLA+Toolbox +Comment=The TLA+ Toolbox is an integrated development environment for the TLA+ tools. +Exec=/opt/TLA+Toolbox/toolbox %f +Icon=tla+toolbox +Categories=Development; +Terminal=false +Type=Application +MimeType=text/x-tla;application/x-tla; diff --git a/org.lamport.tla.toolbox.product.product/src/deb/usr/share/icons/hicolor/32x32/apps/tla+toolbox.png b/org.lamport.tla.toolbox.product.product/src/deb/usr/share/icons/hicolor/32x32/apps/tla+toolbox.png new file mode 100644 index 0000000000000000000000000000000000000000..03fdd613f6a8f0e2748f7949a8bb2fc77206adb5 Binary files /dev/null and b/org.lamport.tla.toolbox.product.product/src/deb/usr/share/icons/hicolor/32x32/apps/tla+toolbox.png differ diff --git a/org.lamport.tla.toolbox.product.product/src/deb/usr/share/icons/hicolor/48x48/apps/tla+toolbox.png b/org.lamport.tla.toolbox.product.product/src/deb/usr/share/icons/hicolor/48x48/apps/tla+toolbox.png new file mode 100644 index 0000000000000000000000000000000000000000..dc3f548d01e48079d4c7c5284ce42f481c88748c Binary files /dev/null and b/org.lamport.tla.toolbox.product.product/src/deb/usr/share/icons/hicolor/48x48/apps/tla+toolbox.png differ diff --git a/org.lamport.tla.toolbox.product.product/src/deb/usr/share/mime/packages/tla+toolbox.xml b/org.lamport.tla.toolbox.product.product/src/deb/usr/share/mime/packages/tla+toolbox.xml new file mode 100644 index 0000000000000000000000000000000000000000..8cba90c603edf11b4d320831e6e57831d173bfd6 --- /dev/null +++ b/org.lamport.tla.toolbox.product.product/src/deb/usr/share/mime/packages/tla+toolbox.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info"> + <mime-type type="application/x-tla"> + <comment>TLA+ specification</comment> + <sub-class-of type="text/plain"/> + <glob pattern="*.tla"/> + <alias type="text/x-tla"/> + </mime-type> +</mime-info> diff --git a/org.lamport.tla.toolbox.product.standalone/plugin.xml b/org.lamport.tla.toolbox.product.standalone/plugin.xml index 66f90b8f93e46005de8dbbb7beaa30a4f9b13498..4c4d8dbd0cb940bcfdab73cf7903311d3fee6f0d 100644 --- a/org.lamport.tla.toolbox.product.standalone/plugin.xml +++ b/org.lamport.tla.toolbox.product.standalone/plugin.xml @@ -30,7 +30,7 @@ </property> <property name="aboutText" - value="TLA+ Toolbox provides a user interface for TLA+ Tools. 

This is Version 1.5.2 of 21 December 2015 and includes:
 - SANY Version 2.1 of 24 February 2014
 - TLC Version 2.08 of 21 December 2015
 - PlusCal Version 1.8 of 18 August 2015
 - TLATeX Version 1.0 of 12 April 2013

Don't forget to click on help. You can learn about features that you never knew about or have forgotten.

Please send us reports of problems or suggestions; see https://groups.google.com/d/forum/tlaplus ."> + value="TLA+ Toolbox provides a user interface for TLA+ Tools. 

This is Version 1.5.3 of 14 April 2017 and includes:
 - SANY Version 2.1 of 10 February 2016
 - TLC Version 2.09 of 10 March 2017
 - PlusCal Version 1.8 of 07 December 2015
 - TLATeX Version 1.0 of 04 August 2015

Don't forget to click on help. You can learn about features that you never knew about or have forgotten.

Please send us reports of problems or suggestions; see https://groups.google.com/d/forum/tlaplus ."> </property> <property name="aboutImage" @@ -40,6 +40,10 @@ name="appName" value="TLA+ Toolbox"> </property> + <property + name="lifeCycleURI" + value="bundleclass://org.lamport.tla.toolbox/org.lamport.tla.toolbox.OpenFileManager"> + </property> </product> </extension> diff --git a/org.lamport.tla.toolbox.product.standalone/src/org/lamport/tla/toolbox/Application.java b/org.lamport.tla.toolbox.product.standalone/src/org/lamport/tla/toolbox/Application.java index 25fa173b0a3c95b754811cf402bb70f624b2cf29..57d6bef6c26858a8d7a9098b285f75a0cbfaf54a 100644 --- a/org.lamport.tla.toolbox.product.standalone/src/org/lamport/tla/toolbox/Application.java +++ b/org.lamport.tla.toolbox.product.standalone/src/org/lamport/tla/toolbox/Application.java @@ -3,6 +3,9 @@ package org.lamport.tla.toolbox; import java.io.File; import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; import org.eclipse.core.runtime.Platform; import org.eclipse.equinox.app.IApplication; @@ -13,6 +16,7 @@ import org.eclipse.osgi.util.NLS; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.internal.ide.ChooseWorkspaceData; /** * This class controls all aspects of the application's execution @@ -72,6 +76,18 @@ public class Application implements IApplication { System.exit(0); } + // CWD is Eclipse infrastructure which stores the location of the + // current workspace in a (text) file in the configuration area (Toolbox + // installation directory). With version 1.5.4 of the Toolbox, we will + // use this information to migrate all workspaces to @user.home/.tlaplus. + final ChooseWorkspaceData launchData = new ChooseWorkspaceData(instanceLocation.getDefault()); + final Set s = new HashSet(Arrays.asList(launchData.getRecentWorkspaces())); + // Remove null if recent workspaces above was empty (e.g. upon first toolbox startup). + s.add(instanceLocation.getURL().toExternalForm()); + s.remove(null); + launchData.setRecentWorkspaces((String[]) s.toArray(new String[s.size()])); + launchData.writePersistedData(); + Display display = PlatformUI.createDisplay(); try { int returnCode = PlatformUI.createAndRunWorkbench(display, diff --git a/org.lamport.tla.toolbox.product.standalone/src/org/lamport/tla/toolbox/ApplicationActionBarAdvisor.java b/org.lamport.tla.toolbox.product.standalone/src/org/lamport/tla/toolbox/ApplicationActionBarAdvisor.java index 41f9d82b752f2d6c29c4109936670960c2516a26..711836e9a55545d038625ca79a0be50c5696fefa 100644 --- a/org.lamport.tla.toolbox.product.standalone/src/org/lamport/tla/toolbox/ApplicationActionBarAdvisor.java +++ b/org.lamport.tla.toolbox.product.standalone/src/org/lamport/tla/toolbox/ApplicationActionBarAdvisor.java @@ -126,7 +126,7 @@ public class ApplicationActionBarAdvisor extends ActionBarAdvisor // Menu bar contributions via plugin.xmls final Separator separator = new Separator("toolbox.tools.separator"); - separator.setVisible(false); // @see http://bugzilla.tlaplus.net/show_bug.cgi?id=27 + separator.setVisible(false); // @see Bug #27 in general/bugzilla/index.html // finally add to menu bar menuBar.add(fileMenu); diff --git a/org.lamport.tla.toolbox.product.standalone/src/org/lamport/tla/toolbox/ApplicationWorkbenchWindowAdvisor.java b/org.lamport.tla.toolbox.product.standalone/src/org/lamport/tla/toolbox/ApplicationWorkbenchWindowAdvisor.java index 61148738ee959d3c84f79b7b082460de0994d8a6..7a49aa72ce8f7c6dc8e827ef44c23c6590fd543e 100644 --- a/org.lamport.tla.toolbox.product.standalone/src/org/lamport/tla/toolbox/ApplicationWorkbenchWindowAdvisor.java +++ b/org.lamport.tla.toolbox.product.standalone/src/org/lamport/tla/toolbox/ApplicationWorkbenchWindowAdvisor.java @@ -54,7 +54,7 @@ public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor final PreferenceManager preferenceManager = PlatformUI.getWorkbench().getPreferenceManager(); final IPreferenceNode[] rootSubNodes = preferenceManager.getRootSubNodes(); - // @see http://bugzilla.tlaplus.net/show_bug.cgi?id=191 + // @see Bug #191 in general/bugzilla/index.html final List filters = new ArrayList(); filters.add("org.eclipse.compare"); // The following three preferences are shown because the Toolbox uses @@ -63,6 +63,13 @@ public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor filters.add("org.eclipse.ui.trace"); filters.add("org.eclipse.jsch.ui"); + // Filter out Pdf4Eclipse preference page. + filters.add("de.vonloesch.pdf4Eclipse"); + + // Filter out GraphViz + //TODO Move its configuration (path to dot) into Toolbox specific preference page. + filters.add("com.abstratt.graphviz.ui"); + // Clean the preferences final List elements = preferenceManager.getElements(PreferenceManager.POST_ORDER); for (Iterator iterator = elements.iterator(); iterator.hasNext();) { diff --git a/org.lamport.tla.toolbox.product.standalone/src/org/lamport/tla/toolbox/ui/intro/ToolboxIntroPart.java b/org.lamport.tla.toolbox.product.standalone/src/org/lamport/tla/toolbox/ui/intro/ToolboxIntroPart.java index 4fea0972b82b40db8f5aaeee8d78774e94aca9ae..c73604876bedbf1142766483ad593f4113b6c782 100644 --- a/org.lamport.tla.toolbox.product.standalone/src/org/lamport/tla/toolbox/ui/intro/ToolboxIntroPart.java +++ b/org.lamport.tla.toolbox.product.standalone/src/org/lamport/tla/toolbox/ui/intro/ToolboxIntroPart.java @@ -175,7 +175,7 @@ public class ToolboxIntroPart extends IntroPart implements IIntroPart { final Label lblVersion = new Label(outerContainer, SWT.WRAP); lblVersion.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1)); - lblVersion.setText("Version 1.5.2 of 21 December 2015"); + lblVersion.setText("Version 1.5.3 of 14 April 2017"); lblVersion.setBackground(backgroundColor); } diff --git a/org.lamport.tla.toolbox.test/.classpath b/org.lamport.tla.toolbox.test/.classpath index 64c5e31b7a264082f4c1dfdabb8097de820e66ce..098194ca4b7d8f45177f94e735506ae3a26b5c94 100644 --- a/org.lamport.tla.toolbox.test/.classpath +++ b/org.lamport.tla.toolbox.test/.classpath @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/> <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src"/> <classpathentry kind="output" path="bin"/> diff --git a/org.lamport.tla.toolbox.test/.settings/org.eclipse.jdt.core.prefs b/org.lamport.tla.toolbox.test/.settings/org.eclipse.jdt.core.prefs index 757337aeb49cf2a418644b080a2c19c6655bd9f2..f42de363afaae68bbd968318f1d331877f5514fc 100644 --- a/org.lamport.tla.toolbox.test/.settings/org.eclipse.jdt.core.prefs +++ b/org.lamport.tla.toolbox.test/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,7 @@ -#Fri May 20 10:15:32 CEST 2011 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.compliance=1.7 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.5 +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/org.lamport.tla.toolbox.test/META-INF/MANIFEST.MF b/org.lamport.tla.toolbox.test/META-INF/MANIFEST.MF index dff6cd4fe2b2eec960114ab604fdf3a51d3c9807..514d9a91a97905add6520ab952ee2d101c21eaca 100644 --- a/org.lamport.tla.toolbox.test/META-INF/MANIFEST.MF +++ b/org.lamport.tla.toolbox.test/META-INF/MANIFEST.MF @@ -5,7 +5,7 @@ Bundle-Name: Generic Toolbox Test Bundle-SymbolicName: org.lamport.tla.toolbox.test Bundle-Version: 1.0.0.qualifier Bundle-Vendor: Leslie Lamport, Markus Alexander Kuppe -Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Import-Package: org.osgi.framework;version="1.3.0" Require-Bundle: org.eclipse.swt;bundle-version="3.5.0", org.junit;bundle-version="3.8.2" diff --git a/org.lamport.tla.toolbox.test/pom.xml b/org.lamport.tla.toolbox.test/pom.xml index 1729cfa999936207bb97c6b389592251703d1581..9b65c29fdc7b595c6ed9a7d95ae066495d03b5d3 100644 --- a/org.lamport.tla.toolbox.test/pom.xml +++ b/org.lamport.tla.toolbox.test/pom.xml @@ -13,9 +13,30 @@ <artifactId>org.lamport.tla.toolbox.test</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>eclipse-test-plugin</packaging> + <properties> + <!-- Do not include test project in Sonar reporting. --> + <sonar.skip>true</sonar.skip> + </properties> + <build> <plugins> - <!-- Pro tip for Linux developers: Use a different display for UI tests --> + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <version>0.7.9</version> + <executions> + <execution> + <goals> + <goal>prepare-agent</goal> + </goals> + <configuration> + <!-- Where to put jacoco coverage report --> + <destFile>target/jacoco.exec</destFile> + </configuration> + </execution> + </executions> + </plugin> + <!-- Pro tip for Linux developers: Use a different display for UI tests --> <!-- Known eclipse defect --> <plugin> <artifactId>maven-antrun-plugin</artifactId> @@ -64,7 +85,7 @@ <showEclipseLog>true</showEclipseLog> <useUIHarness>true</useUIHarness> <useUIThread>${tycho.test.vm.useUiThread}</useUIThread> - <argLine>${tycho.test.vm.argline}</argLine> + <argLine>${tycho.test.vm.argline} ${tycho.testArgLine}</argLine> <dependencies> <dependency> <type>p2-installable-unit</type> diff --git a/org.lamport.tla.toolbox.test/src/org/lamport/tla/toolbox/spec/SpecTest.java b/org.lamport.tla.toolbox.test/src/org/lamport/tla/toolbox/spec/SpecTest.java index deb0e2dad92543e298a4c4c73f8768f01495cedf..1c03d01324fadde92891ec76d7bad183f92ec953 100644 --- a/org.lamport.tla.toolbox.test/src/org/lamport/tla/toolbox/spec/SpecTest.java +++ b/org.lamport.tla.toolbox.test/src/org/lamport/tla/toolbox/spec/SpecTest.java @@ -28,17 +28,24 @@ package org.lamport.tla.toolbox.spec; import java.io.File; import java.io.IOException; - -import junit.framework.TestCase; +import java.nio.file.Files; +import java.nio.file.Path; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IWorkspace; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.preference.IPreferenceStore; +import org.junit.Assert; +import org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager; import org.lamport.tla.toolbox.util.ResourceHelper; import org.lamport.tla.toolbox.util.pref.IPreferenceConstants; import org.lamport.tla.toolbox.util.pref.PreferenceStoreHelper; +import junit.framework.TestCase; + public class SpecTest extends TestCase { /* @@ -51,11 +58,11 @@ public class SpecTest extends TestCase { * org.lamport.tla.toolbox.util.ResourceHelper.isProjectParent(IPath, * IProject) for the reason why. Maven build sets this VM property. */ - public void testCreateSpecStoreRelativePath() throws IOException { + public void testCreateSpecStoreRelativePath() throws IOException, CoreException { // Create... - final File tempFile = File.createTempFile("TestSpecName", ".tla"); - final Spec spec = Spec.createNewSpec("TestSpecName", tempFile.getAbsolutePath(), false, new NullProgressMonitor()); - + final File tempFile = File.createTempFile("TestCreateSpecStoreRelativePath", ".tla"); + final Spec spec = Spec.createNewSpec("TestCreateSpecStoreRelativePath", tempFile.getAbsolutePath(), false, new NullProgressMonitor()); + // ...check it's correct. final IProject project = spec.getProject(); final IPreferenceStore store = PreferenceStoreHelper.getProjectPreferenceStore(project); @@ -68,4 +75,62 @@ public class SpecTest extends TestCase { assertTrue(rootFile.isLinked()); assertTrue(rootFile.isAccessible()); } + + /* + * Tries to create a new spec in a read-only directory. Expects a + * CoreException to be thrown. The CoreException is caught by the Toolbox UI + * eventually telling the user what happened. + * + * This Test fails on Microsoft Windows because setReadOnly has not the + * desired effect. + */ + public void testCreateSpecInReadOnlyDirectory() throws IOException { + // Create... + final Path tempDirectory = Files.createTempDirectory("ReadOnlyDirectory" + System.currentTimeMillis()); + final File tempFile = Files.createTempFile(tempDirectory, "TestCreateSpecInReadOnlyDirectory", ".tla").toFile(); + tempDirectory.toFile().setReadOnly(); + try { + Spec.createNewSpec("TestCreateSpecInReadOnlyDirectory", tempFile.getAbsolutePath(), false, new NullProgressMonitor()); + } catch (CoreException e) { + assertTrue(e.getMessage().contains("read-only")); + return; + } finally { + tempDirectory.toFile().setWritable(true); + } + Assert.fail("Creating a spec in a read-only directory should fail with a CoreException."); + } + + /* + * Verify that specs and the their corresponding project are deleted correctly. + */ + public void testCreateDeleteSpec() throws CoreException, IOException { + createDelete("TestCreateDeleteSpec", true); + } + + /* + * Verify that specs and the their corresponding project are deleted correctly with forget. + */ + public void testCreateDeleteSpecForget() throws CoreException, IOException { + createDelete("TestCreateDeleteSpecForget", true); + } + + private void createDelete(final String specName, boolean forget) throws IOException, CoreException { + // Create... + final File tempFile = File.createTempFile(specName, ".tla"); + final Spec spec = Spec.createNewSpec("TestCreateDeleteSpec", tempFile.getAbsolutePath(), false, new NullProgressMonitor()); + final IProject project = spec.getProject(); + + final WorkspaceSpecManager wsm = new WorkspaceSpecManager(new NullProgressMonitor()); + wsm.removeSpec(spec, new NullProgressMonitor(), forget); + + // Make sure that the project has been deleted. + assertFalse(project.exists()); + final IWorkspace ws = ResourcesPlugin.getWorkspace(); + for (final IProject aProject : ws.getRoot().getProjects()) { + assertNotSame(project.getName(), aProject.getName()); + } + + Spec mostRecentlyOpenedSpec = wsm.getMostRecentlyOpenedSpec(); + assertNull(mostRecentlyOpenedSpec != null ? mostRecentlyOpenedSpec.getName() : "", mostRecentlyOpenedSpec); + } } diff --git a/org.lamport.tla.toolbox.test/src/org/lamport/tla/toolbox/ui/handler/NewSpecHandlerTest.java b/org.lamport.tla.toolbox.test/src/org/lamport/tla/toolbox/ui/handler/NewSpecHandlerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..1cd81c1e2619eeb1adeba7ea7978655a7c96c307 --- /dev/null +++ b/org.lamport.tla.toolbox.test/src/org/lamport/tla/toolbox/ui/handler/NewSpecHandlerTest.java @@ -0,0 +1,133 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package org.lamport.tla.toolbox.ui.handler; + +import java.io.IOException; +import java.nio.file.Files; +import java.util.concurrent.CountDownLatch; + +import org.eclipse.core.resources.IWorkspace; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.IJobChangeEvent; +import org.eclipse.core.runtime.jobs.JobChangeAdapter; +import org.lamport.tla.toolbox.Activator; +import org.lamport.tla.toolbox.spec.Spec; +import org.lamport.tla.toolbox.ui.handler.NewSpecHandler.NewSpecHandlerJob; + +import junit.framework.TestCase; + +public class NewSpecHandlerTest extends TestCase { + + public void testNewSpecHandlerSuccess() throws InterruptedException, IOException { + assertTrue(runJob("TestNewSpecHandlerSuccess").isOK()); + + // Do some cleanup, leftovers seem to interfere with other tests. + final Spec spec = Activator.getSpecManager().getSpecByName("TestNewSpecHandlerSuccess"); + Activator.getSpecManager().removeSpec(spec, new NullProgressMonitor(), true); + assertNull(Activator.getSpecManager().getSpecByName("TestNewSpecHandlerSuccess")); + } + + public void testNewSpecHandlerFail() throws InterruptedException, IOException, CoreException { + // Create a project (not a specification) that is going to be in the way + // of the NewSpecHandler and which will make it fail. + final IWorkspace ws = ResourcesPlugin.getWorkspace(); + ws.getRoot().getProject("TestNewSpecHandlerFail").create(new NullProgressMonitor()); + assertTrue(ws.getRoot().getProject("TestNewSpecHandlerFail").exists()); + + // Above only creates a project but not a spec. + assertNull(Activator.getSpecManager().getSpecByName("TestNewSpecHandlerFail")); + + // Try to create a spec the Toolbox way which is supposed to fail. + final IStatus iStatus = runJob("TestNewSpecHandlerFail"); + assertEquals(Status.ERROR, iStatus.getSeverity()); + + // As a result of the above failed attempt to create a spec + // 'TestNewSpecHandlerFail', a spec should appear in the SpecManager + // with a file named "Delete me". + final Spec spec = Activator.getSpecManager().getSpecByName("TestNewSpecHandlerFail"); + assertEquals("Failed to find 'Delete me' spec in ToolboxExplorer", "Delete me", spec.getRootFile().getName()); + + // Verify that this spec can be deleted and is gone afterwards + // (including the dangling project this is all about). + Activator.getSpecManager().removeSpec(spec, new NullProgressMonitor(), true); + assertNull(Activator.getSpecManager().getSpecByName("TestNewSpecHandlerFail")); + assertFalse(ws.getRoot().getProject("TestNewSpecHandlerFail").exists()); + } + + private IStatus runJob(String specName) throws IOException, InterruptedException { + final NewSpecHandlerJob job = new NewSpecHandlerJob(specName, + Files.createTempFile(specName, ".tla").toFile().getAbsolutePath(), false); + MyJobChangeAdapter listener = new MyJobChangeAdapter(); + job.addJobChangeListener(listener); + job.schedule(); + + listener.await(); + + assertNotNull(listener.getOuterEvent()); + return listener.getOuterEvent(); + } + + private static class MyJobChangeAdapter extends JobChangeAdapter { + + private IStatus outerEvent; + + private final CountDownLatch cdl; + + public MyJobChangeAdapter() { + cdl = new CountDownLatch(1); + } + + public void await() throws InterruptedException { + cdl.await(); + } + + /** + * @return the outerEvent + */ + public IStatus getOuterEvent() { + return outerEvent; + } + + /* + * (non-Javadoc) + * + * @see + * org.eclipse.core.runtime.jobs.JobChangeAdapter#done(org.eclipse.core. + * runtime.jobs.IJobChangeEvent) + */ + @Override + public void done(final IJobChangeEvent event) { + super.done(event); + outerEvent = event.getResult(); + cdl.countDown(); + } + } +} diff --git a/org.lamport.tla.toolbox.tool.prover/src/org/lamport/tla/toolbox/tool/prover/ui/ProverUIActivator.java b/org.lamport.tla.toolbox.tool.prover/src/org/lamport/tla/toolbox/tool/prover/ui/ProverUIActivator.java index 4999efcf50929f5b665280fcdd96c16bb3b354b1..2da0de381c69541e37e35456bc0fac620d5cc886 100644 --- a/org.lamport.tla.toolbox.tool.prover/src/org/lamport/tla/toolbox/tool/prover/ui/ProverUIActivator.java +++ b/org.lamport.tla.toolbox.tool.prover/src/org/lamport/tla/toolbox/tool/prover/ui/ProverUIActivator.java @@ -39,7 +39,7 @@ public class ProverUIActivator extends AbstractTLCActivator // public void run() { // // Using somebody's else PreferenceStore is not a good idea! // // Use ProverUIActivator.getDefault().getPreferenceStore() instead. -// // @see https://bugzilla.tlaplus.net/show_bug.cgi?id=261 +// // @see Bug #261 in general/bugzilla/index.html // IPreferenceStore store = getDefault().getPreferenceStore(); // // /* diff --git a/org.lamport.tla.toolbox.tool.prover/src/org/lamport/tla/toolbox/tool/prover/ui/preference/ProverPreferencePage.java b/org.lamport.tla.toolbox.tool.prover/src/org/lamport/tla/toolbox/tool/prover/ui/preference/ProverPreferencePage.java index db99f78d8f1644883d83d4e26e7dc3ee5404d09a..cd6ed3031751eb7876e443b31a3f2fdc3e8403c9 100644 --- a/org.lamport.tla.toolbox.tool.prover/src/org/lamport/tla/toolbox/tool/prover/ui/preference/ProverPreferencePage.java +++ b/org.lamport.tla.toolbox.tool.prover/src/org/lamport/tla/toolbox/tool/prover/ui/preference/ProverPreferencePage.java @@ -116,7 +116,7 @@ public class ProverPreferencePage extends FieldEditorPreferencePage implements I { super(GRID); // Using somebody's else PreferenceStore is not a good idea! - // @see https://bugzilla.tlaplus.net/show_bug.cgi?id=261 + // @see Bug #261 in general/bugzilla/index.html final IPreferenceStore[] preferenceStores = new IPreferenceStore[2]; preferenceStores[0] = EditorsUI.getPreferenceStore(); preferenceStores[1] = ProverUIActivator.getDefault().getPreferenceStore(); diff --git a/org.lamport.tla.toolbox.tool.tla2tex.test/.project b/org.lamport.tla.toolbox.tool.tla2tex.test/.project deleted file mode 100644 index 4de2940aa207dfc098124822af98d4b49a66b1eb..0000000000000000000000000000000000000000 --- a/org.lamport.tla.toolbox.tool.tla2tex.test/.project +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>org.lamport.tla.toolbox.tool.tla2tex.test</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - </buildSpec> - <natures> - </natures> -</projectDescription> diff --git a/org.lamport.tla.toolbox.tool.tla2tex.uitest/pom.xml b/org.lamport.tla.toolbox.tool.tla2tex.uitest/pom.xml index 9a21a5b658187e0428086d031fcf6c4cf96fed58..4fe11a57f0d3479c4cbd68b9409487b13e71fba0 100644 --- a/org.lamport.tla.toolbox.tool.tla2tex.uitest/pom.xml +++ b/org.lamport.tla.toolbox.tool.tla2tex.uitest/pom.xml @@ -13,34 +13,29 @@ <artifactId>org.lamport.tla.toolbox.tool.tla2tex.uitest</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>eclipse-test-plugin</packaging> + <properties> + <!-- Do not include test project in Sonar reporting. --> + <sonar.skip>true</sonar.skip> + </properties> <build> <plugins> - <!-- Forcefully install Equinox Weaving jar into local repo --> - <!-- remove once https://issues.sonatype.org/browse/TYCHO-333 fixed --> <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-install-plugin</artifactId> - <version>2.2</version> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <version>0.7.9</version> <executions> <execution> - - <id>it-preparation</id> - <phase>pre-integration-test</phase> <goals> - <goal>install-file</goal> + <goal>prepare-agent</goal> </goals> <configuration> - <file>${settings.localRepository}/p2/osgi/bundle/org.eclipse.equinox.weaving.hook/1.1.100.v20140821-1915/org.eclipse.equinox.weaving.hook-1.1.100.v20140821-1915.jar</file> - <groupId>tlatoolbox</groupId> - <artifactId>org.eclipse.equinox.weaving.hook</artifactId> - <version>1.1.100.v20140821-1915</version> - <packaging>jar</packaging> + <!-- Where to put jacoco coverage report --> + <destFile>target/jacoco.exec</destFile> </configuration> </execution> </executions> </plugin> - <!-- Run JUnit tests --> <plugin> <groupId>org.eclipse.tycho</groupId> @@ -51,7 +46,7 @@ <showEclipseLog>true</showEclipseLog> <useUIHarness>true</useUIHarness> <useUIThread>${tycho.test.vm.useUiThread}</useUIThread> - <argLine>${tycho.test.vm.argline}</argLine> + <argLine>${tycho.test.vm.argline} ${tycho.testArgLine}</argLine> <!-- use our product and application to launch the tests --> <product>org.lamport.tla.toolbox.product.standalone.product</product> <application>org.lamport.tla.toolbox.application</application> @@ -59,7 +54,7 @@ <systemProperties combine.children="append"> <!-- References used by tests to access spec files --> <org.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecA>${project.build.directory}/../../org.lamport.tla.toolbox.uitest/farsite/DistributedSystemModule.tla</org.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecA> - <org.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecB>${project.build.directory}/../../examples/DieHard/DieHard.tla</org.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecB> + <org.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecB>${project.build.directory}/../../org.lamport.tla.toolbox.uitest/DieHard/DieHard.tla</org.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecB> <!-- JDT weaving debug output --> <aj.weaving.verbose>true</aj.weaving.verbose> <org.aspectj.weaver.showWeaveInfo>false</org.aspectj.weaver.showWeaveInfo> @@ -118,7 +113,7 @@ <!-- Enable JDT weaving --> <frameworkExtensions> <frameworkExtension> - <groupId>tlatoolbox</groupId> + <groupId>p2.osgi.bundle</groupId> <artifactId>org.eclipse.equinox.weaving.hook</artifactId> <version>1.1.100.v20140821-1915</version> </frameworkExtension> diff --git a/org.lamport.tla.toolbox.tool.tla2tex/META-INF/MANIFEST.MF b/org.lamport.tla.toolbox.tool.tla2tex/META-INF/MANIFEST.MF index 1f6bf9c45a420bce6cc6000d7b4cf6c9134539aa..3d23cbaf1d78a632f214b094ff7b47cb7a92aa93 100644 --- a/org.lamport.tla.toolbox.tool.tla2tex/META-INF/MANIFEST.MF +++ b/org.lamport.tla.toolbox.tool.tla2tex/META-INF/MANIFEST.MF @@ -13,5 +13,7 @@ Bundle-ActivationPolicy: lazy Bundle-RequiredExecutionEnvironment: J2SE-1.5 Bundle-Vendor: Daniel Ricketts Import-Package: org.eclipse.core.resources, + org.eclipse.e4.core.services.events, org.eclipse.ui, - org.eclipse.ui.forms.editor + org.eclipse.ui.forms.editor, + org.osgi.service.event;version="1.3.1" diff --git a/org.lamport.tla.toolbox.tool.tla2tex/build.properties b/org.lamport.tla.toolbox.tool.tla2tex/build.properties index 6f20375d6c7d98fbc80bb5da99be9866b1fe2f73..285b8bf47b6f777dcb23e9b8224db2b68f70e9b6 100644 --- a/org.lamport.tla.toolbox.tool.tla2tex/build.properties +++ b/org.lamport.tla.toolbox.tool.tla2tex/build.properties @@ -2,4 +2,5 @@ source.. = src/ output.. = bin/ bin.includes = META-INF/,\ .,\ - plugin.xml + plugin.xml,\ + icons/ diff --git a/org.lamport.tla.toolbox.tool.tla2tex/icons/document-pdf.png b/org.lamport.tla.toolbox.tool.tla2tex/icons/document-pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..c68ab66ca23e371d9a42fe97132b3b2707cc3271 Binary files /dev/null and b/org.lamport.tla.toolbox.tool.tla2tex/icons/document-pdf.png differ diff --git a/org.lamport.tla.toolbox.tool.tla2tex/plugin.xml b/org.lamport.tla.toolbox.tool.tla2tex/plugin.xml index e88c6fa46c049df49407eb9857a37edb7cfd3fe3..4cf55630046678c002574b4e8d772cba871ad34f 100644 --- a/org.lamport.tla.toolbox.tool.tla2tex/plugin.xml +++ b/org.lamport.tla.toolbox.tool.tla2tex/plugin.xml @@ -62,5 +62,25 @@ class="org.lamport.tla.toolbox.tool.tla2tex.preference.TLA2TeXPreferenceInitializer"> </initializer> </extension> + <extension + point="org.eclipse.ui.views"> + <view + allowMultiple="true" + class="org.lamport.tla.toolbox.tool.tla2tex.view.PDFBrowser" + icon="icons/document-pdf.png" + id="org.lamport.tla.toolbox.tool.tla2tex.PDFBrowser" + name="PDFBrowser" + restorable="false"> + </view> + </extension> + <extension + point="org.eclipse.ui.bindings"> + <key + commandId="toolbox.command.tla2tex.producePDF" + contextId="org.eclipse.ui.contexts.window" + schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" + sequence="M1+M3+P"> + </key> + </extension> </plugin> diff --git a/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/handler/AbstractPDFViewerRunnable.java b/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/handler/AbstractPDFViewerRunnable.java index 515af7502231090809191c5ee9fa73382e846c72..648bc2c7256311481c4ed70e5971a92485cff1b8 100644 --- a/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/handler/AbstractPDFViewerRunnable.java +++ b/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/handler/AbstractPDFViewerRunnable.java @@ -2,26 +2,130 @@ package org.lamport.tla.toolbox.tool.tla2tex.handler; import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.Assert; +import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.e4.core.services.events.IEventBroker; +import org.eclipse.ui.IPartListener; +import org.eclipse.ui.IPartService; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IWorkbenchPartSite; +import org.lamport.tla.toolbox.editor.basic.TLAEditor; +import org.lamport.tla.toolbox.tool.tla2tex.TLA2TeXActivator; +import org.lamport.tla.toolbox.tool.tla2tex.preference.ITLA2TeXPreferenceConstants; import org.lamport.tla.toolbox.util.ResourceHelper; +import org.osgi.service.event.Event; +import org.osgi.service.event.EventHandler; -public abstract class AbstractPDFViewerRunnable implements Runnable { +public abstract class AbstractPDFViewerRunnable implements EventHandler, IPartListener, Runnable { protected IFile outputFile; - protected long translationStartTime; protected IProgressMonitor monitor; protected String outputFileName; + + private final ProducePDFHandler handler; + protected final IResource specFile; + protected IWorkbenchPart part; + + public AbstractPDFViewerRunnable(ProducePDFHandler handler, IWorkbenchPartSite site, IResource aSpecFile) { + Assert.isNotNull(handler); + Assert.isNotNull(site); + Assert.isNotNull(aSpecFile); + this.handler = handler; + this.specFile = aSpecFile; + + final boolean autoRegenerate = TLA2TeXActivator.getDefault().getPreferenceStore() + .getBoolean(ITLA2TeXPreferenceConstants.AUTO_REGENERATE); + if (autoRegenerate) { + // Subscribe to the event bus with which the TLA Editor save events are + // distributed. In other words, every time the user saves a spec, we + // receive an event and provided the spec corresponds to this PDF, we + // regenerate it. + // Don't subscribe in EmbeddedPDFViewerRunnable#though, because it is run + // repeatedly and thus would cause us to subscribe multiple times. + final IEventBroker eventService = site.getService(IEventBroker.class); + Assert.isTrue(eventService.subscribe(TLAEditor.SAVE_EVENT, this)); + + // Register for part close events to deregister the event handler + // subscribed to the event bus. There is no point in regenerating + // the PDF if no PDFEditor is open anymore. + final IPartService partService = site.getService(IPartService.class); + partService.addPartListener(this); + } + } - public void setFile(String outputFileName) { + public void setFile(String outputFileName) throws CoreException { this.outputFileName = outputFileName; this.outputFile = (IFile) ResourceHelper.getResourceByName(outputFileName); } - - public void setStartTime(long translationStartTime) { - this.translationStartTime = translationStartTime; - } public void setMonitor(IProgressMonitor monitor) { this.monitor = monitor; } + + protected void preUpdate() { + // No-op + } + + /* EventHandler */ + + /* (non-Javadoc) + * @see org.osgi.service.event.EventHandler#handleEvent(org.osgi.service.event.Event) + */ + public void handleEvent(final Event event) { + // Listen for TLAEditor/save to regenerate the PDF and refresh the + // editor iff the event DATA corresponds to this.specFile. There might + // be several PDFs open each responsible for a certain spec. + if (TLAEditor.SAVE_EVENT.equals(event.getTopic())) { + final Object property = event.getProperty(IEventBroker.DATA); + if (property instanceof IFile && this.specFile.equals(property)) { + preUpdate(); + handler.runPDFJob(this, specFile); + } + } + } + + /* IPartListener */ + + /* (non-Javadoc) + * @see org.eclipse.ui.IPartListener#partClosed(org.eclipse.ui.IWorkbenchPart) + */ + public void partClosed(IWorkbenchPart aPart) { + // Listen for PDFEditor close events to de-register this event listener + // from receiving further TLAEditor/save events. If the user closes the + // PDFEditor, it implicitly means she's no longer interested in the PDF. + if (aPart == part) { + final IEventBroker service = aPart.getSite().getService(IEventBroker.class); + service.unsubscribe(this); + } + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IPartListener#partActivated(org.eclipse.ui.IWorkbenchPart) + */ + public void partActivated(IWorkbenchPart part) { + // no-op + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IPartListener#partBroughtToTop(org.eclipse.ui.IWorkbenchPart) + */ + public void partBroughtToTop(IWorkbenchPart part) { + // no-op + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IPartListener#partDeactivated(org.eclipse.ui.IWorkbenchPart) + */ + public void partDeactivated(IWorkbenchPart part) { + // no-op + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IPartListener#partOpened(org.eclipse.ui.IWorkbenchPart) + */ + public void partOpened(IWorkbenchPart part) { + // no-op + } } diff --git a/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/handler/EmbeddedPDFViewerRunnable.java b/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/handler/EmbeddedPDFViewerRunnable.java index 5ee56d94c8e49fa4b85c478a0b84108a5b823fdb..6b8a864565ad0373427f4b959d75e12b2d6f6ec5 100644 --- a/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/handler/EmbeddedPDFViewerRunnable.java +++ b/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/handler/EmbeddedPDFViewerRunnable.java @@ -1,14 +1,20 @@ // Copyright (c) 2012 Microsoft Corporation. All rights reserved. package org.lamport.tla.toolbox.tool.tla2tex.handler; +import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.ui.IWorkbenchPartSite; import org.eclipse.ui.PartInitException; import org.lamport.tla.toolbox.util.UIHelper; public class EmbeddedPDFViewerRunnable extends AbstractPDFViewerRunnable { + public EmbeddedPDFViewerRunnable(final ProducePDFHandler handler, final IWorkbenchPartSite site, final IResource aSpecFile) { + super(handler, site, aSpecFile); + } + /* (non-Javadoc) * @see java.lang.Runnable#run() */ @@ -16,14 +22,16 @@ public class EmbeddedPDFViewerRunnable extends AbstractPDFViewerRunnable { monitor.subTask("Opening PDF File"); try { - UIHelper.openEditorUnchecked( + //TODO Open on part stack next to the spec editor + part = UIHelper.openEditorUnchecked( // Referencing de.vonloesch... // creates an _implicit_ // dependency which is not made // explicit in the bundle's // Manifest "de.vonloesch.pdf4eclipse.editors.PDFEditor", - outputFile); + outputFile, + false); // don't activate (give focus) the editor } catch (PartInitException e) { MessageDialog.openWarning(UIHelper.getShellProvider().getShell(), "PDF File Not Modified", @@ -31,7 +39,7 @@ public class EmbeddedPDFViewerRunnable extends AbstractPDFViewerRunnable { + "Make sure that the file " + outputFileName + " is not open in any external programs."); } - + monitor.worked(1); } @@ -39,15 +47,11 @@ public class EmbeddedPDFViewerRunnable extends AbstractPDFViewerRunnable { * @see org.lamport.tla.toolbox.tool.tla2tex.handler.AbstractPDFViewerRunnable#setFile(java.lang.String) */ @Override - public void setFile(String outputFileName) { + public void setFile(String outputFileName) throws CoreException { super.setFile(outputFileName); // explicitly touch the file to trigger a resource change event that is // received by the pdf editor. This causes the pdf editor to refresh its // content, if it has been open with the same pdf file already - try { - this.outputFile.touch(new NullProgressMonitor()); - } catch (CoreException e) { - e.printStackTrace(); - } + this.outputFile.touch(new NullProgressMonitor()); } } diff --git a/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/handler/ProducePDFHandler.java b/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/handler/ProducePDFHandler.java index 92b6d41737343e4c8b4ccb030fe9a8f7265a9a0c..e8f782cacd1ad13be9841f1edb952e63a64eb2ed 100644 --- a/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/handler/ProducePDFHandler.java +++ b/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/handler/ProducePDFHandler.java @@ -13,12 +13,8 @@ import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.swt.browser.Browser; -import org.eclipse.swt.browser.ProgressEvent; -import org.eclipse.swt.browser.ProgressListener; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IFileEditorInput; -import org.lamport.tla.toolbox.editor.basic.TLAEditorAndPDFViewer; import org.lamport.tla.toolbox.tool.tla2tex.TLA2TeXActivator; import org.lamport.tla.toolbox.tool.tla2tex.preference.ITLA2TeXPreferenceConstants; import org.lamport.tla.toolbox.ui.handler.SaveDirtyEditorAbstractHandler; @@ -34,7 +30,6 @@ import tla2tex.TLA2TexException; * second tab of the viewer. * * @author Daniel Ricketts - * @version $Id$ */ public class ProducePDFHandler extends SaveDirtyEditorAbstractHandler { @@ -63,9 +58,10 @@ public class ProducePDFHandler extends SaveDirtyEditorAbstractHandler { if (fileToTranslate != null && ResourceHelper.isModule(fileToTranslate)) { if (useEmbeddedViewer) { - runPDFJob(new EmbeddedPDFViewerRunnable(), fileToTranslate); + runPDFJob(new EmbeddedPDFViewerRunnable(this, activeEditor.getSite(), fileToTranslate), + fileToTranslate); } else { - useStandalonePDFViewer(fileToTranslate); + runPDFJob(new StandalonePDFViewerRunnable(this, activeEditor.getSite(), fileToTranslate), fileToTranslate); } } } @@ -73,107 +69,6 @@ public class ProducePDFHandler extends SaveDirtyEditorAbstractHandler { return null; } - private void useStandalonePDFViewer(final IResource fileToTranslate) { - if (activeEditor instanceof TLAEditorAndPDFViewer) { - final TLAEditorAndPDFViewer tlaEditorAndPDFViewer = (TLAEditorAndPDFViewer) activeEditor; - - final Browser browser = tlaEditorAndPDFViewer - .getPDFViewingPage().getBrowser(); - if (browser != null) { - - // The browser has been instantiated because the pdf - // viewing page - // has been set active at some point in the past. - - // A progress listener is necessary because of the way a - // Browser widget works. - // When browser.setUrl or browser.setText is called, the - // code after that will continue - // executing regardless of whether that url or text has - // been loaded by the browser. - // The page is loaded by the browser asynchronously. - // Therefore, in order to ensure that the browser is not - // viewing the old pdf file - // when tla2tex is run, the code to run tla2tex is - // contained in the - // progressListener.completed method. This method is - // executed when a new url - // or string of html text is loaded. For this particular - // listener implemented - // below, this method will only be called when the html - // in - // browser.setText("<html><body></body></html>"); is - // loaded. As soon as it is loaded, the browser removes - // this progress listener - // so that it is never called again. Then, tla2tex is - // run and the second tab in - // the multi page editor is set to the new pdf file. - ProgressListener progressListener = new ProgressListener() { - - public void changed(ProgressEvent event) { - // TODO Auto-generated method stub - - } - - public void completed(ProgressEvent event) { - - browser.removeProgressListener(this); - - // The following is performed as a job - // because producing running the tla2tex - // translation and navigating the browser - // to the new pdf can take several seconds. - // The job provides a progress monitor - // for the user and does not lock the UI thread. - // There are UI operations that must be - // performed - // within the job's run method. These must be - // run by calling UIHelper.runUISync. - runPDFJob(new StandalonePDFViewerRunnable(tlaEditorAndPDFViewer), - fileToTranslate); - - } - }; - - // The browser has already been created, so the pdf to - // be - // viewed may be loaded already. It is necessary to wait - // until a new page has been loaded before modifying - // the pdf. - browser.addProgressListener(progressListener); - - // It is necessary to navigate to this page in case a - // pdf file is already open. - // This allows tla2tex to write to that file before it - // gets displayed - // to the user again. - browser.setText("<html><body></body></html>"); - } else { - // The browser has not yet been instantiated because - // the pdf viewing page has not been set active - // and multi page form editors only create the part - // control for a page when it is first set active. - // There is not need to worry about the browser being - // open on the pdf - // file, and the runPDFJob will set the pdf viewing page - // to - // be active which creates the browser widget. - - // The following is performed as a job - // because producing running the tla2tex - // translation and navigating the browser - // to the new pdf can take several seconds. - // The job provides a progress monitor - // for the user and does not lock the UI thread. - // There are UI operations that must be performed - // within the job's run method. These must be - // run by calling UIHelper.runUISync. - runPDFJob(new StandalonePDFViewerRunnable(tlaEditorAndPDFViewer), fileToTranslate); - } - - } - } - /** * This method schedules a long running job that runs tla2tex on the file to * translate and loads it in the browser that is part of the second tab of @@ -193,7 +88,7 @@ public class ProducePDFHandler extends SaveDirtyEditorAbstractHandler { * @param tlaEditorAndPDFViewer * @param fileToTranslate */ - private void runPDFJob(final AbstractPDFViewerRunnable runnable, + void runPDFJob(final AbstractPDFViewerRunnable runnable, final IResource fileToTranslate) { Job tla2TexJob = new WorkspaceJob("Produce PDF") { @@ -240,14 +135,6 @@ public class ProducePDFHandler extends SaveDirtyEditorAbstractHandler { .toOSString()); tla2texArgs.add(fileToTranslate.getLocation().toOSString()); - // necessary for checking if the tla2tex output file is - // actually modified - // it will not be modified if it is open in an external - // program when - // of running tla2tex - final long translationStartTime = System - .currentTimeMillis(); - // the two units of work are running // the translation and opening the pdf file // in the browser @@ -261,8 +148,8 @@ public class ProducePDFHandler extends SaveDirtyEditorAbstractHandler { // created outside of the Eclipse Resource realm. This makes // sure that the Eclipse resource layer sees the newly // created (PDF) file. - // Without an explicit refresh, one might see the symtoms - // outlined in bug #317 (http://bugzilla.tlaplus.net/show_bug.cgi?id=317) + // Without an explicit refresh, one might see the symptoms + // outlined in Bug #317 in general/bugzilla/index.html // (org.eclipse.core.internal.resources.ResourceException: // Resource '/Test/Test.pdf' does not exist.) fileToTranslate.getProject().refreshLocal(IResource.DEPTH_INFINITE, monitor); @@ -279,7 +166,6 @@ public class ProducePDFHandler extends SaveDirtyEditorAbstractHandler { if (outputFile.exists()) { runnable.setFile(outputFileName); - runnable.setStartTime(translationStartTime); runnable.setMonitor(monitor); // Open the file if it exists. @@ -335,7 +221,8 @@ public class ProducePDFHandler extends SaveDirtyEditorAbstractHandler { }; - tla2TexJob.setUser(true); + // setUser(false) to not popup a modal dialog on each PDF generation. + tla2TexJob.setUser(false); tla2TexJob.setPriority(Job.LONG); tla2TexJob.schedule(); } diff --git a/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/handler/StandalonePDFViewerRunnable.java b/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/handler/StandalonePDFViewerRunnable.java index a8f73952b4df73e379d34fbd79e672efbbbefb0d..62df9daa8cb05f648a9807987928c68cb2395885 100644 --- a/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/handler/StandalonePDFViewerRunnable.java +++ b/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/handler/StandalonePDFViewerRunnable.java @@ -1,34 +1,35 @@ // Copyright (c) 2012 Microsoft Corporation. All rights reserved. package org.lamport.tla.toolbox.tool.tla2tex.handler; -import java.io.File; - -import org.eclipse.jface.dialogs.MessageDialog; -import org.lamport.tla.toolbox.editor.basic.TLAEditorAndPDFViewer; +import org.eclipse.core.resources.IResource; +import org.eclipse.ui.IWorkbenchPartSite; +import org.lamport.tla.toolbox.tool.tla2tex.view.PDFBrowser; import org.lamport.tla.toolbox.util.UIHelper; - public class StandalonePDFViewerRunnable extends AbstractPDFViewerRunnable { - private final TLAEditorAndPDFViewer tlaEditorAndPDFViewer; - - public StandalonePDFViewerRunnable( - TLAEditorAndPDFViewer tlaEditorAndPDFViewer) { - this.tlaEditorAndPDFViewer = tlaEditorAndPDFViewer; + public StandalonePDFViewerRunnable(ProducePDFHandler handler, IWorkbenchPartSite site, IResource aSpecFile) { + super(handler, site, aSpecFile); } public void run() { monitor.subTask("Opening PDF File"); - tlaEditorAndPDFViewer.setActivePage(TLAEditorAndPDFViewer.PDFPage_ID); - tlaEditorAndPDFViewer.getPDFViewingPage().getBrowser().setUrl(outputFileName); + + // Can't use OS specific outputFileName as secondy id. On Windows, it + // contains illegal characters. Thus, use the portableString which + // fully identifies a module in a spec and only consists out of legal + // chars. + final String secondary = this.specFile.getFullPath().toPortableString(); + part = (PDFBrowser) UIHelper.openViewNoFocus(PDFBrowser.ID, secondary); + ((PDFBrowser) part).setInput(this.specFile.getName(), outputFileName); + monitor.worked(1); + } - if (new File(outputFileName).lastModified() < translationStartTime) - { - MessageDialog.openWarning(UIHelper.getShellProvider().getShell(), - "PDF File Not Modified", "The pdf file could not be modified. " - + "Make sure that the file " + outputFileName - + " is not open in any external programs."); - } + /* (non-Javadoc) + * @see org.lamport.tla.toolbox.tool.tla2tex.handler.AbstractPDFViewerRunnable#preUpdate() + */ + protected void preUpdate() { + ((PDFBrowser) part).setBlank(); } } diff --git a/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/preference/ITLA2TeXPreferenceConstants.java b/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/preference/ITLA2TeXPreferenceConstants.java index 24a858586a76d1f3bd398b3910dce033f3735844..ab052e4c412a3f37dc79d51d7f78785baf7a7b4a 100644 --- a/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/preference/ITLA2TeXPreferenceConstants.java +++ b/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/preference/ITLA2TeXPreferenceConstants.java @@ -4,10 +4,15 @@ package org.lamport.tla.toolbox.tool.tla2tex.preference; * TLA2TeX preferences * * @author Daniel Ricketts - * @version $Id$ */ public interface ITLA2TeXPreferenceConstants { + /** + * Automatically regenerate the pretty-printed PDF when the + * corresponding spec is saved. + */ + public static final String AUTO_REGENERATE = "autoRegenerateOnSave"; + /** * Shade comments in tla2tex output file */ diff --git a/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/preference/TLA2TeXPreferenceInitializer.java b/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/preference/TLA2TeXPreferenceInitializer.java index 65e8a8d1004ca2dae7346e1975d1aaed867e0ec9..dadccf2c01f1e44b691831dfac6a403edc64cd6e 100644 --- a/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/preference/TLA2TeXPreferenceInitializer.java +++ b/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/preference/TLA2TeXPreferenceInitializer.java @@ -21,11 +21,12 @@ public class TLA2TeXPreferenceInitializer extends AbstractPreferenceInitializer store.setDefault(ITLA2TeXPreferenceConstants.NUMBER_LINES, false); store.setDefault(ITLA2TeXPreferenceConstants.LATEX_COMMAND, "pdflatex"); store.setDefault(ITLA2TeXPreferenceConstants.GRAY_LEVEL, "0.85"); - store.setDefault(ITLA2TeXPreferenceConstants.EMBEDDED_VIEWER, false); if (Platform.getOS().equals(Platform.OS_MACOSX)) { // Support for the built-in viewer has ended on MACOSX, thus disable // even if user enabled it in an earlier Toolbox release. store.setValue(ITLA2TeXPreferenceConstants.EMBEDDED_VIEWER, false); + } else { + store.setDefault(ITLA2TeXPreferenceConstants.EMBEDDED_VIEWER, true); } } } diff --git a/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/preference/TLA2TeXPreferencePage.java b/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/preference/TLA2TeXPreferencePage.java index b0d32b2ec1c1a17d99af797134dd8a2d92714a59..2282f3d5d16db8778ae499f17a3c083250f26284 100644 --- a/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/preference/TLA2TeXPreferencePage.java +++ b/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/preference/TLA2TeXPreferencePage.java @@ -42,6 +42,11 @@ public class TLA2TeXPreferencePage extends FieldEditorPreferencePage implements ITLA2TeXPreferenceConstants.EMBEDDED_VIEWER, "&Use built-in PDF viewer", getFieldEditorParent())); } + // Preference to regenerate PDF upon spec save? + addField(new BooleanFieldEditor( + ITLA2TeXPreferenceConstants.AUTO_REGENERATE, "&Regenerate pretty-printed PDF on spec save (takes effect once spec re-opened).", + getFieldEditorParent())); + addField(new BooleanFieldEditor( ITLA2TeXPreferenceConstants.SHADE_COMMENTS, "&Shade comments", getFieldEditorParent())); diff --git a/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/view/PDFBrowser.java b/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/view/PDFBrowser.java new file mode 100644 index 0000000000000000000000000000000000000000..931347d5426663021a0f7e2acfca0633872f5524 --- /dev/null +++ b/org.lamport.tla.toolbox.tool.tla2tex/src/org/lamport/tla/toolbox/tool/tla2tex/view/PDFBrowser.java @@ -0,0 +1,65 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package org.lamport.tla.toolbox.tool.tla2tex.view; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.browser.Browser; +import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.part.ViewPart; + +public class PDFBrowser extends ViewPart { + + public static final String ID = "org.lamport.tla.toolbox.tool.tla2tex.PDFBrowser"; + + private Browser browser; + + /* (non-Javadoc) + * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) + */ + public void createPartControl(Composite parent) { + final Composite body = new Composite(parent, SWT.NONE); + body.setLayout(new FillLayout()); + this.browser = new Browser(body, SWT.NONE); + setBlank(); + } + + /* (non-Javadoc) + * @see org.eclipse.ui.part.WorkbenchPart#setFocus() + */ + public void setFocus() { + this.browser.setFocus(); + } + + public void setBlank() { + this.browser.setText("<html><body></body></html>"); + } + + public void setInput(String title, String url) { + this.setPartName(title); + this.browser.setUrl(url); + } +} diff --git a/org.lamport.tla.toolbox.tool.tlc.test/pom.xml b/org.lamport.tla.toolbox.tool.tlc.test/pom.xml index 4973123bede709348b332cb2438decaa35567dc5..8b99e93b2eada9ccfa4fcea92236b02fe24f3736 100644 --- a/org.lamport.tla.toolbox.tool.tlc.test/pom.xml +++ b/org.lamport.tla.toolbox.tool.tlc.test/pom.xml @@ -13,8 +13,29 @@ <artifactId>org.lamport.tla.toolbox.tool.tlc.test</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>eclipse-test-plugin</packaging> + <properties> + <!-- Do not include test project in Sonar reporting. --> + <sonar.skip>true</sonar.skip> + </properties> + <build> <plugins> + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <version>0.7.9</version> + <executions> + <execution> + <goals> + <goal>prepare-agent</goal> + </goals> + <configuration> + <!-- Where to put jacoco coverage report --> + <destFile>target/jacoco.exec</destFile> + </configuration> + </execution> + </executions> + </plugin> <!-- Run JUnit tests --> <plugin> <groupId>org.eclipse.tycho</groupId> @@ -25,7 +46,7 @@ <showEclipseLog>true</showEclipseLog> <useUIHarness>true</useUIHarness> <useUIThread>${tycho.test.vm.useUiThread}</useUIThread> - <argLine>${tycho.test.vm.argline}</argLine> + <argLine>${tycho.test.vm.argline} ${tycho.testArgLine}</argLine> <dependencies> <dependency> <type>p2-installable-unit</type> diff --git a/org.lamport.tla.toolbox.tool.tlc.test/src/org/lamport/tla/toolbox/tool/tlc/util/OutputRegexTest.java b/org.lamport.tla.toolbox.tool.tlc.test/src/org/lamport/tla/toolbox/tool/tlc/util/OutputRegexTest.java index e2ae511f989cea6990a54b0e414754b60f146730..e4f285c0dc0f826b40f9a7be82f9f2f09c60cda7 100755 --- a/org.lamport.tla.toolbox.tool.tlc.test/src/org/lamport/tla/toolbox/tool/tlc/util/OutputRegexTest.java +++ b/org.lamport.tla.toolbox.tool.tlc.test/src/org/lamport/tla/toolbox/tool/tlc/util/OutputRegexTest.java @@ -5,6 +5,7 @@ import java.util.regex.Matcher; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.IRegion; +import org.lamport.tla.toolbox.tool.tlc.model.ModelWriter; import tla2sany.st.Location; @@ -13,7 +14,6 @@ import junit.framework.TestCase; /** * Tests the regex matcher for generated ids * @author Simon Zambrovski - * @version $Id$ */ public class OutputRegexTest extends TestCase { diff --git a/org.lamport.tla.toolbox.tool.tlc.ui.test/pom.xml b/org.lamport.tla.toolbox.tool.tlc.ui.test/pom.xml index 0c3097510dfd6c0feb11c0daea09dd881c14a9a2..436633f9c14c350ff0d46185ab6cd7662509300a 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui.test/pom.xml +++ b/org.lamport.tla.toolbox.tool.tlc.ui.test/pom.xml @@ -13,9 +13,29 @@ <artifactId>org.lamport.tla.toolbox.tool.tlc.ui.test</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>eclipse-test-plugin</packaging> + <properties> + <!-- Do not include test project in Sonar reporting. --> + <sonar.skip>true</sonar.skip> + </properties> <build> <plugins> + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <version>0.7.9</version> + <executions> + <execution> + <goals> + <goal>prepare-agent</goal> + </goals> + <configuration> + <!-- Where to put jacoco coverage report --> + <destFile>target/jacoco.exec</destFile> + </configuration> + </execution> + </executions> + </plugin> <!-- Run JUnit tests --> <plugin> <groupId>org.eclipse.tycho</groupId> @@ -26,7 +46,7 @@ <showEclipseLog>true</showEclipseLog> <useUIHarness>true</useUIHarness> <useUIThread>${tycho.test.vm.useUiThread}</useUIThread> - <argLine>${tycho.test.vm.argline}</argLine> + <argLine>${tycho.test.vm.argline} ${tycho.testArgLine}</argLine> <dependencies> <dependency> <type>p2-installable-unit</type> diff --git a/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/output/source/Bug267Listener.java b/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/output/source/Bug267Listener.java index ec28cb89cd3c81b5100240ea7720c3c1e6886cfb..8dc17b242aedb7d86bd80d56870714696ef3f4ba 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/output/source/Bug267Listener.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/output/source/Bug267Listener.java @@ -4,21 +4,13 @@ package org.lamport.tla.toolbox.tool.tlc.output.source; import java.util.Vector; import org.eclipse.jface.text.Document; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.ITLCOutputListener; import org.lamport.tla.toolbox.tool.tlc.output.data.CoverageInformationItem; import org.lamport.tla.toolbox.tool.tlc.output.data.StateSpaceInformationItem; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCError; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider; -/** - * @author Markus Alexander Kuppe - */ -/** - * @author Markus Alexander Kuppe - */ -/** - * @author Markus Alexander Kuppe - */ public class Bug267Listener extends TLCModelLaunchDataProvider implements ITLCOutputListener { @@ -30,7 +22,7 @@ public class Bug267Listener extends TLCModelLaunchDataProvider implements * @see org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider#getModelName() */ protected String getModelName() { - return getTLCOutputName(); + return "Bug267"; } /* (non-Javadoc) @@ -56,10 +48,10 @@ public class Bug267Listener extends TLCModelLaunchDataProvider implements } /* (non-Javadoc) - * @see org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider#getTLCOutputName() + * @see org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider#getModel() */ - public String getTLCOutputName() { - return "Bug267"; + public Model getModel() { + return null; } /* (non-Javadoc) diff --git a/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/output/source/Bug267Test.java b/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/output/source/Bug267Test.java index 1b3ad4eb2a4d961edb4d670241d7f366b43b99fd..61c16cd8503921ab33151dfc4d76f7bab90734d2 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/output/source/Bug267Test.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/output/source/Bug267Test.java @@ -11,11 +11,13 @@ import java.io.InputStreamReader; import java.net.URL; import java.util.List; -import junit.framework.Assert; - +import org.easymock.EasyMock; +import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.ITypedRegion; +import org.junit.Assert; import org.junit.Test; +import org.lamport.tla.toolbox.tool.tlc.model.Model; public class Bug267Test { @@ -39,7 +41,7 @@ public class Bug267Test { @Test public void testSuccess() throws Exception { - final TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser("", 0, false); + final TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser(new DummyModel(), 0, false); final Bug267Listener listener = new Bug267Listener(); @@ -60,7 +62,7 @@ public class Bug267Test { @Test public void testAdd2154And2132Nested() throws IOException { - TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser("", 0, false); + TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser(new DummyModel(), 0, false); // Register test listener with parser output ITLCOutputSource source = parser.getSource(); @@ -129,7 +131,7 @@ public class Bug267Test { @Test public void testAdd2132Region() throws IOException { - TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser("", 0, false); + TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser(new DummyModel(), 0, false); // Register test listener with parser output ITLCOutputSource source = parser.getSource(); @@ -171,7 +173,7 @@ public class Bug267Test { @Test public void testAdd2154Region() throws IOException { - TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser("", 0, false); + TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser(new DummyModel(), 0, false); // Register test listener with parser output ITLCOutputSource source = parser.getSource(); @@ -211,4 +213,16 @@ public class Bug267Test { + 1); Assert.assertEquals(text, regionText); } + + private class DummyModel extends Model { + + DummyModel() { + super(EasyMock.createNiceMock(ILaunchConfiguration.class)); + } + + public String getName() { + // Stop super from delegating to ILC + return "Bug267Test"; + } + } } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/output/source/DummyListener.java b/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/output/source/DummyListener.java index 84160de8e26a032ef282aec2cfa6114e955f433e..ee4cd5dc88176837c2c9e36d1720515f3220a369 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/output/source/DummyListener.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/output/source/DummyListener.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.jface.text.ITypedRegion; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.ITLCOutputListener; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCState; @@ -23,9 +24,9 @@ public class DummyListener implements ITLCOutputListener { // all states found by the parser private List<TLCState> states = new ArrayList<TLCState>(); - public String getTLCOutputName() { + public Model getModel() { // nop - return ""; + return null; } public void onOutput(ITypedRegion region, String text) { diff --git a/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/output/source/StateTagBasedTLCOutputIncrementalParserTest.java b/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/output/source/StateTagBasedTLCOutputIncrementalParserTest.java index a5091b0873a1ced177518a189ad2e2e058c67ba9..a77eb3727d59db2494e262a822c5e211a72e4230 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/output/source/StateTagBasedTLCOutputIncrementalParserTest.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/output/source/StateTagBasedTLCOutputIncrementalParserTest.java @@ -5,12 +5,15 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import org.easymock.EasyMock; +import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.jface.text.BadLocationException; import org.junit.After; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCState; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCVariable; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCVariableValue; @@ -121,7 +124,7 @@ public class StateTagBasedTLCOutputIncrementalParserTest { this.state = buf.toString(); - this.parser = new TagBasedTLCOutputIncrementalParser("foobar", 0, false); + this.parser = new TagBasedTLCOutputIncrementalParser(new DummyModel(), 0, false); // Register test listener with parser output ITLCOutputSource source = parser.getSource(); @@ -262,4 +265,16 @@ public class StateTagBasedTLCOutputIncrementalParserTest { Assert.assertEquals(STATES, testListener.getRegions().size()); } + + private class DummyModel extends Model { + + DummyModel() { + super(EasyMock.createNiceMock(ILaunchConfiguration.class)); + } + + public String getName() { + // Stop super from delegating to ILC + return "StateTagBasedTLCOutputIncrementalParserTest"; + } + } } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/output/source/TagBasedTLCOutputIncrementalParserTest.java b/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/output/source/TagBasedTLCOutputIncrementalParserTest.java index 37976cf2dc6dd6df619dcc45893aac129510a453..bb1cbd1fc8f4db36fa18556763d6efe4b50329e4 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/output/source/TagBasedTLCOutputIncrementalParserTest.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/output/source/TagBasedTLCOutputIncrementalParserTest.java @@ -8,12 +8,14 @@ import java.net.URL; import java.util.ArrayList; import java.util.List; -import junit.framework.Assert; - +import org.easymock.EasyMock; +import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.ITypedRegion; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import tlc2.output.MP; @@ -39,7 +41,7 @@ public class TagBasedTLCOutputIncrementalParserTest { @Test public void testNoNewline() throws IOException { - TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser("", 0, false); + TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser(new DummyModel(), 0, false); // read in test input and feed it to the parser @@ -53,7 +55,7 @@ public class TagBasedTLCOutputIncrementalParserTest { @Test public void testAddIncrementTLCHeader() throws IOException { - TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser("", 0, false); + TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser(new DummyModel(), 0, false); // read in test input and feed it to the parser @@ -70,7 +72,7 @@ public class TagBasedTLCOutputIncrementalParserTest { @Test public void testAddIncrementState() throws IOException { - TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser("", 0, false); + TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser(new DummyModel(), 0, false); // read in test input and feed it to the parser try { @@ -151,7 +153,7 @@ public class TagBasedTLCOutputIncrementalParserTest { @Test public void testAddPrintTStmt() throws IOException { - TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser("", 0, false); + TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser(new DummyModel(), 0, false); // Register test listener with parser output ITLCOutputSource source = parser.getSource(); @@ -198,7 +200,7 @@ public class TagBasedTLCOutputIncrementalParserTest { @Test public void testAddPrintTStmtFull() throws IOException { - TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser("", 0, false); + TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser(new DummyModel(), 0, false); // Register test listener with parser output ITLCOutputSource source = parser.getSource(); @@ -297,7 +299,7 @@ public class TagBasedTLCOutputIncrementalParserTest { @Test public void testAddOneLevelNesting() throws IOException { - TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser("", 0, false); + TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser(new DummyModel(), 0, false); // Register test listener with parser output ITLCOutputSource source = parser.getSource(); @@ -342,7 +344,7 @@ public class TagBasedTLCOutputIncrementalParserTest { @Test public void testAddTwoLevelNesting() throws IOException { - TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser("", 0, false); + TagBasedTLCOutputIncrementalParser parser = new TagBasedTLCOutputIncrementalParser(new DummyModel(), 0, false); // Register test listener with parser output ITLCOutputSource source = parser.getSource(); @@ -390,4 +392,16 @@ public class TagBasedTLCOutputIncrementalParserTest { Assert.assertNotNull(regions); Assert.assertEquals("Not all or too many regions detected", 3, regions.size()); } + + private class DummyModel extends Model { + + DummyModel() { + super(EasyMock.createNiceMock(ILaunchConfiguration.class)); + } + + public String getName() { + // Stop super from delegating to ILC + return "TagBasedTLCOutputIncrementalParserTest"; + } + } } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/ui/view/TLCErrorViewTest.java b/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/ui/view/TLCErrorViewTest.java index 703a9b5a7f89e56e107d2475ccffcc46faf09b34..fb228942234f5e2ddd5a4eb35c9a90e929fe20ce 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/ui/view/TLCErrorViewTest.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui.test/src/org/lamport/tla/toolbox/tool/tlc/ui/view/TLCErrorViewTest.java @@ -40,6 +40,7 @@ import org.eclipse.core.runtime.IPath; import org.eclipse.debug.core.ILaunchConfiguration; import org.junit.Ignore; import org.junit.Test; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCError; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCState; @@ -79,8 +80,9 @@ public class TLCErrorViewTest { .andReturn(new ArrayList<String>()).anyTimes(); EasyMock.replay(launchConfig); + final Model dummyModel = new DummyModel(launchConfig); // Cannot be mocked because it's not an interface. - final TLCModelLaunchDataProvider provider = new TLCModelLaunchDataProvider(launchConfig); + final TLCModelLaunchDataProvider provider = new TLCModelLaunchDataProvider(dummyModel); final List<TLCError> errors = new ArrayList<TLCError>(); provider.setErrors(errors); @@ -90,7 +92,7 @@ public class TLCErrorViewTest { for (int i = 1; i <= 10000; i++) { final TLCState state = TLCState.parseState( i + ": <Action line 1, col 1 to line 1, col 2 of module testLargeNumberOfStates>\nx = " + i, name); - error.addState(state); + error.addState(state, true); } // show all states @@ -100,9 +102,16 @@ public class TLCErrorViewTest { final long before = System.currentTimeMillis(); UIHelper.runUISync(new Runnable() { public void run() { - TLCErrorView.updateErrorView(provider, launchConfig, true); + TLCErrorView.updateErrorView(provider, dummyModel, true); } }); assertTrue(before - System.currentTimeMillis() <= 10 * 1000); // maximally ten seconds } + + private class DummyModel extends Model { + + protected DummyModel(ILaunchConfiguration launchConfig) { + super(launchConfig); + } + } } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui.uitest/META-INF/MANIFEST.MF b/org.lamport.tla.toolbox.tool.tlc.ui.uitest/META-INF/MANIFEST.MF index ce7d4d07642a9daebba449d3721457f82ee42719..be0afd2a67b0456768ca7381468cfdbb3f78fc33 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui.uitest/META-INF/MANIFEST.MF +++ b/org.lamport.tla.toolbox.tool.tlc.ui.uitest/META-INF/MANIFEST.MF @@ -11,7 +11,8 @@ Require-Bundle: org.lamport.tla.toolbox;bundle-version="1.0.0", org.lamport.tla.toolbox.editor.basic;bundle-version="1.0.0", org.eclipse.core.resources;bundle-version="3.5.0", org.eclipse.debug.core;bundle-version="3.5.0", - org.eclipse.ui.editors;bundle-version="3.6.0" + org.eclipse.ui.editors;bundle-version="3.6.0", + org.eclipse.ui.workbench Import-Package: org.osgi.framework;version="1.3.0" Bundle-RequiredExecutionEnvironment: J2SE-1.5 Bundle-Vendor: Leslie Lamport, Markus Alexander Kuppe diff --git a/org.lamport.tla.toolbox.tool.tlc.ui.uitest/org.lamport.tla.toolbox.tool.tlc.ui.uitest.launch b/org.lamport.tla.toolbox.tool.tlc.ui.uitest/org.lamport.tla.toolbox.tool.tlc.ui.uitest.launch index 5baa451b9603b242553ad31eb53f6b00f5169958..f8e723531aff2d2dce400183476b7d3af0f3dc5a 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui.uitest/org.lamport.tla.toolbox.tool.tlc.ui.uitest.launch +++ b/org.lamport.tla.toolbox.tool.tlc.ui.uitest/org.lamport.tla.toolbox.tool.tlc.ui.uitest.launch @@ -10,7 +10,7 @@ <booleanAttribute key="clearws" value="true"/> <booleanAttribute key="clearwslog" value="false"/> <stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/org.lamport.tla.toolbox.tool.tlc.ui.uitest"/> -<booleanAttribute key="default" value="false"/> +<booleanAttribute key="default" value="true"/> <booleanAttribute key="includeOptional" value="false"/> <stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/> <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> @@ -20,7 +20,8 @@ <listEntry value="1"/> </listAttribute> <mapAttribute key="org.eclipse.debug.core.environmentVariables"> -<mapEntry key="DISPLAY" value="localhost:1"/> +<mapEntry key="OFF_DISPLAY" value=":51"/> +<mapEntry key="SWT_GTK3" value="0"/> </mapAttribute> <stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/> <booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/> @@ -31,12 +32,10 @@ <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console -clean"/> <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.lamport.tla.toolbox.tool.tlc.ui.uitest"/> <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/> -<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms80m -Xmx1024m -Dosgi.framework.extensions=org.eclipse.equinox.weaving.hook -Daj.weaving.verbose=true -Dorg.aspectj.weaver.showWeaveInfo=true -Dorg.aspectj.osgi.verbose=true -Dorg.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecB=${project_loc:org.lamport.tla.toolbox.uitest}/farsite/DistributedSystemModule.tla -Dorg.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecA=${project_loc:examples}/DieHard/DieHard.tla"/> +<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms80m -Xmx1024m -Dosgi.framework.extensions=org.eclipse.equinox.weaving.hook -Daj.weaving.verbose=true -Dorg.aspectj.weaver.showWeaveInfo=true -Dorg.aspectj.osgi.verbose=true -Dorg.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecB=${project_loc:org.lamport.tla.toolbox.uitest}/farsite/DistributedSystemModule.tla -Dorg.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecA=${project_loc:org.lamport.tla.toolbox.uitest}/DieHard/DieHard.tla"/> <stringAttribute key="pde.version" value="3.3"/> <stringAttribute key="product" value="org.lamport.tla.toolbox.product.standalone.product"/> <booleanAttribute key="run_in_ui_thread" value="false"/> -<stringAttribute key="selected_target_plugins" value="com.ibm.icu@default:default,javax.activation@default:default,javax.annotation@default:default,javax.mail@default:default,javax.xml@default:default,org.apache.batik.css@default:default,org.apache.batik.util.gui@default:default,org.apache.batik.util@default:default,org.apache.commons.jxpath@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.log4j@default:default,org.apache.lucene.analysis@default:default,org.apache.lucene.core@default:default,org.apache.servicemix.bundles.javax-inject@default:default,org.aspectj.runtime@default:default,org.eclipse.ant.core@default:default,org.eclipse.compare.core@default:default,org.eclipse.compare@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.core.filesystem.java7@default:false,org.eclipse.core.filesystem.linux.x86_64@default:false,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.net.linux.x86_64@default:false,org.eclipse.core.net@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.debug.core@default:default,org.eclipse.e4.core.commands@default:default,org.eclipse.e4.core.contexts@default:default,org.eclipse.e4.core.di.annotations@default:default,org.eclipse.e4.core.di.extensions@default:default,org.eclipse.e4.core.di@default:default,org.eclipse.e4.core.services@default:default,org.eclipse.e4.emf.xpath@default:default,org.eclipse.e4.ui.bindings@default:default,org.eclipse.e4.ui.css.core@default:default,org.eclipse.e4.ui.css.swt.theme@default:default,org.eclipse.e4.ui.css.swt@default:default,org.eclipse.e4.ui.di@default:default,org.eclipse.e4.ui.model.workbench@default:default,org.eclipse.e4.ui.services@default:default,org.eclipse.e4.ui.swt.gtk@default:false,org.eclipse.e4.ui.widgets@default:default,org.eclipse.e4.ui.workbench.addons.swt@default:default,org.eclipse.e4.ui.workbench.renderers.swt@default:default,org.eclipse.e4.ui.workbench.swt@default:default,org.eclipse.e4.ui.workbench3@default:default,org.eclipse.e4.ui.workbench@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.ecf@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.bidi@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.event@default:default,org.eclipse.equinox.frameworkadmin.equinox@default:default,org.eclipse.equinox.frameworkadmin@default:default,org.eclipse.equinox.p2.artifact.repository@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.p2.director@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.equinox.p2.garbagecollector@default:default,org.eclipse.equinox.p2.jarprocessor@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.p2.operations@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.equinox.p2.touchpoint.eclipse@default:default,org.eclipse.equinox.p2.ui.sdk.scheduler@default:default,org.eclipse.equinox.p2.ui@default:default,org.eclipse.equinox.p2.updatechecker@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.region@default:false,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.security.ui@default:default,org.eclipse.equinox.security@default:default,org.eclipse.equinox.simpleconfigurator.manipulator@default:default,org.eclipse.equinox.simpleconfigurator@1:true,org.eclipse.equinox.transforms.hook@default:false,org.eclipse.equinox.util@default:default,org.eclipse.equinox.weaving.aspectj@3:true,org.eclipse.equinox.weaving.hook@default:false,org.eclipse.help.base@default:default,org.eclipse.help.ui@default:default,org.eclipse.help@default:default,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.jdt.core@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.jdt.junit.runtime@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface.text@default:default,org.eclipse.jface@default:default,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.eclipse.osgi.compatibility.state@default:false,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.eclipse.sdk@default:default,org.eclipse.swt.gtk.linux.x86_64@default:false,org.eclipse.swt@default:default,org.eclipse.swtbot.eclipse.core@default:default,org.eclipse.swtbot.eclipse.finder@default:default,org.eclipse.swtbot.go@default:default,org.eclipse.swtbot.junit4_x@default:default,org.eclipse.swtbot.swt.finder@default:default,org.eclipse.team.core@default:default,org.eclipse.team.ui@default:default,org.eclipse.text@default:default,org.eclipse.ui.cheatsheets@default:default,org.eclipse.ui.console@default:default,org.eclipse.ui.editors@default:default,org.eclipse.ui.forms@default:default,org.eclipse.ui.ide.application@default:default,org.eclipse.ui.ide@default:default,org.eclipse.ui.intro@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.ui.trace@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.ui.views@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.ui@default:default,org.hamcrest.core@default:default,org.hamcrest.integration@default:default,org.hamcrest.library@default:default,org.hamcrest.text@default:default,org.hamcrest@default:default,org.junit@default:default,org.sat4j.core@default:default,org.sat4j.pb@default:default,org.tukaani.xz@default:default,org.w3c.css.sac@default:default,org.w3c.dom.events@default:default,org.w3c.dom.smil@default:default,org.w3c.dom.svg@default:default"/> -<stringAttribute key="selected_workspace_plugins" value="org.lamport.tla.toolbox.doc@default:default,org.lamport.tla.toolbox.editor.basic@default:default,org.lamport.tla.toolbox.product.standalone@default:default,org.lamport.tla.toolbox.test@default:false,org.lamport.tla.toolbox.tool.tlc.test@default:false,org.lamport.tla.toolbox.tool.tlc.ui.test@default:false,org.lamport.tla.toolbox.tool.tlc.ui.uitest@default:default,org.lamport.tla.toolbox.tool.tlc.ui@default:default,org.lamport.tla.toolbox.tool.tlc@default:default,org.lamport.tla.toolbox.uitest@default:default,org.lamport.tla.toolbox@default:default,org.lamport.tlatools@default:default"/> <booleanAttribute key="show_selected_only" value="true"/> <stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/> <stringAttribute key="testApplication" value="org.lamport.tla.toolbox.application"/> diff --git a/org.lamport.tla.toolbox.tool.tlc.ui.uitest/pom.xml b/org.lamport.tla.toolbox.tool.tlc.ui.uitest/pom.xml index 83a08606dd18f5e7600618935b4629659a050083..a6c08a6606f7fefaac7119ffffca318e2e904fc3 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui.uitest/pom.xml +++ b/org.lamport.tla.toolbox.tool.tlc.ui.uitest/pom.xml @@ -13,34 +13,30 @@ <artifactId>org.lamport.tla.toolbox.tool.tlc.ui.uitest</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>eclipse-test-plugin</packaging> + <properties> + <!-- Do not include test project in Sonar reporting. --> + <sonar.skip>true</sonar.skip> + </properties> <build> <plugins> - <!-- Forcefully install Equinox Weaving jar into local repo --> - <!-- remove once https://issues.sonatype.org/browse/TYCHO-333 fixed --> + <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-install-plugin</artifactId> - <version>2.2</version> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <version>0.7.9</version> <executions> <execution> - - <id>it-preparation</id> - <phase>pre-integration-test</phase> <goals> - <goal>install-file</goal> + <goal>prepare-agent</goal> </goals> <configuration> - <file>${settings.localRepository}/p2/osgi/bundle/org.eclipse.equinox.weaving.hook/1.1.100.v20140821-1915/org.eclipse.equinox.weaving.hook-1.1.100.v20140821-1915.jar</file> - <groupId>tlatoolbox</groupId> - <artifactId>org.eclipse.equinox.weaving.hook</artifactId> - <version>1.1.100.v20140821-1915</version> - <packaging>jar</packaging> + <!-- Where to put jacoco coverage report --> + <destFile>target/jacoco.exec</destFile> </configuration> </execution> </executions> </plugin> - <!-- Run JUnit tests --> <plugin> <groupId>org.eclipse.tycho</groupId> @@ -51,7 +47,7 @@ <showEclipseLog>true</showEclipseLog> <useUIHarness>true</useUIHarness> <useUIThread>${tycho.test.vm.useUiThread}</useUIThread> - <argLine>${tycho.test.vm.argline}</argLine> + <argLine>${tycho.test.vm.argline} ${tycho.testArgLine}</argLine> <!-- use our product and application to launch the tests --> <product>org.lamport.tla.toolbox.product.standalone.product</product> <application>org.lamport.tla.toolbox.application</application> @@ -59,7 +55,7 @@ <systemProperties combine.children="append"> <!-- References used by tests to access spec files --> <org.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecB>${project.build.directory}/../../org.lamport.tla.toolbox.uitest/farsite/DistributedSystemModule.tla</org.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecB> - <org.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecA>${project.build.directory}/../../examples/DieHard/DieHard.tla</org.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecA> + <org.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecA>${project.build.directory}/../../org.lamport.tla.toolbox.uitest/DieHard/DieHard.tla</org.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecA> <!-- JDT weaving debug output --> <aj.weaving.verbose>true</aj.weaving.verbose> <org.aspectj.weaver.showWeaveInfo>false</org.aspectj.weaver.showWeaveInfo> @@ -118,7 +114,7 @@ <!-- Enable JDT weaving --> <frameworkExtensions> <frameworkExtension> - <groupId>tlatoolbox</groupId> + <groupId>p2.osgi.bundle</groupId> <artifactId>org.eclipse.equinox.weaving.hook</artifactId> <version>1.1.100.v20140821-1915</version> </frameworkExtension> diff --git a/org.lamport.tla.toolbox.tool.tlc.ui.uitest/src/org/lamport/tla/toolbox/tool/tlc/ui/test/DummyJobChangeListener.java b/org.lamport.tla.toolbox.tool.tlc.ui.uitest/src/org/lamport/tla/toolbox/tool/tlc/ui/test/DummyJobChangeListener.java index 57e65e00d19bb961b822a530be34143e4de6b4c4..61f6a36ee50ced30e00fd1a3efe9eabf148e59e5 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui.uitest/src/org/lamport/tla/toolbox/tool/tlc/ui/test/DummyJobChangeListener.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui.uitest/src/org/lamport/tla/toolbox/tool/tlc/ui/test/DummyJobChangeListener.java @@ -5,15 +5,16 @@ import org.eclipse.core.runtime.jobs.IJobChangeListener; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.swtbot.swt.finder.waits.DefaultCondition; import org.eclipse.swtbot.swt.finder.waits.ICondition; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.util.ToolboxJob; public class DummyJobChangeListener extends DefaultCondition implements IJobChangeListener, ICondition { - private final String suffix; + private final Model model; private Job job; - public DummyJobChangeListener(final String aModelName) { - this.suffix = aModelName; + public DummyJobChangeListener(final Model model) { + this.model = model; } /* (non-Javadoc) @@ -27,7 +28,7 @@ public class DummyJobChangeListener extends DefaultCondition implements IJobChan * @see org.eclipse.swtbot.swt.finder.waits.ICondition#getFailureMessage() */ public String getFailureMessage() { - return String.format("Timed out waiting for job with %s ", suffix); + return String.format("Timed out waiting for job with %s ", model.getName()); } /* (non-Javadoc) @@ -37,7 +38,7 @@ public class DummyJobChangeListener extends DefaultCondition implements IJobChan final Job j = event.getJob(); if(j.belongsTo(ToolboxJob.FAMILY)) { final String jobName = j.getName(); - if(jobName.endsWith(suffix)) { + if(jobName.endsWith(model.getName())) { job = j; } } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui.uitest/src/org/lamport/tla/toolbox/tool/tlc/ui/test/ModelCheckerTest.java b/org.lamport.tla.toolbox.tool.tlc.ui.uitest/src/org/lamport/tla/toolbox/tool/tlc/ui/test/ModelCheckerTest.java index bccdaa77cc491ed7d46cc44adfc0866d7e0c6234..5483f9c8410022945a56f560d5c842a685f8514c 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui.uitest/src/org/lamport/tla/toolbox/tool/tlc/ui/test/ModelCheckerTest.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui.uitest/src/org/lamport/tla/toolbox/tool/tlc/ui/test/ModelCheckerTest.java @@ -6,7 +6,6 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.jobs.IJobChangeListener; import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner; import org.eclipse.swtbot.swt.finder.matchers.WithText; @@ -14,10 +13,14 @@ import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences; import org.eclipse.swtbot.swt.finder.waits.Conditions; import org.eclipse.swtbot.swt.finder.waits.ICondition; import org.eclipse.swtbot.swt.finder.widgets.SWTBotMenu; +import org.eclipse.ui.IEditorPart; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; +import org.lamport.tla.toolbox.tool.ToolboxHandle; +import org.lamport.tla.toolbox.tool.tlc.model.Model; +import org.lamport.tla.toolbox.tool.tlc.model.TLCSpec; +import org.lamport.tla.toolbox.tool.tlc.ui.editor.ModelEditor; import org.lamport.tla.toolbox.util.UIHelper; @RunWith(SWTBotJunit4ClassRunner.class) @@ -57,7 +60,8 @@ public class ModelCheckerTest extends AbstractTest { // register job listener who listens for the model checker job final String modelName = UIHelper.getActiveEditor().getTitle(); - final IJobChangeListener listener = new DummyJobChangeListener(modelName); + final Model model = ToolboxHandle.getCurrentSpec().getAdapter(TLCSpec.class).getModel(modelName); + final IJobChangeListener listener = new DummyJobChangeListener(model); Job.getJobManager().addJobChangeListener(listener); // start model checking by clicking the menu. This is more robust @@ -67,16 +71,29 @@ public class ModelCheckerTest extends AbstractTest { // make unit test wait for model checker job to finish bot.waitUntil((ICondition) listener, SWTBotPreferences.TIMEOUT * 3); + + // Do some unregistration prior to model deletion: + Job.getJobManager().removeJobChangeListener(listener); + // close corresponding editor if open + final IEditorPart editorWithModelOpened = model.getAdapter(ModelEditor.class); + if (editorWithModelOpened != null) { + UIHelper.runUISync(new Runnable() { + public void run() { + UIHelper.getActivePage().closeEditor(editorWithModelOpened, + false); + } + }); + } + // Delete the newly created model again. It does not use the UI because // SWTBot cannot handle the modal confirmation dialog do delete the // model. // Deleting the model is necessary because repeated test execution would // leave huge numbers of model leftovers contributing to slowed down test - // execution (see SizeControlContribution for reason why). + // execution (see SizeControlContribution for reason why). try { - final ILaunchConfiguration ilc = ModelHelper.getModelByName(modelName); - ModelHelper.deleteModel(ilc, new NullProgressMonitor()); + model.delete(new NullProgressMonitor()); } catch (CoreException e) { e.printStackTrace(); } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui.uitest/src/org/lamport/tla/toolbox/tool/tlc/ui/test/threading/HandlerThreadingTest.java b/org.lamport.tla.toolbox.tool.tlc.ui.uitest/src/org/lamport/tla/toolbox/tool/tlc/ui/test/threading/HandlerThreadingTest.java index 3049f3590e51c226210e78d15bfdf56f2fda630f..67bf0378d90cb783487f1402e770c6915161f19d 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui.uitest/src/org/lamport/tla/toolbox/tool/tlc/ui/test/threading/HandlerThreadingTest.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui.uitest/src/org/lamport/tla/toolbox/tool/tlc/ui/test/threading/HandlerThreadingTest.java @@ -3,8 +3,6 @@ package org.lamport.tla.toolbox.tool.tlc.ui.test.threading; import java.io.File; import java.util.Set; -import junit.framework.Assert; - import org.aspectj.lang.JoinPoint; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner; @@ -12,6 +10,7 @@ import org.eclipse.swtbot.swt.finder.matchers.WithText; import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences; import org.eclipse.swtbot.swt.finder.waits.Conditions; import org.eclipse.swtbot.swt.finder.widgets.SWTBotMenu; +import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; @@ -57,7 +56,7 @@ public class HandlerThreadingTest extends AbstractTest { * Adds a new spec to the toolbox, opens it and tests if parsing is done on * a non-UI thread * - * @see http://bugzilla.tlaplus.net/show_bug.cgi?id=103 + * @see Bug #103 in general/bugzilla/index.html */ @Test public void parseSpecInNonUIThread() { diff --git a/org.lamport.tla.toolbox.tool.tlc.ui.uitest/src/org/lamport/tla/toolbox/ui/handler/CloneModelTest.java b/org.lamport.tla.toolbox.tool.tlc.ui.uitest/src/org/lamport/tla/toolbox/ui/handler/CloneModelTest.java index fea3944bdc9096c75a9bc485ef663a63ccf32849..a821dc2d6fd2dc1efa9fbc2ee952ec84efb90d83 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui.uitest/src/org/lamport/tla/toolbox/ui/handler/CloneModelTest.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui.uitest/src/org/lamport/tla/toolbox/ui/handler/CloneModelTest.java @@ -2,7 +2,6 @@ package org.lamport.tla.toolbox.ui.handler; import java.io.File; -import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotEditor; import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner; @@ -16,9 +15,10 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.lamport.tla.toolbox.Activator; import org.lamport.tla.toolbox.spec.Spec; +import org.lamport.tla.toolbox.tool.tlc.model.Model; +import org.lamport.tla.toolbox.tool.tlc.model.TLCSpec; import org.lamport.tla.toolbox.tool.tlc.ui.test.AbstractTest; import org.lamport.tla.toolbox.tool.tlc.ui.test.ModelEditorOpenCondition; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; @RunWith(SWTBotJunit4ClassRunner.class) public class CloneModelTest extends AbstractTest { @@ -26,6 +26,7 @@ public class CloneModelTest extends AbstractTest { private static final String TLA_SUFFIX = ".tla"; private static final String TEST_SPEC = "ToBeClonedSpec"; private static final String TEST_MODEL = "Model_1"; + private static final String TEST_MODEL_RENAME = "Model_2"; @BeforeClass public static void beforeClass() { @@ -75,7 +76,7 @@ public class CloneModelTest extends AbstractTest { cloneModelSubMenu.menu(TEST_MODEL).click(); bot.button("OK").click(); - bot.waitUntil(new ModelEditorOpenCondition(TEST_MODEL + "_Copy")); + bot.waitUntil(new ModelEditorOpenCondition(TEST_MODEL_RENAME)); } // Verify spec and model show expected state (via API!!!) @@ -83,7 +84,7 @@ public class CloneModelTest extends AbstractTest { final Spec spec = Activator.getSpecManager().getSpecLoaded(); Assert.assertEquals(specExpected, spec.getName()); - final ILaunchConfiguration model = ModelHelper.getModelByName(spec.getProject(), TEST_MODEL); + final Model model = spec.getAdapter(TLCSpec.class).getModel(TEST_MODEL); Assert.assertNotNull("Model could not be found", model); } } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui.uitest/src/org/lamport/tla/toolbox/ui/handler/RenameSpecHandlerTest.java b/org.lamport.tla.toolbox.tool.tlc.ui.uitest/src/org/lamport/tla/toolbox/ui/handler/RenameSpecHandlerTest.java index 6a478fc5a70af7526c06cb2030f45f44a8a8769b..0a15c91280241c34dfe0464f8d13718c125461a8 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui.uitest/src/org/lamport/tla/toolbox/ui/handler/RenameSpecHandlerTest.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui.uitest/src/org/lamport/tla/toolbox/ui/handler/RenameSpecHandlerTest.java @@ -3,15 +3,19 @@ package org.lamport.tla.toolbox.ui.handler; import java.io.File; import org.eclipse.core.runtime.AssertionFailedException; -import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.core.runtime.jobs.IJobChangeListener; +import org.eclipse.core.runtime.jobs.Job; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotEditor; import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView; import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner; import org.eclipse.swtbot.swt.finder.matchers.WithText; +import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences; import org.eclipse.swtbot.swt.finder.waits.Conditions; +import org.eclipse.swtbot.swt.finder.waits.ICondition; import org.eclipse.swtbot.swt.finder.widgets.SWTBotMenu; import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem; +import org.eclipse.ui.IEditorPart; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; @@ -19,9 +23,14 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.lamport.tla.toolbox.Activator; import org.lamport.tla.toolbox.spec.Spec; +import org.lamport.tla.toolbox.tool.ToolboxHandle; +import org.lamport.tla.toolbox.tool.tlc.model.Model; +import org.lamport.tla.toolbox.tool.tlc.model.TLCSpec; +import org.lamport.tla.toolbox.tool.tlc.ui.editor.ModelEditor; import org.lamport.tla.toolbox.tool.tlc.ui.test.AbstractTest; +import org.lamport.tla.toolbox.tool.tlc.ui.test.DummyJobChangeListener; import org.lamport.tla.toolbox.tool.tlc.ui.test.ModelEditorOpenCondition; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; +import org.lamport.tla.toolbox.util.UIHelper; /** @@ -75,7 +84,7 @@ public class RenameSpecHandlerTest extends AbstractTest { } /** - * @see http://bugzilla.tlaplus.net/show_bug.cgi?id=58 + * @see Bug #58 in general/bugzilla/index.html */ @Test public void renameSpec() throws InterruptedException { @@ -100,7 +109,40 @@ public class RenameSpecHandlerTest extends AbstractTest { openSpecExplorer(); treeItem = bot.tree().getTreeItem(TEST_SPEC + "_Copy [ " + TEST_SPEC + TLA_SUFFIX + " ]"); - checkForModelExistenceUI(treeItem); + /* + * try to launch the model + */ + SWTBotTreeItem modelTreeItem = checkForModelExistenceUI(treeItem); + modelTreeItem.contextMenu("Open").click(); + Assert.assertNotNull("UI tree item (model) could not be found", modelTreeItem); + + // register job listener who listens for the model checker job + final String modelName = UIHelper.getActiveEditor().getTitle(); + final Model model = ToolboxHandle.getCurrentSpec().getAdapter(TLCSpec.class).getModel(modelName); + final IJobChangeListener listener = new DummyJobChangeListener(model); + Job.getJobManager().addJobChangeListener(listener); + + // start model checking by clicking the menu. This is more robust + // compared to the f11 keystroke which can get lost when fired during + // initialization of the model editor. + bot.menu("TLC Model Checker").menu("Run model").click(); + + // make unit test wait for model checker job to finish + bot.waitUntil((ICondition) listener, SWTBotPreferences.TIMEOUT * 3); + + // Do some unregistration prior to model deletion: + Job.getJobManager().removeJobChangeListener(listener); + + // close corresponding editor if open + final IEditorPart editorWithModelOpened = model.getAdapter(ModelEditor.class); + if (editorWithModelOpened != null) { + UIHelper.runUISync(new Runnable() { + public void run() { + UIHelper.getActivePage().closeEditor(editorWithModelOpened, + false); + } + }); + } } // Verify spec and model show expected state (via API!!!) @@ -108,20 +150,22 @@ public class RenameSpecHandlerTest extends AbstractTest { final Spec spec = Activator.getSpecManager().getSpecLoaded(); Assert.assertEquals(specExpected, spec.getName()); - final ILaunchConfiguration model = ModelHelper.getModelByName(spec.getProject(), TEST_MODEL); + + final Model model = spec.getAdapter(TLCSpec.class).getModel(TEST_MODEL); Assert.assertNotNull("Model could not be found", model); } // check if the models have been renamed correctly too (via UI!!!) - private void checkForModelExistenceUI(final SWTBotTreeItem treeItem) { + private SWTBotTreeItem checkForModelExistenceUI(final SWTBotTreeItem treeItem) { try { treeItem.expand(); SWTBotTreeItem models = treeItem.getNode("models"); models.expand(); - models.getNode(TEST_MODEL).select(); + return models.getNode(TEST_MODEL).select(); } catch(AssertionFailedException e) { Assert.fail(e.getMessage()); } + return null; } // Open spec explorer which is the only place to reach the rename action diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/plugin.xml b/org.lamport.tla.toolbox.tool.tlc.ui/plugin.xml index 8174e143514da3eb19644da4b10648668643ba88..775e4cefa2ab17fc0ffdc27be05160184a02d393 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/plugin.xml +++ b/org.lamport.tla.toolbox.tool.tlc.ui/plugin.xml @@ -134,12 +134,6 @@ id="toolbox.tool.tlc.commands.model.stop" name="Stop model checking"> </command> - <command - categoryId="toolbox.tool.tlc.commands.category" - description="Repairs corrupted model." - id="toolbox.tool.tlc.commands.model.repair" - name="Repair corrupted model"> - </command> <command id="org.lamport.tla.toolbox.tool.tlc.ui.command1" name="lets-create-a-command"> @@ -418,13 +412,6 @@ label="Stop" style="push"> </command> - <command - commandId="toolbox.tool.tlc.commands.model.repair" - icon="icons/full/loop_obj.gif" - id="toolbox.popupmenu.model.repair" - label="Repair" - style="push"> - </command> </menuContribution> </extension> <extension @@ -456,7 +443,7 @@ <possibleChildren> <or> <instanceof - value="org.eclipse.debug.core.ILaunchConfiguration"> + value="org.lamport.tla.toolbox.tool.tlc.model.Model"> </instanceof> </or> </possibleChildren> @@ -568,7 +555,7 @@ Console Facory ifEmpty="false" operator="or"> <instanceof - value="org.eclipse.debug.core.ILaunchConfiguration"> + value="org.lamport.tla.toolbox.tool.tlc.model.Model"> </instanceof> </iterate> </with> @@ -591,10 +578,10 @@ Console Facory ifEmpty="false" operator="or"> <instanceof - value="org.eclipse.debug.core.ILaunchConfiguration"> + value="org.lamport.tla.toolbox.tool.tlc.model.Model"> </instanceof> <adapt - type="org.eclipse.debug.core.ILaunchConfiguration"> + type="org.lamport.tla.toolbox.tool.tlc.model.Model"> <not> <reference definitionId="toolbox.tlc.hasModelRunningMarker"> @@ -622,10 +609,10 @@ Console Facory ifEmpty="false" operator="or"> <instanceof - value="org.eclipse.debug.core.ILaunchConfiguration"> + value="org.lamport.tla.toolbox.tool.tlc.model.Model"> </instanceof> <adapt - type="org.eclipse.debug.core.ILaunchConfiguration"> + type="org.lamport.tla.toolbox.tool.tlc.model.Model"> <not> <reference definitionId="toolbox.tlc.hasModelRunningMarker"> @@ -655,7 +642,7 @@ Console Facory ifEmpty="false" operator="or"> <instanceof - value="org.eclipse.debug.core.ILaunchConfiguration"> + value="org.lamport.tla.toolbox.tool.tlc.model.Model"> </instanceof> </iterate> </with> @@ -673,7 +660,7 @@ Console Facory ifEmpty="false" operator="or"> <instanceof - value="org.eclipse.debug.core.ILaunchConfiguration"> + value="org.lamport.tla.toolbox.tool.tlc.model.Model"> </instanceof> </iterate> </with> @@ -694,10 +681,10 @@ Console Facory ifEmpty="false" operator="and"> <instanceof - value="org.eclipse.debug.core.ILaunchConfiguration"> + value="org.lamport.tla.toolbox.tool.tlc.model.Model"> </instanceof> <adapt - type="org.eclipse.debug.core.ILaunchConfiguration"> + type="org.lamport.tla.toolbox.tool.tlc.model.Model"> <not> <or> <reference @@ -723,19 +710,14 @@ Console Facory ifEmpty="false" operator="and"> <instanceof - value="org.eclipse.debug.core.ILaunchConfiguration"> + value="org.lamport.tla.toolbox.tool.tlc.model.Model"> </instanceof> <adapt - type="org.eclipse.debug.core.ILaunchConfiguration"> + type="org.lamport.tla.toolbox.tool.tlc.model.Model"> <and> <reference definitionId="toolbox.tlc.hasModelRunningMarker"> </reference> - <not> - <reference - definitionId="toolbox.tlc.hasModelCrashedMarker"> - </reference> - </not> </and> </adapt> </iterate> @@ -748,41 +730,7 @@ Console Facory ifEmpty="false" operator="or"> <instanceof - value="org.eclipse.debug.core.ILaunchConfiguration"> - </instanceof> - </iterate> - </with> - </enabledWhen> - </handler> - <handler - class="org.lamport.tla.toolbox.tool.tlc.handlers.RepairLaunchHandler" - commandId="toolbox.tool.tlc.commands.model.repair"> - <activeWhen> - <with - variable="selection"> - <iterate - ifEmpty="false" - operator="and"> - <instanceof - value="org.eclipse.debug.core.ILaunchConfiguration"> - </instanceof> - <adapt - type="org.eclipse.debug.core.ILaunchConfiguration"> - <reference - definitionId="toolbox.tlc.hasModelCrashedMarker"> - </reference> - </adapt> - </iterate> - </with> - </activeWhen> - <enabledWhen> - <with - variable="selection"> - <iterate - ifEmpty="false" - operator="or"> - <instanceof - value="org.eclipse.debug.core.ILaunchConfiguration"> + value="org.lamport.tla.toolbox.tool.tlc.model.Model"> </instanceof> </iterate> </with> @@ -897,4 +845,14 @@ Console Facory sequence="M1+M2+A"> </key> </extension> + <extension + point="org.eclipse.core.runtime.adapters"> + <factory + adaptableType="org.lamport.tla.toolbox.tool.tlc.model.Model" + class="org.lamport.tla.toolbox.tool.tlc.ui.util.ModelEditorAdapterFactory"> + <adapter + type="org.lamport.tla.toolbox.tool.tlc.ui.editor.ModelEditor"> + </adapter> + </factory> + </extension> </plugin> diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/CloneModelHandler.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/CloneModelHandler.java index 3f1d5acd192a0a457903c28d5a36fdef58b7a952..44138ecc46805f09f00f92f4043c0632779a6477 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/CloneModelHandler.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/CloneModelHandler.java @@ -1,73 +1,61 @@ +/******************************************************************************* + * + * Copyright (c) 2015 Microsoft Research. All rights reserved. + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Simon Zambrowski - initial API and implementation + ******************************************************************************/ package org.lamport.tla.toolbox.tool.tlc.handlers; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationType; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; -import org.eclipse.debug.core.ILaunchManager; import org.lamport.tla.toolbox.tool.tlc.launch.IModelConfigurationConstants; -import org.lamport.tla.toolbox.tool.tlc.launch.TLCModelLaunchDelegate; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; +import org.lamport.tla.toolbox.tool.tlc.model.Model; /** * Clones the launch configuration */ -public class CloneModelHandler extends AbstractHandler implements IModelConfigurationConstants -{ - public static final String PARAM_MODEL_NAME = "toolbox.tool.tlc.commands.model.open.param.modelName"; - public static final String PARAM_MODELCOPY_NAME = "toolbox.tool.tlc.commands.model.open.param.modelCloneName"; - public static final String COMMAND_ID = "toolbox.tool.tlc.commands.model.clone"; - - /** - * The constructor. - */ - public CloneModelHandler() - { - } - - public Object execute(ExecutionEvent event) throws ExecutionException - { - // get the launch manager - ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); - - // get the launch type (model check) - ILaunchConfigurationType launchConfigurationType = launchManager - .getLaunchConfigurationType(TLCModelLaunchDelegate.LAUNCH_CONFIGURATION_TYPE); - - String modelName = event.getParameter(PARAM_MODEL_NAME); - String modelCopyName = event.getParameter(PARAM_MODELCOPY_NAME); - if (modelName == null) - { - return null; - } - - try - { - ILaunchConfiguration[] launchConfigurations = launchManager - .getLaunchConfigurations(launchConfigurationType); - for (int i = 0; i < launchConfigurations.length; i++) - { - // skip launches from other specs (projects) - if (modelName.equals(launchConfigurations[i].getName())) - { - ILaunchConfigurationWorkingCopy copy = launchConfigurations[i].copy(modelCopyName); - copy.setAttribute(MODEL_NAME, ModelHelper.getModelName(copy.getFile())); - copy.doSave(); - break; - } - } - - } catch (CoreException e) - { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - return null; - } - +public class CloneModelHandler extends AbstractHandler implements IModelConfigurationConstants { + + public static final String PARAM_MODEL_NAME = "toolbox.tool.tlc.commands.model.open.param.modelName"; + public static final String PARAM_MODELCOPY_NAME = "toolbox.tool.tlc.commands.model.open.param.modelCloneName"; + public static final String COMMAND_ID = "toolbox.tool.tlc.commands.model.clone"; + + public Object execute(final ExecutionEvent event) throws ExecutionException { + final String fullQualifiedModelName = event.getParameter(PARAM_MODEL_NAME); + final String modelCopyName = event.getParameter(PARAM_MODELCOPY_NAME); + if (fullQualifiedModelName == null) { + return null; + } + + final Model model = Model.getByName(fullQualifiedModelName); + if (model == null) { + throw new ExecutionException("Failed to find model by name " + fullQualifiedModelName); + } + + if (model.copy(modelCopyName) == null) { + throw new ExecutionException( + "Failed to create copy with name " + modelCopyName + " of model " + model.getName()); + } + return null; + } } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/CloneModelHandlerDelegate.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/CloneModelHandlerDelegate.java index 868416544b123f8357179ca58b253bcefb89dc8f..99ef71c1fdfd357d3e19f60dbc40193881c23c68 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/CloneModelHandlerDelegate.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/CloneModelHandlerDelegate.java @@ -1,3 +1,28 @@ +/******************************************************************************* + * + * Copyright (c) 2015 Microsoft Research. All rights reserved. + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Simon Zambrovski - initial API and implementation + ******************************************************************************/ package org.lamport.tla.toolbox.tool.tlc.handlers; import java.util.HashMap; @@ -7,16 +32,14 @@ import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.IHandler; -import org.eclipse.core.resources.IResource; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.jface.dialogs.IInputValidator; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.window.Window; import org.eclipse.ui.handlers.HandlerUtil; import org.lamport.tla.toolbox.tool.ToolboxHandle; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; +import org.lamport.tla.toolbox.tool.tlc.model.Model; +import org.lamport.tla.toolbox.tool.tlc.model.TLCSpec; import org.lamport.tla.toolbox.tool.tlc.util.ModelNameValidator; import org.lamport.tla.toolbox.util.UIHelper; @@ -24,105 +47,70 @@ import org.lamport.tla.toolbox.util.UIHelper; * Copies the contents of a model into a new model. * * @author Simon Zambrovski - * @version $Id$ */ -public class CloneModelHandlerDelegate extends AbstractHandler implements IHandler -{ - - public static final String COMMAND_ID = "toolbox.tool.tlc.commands.model.clone.delegate"; - - /** - * Parameter giving the name of the model to be cloned. - * - * If this parameter is set, the call to event.getParameter(PARAM_MODEL) should return - * an object of type String. This is an optional parameter, so if it is not - * set this handler looks for the current selection to find the model to be cloned. - * - * The model name can be of the form specName___modelName or just of the form - * modelName. - */ - public static final String PARAM_MODEL_NAME = "toolbox.tool.tlc.commands.model.clone.param.modelName"; - - private String modelName; - - /** - * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) - */ - public Object execute(ExecutionEvent event) throws ExecutionException - { - /* - * First try to get the model from the parameters. It is an optional - * parameter, so it may not have been set. - */ - String paramModelName = (String) event.getParameter(PARAM_MODEL_NAME); - ILaunchConfiguration model = null; - - if (paramModelName != null) - { - model = ModelHelper.getModelByName(paramModelName); - } else - { - /* - * No parameter try to get it from active navigator if any - */ - ISelection selection = HandlerUtil.getCurrentSelectionChecked(event); - if (selection != null && selection instanceof IStructuredSelection) - { - // model - model = (ILaunchConfiguration) ((IStructuredSelection) selection).getFirstElement(); - } - } - - if (model != null) - { - - // root file - IResource specRootModule = ToolboxHandle.getRootModule(model.getFile().getProject()); - - modelName = ModelHelper.getModelName(model.getFile()) + "_Copy"; - - IInputValidator modelNameInputValidator = new ModelNameValidator(specRootModule.getProject()); - final InputDialog dialog = new InputDialog(UIHelper.getShellProvider().getShell(), "Clone model...", - "Please input the new name of the model", modelName, modelNameInputValidator); - dialog.setBlockOnOpen(true); - UIHelper.runUISync(new Runnable() { - - public void run() - { - int open = dialog.open(); - switch (open) { - case Window.OK: - modelName = dialog.getValue(); - break; - case Window.CANCEL: - // cancel model creation - modelName = null; - } - } - }); - if (modelName == null) - { - // exit processing if no specName at place - return null; - } - - // construct real name - String newModelName = specRootModule.getProject().getName() + "___" + modelName; - - // Clone the model - Map<String, String> parameters = null; - parameters = new HashMap<String, String>(); - parameters.put(CloneModelHandler.PARAM_MODEL_NAME, model.getName()); - parameters.put(CloneModelHandler.PARAM_MODELCOPY_NAME, newModelName); - UIHelper.runCommand(CloneModelHandler.COMMAND_ID, parameters); - - // Open the previously created model - parameters = new HashMap<String, String>(); - parameters.put(OpenModelHandler.PARAM_MODEL_NAME, modelName); - UIHelper.runCommand(OpenModelHandler.COMMAND_ID, parameters); - } - - return null; - } - +public class CloneModelHandlerDelegate extends AbstractHandler implements IHandler { + + public static final String COMMAND_ID = "toolbox.tool.tlc.commands.model.clone.delegate"; + + /** + * Parameter giving the name of the model to be cloned. + * + * If this parameter is set, the call to event.getParameter(PARAM_MODEL) + * should return an object of type String. This is an optional parameter, so + * if it is not set this handler looks for the current selection to find the + * model to be cloned. + * + * The model name can be of the form specName___modelName or just of the + * form modelName. + */ + public static final String PARAM_MODEL_NAME = "toolbox.tool.tlc.commands.model.clone.param.modelName"; + + /** + * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) + */ + public Object execute(ExecutionEvent event) throws ExecutionException { + final TLCSpec spec = ToolboxHandle.getCurrentSpec().getAdapter(TLCSpec.class); + + Model model = null; + /* + * First try to get the model from the parameters. It is an optional + * parameter, so it may not have been set. + */ + final String paramModelName = (String) event.getParameter(PARAM_MODEL_NAME); + if (paramModelName != null) { + // The name is given which means the user clicked the main menu + // instead of the spec explorer. Under the constraint that only ever + // a single spec can be open, lookup the current spec to eventually + // get the corresponding model. + model = spec.getModel(paramModelName); + } else { + /* + * No parameter try to get it from active navigator if any + */ + final ISelection selection = HandlerUtil.getCurrentSelectionChecked(event); + if (selection != null && selection instanceof IStructuredSelection) { + // model + model = (Model) ((IStructuredSelection) selection).getFirstElement(); + } + } + + if (model != null) { + final InputDialog dialog = new InputDialog(UIHelper.getShellProvider().getShell(), "Clone model...", + "Please input the new name of the model", spec.getModelNameSuggestion(model), new ModelNameValidator(spec)); + dialog.setBlockOnOpen(true); + if (dialog.open() == Window.OK) { + final String usersChosenName = dialog.getValue(); + if (model.copy(usersChosenName) == null) { + throw new ExecutionException( + "Failed to copy with name " + usersChosenName + " from model " + model.getName()); + } + + // Open the previously created model + final Map<String, String> parameters = new HashMap<String, String>(); + parameters.put(OpenModelHandler.PARAM_MODEL_NAME, usersChosenName); + UIHelper.runCommand(OpenModelHandler.COMMAND_ID, parameters); + } + } + return null; + } } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/DeleteModelHandler.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/DeleteModelHandler.java index 7cbc7d74610f7ce14f360a783686bc43a4be8e7d..0380a2a5659ab9534b74cbed489d766691d4fdb2 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/DeleteModelHandler.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/DeleteModelHandler.java @@ -11,14 +11,14 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.handlers.HandlerUtil; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.source.TLCOutputSourceRegistry; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; +import org.lamport.tla.toolbox.tool.tlc.ui.editor.ModelEditor; import org.lamport.tla.toolbox.util.ToolboxJob; import org.lamport.tla.toolbox.util.UIHelper; @@ -33,7 +33,7 @@ public class DeleteModelHandler extends AbstractHandler implements IHandler { // Get the currently selected models from the Eclipse SelectionService // (Ask UI what the current selection is). The CommandFramework makes - // sure that only ILaunchConfigurations can be part of the selection. + // sure that only Model can be part of the selection. final ISelection selection = HandlerUtil.getCurrentSelectionChecked(event); if (selection != null && selection instanceof IStructuredSelection) { final IStructuredSelection iss = (IStructuredSelection) selection; @@ -54,56 +54,58 @@ public class DeleteModelHandler extends AbstractHandler implements IHandler // currently running a model check // TODO better disable delete action in spec explorer for // currently model checking models - final Iterator<ILaunchConfiguration> itr1 = iss.iterator(); + final Iterator<Model> itr1 = iss.iterator(); for (; itr1.hasNext();) { - final ILaunchConfiguration ilc = itr1.next(); - try { - boolean modelIsRunning = ModelHelper.isModelRunning(ilc); - if(modelIsRunning) { - MessageDialog - .openError( - UIHelper.getShell(), - "Could not delete a model", - "Could not delete the model " - + ModelHelper.getModelName(ilc.getFile()) - + ", because it is being model checked."); - return null; - } - } catch (CoreException e) { - // Can't think of a situation where this would throw a CoreException - // (except for an impl bug in isModelRunning()) at this point. - e.printStackTrace(); + final Model model = itr1.next(); + if(model.isRunning()) { + MessageDialog + .openError( + UIHelper.getShell(), + "Could not delete a model", + "Could not delete the model " + + model.getName() + + ", because it is being model checked."); + return null; + } + if(model.isLocked()) { + MessageDialog + .openError( + UIHelper.getShell(), + "Could not delete a model", + "Could not delete the model " + + model.getName() + + ", because it is currently locked."); + return null; } } // 3.) at this point, we are safe to delete all models (user has // confirmed, no model is used in model checking // But there might be open editors corresponding to the models which have to be closed first - final Iterator<ILaunchConfiguration> itr2 = iss.iterator(); + final Iterator<Model> itr2 = iss.iterator(); for (; itr2.hasNext();) { - final ILaunchConfiguration ilc = itr2.next(); + final Model model = itr2.next(); // close corresponding editor if open - final IEditorPart editorWithModelOpened = ModelHelper - .getEditorWithModelOpened(ilc); + final IEditorPart editorWithModelOpened = model.getAdapter(ModelEditor.class); if (editorWithModelOpened != null) { UIHelper.getActivePage().closeEditor(editorWithModelOpened, false); } } - // Remove all to be deleted LaunchConfigs from the Selection so that + // Remove all to be deleted Models from the Selection so that // other UI handlers do not handle them during the backend job // Simply convert selection to ILC[] - final ILaunchConfiguration[] ilcs = (ILaunchConfiguration[]) iss - .toList().toArray(new ILaunchConfiguration[iss.size()]); + final Model[] models = (Model[]) iss + .toList().toArray(new Model[iss.size()]); // 3.) remove any tlc output sources corresponding to this model // in case the user opens a new model of the same name in // the same toolbox session TLCOutputSourceRegistry.getModelCheckSourceRegistry() - .removeTLCStatusSource(ilcs); + .removeTLCStatusSource(models); // 4.) UI is in ready state // Defer deletion to ResourceFramework outside the UI thread (makes @@ -113,7 +115,9 @@ public class DeleteModelHandler extends AbstractHandler implements IHandler @Override protected IStatus run(IProgressMonitor monitor) { try { - ModelHelper.deleteModels(ilcs, monitor); + for (Model model : models) { + model.delete(monitor); + } } catch (CoreException e) { return new Status(Status.ERROR, "org.lamport.tla.toolbox.tool.tlc.ui", diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/NewModelHandler.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/NewModelHandler.java index 6c26d34d68c33a4fa393b6065ef44b55ac7e280a..a1fe39ad436084ff1c1d46e034c47ab6264867cb 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/NewModelHandler.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/NewModelHandler.java @@ -16,7 +16,6 @@ import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationType; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.core.ILaunchManager; -import org.eclipse.jface.dialogs.IInputValidator; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.text.BadLocationException; @@ -33,6 +32,8 @@ import org.lamport.tla.toolbox.tool.tlc.launch.IModelConfigurationConstants; import org.lamport.tla.toolbox.tool.tlc.launch.IModelConfigurationDefaults; import org.lamport.tla.toolbox.tool.tlc.launch.TLCModelLaunchDelegate; import org.lamport.tla.toolbox.tool.tlc.model.Assignment; +import org.lamport.tla.toolbox.tool.tlc.model.Model; +import org.lamport.tla.toolbox.tool.tlc.model.TLCSpec; import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; import org.lamport.tla.toolbox.tool.tlc.util.ModelNameValidator; @@ -61,15 +62,6 @@ public class NewModelHandler extends AbstractHandler implements IModelConfigurat public static final String PARAM_SPEC_NAME = "toolbox.tool.tlc.commands.model.new.param"; // public static final String PARAM_SPEC_NAME = "specName"; - private String modelName = null; - - /** - * The constructor. - */ - public NewModelHandler() - { - } - /** * This method is called when the TLC Model Checker / New Model command * is executed. The last thing it does is call the Eclipse magic that @@ -116,34 +108,15 @@ public class NewModelHandler extends AbstractHandler implements IModelConfigurat ILaunchConfigurationType launchConfigurationType = launchManager .getLaunchConfigurationType(TLCModelLaunchDelegate.LAUNCH_CONFIGURATION_TYPE); - // retrieve a new model name for the spec - modelName = ModelHelper.constructModelName(specProject); - - IInputValidator modelNameInputValidator = new ModelNameValidator(specProject); - final InputDialog dialog = new InputDialog(UIHelper.getShellProvider().getShell(), "New model...", - "Please input the name of the model to create", modelName, modelNameInputValidator); + final InputDialog dialog = new InputDialog(UIHelper.getShellProvider().getShell(), "New model...", + "Please input the name of the model to create", spec.getAdapter(TLCSpec.class).getModelNameSuggestion(), + new ModelNameValidator(spec)); dialog.setBlockOnOpen(true); - UIHelper.runUISync(new Runnable() { - - public void run() - { - int open = dialog.open(); - switch (open) { - case Window.OK: - modelName = dialog.getValue(); - break; - case Window.CANCEL: - // cancel model creation - modelName = null; - } - } - }); - if (modelName == null) - { - // exit processing if no model name at place - return null; + if (dialog.open() != Window.OK) { + return null; } + final String modelName = dialog.getValue(); // get the root module ModuleNode moduleNode = specObject.getExternalModuleTable().getRootModule(); @@ -171,7 +144,7 @@ public class NewModelHandler extends AbstractHandler implements IModelConfigurat // create new launch instance ILaunchConfigurationWorkingCopy launchCopy = launchConfigurationType.newInstance(specProject, specProject .getName() - + "___" + modelName); + + Model.SPEC_MODEL_DELIM + modelName); launchCopy.setAttribute(SPEC_NAME, spec.getName()); // it is easier to do launchCopy.getProject().getPersistentProperty(SPEC_ROOT_FILE) diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/OpenModelHandler.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/OpenModelHandler.java index 211f9542cbfcc5600536a2871283e307170a22e5..02aaabb35532a8b570d761e805d07fb3f4c7e90d 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/OpenModelHandler.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/OpenModelHandler.java @@ -4,9 +4,11 @@ import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.resources.IFile; +import org.lamport.tla.toolbox.tool.ToolboxHandle; import org.lamport.tla.toolbox.tool.tlc.launch.IConfigurationConstants; +import org.lamport.tla.toolbox.tool.tlc.model.Model; +import org.lamport.tla.toolbox.tool.tlc.model.TLCSpec; import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; import org.lamport.tla.toolbox.util.UIHelper; /** @@ -30,7 +32,14 @@ public class OpenModelHandler extends AbstractHandler implements IConfigurationC final String modelName = event.getParameter((String) PARAM_MODEL_NAME); TLCUIActivator.getDefault().logDebug("Open handler invoked on " + modelName); - final IFile launchFile = ModelHelper.getModelByName(modelName).getFile(); + final Model model = ToolboxHandle.getCurrentSpec().getAdapter(TLCSpec.class).getModel(modelName); + final IFile launchFile = model.getLaunchConfiguration().getFile(); + + if (!launchFile.exists()) { + throw new ExecutionException("Model file " + launchFile.getFullPath().toOSString() + + " does not exist. Try restarting the Toolbox and if that does not help, delete the model from the Spec Explorer."); + } + UIHelper.openEditor(EDITOR_ID, launchFile); TLCUIActivator.getDefault().logDebug("Finished open handler"); diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/OpenModelHandlerDelegate.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/OpenModelHandlerDelegate.java index f17dc32d9dac1c28031a7eaa4fcc0f0c68519e99..76adb28e749d742e7e0109b77144d427a7ece148 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/OpenModelHandlerDelegate.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/OpenModelHandlerDelegate.java @@ -7,11 +7,10 @@ import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.IHandler; -import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.handlers.HandlerUtil; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.util.UIHelper; public class OpenModelHandlerDelegate extends AbstractHandler implements IHandler @@ -31,14 +30,12 @@ public class OpenModelHandlerDelegate extends AbstractHandler implements IHandle && ((IStructuredSelection) selection).size() == 1) { Object selected = ((IStructuredSelection) selection).getFirstElement(); - if (selected instanceof ILaunchConfiguration) + if (selected instanceof Model) { Map<String, String> parameters = new HashMap<String, String>(); - String modelNameUser = ModelHelper.getModelName(((ILaunchConfiguration) selected).getFile()); - // fill the model name for the handler - parameters.put(OpenModelHandler.PARAM_MODEL_NAME, modelNameUser); + parameters.put(OpenModelHandler.PARAM_MODEL_NAME, ((Model) selected).getName()); // delegate the call to the open model handler UIHelper.runCommand(OpenModelHandler.COMMAND_ID, parameters); } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/OpenSavedModuleHandler.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/OpenSavedModuleHandler.java index 2b71322b69fc6665c152ba10d953371d41a584d1..4789eaa46b78ddb97aefd66b8d99b26c79b0e6ae 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/OpenSavedModuleHandler.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/OpenSavedModuleHandler.java @@ -8,15 +8,16 @@ import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; -import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.PartInitException; import org.eclipse.ui.part.FileEditorInput; import org.lamport.tla.toolbox.editor.basic.TLAEditorReadOnly; +import org.lamport.tla.toolbox.spec.Spec; import org.lamport.tla.toolbox.tool.ToolboxHandle; +import org.lamport.tla.toolbox.tool.tlc.model.Model; +import org.lamport.tla.toolbox.tool.tlc.model.TLCSpec; import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; import org.lamport.tla.toolbox.tool.tlc.ui.editor.ModelEditor; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; import org.lamport.tla.toolbox.util.UIHelper; /** @@ -55,15 +56,15 @@ public class OpenSavedModuleHandler extends AbstractHandler implements IHandler * spec of the module. If this is not equal to the project of the * currently opened spec, it is a bug. */ - if (module.getProject().equals(ToolboxHandle.getCurrentSpec().getProject())) + final Spec currentSpec = ToolboxHandle.getCurrentSpec(); + if (module.getProject().equals(currentSpec.getProject())) { /* * The parent of the module is the model folder, so it is the name * of the model. */ - ILaunchConfiguration config = ModelHelper.getModelByName(module.getProject(), module.getParent() - .getName()); - ModelEditor modelEditor = (ModelEditor) UIHelper.openEditor(ModelEditor.ID, config.getFile()); + Model model = currentSpec.getAdapter(TLCSpec.class).getModel(module.getParent().getName()); + ModelEditor modelEditor = (ModelEditor) UIHelper.openEditor(ModelEditor.ID, model.getLaunchConfiguration().getFile()); if (modelEditor != null) { try @@ -124,11 +125,11 @@ public class OpenSavedModuleHandler extends AbstractHandler implements IHandler } catch (PartInitException e) { TLCUIActivator.getDefault().logError("Error adding saved module read-only editor for module " - + modulePath + " to model " + config.getName(), e); + + modulePath + " to model " + model.getName(), e); } } else { - TLCUIActivator.getDefault().logDebug("Could not open model editor for model " + config.getName()); + TLCUIActivator.getDefault().logDebug("Could not open model editor for model " + model.getName()); } } else { diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/OpenTLCErrorViewHandler.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/OpenTLCErrorViewHandler.java index 50668232500fa405627476e7a9bf186a76cecb73..b5a684b4c66720b225f2f04c6025126bd547675f 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/OpenTLCErrorViewHandler.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/OpenTLCErrorViewHandler.java @@ -7,8 +7,8 @@ import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.IHandler; -import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.ui.IEditorPart; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.ui.editor.ModelEditor; import org.lamport.tla.toolbox.tool.tlc.ui.view.TLCErrorView; import org.lamport.tla.toolbox.ui.handler.OpenViewHandler; @@ -29,14 +29,14 @@ public class OpenTLCErrorViewHandler extends AbstractHandler implements IHandler if (activeEditor instanceof ModelEditor) { ModelEditor activeModelEditor = (ModelEditor) activeEditor; - final ILaunchConfiguration config = activeModelEditor.getConfig(); - if (config != null) + final Model model = activeModelEditor.getModel(); + if (model != null) { UIHelper.runUISync(new Runnable() { public void run() { - TLCErrorView.updateErrorView(config); + TLCErrorView.updateErrorView(model); } }); } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/RenameModelHandlerDelegate.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/RenameModelHandlerDelegate.java index 927583c479d3611c689a575c354a3e4f490de406..3ef525cb9a1695cd751a95f73f05cd1a022df783 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/RenameModelHandlerDelegate.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/RenameModelHandlerDelegate.java @@ -7,13 +7,10 @@ import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.IHandler; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.jface.dialogs.IInputValidator; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.dialogs.MessageDialog; @@ -22,9 +19,9 @@ import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.window.Window; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.handlers.HandlerUtil; -import org.lamport.tla.toolbox.tool.ToolboxHandle; import org.lamport.tla.toolbox.tool.tlc.launch.IModelConfigurationConstants; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; +import org.lamport.tla.toolbox.tool.tlc.model.Model; +import org.lamport.tla.toolbox.tool.tlc.ui.editor.ModelEditor; import org.lamport.tla.toolbox.tool.tlc.util.ModelNameValidator; import org.lamport.tla.toolbox.util.ToolboxJob; import org.lamport.tla.toolbox.util.UIHelper; @@ -48,32 +45,24 @@ public class RenameModelHandlerDelegate extends AbstractHandler implements IHand if (selection != null && selection instanceof IStructuredSelection) { // model file - final ILaunchConfiguration model = (ILaunchConfiguration) ((IStructuredSelection) selection).getFirstElement(); - - // root file - final IResource specRootModule = ToolboxHandle.getRootModule(model.getFile().getProject()); + final Model model = (Model) ((IStructuredSelection) selection).getFirstElement(); // a) fail if model is in use or locked - final String modelName = ModelHelper.getModelName(model.getFile()) + "_Copy"; - try { - if (ModelHelper.isModelRunning(model) || ModelHelper.isModelLocked(model)) { - MessageDialog.openError(UIHelper.getShellProvider().getShell(), "Could not rename models", - "Could not rename the model " + modelName - + ", because it is being model checked or is locked."); - return null; - } - } catch (CoreException e1) { - throw new ExecutionException(e1.getMessage(), e1); + if (model.isRunning() || model.isLocked()) { + MessageDialog.openError(UIHelper.getShellProvider().getShell(), "Could not rename models", + "Could not rename the model " + model.getName() + + ", because it is being model checked or is locked."); + return null; } // b) open dialog prompting for new model name - final IInputValidator modelNameInputValidator = new ModelNameValidator(specRootModule.getProject()); + final IInputValidator modelNameInputValidator = new ModelNameValidator(model.getSpec()); final InputDialog dialog = new InputDialog(UIHelper.getShell(), "Rename model...", - "Please input the new name of the model", modelName, modelNameInputValidator); + "Please input the new name of the model", model.getName(), modelNameInputValidator); dialog.setBlockOnOpen(true); if(dialog.open() == Window.OK) { // c) close model editor if open - final IEditorPart editor = ModelHelper.getEditorWithModelOpened(model); + final IEditorPart editor = model.getAdapter(ModelEditor.class); if(editor != null) { reopenModelEditorAfterRename = true; UIHelper.getActivePage().closeEditor(editor, true); @@ -86,7 +75,7 @@ public class RenameModelHandlerDelegate extends AbstractHandler implements IHand protected IStatus run(IProgressMonitor monitor) { // d) rename final String newModelName = dialog.getValue(); - ModelHelper.renameModel(model, ModelHelper.getSpecPrefix(model), newModelName); + model.rename(newModelName); // e) reopen (in UI thread) if (reopenModelEditorAfterRename) { diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/RepairLaunchHandler.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/RepairLaunchHandler.java index ff7a4ff910e52e523c2a20d20cbc9e1435c7cd5c..d9ae9314f4e3d3071a8faae0e8c6ebe804a0b5cd 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/RepairLaunchHandler.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/RepairLaunchHandler.java @@ -5,18 +5,14 @@ import java.util.Iterator; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.handlers.HandlerUtil; -import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; +import org.lamport.tla.toolbox.tool.tlc.model.Model; /** * Repairs model launches * @author Simon Zambrovski - * @version $Id$ */ public class RepairLaunchHandler extends AbstractHandler { @@ -32,18 +28,12 @@ public class RepairLaunchHandler extends AbstractHandler while (modelIterator.hasNext()) { Object element = modelIterator.next(); - if (element instanceof ILaunchConfiguration) + if (element instanceof Model) { - ILaunchConfiguration config = (ILaunchConfiguration) element; - try + Model model = (Model) element; + if (model.isStale()) { - if (ModelHelper.isModelRunning(config) && ModelHelper.isModelStale(config)) - { - ModelHelper.recoverModel(config); - } - } catch (CoreException e) - { - TLCUIActivator.getDefault().logError("Error reparing the model launch", e); + model.recover(); } } } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/StartLaunchHandler.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/StartLaunchHandler.java index 5697a4f8b9e0eb36d69f1fda756aa410a6a1dd18..a1edfe06e31370df42fc3e3e66ff4ee7bf1d7a98 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/StartLaunchHandler.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/StartLaunchHandler.java @@ -1,14 +1,14 @@ package org.lamport.tla.toolbox.tool.tlc.handlers; +import java.util.Map; + import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IEditorReference; @@ -16,10 +16,13 @@ import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchSite; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.handlers.HandlerUtil; +import org.lamport.tla.toolbox.tool.ToolboxHandle; import org.lamport.tla.toolbox.tool.tlc.launch.TLCModelLaunchDelegate; +import org.lamport.tla.toolbox.tool.tlc.model.Model; +import org.lamport.tla.toolbox.tool.tlc.model.TLCSpec; import org.lamport.tla.toolbox.tool.tlc.ui.editor.ModelEditor; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; import org.lamport.tla.toolbox.ui.handler.OpenSpecHandler; +import org.lamport.tla.toolbox.util.UIHelper; /** * Initiates a model checker run @@ -32,18 +35,27 @@ public class StartLaunchHandler extends AbstractHandler { private ModelEditor lastModelEditor; public Object execute(ExecutionEvent event) throws ExecutionException { - final ModelEditor modelEditor = getModelEditor(event); + ModelEditor modelEditor = getModelEditor(event); + + // Iff no previously opened modeleditor is still around and iff the spec + // has only a single model, open its modeleditor and run it. + if (modelEditor == null) { + final TLCSpec spec = ToolboxHandle.getCurrentSpec().getAdapter(TLCSpec.class); + if (spec != null) { + final Map<String, Model> models = spec.getModels(); + if (models.size() == 1) { + Model model = models.values().toArray(new Model[1])[0]; + modelEditor = (ModelEditor) UIHelper.openEditor(ModelEditor.ID, model.getFile()); + } + } + } + if (modelEditor != null) { - final ILaunchConfiguration config = modelEditor.getConfig().getOriginal(); + final Model model = modelEditor.getModel(); // 0) model check already running for the given model - try { - if (ModelHelper.isModelRunning(config)) { - return null; - } - } catch (CoreException e1) { - // why oh why does isModelRunning throw an exception?! + if (model.isRunning()) { return null; } @@ -87,32 +99,24 @@ public class StartLaunchHandler extends AbstractHandler { } // 2) model might be locked - if (modelEditor.isModelLocked()) { + if (model.isLocked()) { boolean unlock = MessageDialog .openQuestion(shell, "Unlock model?", "The current model is locked, but has to be unlocked prior to launching. Should the model be unlocked?"); if (unlock) { - try { - ModelHelper.setModelLocked(config, false); - } catch (CoreException e) { - throw new ExecutionException(e.getMessage(), e); - } + model.setLocked(false); } else { return null; } } // 3) model might be stale - if (modelEditor.isModelStale()) { + if (model.isStale()) { boolean unlock = MessageDialog .openQuestion(shell, "Repair model?", "The current model is stale and has to be repaird prior to launching. Should the model be repaired onw?"); if (unlock) { - try { - ModelHelper.recoverModel(config); - } catch (CoreException e) { - throw new ExecutionException(e.getMessage(), e); - } + model.recover(); } else { return null; } @@ -159,6 +163,13 @@ public class StartLaunchHandler extends AbstractHandler { } } } + // Validate that the lastModelEditor still belongs to the current + // open spec. E.g. lastModelEditor might still be around from when + // the user ran a it on spec X, but has switched to spec Y in the + // meantime. Closing the spec nulls the ModelEditor + if (lastModelEditor != null && lastModelEditor.isDisposed()) { + lastModelEditor = null; + } // If the previous two attempts to find a model editor have failed, lets // return whatever we have... which might be null. diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/StopLaunchHandler.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/StopLaunchHandler.java index e4d84ba859c4465a5e6c6c210f15fc6ba88505e7..d6c06301bc0d03a70a65a79039bb4355b3bf6791 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/StopLaunchHandler.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/StopLaunchHandler.java @@ -5,19 +5,15 @@ import java.util.Iterator; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; -import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.handlers.HandlerUtil; -import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; +import org.lamport.tla.toolbox.tool.tlc.model.Model; /** * Stops model launches * @author Simon Zambrovski - * @version $Id$ */ public class StopLaunchHandler extends AbstractHandler { @@ -34,23 +30,17 @@ public class StopLaunchHandler extends AbstractHandler while (modelIterator.hasNext()) { Object element = modelIterator.next(); - if (element instanceof ILaunchConfiguration) + if (element instanceof Model) { - ILaunchConfiguration config = (ILaunchConfiguration) element; - try + Model model = (Model) element; + if (model.isRunning()) { - if (ModelHelper.isModelRunning(config) && !ModelHelper.isModelStale(config)) + Job[] runningSpecJobs = Job.getJobManager().find(model.getLaunchConfiguration()); + for (int i = 0; i < runningSpecJobs.length; i++) { - Job[] runningSpecJobs = Job.getJobManager().find(config); - for (int i = 0; i < runningSpecJobs.length; i++) - { - // send cancellations to all jobs... - runningSpecJobs[i].cancel(); - } + // send cancellations to all jobs... + runningSpecJobs[i].cancel(); } - } catch (CoreException e) - { - TLCUIActivator.getDefault().logError("Error stopping the model launch", e); } } } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/TLAOpenElementSelectionDialogHandler.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/TLAOpenElementSelectionDialogHandler.java index 3fe1869a2e781850f0c4bdb0b7e58b6f00964c80..b57661ea017820825bb96147895482d4a99f7663 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/TLAOpenElementSelectionDialogHandler.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/handlers/TLAOpenElementSelectionDialogHandler.java @@ -33,13 +33,12 @@ import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.IHandler; -import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.ui.handlers.HandlerUtil; import org.lamport.org.eclipse.ui.dialogs.FilteredItemsSelectionDialog; import org.lamport.tla.toolbox.spec.Module; import org.lamport.tla.toolbox.spec.Spec; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.ui.dialog.TLAFilteredItemsSelectionDialog; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; import org.lamport.tla.toolbox.ui.handler.OpenModuleHandler; import org.lamport.tla.toolbox.ui.handler.OpenSpecHandler; import org.lamport.tla.toolbox.util.UIHelper; @@ -62,9 +61,8 @@ public class TLAOpenElementSelectionDialogHandler extends AbstractHandler implem } else if (result[0] instanceof Module) { parameters.put(OpenModuleHandler.PARAM_MODULE, ((Module) result[0]).getModuleName()); UIHelper.runCommand(OpenModuleHandler.COMMAND_ID, parameters); - } else if (result[0] instanceof ILaunchConfiguration) { - parameters.put(OpenModelHandler.PARAM_MODEL_NAME, - ModelHelper.getModelName(((ILaunchConfiguration) result[0]).getFile())); + } else if (result[0] instanceof Model) { + parameters.put(OpenModelHandler.PARAM_MODEL_NAME, ((Model) result[0]).getName()); UIHelper.runCommand(OpenModelHandler.COMMAND_ID, parameters); } else if (result[0] instanceof Spec) { parameters.put(OpenSpecHandler.PARAM_SPEC, ((Spec) result[0]).getName()); diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/ConsoleProcessOutputSink.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/ConsoleProcessOutputSink.java index 47f6ca273dac4c45b6ea7278b3a59868cd7972a2..d1907c70a01cf44ba6c575d9597a4a501a157846 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/ConsoleProcessOutputSink.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/ConsoleProcessOutputSink.java @@ -4,6 +4,7 @@ import java.io.IOException; import org.eclipse.ui.console.IOConsoleOutputStream; import org.eclipse.ui.console.MessageConsole; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.IProcessOutputSink; import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; import org.lamport.tla.toolbox.tool.tlc.ui.console.ConsoleFactory; @@ -11,7 +12,6 @@ import org.lamport.tla.toolbox.tool.tlc.ui.console.ConsoleFactory; /** * A sink writing to a console * @author Simon Zambrovski - * @version $Id$ */ public class ConsoleProcessOutputSink implements IProcessOutputSink { @@ -38,7 +38,7 @@ public class ConsoleProcessOutputSink implements IProcessOutputSink } } - public void initializeSink(String processName, int sinkType) + public void initializeSink(Model model, int sinkType) { } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/ITLCOutputListener.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/ITLCOutputListener.java index 5e6f9ad9e0deefeda2df2b334fe545c73af4c4fc..3d73b00c0ee14515ca81ade7d54f4e1b2ca1d056 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/ITLCOutputListener.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/ITLCOutputListener.java @@ -1,6 +1,7 @@ package org.lamport.tla.toolbox.tool.tlc.output; import org.eclipse.jface.text.ITypedRegion; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.source.TLCRegion; /** @@ -10,7 +11,6 @@ import org.lamport.tla.toolbox.tool.tlc.output.source.TLCRegion; * This class is not intended to be subclassed by the clients.<br> * * @author Simon Zambrovski - * @version $Id$ */ public interface ITLCOutputListener { @@ -18,7 +18,7 @@ public interface ITLCOutputListener * Retrieves the process name of TLC * @return the name to identify the TLC instance */ - public String getTLCOutputName(); + public Model getModel(); /** * Reports new output. diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/LogFileReader.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/LogFileReader.java index 7539b9b2b274a35508417a1a1318a6e49e376546..93bc25fd388e019d9777a813d1e4c8646ca3f026 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/LogFileReader.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/LogFileReader.java @@ -36,6 +36,7 @@ import java.io.LineNumberReader; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.text.BadLocationException; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.source.ITLCOutputSource; import org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser; import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; @@ -50,9 +51,9 @@ public class LogFileReader { private final TagBasedTLCOutputIncrementalParser parser; private final File logFile; - public LogFileReader(String name, IFile aLogFile, boolean isTraceExplorerLogFile) { + public LogFileReader(Model model, IFile aLogFile, boolean isTraceExplorerLogFile) { this.logFile = new File(aLogFile.getLocation().toOSString()); - this.parser = new TagBasedTLCOutputIncrementalParser(name, ITLCOutputSource.PRIO_LOW, isTraceExplorerLogFile, + this.parser = new TagBasedTLCOutputIncrementalParser(model, ITLCOutputSource.PRIO_LOW, isTraceExplorerLogFile, TagBasedTLCOutputIncrementalParser.Mode.BATCH, this.logFile.length()); } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/ParsingTLCOutputSink.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/ParsingTLCOutputSink.java index a8fcdadac1fd041b5ab8e656b0fff29f07f60fce..fc5f390e5f494b58ca71bee2c3c90e92faf76a0e 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/ParsingTLCOutputSink.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/ParsingTLCOutputSink.java @@ -1,6 +1,7 @@ package org.lamport.tla.toolbox.tool.tlc.output; import org.eclipse.jface.text.BadLocationException; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.source.ITLCOutputSource; import org.lamport.tla.toolbox.tool.tlc.output.source.TagBasedTLCOutputIncrementalParser; import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; @@ -47,18 +48,18 @@ public class ParsingTLCOutputSink implements IProcessOutputSink parser.addIncrement(input); } catch (BadLocationException e) { TLCUIActivator.getDefault().logError("Error parsing the TLC output stream for " - + this.parser.getSource().getTLCOutputName(), e); + + this.parser.getSource().getModel(), e); } } /* (non-Javadoc) * @see org.lamport.tla.toolbox.tool.tlc.output.IProcessOutputSink#initializeSink(java.lang.String, int) */ - public void initializeSink(String processName, int sinkType) + public void initializeSink(Model model, int sinkType) { boolean isTraceExploration = sinkType == IProcessOutputSink.TYPE_TRACE_EXPLORE; // parser = new TLCOutputIncrementalParser(processName, ITLCOutputSource.PRIO_HIGH); - parser = new TagBasedTLCOutputIncrementalParser(processName, ITLCOutputSource.PRIO_HIGH, isTraceExploration); + parser = new TagBasedTLCOutputIncrementalParser(model, ITLCOutputSource.PRIO_HIGH, isTraceExploration); } /* (non-Javadoc) diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/data/ITLCModelLaunchDataPresenter.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/data/ITLCModelLaunchDataPresenter.java index 1e36c3b370109f17bac9ed2fd1a2f960bf5909d6..1f39469f7529525fd0b33f8ed97ba6f4df585335 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/data/ITLCModelLaunchDataPresenter.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/data/ITLCModelLaunchDataPresenter.java @@ -1,11 +1,8 @@ package org.lamport.tla.toolbox.tool.tlc.output.data; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; - /** * A presenter is responsible for the presentation of data handled by the {@link TLCModelLaunchDataProvider} * @author Simon Zambrovski - * @version $Id$ */ public interface ITLCModelLaunchDataPresenter { @@ -29,11 +26,6 @@ public interface ITLCModelLaunchDataPresenter COVERAGE_TIME, COVERAGE, PROGRESS, ERRORS, CONST_EXPR_EVAL_OUTPUT, FINGERPRINT_COLLISION_PROBABILITY, DISTRIBUTED_SERVER_RUNNING, DISTRIBUTED_WORKER_REGISTERED }; - /** - * Retrieves the model - */ - public ILaunchConfigurationWorkingCopy getConfig(); - /** * Inform the presenter about the data changes * @param dataProvider data source diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/data/TLCError.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/data/TLCError.java index 2d83d3e86b430d865d445214703189c4b246cbee..a4586aeb4457bf148e956a1d41280793eb3f1ec8 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/data/TLCError.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/data/TLCError.java @@ -46,10 +46,6 @@ public class TLCError private int errorCode; private int numberOfStatesToShow = Integer.MAX_VALUE; // no restriction by default - public void addState(TLCState state) { - addState(state, true); - } - /** * Add a state to a trace * @param state state to add diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/data/TLCModelLaunchDataProvider.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/data/TLCModelLaunchDataProvider.java index a341af774823ba75412134885347627a542435b2..1747820f74da06fdd525563536985740561af73f 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/data/TLCModelLaunchDataProvider.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/data/TLCModelLaunchDataProvider.java @@ -39,9 +39,6 @@ import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationListener; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.Document; @@ -56,13 +53,14 @@ import org.eclipse.ui.part.FileEditorInput; import org.lamport.tla.toolbox.Activator; import org.lamport.tla.toolbox.tool.tlc.launch.IModelConfigurationConstants; import org.lamport.tla.toolbox.tool.tlc.model.Formula; +import org.lamport.tla.toolbox.tool.tlc.model.Model; +import org.lamport.tla.toolbox.tool.tlc.model.ModelWriter; import org.lamport.tla.toolbox.tool.tlc.output.ITLCOutputListener; import org.lamport.tla.toolbox.tool.tlc.output.source.TLCOutputSourceRegistry; import org.lamport.tla.toolbox.tool.tlc.output.source.TLCRegion; import org.lamport.tla.toolbox.tool.tlc.output.source.TLCRegionContainer; import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; -import org.lamport.tla.toolbox.tool.tlc.util.ModelWriter; import org.lamport.tla.toolbox.util.AdapterFactory; import org.lamport.tla.toolbox.util.UIHelper; @@ -74,7 +72,7 @@ import tlc2.output.MP; * Container for the data about the model launch * @author Simon Zambrovski */ -public class TLCModelLaunchDataProvider implements ITLCOutputListener, ILaunchConfigurationListener +public class TLCModelLaunchDataProvider implements ITLCOutputListener { public static final String STATESORTORDER = "STATESORTORDER"; @@ -133,10 +131,10 @@ public class TLCModelLaunchDataProvider implements ITLCOutputListener, ILaunchCo /** * Sort order in which states are sorted in the variable viewer */ - private boolean stateSortDirection; + protected boolean stateSortDirection; // the model, which is represented by the current launch data provider - private ILaunchConfiguration config; + private final Model model; // flag indicating that TLC has started // currently this is used to indicate // that tlc output not surrounded by message tags @@ -161,9 +159,9 @@ public class TLCModelLaunchDataProvider implements ITLCOutputListener, ILaunchCo return startTime; } - public TLCModelLaunchDataProvider(ILaunchConfiguration config) + public TLCModelLaunchDataProvider(Model model) { - this.config = config; + this.model = model; // init provider, but not connect it to the source! initialize(); @@ -183,7 +181,7 @@ public class TLCModelLaunchDataProvider implements ITLCOutputListener, ILaunchCo isTLCStarted = false; errors = new Vector<TLCError>(); lastDetectedError = null; - ModelHelper.removeModelProblemMarkers(this.config, ModelHelper.TLC_MODEL_ERROR_MARKER_TLC); + model.removeMarkers(ModelHelper.TLC_MODEL_ERROR_MARKER_TLC); coverageInfo = new Vector<CoverageInformationItem>(); progressInformation = new Vector<StateSpaceInformationItem>(); @@ -200,9 +198,6 @@ public class TLCModelLaunchDataProvider implements ITLCOutputListener, ILaunchCo final IDialogSettings dialogSettings = Activator.getDefault().getDialogSettings(); stateSortDirection = dialogSettings.getBoolean(STATESORTORDER); - - // Register as a LCL to cache the LaunchConfig's attributes upon save/commit. - DebugPlugin.getDefault().getLaunchManager().addLaunchConfigurationListener(this); } /** @@ -231,10 +226,9 @@ public class TLCModelLaunchDataProvider implements ITLCOutputListener, ILaunchCo /** * Name of the model */ - public String getTLCOutputName() + public Model getModel() { - // the model filename is good because it is unique - return config.getFile().getName(); + return model; } public void onDone() @@ -351,6 +345,7 @@ public class TLCModelLaunchDataProvider implements ITLCOutputListener, ILaunchCo case EC.TLC_STATS_SIMU: case EC.TLC_SEARCH_DEPTH: case EC.TLC_LIVE_IMPLIED: + case EC.TLC_MODULE_VALUE_JAVA_METHOD_OVERRIDE_LOADED: setDocumentText(this.progressOutput, outputMessage, true); break; case EC.TLC_SUCCESS: @@ -569,7 +564,6 @@ public class TLCModelLaunchDataProvider implements ITLCOutputListener, ILaunchCo */ public void destroy() { - DebugPlugin.getDefault().getLaunchManager().removeLaunchConfigurationListener(this); TLCOutputSourceRegistry.getModelCheckSourceRegistry().disconnect(this); } @@ -616,7 +610,7 @@ public class TLCModelLaunchDataProvider implements ITLCOutputListener, ILaunchCo * provider in the finally block for this try block in order to avoid * a memory leak. */ - IFile mcFile = ModelHelper.getModelTLAFile(config); + IFile mcFile = getModel().getTLAFile(); FileEditorInput mcFileEditorInput = new FileEditorInput((IFile) mcFile); FileDocumentProvider mcFileDocumentProvider = new FileDocumentProvider(); @@ -664,7 +658,7 @@ public class TLCModelLaunchDataProvider implements ITLCOutputListener, ILaunchCo // create the error properties for this id // this method find the corresponding attribute and // create the map with attributes, required to create a marker - props[j] = ModelHelper.createMarkerDescription(config, mcDocument, mcSearcher, + props[j] = ModelHelper.createMarkerDescription(mcDocument, mcSearcher, errorMessage, IMarker.SEVERITY_ERROR, coordinates); // read the attribute name @@ -681,7 +675,7 @@ public class TLCModelLaunchDataProvider implements ITLCOutputListener, ILaunchCo // some attributes are lists if (ModelHelper.isListAttribute(attributeName)) { - final List<String> attributeValue = (List<String>) config + final List<String> attributeValue = (List<String>) model .getAttribute(attributeName, new ArrayList<String>(0)); int attributeNumber = (attributeIndex != null) ? attributeIndex.intValue() : 0; @@ -708,7 +702,7 @@ public class TLCModelLaunchDataProvider implements ITLCOutputListener, ILaunchCo } else { // others are just strings - idReplacement = config.getAttribute(attributeName, ModelHelper.EMPTY_STRING); + idReplacement = model.getAttribute(attributeName, ModelHelper.EMPTY_STRING); } // patch the message @@ -779,8 +773,7 @@ public class TLCModelLaunchDataProvider implements ITLCOutputListener, ILaunchCo // patch the error marker props[j].put(IMarker.MESSAGE, errorMessage); // install error marker - ModelHelper.installModelProblemMarker(config.getFile(), props[j], - ModelHelper.TLC_MODEL_ERROR_MARKER_TLC); + model.setMarker(props[j], ModelHelper.TLC_MODEL_ERROR_MARKER_TLC); markerInstalled = true; } @@ -789,8 +782,7 @@ public class TLCModelLaunchDataProvider implements ITLCOutputListener, ILaunchCo if (!markerInstalled) { Hashtable<String, Object> prop = ModelHelper.createMarkerDescription(errorMessage, IMarker.SEVERITY_ERROR); - ModelHelper.installModelProblemMarker(config.getFile(), prop, - ModelHelper.TLC_MODEL_ERROR_MARKER_TLC); + model.setMarker(prop, ModelHelper.TLC_MODEL_ERROR_MARKER_TLC); } // set error text @@ -881,15 +873,6 @@ public class TLCModelLaunchDataProvider implements ITLCOutputListener, ILaunchCo TLCOutputSourceRegistry.getModelCheckSourceRegistry().connect(this); } - /** - * Retrieves the config - * @return config this launch data provider is representing - */ - public ILaunchConfiguration getConfig() - { - return this.config; - } - /** * Set the presenter. * @param presenter a presenter to update on data changes @@ -1054,31 +1037,10 @@ public class TLCModelLaunchDataProvider implements ITLCOutputListener, ILaunchCo protected String getModelName() { // defined here so subclasses can override which ain't backed by a real // file (e.g. unit test) - return ModelHelper.getModelName(getConfig().getFile()); + return getModel().getName(); } - /* org.eclipse.debug.core.ILaunchConfigurationListener */ - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfigurationListener#launchConfigurationAdded(org.eclipse.debug.core.ILaunchConfiguration) - */ - public void launchConfigurationAdded(final ILaunchConfiguration configuration) { - // Ignore - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfigurationListener#launchConfigurationChanged(org.eclipse.debug.core.ILaunchConfiguration) - */ - public void launchConfigurationChanged(final ILaunchConfiguration configuration) { - // The moment the launch config is saved/committed, keep it. - this.config = configuration; - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.ILaunchConfigurationListener#launchConfigurationRemoved(org.eclipse.debug.core.ILaunchConfiguration) - */ - public void launchConfigurationRemoved(final ILaunchConfiguration configuration) { - // Ignore, should never happen during model checking because the ILC is locked. - this.config = null; + public String toString() { + return getModel().getSpec().getName() + "___" + getModelName(); } } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/data/TLCState.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/data/TLCState.java index e7101ab7bb7b11b3edfe0ea1d58d9018f22c7363..dd5e6db313dc0415b9c7d5526355f64ba777af6b 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/data/TLCState.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/data/TLCState.java @@ -227,6 +227,10 @@ public class TLCState implements IModuleLocatable return number == 1; } + public boolean isExpandable() { + return !isBackToState() && !isStuttering(); + } + public int getStateNumber() { return number; diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/data/TraceExplorerDataProvider.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/data/TraceExplorerDataProvider.java index 711b7b84852b9a2306d023de8fcf95269ceae8b4..0bc19b53d5ec2307ee48235cd0af77437fa8d045 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/data/TraceExplorerDataProvider.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/data/TraceExplorerDataProvider.java @@ -11,7 +11,6 @@ import java.util.regex.Pattern; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.FindReplaceDocumentAdapter; import org.eclipse.jface.text.IDocument; @@ -20,6 +19,8 @@ import org.eclipse.jface.text.ITypedRegion; import org.eclipse.ui.editors.text.FileDocumentProvider; import org.eclipse.ui.part.FileEditorInput; import org.lamport.tla.toolbox.tool.tlc.launch.TraceExpressionInformationHolder; +import org.lamport.tla.toolbox.tool.tlc.model.Model; +import org.lamport.tla.toolbox.tool.tlc.model.ModelWriter; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCError.Length; import org.lamport.tla.toolbox.tool.tlc.output.source.TLCOutputSourceRegistry; import org.lamport.tla.toolbox.tool.tlc.output.source.TLCRegion; @@ -27,8 +28,6 @@ import org.lamport.tla.toolbox.tool.tlc.output.source.TLCRegionContainer; import org.lamport.tla.toolbox.tool.tlc.traceexplorer.TraceExplorerHelper; import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; import org.lamport.tla.toolbox.tool.tlc.ui.view.TLCErrorView; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; -import org.lamport.tla.toolbox.tool.tlc.util.ModelWriter; import org.lamport.tla.toolbox.util.UIHelper; import tlc2.output.EC; @@ -51,10 +50,9 @@ public class TraceExplorerDataProvider extends TLCModelLaunchDataProvider private Hashtable<String, TraceExpressionInformationHolder> traceExpressionDataTable; private static String TE_ERROR_HEADER = "Error(s) from running the Trace Explorer:\n"; - public TraceExplorerDataProvider(ILaunchConfiguration config) + public TraceExplorerDataProvider(Model model) { - super(config); - + super(model); } /** @@ -81,7 +79,7 @@ public class TraceExplorerDataProvider extends TLCModelLaunchDataProvider public void run() { - TLCErrorView.updateErrorView(getConfig()); + TLCErrorView.updateErrorView(getModel()); } }); } @@ -108,7 +106,7 @@ public class TraceExplorerDataProvider extends TLCModelLaunchDataProvider * provider in the finally block for this try block in order to avoid * a memory leak. */ - IFile teFile = ModelHelper.getTraceExplorerTLAFile(getConfig()); + IFile teFile = getModel().getTraceExplorerTLAFile(); FileEditorInput teFileEditorInput = new FileEditorInput((IFile) teFile); FileDocumentProvider teFileDocumentProvider = new FileDocumentProvider(); try @@ -289,7 +287,7 @@ public class TraceExplorerDataProvider extends TLCModelLaunchDataProvider private void processTraceForTraceExplorer() { // retrieve the error with a trace for which the trace explorer was run - final TLCError originalErrorWithTrace = TraceExplorerHelper.getErrorOfOriginalTrace(getConfig()); + final TLCError originalErrorWithTrace = TraceExplorerHelper.getErrorOfOriginalTrace(getModel()); if (originalErrorWithTrace == null) { // the trace explorer is meaningless if the original trace cannot be recovered @@ -554,13 +552,13 @@ public class TraceExplorerDataProvider extends TLCModelLaunchDataProvider Arrays.sort(finalStateNewTraceVariables, varComparator); } else if (finalStateOriginalTrace.isBackToState()) { - error.addState(TLCState.BACK_TO_STATE(finalStateOriginalTrace.getStateNumber(), ModelHelper - .getModelName(getConfig().getFile()))); + error.addState(TLCState.BACK_TO_STATE(finalStateOriginalTrace.getStateNumber(), + getModel().getName()), stateSortDirection); } else { // stuttering trace - error.addState(TLCState.STUTTERING_STATE(finalStateOriginalTrace.getStateNumber(), ModelHelper - .getModelName(getConfig().getFile()))); + error.addState(TLCState.STUTTERING_STATE(finalStateOriginalTrace.getStateNumber(), + getModel().getName()), stateSortDirection); } } else @@ -576,7 +574,7 @@ public class TraceExplorerDataProvider extends TLCModelLaunchDataProvider */ if (successfulTEError != null) { - List<TLCError> originalErrors = TLCOutputSourceRegistry.getModelCheckSourceRegistry().getProvider(getConfig()) + List<TLCError> originalErrors = TLCOutputSourceRegistry.getModelCheckSourceRegistry().getProvider(getModel()) .getErrors(); List<TLCError> newErrors = new LinkedList<TLCError>(); Iterator<TLCError> iterator = originalErrors.iterator(); diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/source/CachingTLCOutputSource.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/source/CachingTLCOutputSource.java index 5f794ee2da82d86ee62d07aeac5e4af21fdb327f..f56099adb145456f1d9a493ee2b779846838aefc 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/source/CachingTLCOutputSource.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/source/CachingTLCOutputSource.java @@ -4,6 +4,7 @@ import java.util.Vector; import org.eclipse.core.runtime.Assert; import org.eclipse.jface.text.ITypedRegion; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.ITLCOutputListener; /** @@ -11,7 +12,6 @@ import org.lamport.tla.toolbox.tool.tlc.output.ITLCOutputListener; * has received the output * * @author Simon Zambrovski - * @version $Id$ */ public class CachingTLCOutputSource implements ITLCOutputSource { @@ -20,18 +20,19 @@ public class CachingTLCOutputSource implements ITLCOutputSource /** * List of {@link TypedRegionAndText}s. */ - private Vector<TypedRegionAndText> detectedRegions = new Vector<TypedRegionAndText>(); - private String sourceName; - private int priority; + private final Vector<TypedRegionAndText> detectedRegions = new Vector<TypedRegionAndText>(); + private final Model model; + private final int priority; /** * Constructor of the source for a given name and prio - * @param name + * @param model * @param priority */ - public CachingTLCOutputSource(String name, int priority) + public CachingTLCOutputSource(Model model, int priority) { - this.sourceName = name; + Assert.isNotNull(model); + this.model = model; this.priority = priority; } @@ -118,11 +119,11 @@ public class CachingTLCOutputSource implements ITLCOutputSource } /** - * @see org.lamport.tla.toolbox.tool.tlc.output.source.ITLCOutputSource#getTLCOutputName() + * @see org.lamport.tla.toolbox.tool.tlc.output.source.ITLCOutputSource#getModel() */ - public String getTLCOutputName() + public Model getModel() { - return sourceName; + return model; } /** diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/source/ITLCOutputSource.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/source/ITLCOutputSource.java index 57abbb862cee28cba2d35e7f53621b76c2b9cdd0..2c798896e4c846f4d12992175ab88f3af814ce1a 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/source/ITLCOutputSource.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/source/ITLCOutputSource.java @@ -1,5 +1,6 @@ package org.lamport.tla.toolbox.tool.tlc.output.source; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.ITLCOutputListener; /** @@ -33,7 +34,7 @@ public interface ITLCOutputSource /** * Retrieves the source name, which is the id of the source */ - public String getTLCOutputName(); + public Model getModel(); /** * Retrieves the source priority diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/source/TLCOutputSourceRegistry.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/source/TLCOutputSourceRegistry.java index 84fbd870d6cd9ae393b18b299704eca33e41df6f..d0ce4dc5291efa977afed4cafcb67f6648b17966 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/source/TLCOutputSourceRegistry.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/source/TLCOutputSourceRegistry.java @@ -12,16 +12,15 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.jface.text.BadLocationException; import org.eclipse.ui.progress.IProgressConstants; import org.lamport.tla.toolbox.Activator; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.ITLCOutputListener; import org.lamport.tla.toolbox.tool.tlc.output.LogFileReader; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider; import org.lamport.tla.toolbox.tool.tlc.output.data.TraceExplorerDataProvider; import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; /** * The TLC process can produce some output, which needs to be processed by a consumer. The TLC Output Source ({@link ITLCOutputSource}) @@ -33,16 +32,16 @@ import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; * during the work with the registry: * <ul> * <li>The consumer is passed as to the registry during the call of {@link TLCOutputSourceRegistry#connect(ITLCOutputListener)}</li> - * <li>The registry will call {@link ITLCOutputListener#getTLCOutputName()} and eventually select among one of the sources available</li> + * <li>The registry will call {@link ITLCOutputListener#getModel()} and eventually select among one of the sources available</li> * <li>If the source is selected, {@link ITLCOutputSource#addTLCOutputListener(ITLCOutputListener)} is called by the registry on it, * passing the consumer listener instance</li> * <li>After the end of the with the source, the consumer is disconnected by calling {@link TLCOutputSourceRegistry#disconnect(ITLCOutputListener)}</li> * </ul> * <br><br> * A new source of the TLC output is added by calling {@link TLCOutputSourceRegistry#addTLCOutputSource(ITLCOutputSource)} method. The source - * is identified by the name and priority. The methods {@link ITLCOutputSource#getTLCOutputName()} and {@link ITLCOutputSource#getSourcePrio()} + * is identified by the name and priority. The methods {@link ITLCOutputSource#getModel()} and {@link ITLCOutputSource#getSourcePrio()} * are used to obtain this information. If any listener have been registered, which are interested in the certain TLC Output (the values of - * {@link ITLCOutputListener#getTLCOutputName()} and {@link ITLCOutputSource#getTLCOutputName()}) are equal, then these will be registered by the + * {@link ITLCOutputListener#getModel()} and {@link ITLCOutputSource#getModel()}) are equal, then these will be registered by the * new source. The priority resolves the case if a new source for the same name arrives. Currently, high priority is used for the source attached * to the running process, low priority is used for the file source. * @@ -62,9 +61,9 @@ public class TLCOutputSourceRegistry // instance for output sources from trace exploration private static TLCOutputSourceRegistry traceExploreInstance; // container for sources, hashed by the source name - private Hashtable<String, ITLCOutputSource> sources; + private Hashtable<Model, ITLCOutputSource> sources; // container for data providers, hashed by the process name - private Hashtable<String, TLCModelLaunchDataProvider> providers; + private Hashtable<Model, TLCModelLaunchDataProvider> providers; // flag indicating if this is a trace explorer instance // true indicates that this is a trace explorer instance private boolean isTraceExploreInstance; @@ -74,7 +73,7 @@ public class TLCOutputSourceRegistry * reconnect the the listeners, iff there are any at place and the prio of the new source is higher * that the one of the old one. * @param source new source - * @see ITLCOutputSource#getTLCOutputName() + * @see ITLCOutputSource#getModel() * @see ITLCOutputSource#getSourcePrio() */ public synchronized void addTLCOutputSource(ITLCOutputSource source) @@ -83,7 +82,7 @@ public class TLCOutputSourceRegistry // TLCUIActivator.getDefault().logDebug("adding source " + source.getSourceName() + " " + source.getSourcePrio()); - ITLCOutputSource existingSource = this.sources.get(source.getTLCOutputName()); + ITLCOutputSource existingSource = this.sources.get(source.getModel()); // a new source for a given name arrives which has a higher priority // re-register the listeners @@ -102,14 +101,14 @@ public class TLCOutputSourceRegistry { // the source didn't exist, but there is a data provider interested in this source TLCModelLaunchDataProvider provider = providers.get(source - .getTLCOutputName()); + .getModel()); if (provider != null) { source.addTLCOutputListener(provider); } } } - this.sources.put(source.getTLCOutputName(), source); + this.sources.put(source.getModel(), source); printStats(); } @@ -118,9 +117,9 @@ public class TLCOutputSourceRegistry * Remove a source and the date provider associated with that source, if it * exists. */ - private synchronized void removeTLCStatusSource(ILaunchConfiguration ilc) + private synchronized void removeTLCStatusSource(Model model) { - String name = ilc.getFile().getName(); + String name = model.getLaunchConfiguration().getFile().getName(); this.sources.remove(name); this.providers.remove(name); printStats(); @@ -130,47 +129,46 @@ public class TLCOutputSourceRegistry * Remove a source and the date provider associated with that source, if it * exists. */ - public synchronized void removeTLCStatusSource(ILaunchConfiguration[] ilcs) + public synchronized void removeTLCStatusSource(Model[] models) { - for (int i = 0; i < ilcs.length; i++) { - removeTLCStatusSource(ilcs[i]); + for (int i = 0; i < models.length; i++) { + removeTLCStatusSource(models[i]); } } /** * Connect the source to the listener * @param an instance of ITLCOutputListener interested in the receiving of TLC output from source - * with {@link ITLCOutputSource#getTLCOutputName()} equals to {@link ITLCOutputListener#getTLCOutputName()} + * with {@link ITLCOutputSource#getModel()} equals to {@link ITLCOutputListener#getModel()} * @return status of connection: <code>true</code> if successfully connected, <code>false</code> otherwise */ public synchronized boolean connect(ITLCOutputListener listener) { Assert.isNotNull(listener); - String processName = listener.getTLCOutputName(); + Model model = listener.getModel(); // try to obtain a source - ITLCOutputSource source = this.sources.get(processName); + ITLCOutputSource source = this.sources.get(model); if (source == null) { // no source found, so no live TLC process // also not a source for trace explorer output, so // can look for the log file - ILaunchConfiguration config = ModelHelper.getModelByName(processName); - if (config == null) { + if (model == null) { // Config can be null after startup following a hard crash when // the Toolbox restores the ModelEditor but no spec is currently // open/loaded. In this case fail gracefully rather than hang // the Toolbox. return false; } - IFile logFile = ModelHelper.getModelOutputLogFile(config, isTraceExploreInstance); + IFile logFile = model.getOutputLogFile(isTraceExploreInstance); // log file found if (logFile != null && logFile.exists()) { // initialize the reader and read the content // this will create the parser // the parser will create a source and register in the registry - final LogFileReader logFileReader = new LogFileReader(processName, logFile, isTraceExploreInstance); + final LogFileReader logFileReader = new LogFileReader(model, logFile, isTraceExploreInstance); // retrieve the source source = logFileReader.getSource(); @@ -196,13 +194,13 @@ public class TLCOutputSourceRegistry job.schedule(); // from now on we should have a source for this model - Assert.isTrue(this.sources.get(processName) != null); + Assert.isTrue(this.sources.get(model) != null); } else { // no log file if (DO_DEBUG) { - TLCUIActivator.getDefault().logDebug("No source for " + processName + " found."); + TLCUIActivator.getDefault().logDebug("No source for " + model.getName() + " found."); } return false; } @@ -223,7 +221,7 @@ public class TLCOutputSourceRegistry { Assert.isNotNull(listener); - ITLCOutputSource source = this.sources.get(listener.getTLCOutputName()); + ITLCOutputSource source = this.sources.get(listener.getModel()); if (source != null) { source.removeTLCOutputListener(listener); @@ -236,21 +234,20 @@ public class TLCOutputSourceRegistry * Retrieves the data provider for the given configuration * @return a data provider for the current model */ - public synchronized TLCModelLaunchDataProvider getProvider(ILaunchConfiguration configuration) + public synchronized TLCModelLaunchDataProvider getProvider(Model model) { - Assert.isNotNull(configuration); - String processKey = configuration.getFile().getName(); - TLCModelLaunchDataProvider provider = providers.get(processKey); + Assert.isNotNull(model); + TLCModelLaunchDataProvider provider = providers.get(model); if (provider == null) { if (isTraceExploreInstance) { - provider = new TraceExplorerDataProvider(configuration); + provider = new TraceExplorerDataProvider(model); } else { - provider = new TLCModelLaunchDataProvider(configuration); + provider = new TLCModelLaunchDataProvider(model); } - providers.put(processKey, provider); + providers.put(model, provider); } return provider; } @@ -261,8 +258,8 @@ public class TLCOutputSourceRegistry */ private TLCOutputSourceRegistry() { - this.sources = new Hashtable<String, ITLCOutputSource>(); - this.providers = new Hashtable<String, TLCModelLaunchDataProvider>(); + this.sources = new Hashtable<Model, ITLCOutputSource>(); + this.providers = new Hashtable<Model, TLCModelLaunchDataProvider>(); } /** @@ -306,12 +303,12 @@ public class TLCOutputSourceRegistry } TLCUIActivator.getDefault().logDebug("TLCOutputSourceRegistry for " + type + " maintains " + sources.size() + " sources."); - Enumeration<String> keys = sources.keys(); + Enumeration<Model> keys = sources.keys(); while (keys.hasMoreElements()) { - String sourceName = keys.nextElement(); - ITLCOutputSource source = sources.get(sourceName); - TLCUIActivator.getDefault().logDebug("The source " + sourceName + " has " + source.getSourcePrio() + " prio and " + Model model = keys.nextElement(); + ITLCOutputSource source = sources.get(model); + TLCUIActivator.getDefault().logDebug("The source " + model.getName() + " has " + source.getSourcePrio() + " prio and " + source.getListeners().length + " listeners"); } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/source/TagBasedTLCOutputIncrementalParser.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/source/TagBasedTLCOutputIncrementalParser.java index 4c678ad1ab72cb98dfd2a50613c013f5b7dcbad2..6a67bc6b79c6c8c6758505584c5dc63b4ff6c5df 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/source/TagBasedTLCOutputIncrementalParser.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/output/source/TagBasedTLCOutputIncrementalParser.java @@ -40,6 +40,7 @@ import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.ITextStore; import org.eclipse.jface.text.ITypedRegion; import org.eclipse.jface.text.rules.FastPartitioner; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; /** @@ -321,17 +322,17 @@ public class TagBasedTLCOutputIncrementalParser * @param prio * @param isTraceExplorer TODO */ - public TagBasedTLCOutputIncrementalParser(String name, int prio, boolean isTraceExplorer) { - this(name, prio, isTraceExplorer, Mode.INCREMENTAL, LargeTextStoreDocument.SIZE_UNKNOWN); + public TagBasedTLCOutputIncrementalParser(Model model, int prio, boolean isTraceExplorer) { + this(model, prio, isTraceExplorer, Mode.INCREMENTAL, LargeTextStoreDocument.SIZE_UNKNOWN); } - public TagBasedTLCOutputIncrementalParser(String name, int prio, boolean isTraceExplorer, Mode mode, final long size) + public TagBasedTLCOutputIncrementalParser(Model model, int prio, boolean isTraceExplorer, Mode mode, final long size) { // create the document document = new LargeTextStoreDocument(size); this.analyzer = new TagBasedTLCAnalyzer(document); - this.source = new CachingTLCOutputSource(name, prio); + this.source = new CachingTLCOutputSource(model, prio); // set up the partitioner FastPartitioner partitioner = new FastPartitioner(new TagBasedTLCOutputTokenScanner(), diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/traceexplorer/TraceExplorerComposite.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/traceexplorer/TraceExplorerComposite.java index a2cfc811c71ed9297a878ee038d191f0174a8186..5f70cb61fe3a87f5d0bf2305803108cf1e427d36 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/traceexplorer/TraceExplorerComposite.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/traceexplorer/TraceExplorerComposite.java @@ -36,8 +36,6 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; @@ -62,17 +60,14 @@ import org.eclipse.swt.widgets.Table; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; import org.lamport.tla.toolbox.tool.ToolboxHandle; -import org.lamport.tla.toolbox.tool.tlc.launch.IModelConfigurationConstants; import org.lamport.tla.toolbox.tool.tlc.launch.TraceExplorerDelegate; import org.lamport.tla.toolbox.tool.tlc.model.Formula; -import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; import org.lamport.tla.toolbox.tool.tlc.ui.editor.ModelEditor; import org.lamport.tla.toolbox.tool.tlc.ui.editor.provider.FormulaContentProvider; import org.lamport.tla.toolbox.tool.tlc.ui.util.FormHelper; import org.lamport.tla.toolbox.tool.tlc.ui.view.TLCErrorView; import org.lamport.tla.toolbox.tool.tlc.ui.wizard.FormulaWizard; import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; -import org.lamport.tla.toolbox.util.UIHelper; /** * This is somewhat mislabeled as a composite. Its really @@ -241,7 +236,7 @@ public class TraceExplorerComposite public void checkStateChanged(CheckStateChangedEvent event) { - saveInput(); + view.getModel().save(new NullProgressMonitor()); } }); @@ -342,7 +337,7 @@ public class TraceExplorerComposite changeButtonEnablement(); - saveInput(); + view.getModel().setTraceExplorerExpression(FormHelper.getSerializedInput(tableViewer)); } /** @@ -366,8 +361,7 @@ public class TraceExplorerComposite changeButtonEnablement(); - saveInput(); - + view.getModel().setTraceExplorerExpression(FormHelper.getSerializedInput(tableViewer)); } } @@ -391,7 +385,7 @@ public class TraceExplorerComposite changeButtonEnablement(); - saveInput(); + view.getModel().setTraceExplorerExpression(FormHelper.getSerializedInput(tableViewer)); } /** @@ -425,8 +419,7 @@ public class TraceExplorerComposite * currently possible to check for validation errors, so the * trace explorer cannot be run. */ - final ModelEditor modelEditor = ((ModelEditor) ModelHelper.getEditorWithModelOpened(view - .getCurrentConfigFileHandle())); + final ModelEditor modelEditor = view.getModel().getAdapter(ModelEditor.class); if (modelEditor == null) { // the model editor must be open to run the trace explorer @@ -455,47 +448,30 @@ public class TraceExplorerComposite // the trace explorer to do. // This could erase a trace that was produced // after a three week run of TLC. - UIHelper.runUISync(new Runnable() { + modelEditor.doSaveWithoutValidating((new NullProgressMonitor())); - public void run() - { - modelEditor.doSaveWithoutValidating((new NullProgressMonitor())); - } - }); - - try + // save the launch configuration + // if the trace is empty, then do nothing + if (!view.getTrace().isTraceEmpty()) { - // save the launch configuration - ILaunchConfiguration modelConfig = saveInput(); - - final ILaunchConfigurationWorkingCopy workingCopy = modelConfig.getWorkingCopy(); - - // if the trace is empty, then do nothing - if (!view.getTrace().isTraceEmpty()) - { - // TraceExplorerHelper.serializeTrace(modelConfig); - - // Wrap the launch in a WorkspaceJob to guarantee that the - // operation is executed atomically from the workspace perspective. - // If the job and rule would be omitted, the launch can become interleaved with - // workspace (autobuild) jobs triggered by IResourceChange events. - // The Toolbox's IResourceChangeListeners reacting to resource change events - // run the SANY parser and SANY does not support concurrent execution. - final Job job = new WorkspaceJob("Exploring the trace...") { - public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { - workingCopy.doSave().launch(TraceExplorerDelegate.MODE_TRACE_EXPLORE, monitor, true); - return Status.OK_STATUS; - } - }; - // Lock the entire workspace. - job.setRule(ResourcesPlugin.getWorkspace().getRoot()); - job.setUser(true); - job.schedule(); - } - - } catch (CoreException e) - { - TLCUIActivator.getDefault().logError("Error launching trace explorer.", e); + // TraceExplorerHelper.serializeTrace(modelConfig); + + // Wrap the launch in a WorkspaceJob to guarantee that the + // operation is executed atomically from the workspace perspective. + // If the runnable would be omitted, the launch can become interleaved with + // workspace (autobuild) jobs triggered by IResourceChange events. + // The Toolbox's IResourceChangeListeners reacting to resource change events + // run the SANY parser and SANY does not support concurrent execution. + + final Job job = new WorkspaceJob("Exploring the trace...") { + public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { + view.getModel().save(monitor).launch(TraceExplorerDelegate.MODE_TRACE_EXPLORE, monitor, true); + return Status.OK_STATUS; + } + }; + job.setRule(ResourcesPlugin.getWorkspace().getRoot()); + job.setUser(true); + job.schedule(); } } @@ -504,17 +480,11 @@ public class TraceExplorerComposite */ private void doRestore() { - try - { - // set the model to have the original trace shown - ModelHelper.setOriginalTraceShown(view.getCurrentConfigFileHandle(), true); + // set the model to have the original trace shown + view.setOriginalTraceShown(true); - // update the error view with this provider - TLCErrorView.updateErrorView(view.getCurrentConfigFileHandle()); - } catch (CoreException e) - { - TLCUIActivator.getDefault().logError("Error setting original trace shown flag.", e); - } + // update the error view with this provider + view.updateErrorView(); } /** @@ -573,62 +543,4 @@ public class TraceExplorerComposite return null; } } - - /** - * Saves the expressions in the table to the configuration - * whose errors are currently loaded in the error view where this - * composite appears. - * - * @return a handle on the underlying configuration file, can return null - */ - private ILaunchConfiguration saveInput() - { - try - { - if (view.getCurrentConfigFileHandle() != null) - { - /* - * Retrieve a working copy of the launch configuration whose errors - * are currently loaded in the error view. - * - * If a model editor is open on the launch configuration, then the model - * editor already has a working copy open for the launch configuration. We - * don't want to open a second working copy because they could become out of - * synch. In that case if working copy A were saved and then working copy B were saved, - * the contents of working copy A that were saved originally would be overwritten by working - * copy B. - * - * We can get the working copy from the model editor by calling the getConfig() method - * of ModelEditor. If there is not a model editor open on the launch configuration, then - * there should be no other working copies open on the the launch configuration returned - * by view.getCurrentConfigFileHandle() so a working copy can safely be used. - */ - ModelEditor modelEditor = ((ModelEditor) ModelHelper.getEditorWithModelOpened(view - .getCurrentConfigFileHandle())); - - ILaunchConfigurationWorkingCopy configCopy = null; - - if (modelEditor != null) - { - configCopy = modelEditor.getConfig(); - } else - { - // there is no editor open on the model - // obtain the working copy from the handle stored by the view - configCopy = view.getCurrentConfigFileHandle().getWorkingCopy(); - } - - configCopy.setAttribute(IModelConfigurationConstants.TRACE_EXPLORE_EXPRESSIONS, FormHelper - .getSerializedInput(tableViewer)); - ILaunchConfiguration savedConfig = configCopy.doSave(); - - return savedConfig; - } - } catch (CoreException e) - { - TLCUIActivator.getDefault().logError("Error saving trace explorer expression.", e); - } - return null; - } - } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/traceexplorer/TraceExplorerHelper.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/traceexplorer/TraceExplorerHelper.java index 136d572bbc28ff6f82a3241630cb74c87165e3ae..5056cd246bd44da6fc68760aff3b59bc2dccd1d7 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/traceexplorer/TraceExplorerHelper.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/traceexplorer/TraceExplorerHelper.java @@ -10,11 +10,11 @@ import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.debug.core.ILaunchConfiguration; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCError; +import org.lamport.tla.toolbox.tool.tlc.output.data.TLCError.Length; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCState; -import org.lamport.tla.toolbox.tool.tlc.output.data.TLCError.Length; import org.lamport.tla.toolbox.tool.tlc.output.source.TLCOutputSourceRegistry; import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; @@ -33,10 +33,10 @@ public class TraceExplorerHelper * Returns the error that has a trace most recently produced by running model checking * on the config or null if none found. * - * @param config + * @param model * @return */ - public static TLCError getErrorOfOriginalTrace(ILaunchConfiguration config) + public static TLCError getErrorOfOriginalTrace(Model model) { /* * The trace explorer should not be run for a model while TLC is being run for @@ -44,7 +44,7 @@ public class TraceExplorerHelper * from the tlc output source registry for model checking. */ TLCModelLaunchDataProvider originalTraceProvider = TLCOutputSourceRegistry.getModelCheckSourceRegistry() - .getProvider(config); + .getProvider(model); List<TLCError> errors = originalTraceProvider.getErrors(); if (errors != null) { @@ -67,14 +67,14 @@ public class TraceExplorerHelper * Writes the trace to MC_TE.out. * @param trace */ - public static void serializeTrace(ILaunchConfiguration config) + public static void serializeTrace(Model model) { try { - List<TLCState> trace = getErrorOfOriginalTrace(config).getStates(Length.ALL); + List<TLCState> trace = getErrorOfOriginalTrace(model).getStates(Length.ALL); Assert.isNotNull(trace); Iterator<TLCState> it = trace.iterator(); - IFile traceSourceFile = ModelHelper.getTraceSourceFile(config); + IFile traceSourceFile = model.getTraceSourceFile(); ModelHelper.createOrClearFiles(new IFile[] { traceSourceFile }, new NullProgressMonitor()); while (it.hasNext()) { diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/ResultPresenter.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/ResultPresenter.java index a587787cf9d30bc7fc7dd02fbb0c2d64d7ad9ac2..c38ca902941ac2567a7842062886d80deb12beb8 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/ResultPresenter.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/ResultPresenter.java @@ -1,11 +1,10 @@ package org.lamport.tla.toolbox.tool.tlc.ui; -import org.eclipse.debug.core.ILaunch; import org.lamport.tla.toolbox.tool.tlc.launch.TraceExplorerDelegate; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.result.IResultPresenter; import org.lamport.tla.toolbox.tool.tlc.ui.editor.ModelEditor; import org.lamport.tla.toolbox.tool.tlc.ui.view.TLCErrorView; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; import org.lamport.tla.toolbox.util.UIHelper; /** @@ -13,16 +12,11 @@ import org.lamport.tla.toolbox.util.UIHelper; * * * @author Simon Zambrovski - * @version $Id$ */ public class ResultPresenter implements IResultPresenter { - public ResultPresenter() - { - } - - public void showResults(ILaunch launch) + public void showResults(Model model) { /* * For trace exploration, just update the error view with the data @@ -30,23 +24,20 @@ public class ResultPresenter implements IResultPresenter * the editor for that model, show the result page, and update the * data on the result page. */ - if (launch.getLaunchMode().equals(TraceExplorerDelegate.MODE_TRACE_EXPLORE)) + if (model.getLastLaunch().getLaunchMode().equals(TraceExplorerDelegate.MODE_TRACE_EXPLORE)) { - ModelEditor editor = (ModelEditor) ModelHelper.getEditorWithModelOpened(launch.getLaunchConfiguration()); - if (editor != null && editor.getActivePage() != -1) + final ModelEditor modelEditor = model.getAdapter(ModelEditor.class); + if (modelEditor != null && modelEditor.getActivePage() != -1) { // If an editor is open and active on the model, update the error view. // Although the trace explorer only takes a few seconds to run, // the user could still switch to another model. // If so, this code should not be run. - - TLCErrorView.updateErrorView(launch.getLaunchConfiguration()); - + TLCErrorView.updateErrorView(model); } } else { - ModelEditor editor = (ModelEditor) UIHelper.openEditor(ModelEditor.ID, launch.getLaunchConfiguration() - .getFile()); + ModelEditor editor = (ModelEditor) UIHelper.openEditor(ModelEditor.ID, model.getFile()); if (editor != null) { editor.showResultPage(); diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/dialog/TLAFilteredItemsSelectionDialog.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/dialog/TLAFilteredItemsSelectionDialog.java index 940b43607797e3695c74cf58fe3a641ea5105c1b..01a5cbfd9b2d2ddcd52ce11723e22c837297bf5f 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/dialog/TLAFilteredItemsSelectionDialog.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/dialog/TLAFilteredItemsSelectionDialog.java @@ -30,6 +30,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; +import java.util.Collection; import java.util.Comparator; import java.util.List; @@ -38,7 +39,6 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; -import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuManager; @@ -66,7 +66,8 @@ import org.lamport.org.eclipse.ui.dialogs.FilteredItemsSelectionDialog; import org.lamport.tla.toolbox.Activator; import org.lamport.tla.toolbox.spec.Module; import org.lamport.tla.toolbox.spec.Spec; -import org.lamport.tla.toolbox.tool.tlc.launch.IModelConfigurationConstants; +import org.lamport.tla.toolbox.tool.tlc.model.Model; +import org.lamport.tla.toolbox.tool.tlc.model.TLCSpec; import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; @@ -222,22 +223,20 @@ public class TLAFilteredItemsSelectionDialog extends FilteredItemsSelectionDialo } catch (IOException e) { sourceViewer.setDocument(new Document(EMPTY_STRING)); } - } else if (selection != null && selection.getFirstElement() instanceof ILaunchConfiguration) { - final ILaunchConfiguration config = (ILaunchConfiguration) selection.getFirstElement(); + } else if (selection != null && selection.getFirstElement() instanceof Model) { + final Model model = (Model) selection.getFirstElement(); try { // By default, show the model's comment/description and fall-back // to its constants. If there are no constants, the last fall-back // is the model's name. final List<String> fallbacksFallback = new ArrayList<String>(); - fallbacksFallback.add(ModelHelper.getModelName(config)); + fallbacksFallback.add(model.getName()); - final String fallback = ModelHelper.prettyPrintConstants(config, "\n", true); - - final String attribute = config.getAttribute(IModelConfigurationConstants.MODEL_COMMENTS, fallback); + final String attribute = model.getComments(); if (!EMPTY_STRING.equals(attribute)) { sourceViewer.setDocument(new Document(attribute)); } else { - sourceViewer.setDocument(new Document(fallback)); + sourceViewer.setDocument(new Document(ModelHelper.prettyPrintConstants(model, "\n", true))); } } catch (final CoreException ignored) { sourceViewer.setDocument(new Document(EMPTY_STRING)); @@ -270,10 +269,10 @@ public class TLAFilteredItemsSelectionDialog extends FilteredItemsSelectionDialo return new Comparator<Object>() { public int compare(final Object o1, final Object o2) { - if (o1 instanceof ILaunchConfiguration && o2 instanceof ILaunchConfiguration) { - final ILaunchConfiguration c1 = (ILaunchConfiguration) o1; - final ILaunchConfiguration c2 = (ILaunchConfiguration) o2; - return ModelHelper.getModelName(c1.getFile()).compareTo(ModelHelper.getModelName(c2.getFile())); + if (o1 instanceof Model && o2 instanceof Model) { + final Model c1 = (Model) o1; + final Model c2 = (Model) o2; + return c1.getName().compareTo(c2.getName()); } else if (o1 instanceof Module && o2 instanceof Module) { final Module m1 = (Module) o1; final Module m2 = (Module) o2; @@ -284,13 +283,13 @@ public class TLAFilteredItemsSelectionDialog extends FilteredItemsSelectionDialo return 1; } else if (o1 instanceof Spec && o2 instanceof Spec) { return ((Spec) o1).getName().compareTo(((Spec) o2).getName()); - } else if (o1 instanceof ILaunchConfiguration && o2 instanceof Module) { + } else if (o1 instanceof Model && o2 instanceof Module) { return -1; - } else if (o1 instanceof ILaunchConfiguration && o2 instanceof Spec) { + } else if (o1 instanceof Model && o2 instanceof Spec) { return -1; - } else if (o1 instanceof ILaunchConfiguration && o2 instanceof ItemsListSeparator) { + } else if (o1 instanceof Model && o2 instanceof ItemsListSeparator) { return -1; - } else if (o1 instanceof Module && o2 instanceof ILaunchConfiguration) { + } else if (o1 instanceof Module && o2 instanceof Model) { return 1; } else if (o1 instanceof Module && o2 instanceof Spec) { return -1; @@ -298,13 +297,13 @@ public class TLAFilteredItemsSelectionDialog extends FilteredItemsSelectionDialo return 1; } else if (o1 instanceof Module && o2 instanceof ItemsListSeparator) { return -1; - } else if (o1 instanceof Spec && o2 instanceof ILaunchConfiguration) { + } else if (o1 instanceof Spec && o2 instanceof Model) { return 1; } else if (o1 instanceof Spec && o2 instanceof Module) { return 1; } else if (o1 instanceof Spec && o2 instanceof ItemsListSeparator) { return 1; - } else if (o1 instanceof ItemsListSeparator && o2 instanceof ILaunchConfiguration) { + } else if (o1 instanceof ItemsListSeparator && o2 instanceof Model) { return 1; } else if (o1 instanceof ItemsListSeparator && o1 == modulesSep && o2 instanceof Module) { return -1; @@ -328,8 +327,8 @@ public class TLAFilteredItemsSelectionDialog extends FilteredItemsSelectionDialo // On the initial/welcome page, no spec is open. if (spec != null) { // Models - final List<ILaunchConfiguration> models = ModelHelper.getModelsBySpec(spec); - for (final ILaunchConfiguration model : models) { + final Collection<Model> models = spec.getAdapter(TLCSpec.class).getModels().values(); + for (final Model model : models) { if (itemsFilter.isConsistentItem(model)) { contentProvider.add(model, itemsFilter); } @@ -402,9 +401,8 @@ public class TLAFilteredItemsSelectionDialog extends FilteredItemsSelectionDialo if (element instanceof Module) { final Module module = (Module) element; return module.getModuleName(); - } else if (element instanceof ILaunchConfiguration) { - final ILaunchConfiguration config = (ILaunchConfiguration) element; - return ModelHelper.getModelName(config.getFile()); + } else if (element instanceof Model) { + ((Model) element).getName(); } else if (element instanceof Spec) { final Spec spec = (Spec) element; return spec.getName(); @@ -432,22 +430,22 @@ public class TLAFilteredItemsSelectionDialog extends FilteredItemsSelectionDialo return spec.getName() + " [ " + root.getName() + " ]"; } else if (element instanceof Module) { return ((Module) element).getModuleName(); - } else if (element instanceof ILaunchConfiguration) { - final ILaunchConfiguration config = (ILaunchConfiguration) element; + } else if (element instanceof Model) { + final Model model = (Model) element; try { - String attribute = config.getAttribute(IModelConfigurationConstants.MODEL_COMMENTS, EMPTY_STRING); + String attribute = model.getComments(); if (toggleShowConstantsAction.isChecked() && EMPTY_STRING.equals(attribute)) { - attribute = ModelHelper.prettyPrintConstants(config, ", "); + attribute = ModelHelper.prettyPrintConstants(model, ", "); } if (!EMPTY_STRING.equals(attribute)) { if (attribute.contains("\n")) { attribute = attribute.split("\n")[0]; } - return ModelHelper.getModelName(config) + DELIM + " " + attribute; + return model.getName() + DELIM + " " + attribute; } } catch (CoreException e) { } - return ModelHelper.getModelName(config); + return model.getName(); } else if (element instanceof ItemsListSeparator) { final ItemsListSeparator ils = (ItemsListSeparator) element; return ils.getName(); @@ -470,7 +468,7 @@ public class TLAFilteredItemsSelectionDialog extends FilteredItemsSelectionDialo return PlatformUI.getWorkbench().getSharedImages().getImage(SharedImages.IMG_OBJ_PROJECT_CLOSED); } else if (element instanceof Module) { return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FILE); - } else if (element instanceof ILaunchConfiguration) { + } else if (element instanceof Model) { return ModelImage; } return null; @@ -486,7 +484,7 @@ public class TLAFilteredItemsSelectionDialog extends FilteredItemsSelectionDialo if (element instanceof Spec) { string.setStyle(0, string.length(), StyledString.QUALIFIER_STYLER); - } else if (element instanceof ILaunchConfiguration && text.indexOf(DELIM) != -1) { + } else if (element instanceof Model && text.indexOf(DELIM) != -1) { final int index = text.indexOf(DELIM); string.setStyle(index, text.length() - index, StyledString.DECORATIONS_STYLER); } else if (element instanceof ItemsListSeparator) { diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/editor/ModelEditor.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/editor/ModelEditor.java index e48c398974cf5f1842df842d1a13c6913ff38226..daf515f1a40aff099818c0106b16e1e51300f71e 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/editor/ModelEditor.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/editor/ModelEditor.java @@ -1,7 +1,9 @@ package org.lamport.tla.toolbox.tool.tlc.ui.editor; import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IMarker; +import org.eclipse.core.resources.IMarkerDelta; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeListener; @@ -15,8 +17,6 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.dialogs.IPageChangedListener; import org.eclipse.jface.dialogs.MessageDialog; @@ -43,9 +43,10 @@ import org.eclipse.ui.texteditor.ITextEditor; import org.lamport.tla.toolbox.Activator; import org.lamport.tla.toolbox.spec.Spec; import org.lamport.tla.toolbox.spec.parser.IParseConstants; -import org.lamport.tla.toolbox.tool.tlc.launch.IConfigurationConstants; import org.lamport.tla.toolbox.tool.tlc.launch.IModelConfigurationDefaults; import org.lamport.tla.toolbox.tool.tlc.launch.TLCModelLaunchDelegate; +import org.lamport.tla.toolbox.tool.tlc.model.Model; +import org.lamport.tla.toolbox.tool.tlc.model.TLCModelFactory; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider; import org.lamport.tla.toolbox.tool.tlc.output.source.TLCOutputSourceRegistry; import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; @@ -59,7 +60,6 @@ import org.lamport.tla.toolbox.tool.tlc.ui.util.SemanticHelper; import org.lamport.tla.toolbox.tool.tlc.ui.view.TLCErrorView; import org.lamport.tla.toolbox.tool.tlc.util.ChangedSpecModulesGatheringDeltaVisitor; import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper.IFileProvider; import org.lamport.tla.toolbox.ui.handler.OpenSpecHandler; import org.lamport.tla.toolbox.util.ResourceHelper; import org.lamport.tla.toolbox.util.UIHelper; @@ -69,9 +69,8 @@ import tla2sany.semantic.ModuleNode; /** * Editor for the model * @author Simon Zambrovski - * @version $Id$ */ -public class ModelEditor extends FormEditor implements ModelHelper.IFileProvider +public class ModelEditor extends FormEditor { /** @@ -82,7 +81,6 @@ public class ModelEditor extends FormEditor implements ModelHelper.IFileProvider /* * working copy of the model */ - private ILaunchConfigurationWorkingCopy configurationCopy; // helper to resolve semantic matches of words private SemanticHelper helper; // reacts on model changes @@ -105,9 +103,11 @@ public class ModelEditor extends FormEditor implements ModelHelper.IFileProvider public void run() { - // re-validate the pages, iff the model is not running - // and is not locked - if (!isModelRunning() && !isModelLocked()) + // Re-validate the pages, iff the model is not running + // and is not locked. Also check if the model is nulled by now which + // happens if the ModelEditor disposed before a scheduled run gets + // executed. + if (model != null && !model.isRunning() && !model.isLocked()) { /* * Note that all pages are not necessarily @@ -146,10 +146,10 @@ public class ModelEditor extends FormEditor implements ModelHelper.IFileProvider * This is a helper method that returns a new instance of ChangedModulesGatheringDeltaVisitor, * which gathers the changed TLA modules from a resource delta tree. */ - ChangedSpecModulesGatheringDeltaVisitor visitor = new ChangedSpecModulesGatheringDeltaVisitor(getConfig()) { + ChangedSpecModulesGatheringDeltaVisitor visitor = new ChangedSpecModulesGatheringDeltaVisitor(model) { public IResource getModel() { - return ModelEditor.this.getConfig().getFile(); + return model.getFile(); } }; @@ -194,6 +194,8 @@ public class ModelEditor extends FormEditor implements ModelHelper.IFileProvider // array of pages to add private BasicFormPage[] pagesToAdd; + private Model model; + /** * Simple editor constructor */ @@ -218,59 +220,65 @@ public class ModelEditor extends FormEditor implements ModelHelper.IFileProvider if (finput == null || !finput.exists()) { throw new PartInitException("Editor input does not exist: " + finput.getName()); } - - final ILaunchConfiguration configuration = ModelHelper.getModelByFile(finput.getFile()); - - try - { - configurationCopy = configuration.getWorkingCopy(); - } catch (CoreException e) - { - TLCUIActivator.getDefault().logError("Could not load model content for " + finput.getName(), e); - throw new PartInitException(e.getMessage(), e); - } - + + model = TLCModelFactory.getBy(finput.getFile()); + /* * Install a resource change listener on the file opened which react * on marker changes */ - modelFileChangeListener = ModelHelper.installModelModificationResourceChangeListener(this, - /* - * If the model file is changed, refresh the changes in the - * editor if the model is in use, activate the third page - */ - new Runnable() { - public void run() - { - // update the pages - for (int i = 0; i < getPageCount(); i++) - { - /* - * Note that all pages are not necessarily - * instances of BasicFormPage. Some are read - * only editors showing saved versions of - * modules. - */ - if (pages.get(i) instanceof BasicFormPage) - { - BasicFormPage page = (BasicFormPage) pages.get(i); - ((BasicFormPage) page).refresh(); - } - } + // construct the listener + modelFileChangeListener = new IResourceChangeListener() { + public void resourceChanged(IResourceChangeEvent event) { + // get the marker changes + IMarkerDelta[] markerChanges = event.findMarkerDeltas(Model.TLC_MODEL_IN_USE_MARKER, false); + + // usually this list has at most one element + for (int i = 0; i < markerChanges.length; i++) { + if (getFileEditorInput().getFile().equals(markerChanges[i].getResource())) { + UIHelper.runUIAsync( + /* + * If the model file is changed, refresh the + * changes in the editor if the model is in use, + * activate the third page + */ + new Runnable() { + public void run() { + // update the pages + for (int i = 0; i < getPageCount(); i++) { + /* + * Note that all pages are not necessarily + * instances of BasicFormPage. Some are read + * only editors showing saved versions of + * modules. + */ + if (pages.get(i) instanceof BasicFormPage) { + BasicFormPage page = (BasicFormPage) pages.get(i); + ((BasicFormPage) page).refresh(); + } + } - if (isModelRunning()) - { - showResultPage(); - } - // evtl. add more graphical sugar here, - // like changing the model icon, - // changing the editor title (part name) - } - }); + if (model.isRunning()) { + showResultPage(); + } + // evtl. add more graphical sugar here, + // like changing the model icon, + // changing the editor title (part name) + } + }); + // It's sufficient to only update the UI once + return; + } + } + } + }; + // add to the workspace root + ResourcesPlugin.getWorkspace().addResourceChangeListener(modelFileChangeListener, IResourceChangeEvent.POST_CHANGE); + // setContentDescription(path.toString()); - this.setPartName(ModelHelper.getModelName(finput.getFile())); - this.setTitleToolTip(finput.getFile().getProjectRelativePath().toString()); + this.setPartName(model.getName()); + this.setTitleToolTip(model.getFile().getLocation().toOSString()); // add a listener that will update the tlc error view when a model editor // is made visible @@ -327,9 +335,18 @@ public class ModelEditor extends FormEditor implements ModelHelper.IFileProvider // remove the listeners ResourcesPlugin.getWorkspace().removeResourceChangeListener(workspaceResourceChangeListener); ResourcesPlugin.getWorkspace().removeResourceChangeListener(modelFileChangeListener); + super.dispose(); + + // super.dispose still needs the model instance + model = null; // TLCUIActivator.getDefault().logDebug("leaving ModelEditor#dispose()"); } + + + public boolean isDisposed() { + return model == null; + } /** * This method saves the model even if the spec is not parsed. This is probably @@ -341,10 +358,10 @@ public class ModelEditor extends FormEditor implements ModelHelper.IFileProvider public void doSave(IProgressMonitor monitor) { this.commitPages(monitor, true); - ModelHelper.doSaveConfigurationCopy(configurationCopy); + model.save(monitor); // remove existing markers - ModelHelper.removeModelProblemMarkers(configurationCopy, ModelHelper.TLC_MODEL_ERROR_MARKER_SANY); + model.removeMarkers(Model.TLC_MODEL_ERROR_MARKER_SANY); boolean revalidate = TLCUIActivator.getDefault().getPreferenceStore().getBoolean( ITLCPreferenceConstants.I_TLC_REVALIDATE_ON_MODIFY); @@ -373,7 +390,7 @@ public class ModelEditor extends FormEditor implements ModelHelper.IFileProvider public void doSaveWithoutValidating(IProgressMonitor monitor) { this.commitPages(monitor, true); - ModelHelper.doSaveConfigurationCopy(configurationCopy); + model.save(monitor); this.editorDirtyStateChanged(); } @@ -388,21 +405,27 @@ public class ModelEditor extends FormEditor implements ModelHelper.IFileProvider /** * Ask the view for an adapter for certain class */ - public Object getAdapter(Class required) + @SuppressWarnings("unchecked") + public <T> T getAdapter(Class<T> required) { - - // ask for the launh data provider + // ask for the launch data provider if (TLCModelLaunchDataProvider.class.equals(required)) { // return a provider, if this can be found TLCModelLaunchDataProvider provider = TLCOutputSourceRegistry.getModelCheckSourceRegistry().getProvider( - getConfig()); + getModel()); if (provider != null) { - return provider; + return (T) provider; } + } else if (IFile.class.equals(required)) { + // The GraphViz viewer tries to get a .dot from an editor. The + // Toolbox's model editor is the closest thing corresponding to the + // state graph (stored as dot). + final IFolder folder = model.getFolder(); + final String name = model.getName().concat(".dot"); + return (T) folder.getFile(name); } - return super.getAdapter(required); } @@ -681,10 +704,9 @@ public class ModelEditor extends FormEditor implements ModelHelper.IFileProvider // must be saved from the preferences int autoLockTime = TLCUIActivator.getDefault().getPreferenceStore() .getInt(ITLCPreferenceConstants.I_TLC_AUTO_LOCK_MODEL_TIME); - getConfig().setAttribute(IConfigurationConstants.LAUNCH_AUTO_LOCK_MODEL_TIME, autoLockTime); - getConfig().doSave(); + model.setAutoLockTime(autoLockTime); } - getConfig().launch(mode, new SubProgressMonitor(monitor, 1), true); + model.launch(mode, new SubProgressMonitor(monitor, 1), true); /* * Close any tabs in this editor containing read-only @@ -719,7 +741,7 @@ public class ModelEditor extends FormEditor implements ModelHelper.IFileProvider }, monitor); } catch (CoreException e) { TLCUIActivator.getDefault().logError( - "Error launching the configuration " + getConfig().getName(), e); + "Error launching the configuration " + model.getName(), e); MessageDialog.openError(getSite().getShell(), "Model processing failed", e.getMessage()); } } @@ -729,32 +751,20 @@ public class ModelEditor extends FormEditor implements ModelHelper.IFileProvider */ public void stop() { - try + if (getModel().isRunning()) { - if (ModelHelper.isModelRunning(getConfig()) && !ModelHelper.isModelStale(getConfig())) + Job[] runningSpecJobs = Job.getJobManager().find(getModel().getLaunchConfiguration()); + for (int i = 0; i < runningSpecJobs.length; i++) { - Job[] runningSpecJobs = Job.getJobManager().find(getConfig()); - for (int i = 0; i < runningSpecJobs.length; i++) - { - // send cancellations to all jobs... - runningSpecJobs[i].cancel(); - } + // send cancellations to all jobs... + runningSpecJobs[i].cancel(); } - } catch (CoreException e) - { - TLCUIActivator.getDefault().logError("Error stopping the model launch", e); } - } - /** - * Returns a working copy of the launch configuration for this model. - * - * @return - */ - public ILaunchConfigurationWorkingCopy getConfig() + public Model getModel() { - return configurationCopy; + return model; } /** @@ -796,7 +806,7 @@ public class ModelEditor extends FormEditor implements ModelHelper.IFileProvider int currentPageIndex = getActivePage(); try { - IMarker[] modelProblemMarkers = ModelHelper.getModelProblemMarker(getConfig()); + IMarker[] modelProblemMarkers = model.getMarkers(); DataBindingManager dm = getDataBindingManager(); // The loop is going to update the page's messages for potentially @@ -829,7 +839,7 @@ public class ModelEditor extends FormEditor implements ModelHelper.IFileProvider IModelConfigurationDefaults.EMPTY_STRING); int bubbleType = -1; - if (modelProblemMarkers[i].getType().equals(ModelHelper.TLC_MODEL_ERROR_MARKER_SANY)) + if (modelProblemMarkers[i].getType().equals(Model.TLC_MODEL_ERROR_MARKER_SANY)) { // SANY markers are errors bubbleType = IMessageProvider.ERROR; @@ -991,78 +1001,6 @@ public class ModelEditor extends FormEditor implements ModelHelper.IFileProvider return null; } - /* - * (non-Javadoc) - * - * @see org.lamport.tla.toolbox.tool.tlc.util.ModelHelper.IResourceProvider# - * getResource() - */ - public IFile getResource(int type) - { - IFile result = getFileEditorInput().getFile(); - - switch (type) { - case IFileProvider.TYPE_MODEL: - break; - case IFileProvider.TYPE_RESULT: - String modelName = ModelHelper.getModelName(result); - result = result.getProject().getFolder(modelName).getFile(ModelHelper.FILE_OUT); - break; - default: - result = null; - break; - } - return result; - } - - /** - * Retrieves if the working copy of the model is running - * @return true, if the model is locked - */ - public boolean isModelRunning() - { - try - { - return ModelHelper.isModelRunning(getConfig()); - } catch (CoreException e) - { - TLCUIActivator.getDefault().logError("Error determining model status", e); - return true; - } - } - - /** - * Retrieves if the working copy of the model is locked - * @return true, if the model is locked - */ - public boolean isModelLocked() - { - try - { - return ModelHelper.isModelLocked(getConfig()); - } catch (CoreException e) - { - TLCUIActivator.getDefault().logError("Error determining model status", e); - return true; - } - } - - /** - * Retrieves if the working copy of the model is still left - * in in-use status, even if no process is running on it anymore - */ - public boolean isModelStale() - { - try - { - return ModelHelper.isModelStale(getConfig()); - } catch (CoreException e) - { - TLCUIActivator.getDefault().logError("Error determining model status", e); - return true; - } - } - /** * Show the result page of the editor */ diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/editor/page/AdvancedModelPage.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/editor/page/AdvancedModelPage.java index abd930db322fe156337776e21b857cebc5fd3549..33e17eab3f0012bdeaee2e41e0cc4b8835f400d6 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/editor/page/AdvancedModelPage.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/editor/page/AdvancedModelPage.java @@ -52,7 +52,6 @@ import tlc2.tool.fp.MultiFPSet; * Represent all advanced model elements * * @author Simon Zambrovski - * @version $Id$ */ public class AdvancedModelPage extends BasicFormPage implements IConfigurationConstants, IConfigurationDefaults { @@ -82,7 +81,7 @@ public class AdvancedModelPage extends BasicFormPage implements IConfigurationCo private Spinner fpBits; /** * -maxSetSize input to set the upper bound of the TLA set - * @see http://bugzilla.tlaplus.net/show_bug.cgi?id=264 + * @see Bug #264 in general/bugzilla/index.html */ private Spinner maxSetSize; /** @@ -115,48 +114,48 @@ public class AdvancedModelPage extends BasicFormPage implements IConfigurationCo protected void loadData() throws CoreException { // definition overrides - List<String> definitions = getConfig().getAttribute(MODEL_PARAMETER_DEFINITIONS, new Vector<String>()); + List<String> definitions = getModel().getAttribute(MODEL_PARAMETER_DEFINITIONS, new Vector<String>()); FormHelper.setSerializedInput(definitionsTable, definitions); // new definitions - String newDefinitions = getConfig().getAttribute(MODEL_PARAMETER_NEW_DEFINITIONS, EMPTY_STRING); + String newDefinitions = getModel().getAttribute(MODEL_PARAMETER_NEW_DEFINITIONS, EMPTY_STRING); newDefinitionsSource.setDocument(new Document(newDefinitions)); // advanced model values - String modelValues = getConfig().getAttribute(MODEL_PARAMETER_MODEL_VALUES, EMPTY_STRING); + String modelValues = getModel().getAttribute(MODEL_PARAMETER_MODEL_VALUES, EMPTY_STRING); modelValuesSource.setDocument(new Document(modelValues)); // constraint - String constraint = getConfig().getAttribute(MODEL_PARAMETER_CONSTRAINT, EMPTY_STRING); + String constraint = getModel().getAttribute(MODEL_PARAMETER_CONSTRAINT, EMPTY_STRING); constraintSource.setDocument(new Document(constraint)); // view - String view = getConfig().getAttribute(LAUNCH_VIEW, EMPTY_STRING); + String view = getModel().getAttribute(LAUNCH_VIEW, EMPTY_STRING); viewSource.setDocument(new Document(view)); // action constraint - String actionConstraint = getConfig().getAttribute(MODEL_PARAMETER_ACTION_CONSTRAINT, EMPTY_STRING); + String actionConstraint = getModel().getAttribute(MODEL_PARAMETER_ACTION_CONSTRAINT, EMPTY_STRING); actionConstraintSource.setDocument(new Document(actionConstraint)); // run mode mode - boolean isMCMode = getConfig().getAttribute(LAUNCH_MC_MODE, LAUNCH_MC_MODE_DEFAULT); + boolean isMCMode = getModel().getAttribute(LAUNCH_MC_MODE, LAUNCH_MC_MODE_DEFAULT); mcOption.setSelection(isMCMode); simulationOption.setSelection(!isMCMode); // DFID mode - boolean isDFIDMode = getConfig().getAttribute(LAUNCH_DFID_MODE, LAUNCH_DFID_MODE_DEFAULT); + boolean isDFIDMode = getModel().getAttribute(LAUNCH_DFID_MODE, LAUNCH_DFID_MODE_DEFAULT); dfidOption.setSelection(isDFIDMode); // DFID depth - int dfidDepth = getConfig().getAttribute(LAUNCH_DFID_DEPTH, LAUNCH_DFID_DEPTH_DEFAULT); + int dfidDepth = getModel().getAttribute(LAUNCH_DFID_DEPTH, LAUNCH_DFID_DEPTH_DEFAULT); dfidDepthText.setText("" + dfidDepth); // simulation depth - int simuDepth = getConfig().getAttribute(LAUNCH_SIMU_DEPTH, LAUNCH_SIMU_DEPTH_DEFAULT); + int simuDepth = getModel().getAttribute(LAUNCH_SIMU_DEPTH, LAUNCH_SIMU_DEPTH_DEFAULT); simuDepthText.setText("" + simuDepth); // simulation aril - int simuAril = getConfig().getAttribute(LAUNCH_SIMU_SEED, LAUNCH_SIMU_ARIL_DEFAULT); + int simuAril = getModel().getAttribute(LAUNCH_SIMU_SEED, LAUNCH_SIMU_ARIL_DEFAULT); if (LAUNCH_SIMU_ARIL_DEFAULT != simuAril) { simuArilText.setText("" + simuAril); @@ -166,7 +165,7 @@ public class AdvancedModelPage extends BasicFormPage implements IConfigurationCo } // simulation seed - int simuSeed = getConfig().getAttribute(LAUNCH_SIMU_ARIL, LAUNCH_SIMU_SEED_DEFAULT); + int simuSeed = getModel().getAttribute(LAUNCH_SIMU_ARIL, LAUNCH_SIMU_SEED_DEFAULT); if (LAUNCH_SIMU_SEED_DEFAULT != simuSeed) { simuSeedText.setText("" + simuSeed); @@ -176,25 +175,25 @@ public class AdvancedModelPage extends BasicFormPage implements IConfigurationCo } // fp index - final int fpIndex = getConfig().getAttribute(LAUNCH_FP_INDEX, LAUNCH_FP_INDEX_DEFAULT); + final int fpIndex = getModel().getAttribute(LAUNCH_FP_INDEX, LAUNCH_FP_INDEX_DEFAULT); fpIndexSpinner.setSelection(fpIndex); // fpBits int defaultFPBits = TLCUIActivator.getDefault().getPreferenceStore().getInt( ITLCPreferenceConstants.I_TLC_FPBITS_DEFAULT); - fpBits.setSelection(getConfig().getAttribute(LAUNCH_FPBITS, defaultFPBits)); + fpBits.setSelection(getModel().getAttribute(LAUNCH_FPBITS, defaultFPBits)); // maxSetSize int defaultMaxSetSize = TLCUIActivator.getDefault().getPreferenceStore().getInt( ITLCPreferenceConstants.I_TLC_MAXSETSIZE_DEFAULT); - maxSetSize.setSelection(getConfig().getAttribute(LAUNCH_MAXSETSIZE, defaultMaxSetSize)); + maxSetSize.setSelection(getModel().getAttribute(LAUNCH_MAXSETSIZE, defaultMaxSetSize)); // Extra JVM arguments and system properties - final String vmArgs = getConfig().getAttribute(LAUNCH_JVM_ARGS, LAUNCH_JVM_ARGS_DEFAULT); + final String vmArgs = getModel().getAttribute(LAUNCH_JVM_ARGS, LAUNCH_JVM_ARGS_DEFAULT); this.extraVMArgumentsText.setText(vmArgs); // Extra JVM arguments and system properties - final String tlcParameters = getConfig().getAttribute(LAUNCH_TLC_PARAMETERS, LAUNCH_TLC_PARAMETERS_DEFAULT); + final String tlcParameters = getModel().getAttribute(LAUNCH_TLC_PARAMETERS, LAUNCH_TLC_PARAMETERS_DEFAULT); this.extraTLCParametersText.setText(tlcParameters); } @@ -206,11 +205,11 @@ public class AdvancedModelPage extends BasicFormPage implements IConfigurationCo // TLCUIActivator.getDefault().logDebug("Advanced page commit"); boolean isMCMode = mcOption.getSelection(); - getConfig().setAttribute(LAUNCH_MC_MODE, isMCMode); + getModel().setAttribute(LAUNCH_MC_MODE, isMCMode); // DFID mode boolean isDFIDMode = dfidOption.getSelection(); - getConfig().setAttribute(LAUNCH_DFID_MODE, isDFIDMode); + getModel().setAttribute(LAUNCH_DFID_MODE, isDFIDMode); int dfidDepth = Integer.parseInt(dfidDepthText.getText()); int simuDepth = Integer.parseInt(simuDepthText.getText()); @@ -227,56 +226,56 @@ public class AdvancedModelPage extends BasicFormPage implements IConfigurationCo } // DFID depth - getConfig().setAttribute(LAUNCH_DFID_DEPTH, dfidDepth); + getModel().setAttribute(LAUNCH_DFID_DEPTH, dfidDepth); // simulation depth - getConfig().setAttribute(LAUNCH_SIMU_DEPTH, simuDepth); + getModel().setAttribute(LAUNCH_SIMU_DEPTH, simuDepth); // simulation aril - getConfig().setAttribute(LAUNCH_SIMU_SEED, simuSeed); + getModel().setAttribute(LAUNCH_SIMU_SEED, simuSeed); // simulation seed - getConfig().setAttribute(LAUNCH_SIMU_ARIL, simuAril); + getModel().setAttribute(LAUNCH_SIMU_ARIL, simuAril); // FP Seed index - getConfig().setAttribute(LAUNCH_FP_INDEX, fpIndexSpinner.getSelection()); + getModel().setAttribute(LAUNCH_FP_INDEX, fpIndexSpinner.getSelection()); // fpBits - getConfig().setAttribute(LAUNCH_FPBITS, fpBits.getSelection()); + getModel().setAttribute(LAUNCH_FPBITS, fpBits.getSelection()); // fpBits - getConfig().setAttribute(LAUNCH_MAXSETSIZE, maxSetSize.getSelection()); + getModel().setAttribute(LAUNCH_MAXSETSIZE, maxSetSize.getSelection()); // definitions List<String> definitions = FormHelper.getSerializedInput(definitionsTable); - getConfig().setAttribute(MODEL_PARAMETER_DEFINITIONS, definitions); + getModel().setAttribute(MODEL_PARAMETER_DEFINITIONS, definitions); // new definitions String newDefinitions = FormHelper.trimTrailingSpaces(newDefinitionsSource.getDocument().get()); - getConfig().setAttribute(MODEL_PARAMETER_NEW_DEFINITIONS, newDefinitions); + getModel().setAttribute(MODEL_PARAMETER_NEW_DEFINITIONS, newDefinitions); // model values String modelValues = FormHelper.trimTrailingSpaces(modelValuesSource.getDocument().get()); TypedSet modelValuesSet = TypedSet.parseSet(modelValues); - getConfig().setAttribute(MODEL_PARAMETER_MODEL_VALUES, modelValuesSet.toString()); + getModel().setAttribute(MODEL_PARAMETER_MODEL_VALUES, modelValuesSet.toString()); // constraint formula String constraintFormula = FormHelper.trimTrailingSpaces(constraintSource.getDocument().get()); - getConfig().setAttribute(MODEL_PARAMETER_CONSTRAINT, constraintFormula); + getModel().setAttribute(MODEL_PARAMETER_CONSTRAINT, constraintFormula); // view String viewFormula = FormHelper.trimTrailingSpaces(viewSource.getDocument().get()); - getConfig().setAttribute(LAUNCH_VIEW, viewFormula); + getModel().setAttribute(LAUNCH_VIEW, viewFormula); // action constraint formula String actionConstraintFormula = FormHelper.trimTrailingSpaces(actionConstraintSource.getDocument().get()); - getConfig().setAttribute(MODEL_PARAMETER_ACTION_CONSTRAINT, actionConstraintFormula); + getModel().setAttribute(MODEL_PARAMETER_ACTION_CONSTRAINT, actionConstraintFormula); // extra vm arguments (replace newlines which otherwise cause the // process to ignore all args except the first one) final String vmArgs = this.extraVMArgumentsText.getText().replace("\r\n", " ").replace("\n", " "); - getConfig().setAttribute(LAUNCH_JVM_ARGS, vmArgs); + getModel().setAttribute(LAUNCH_JVM_ARGS, vmArgs); // extra tlc parameters final String tlcParameters = this.extraTLCParametersText.getText(); - getConfig().setAttribute(LAUNCH_TLC_PARAMETERS, tlcParameters); + getModel().setAttribute(LAUNCH_TLC_PARAMETERS, tlcParameters); super.commit(onSave); } @@ -658,7 +657,7 @@ public class AdvancedModelPage extends BasicFormPage implements IConfigurationCo int expand = 0; try { - List<String> definitions = getConfig().getAttribute(MODEL_PARAMETER_DEFINITIONS, new Vector<String>()); + List<String> definitions = getModel().getAttribute(MODEL_PARAMETER_DEFINITIONS, new Vector<String>()); if ((definitions != null) && (definitions.size() != 0)) { expand = Section.EXPANDED; } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/editor/page/BasicFormPage.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/editor/page/BasicFormPage.java index fff6e10479e559cf36181ffcbd4040c96da9fd19..5540d9432e90f8896a476a4eb57907d1df2edf61 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/editor/page/BasicFormPage.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/editor/page/BasicFormPage.java @@ -7,7 +7,6 @@ import java.util.List; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.ListenerList; import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.ToolBarManager; @@ -42,6 +41,7 @@ import org.eclipse.ui.forms.widgets.Section; import org.lamport.tla.toolbox.tool.tlc.launch.IModelConfigurationConstants; import org.lamport.tla.toolbox.tool.tlc.launch.IModelConfigurationDefaults; import org.lamport.tla.toolbox.tool.tlc.launch.TLCModelLaunchDelegate; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; import org.lamport.tla.toolbox.tool.tlc.ui.contribution.DynamicContributionItem; import org.lamport.tla.toolbox.tool.tlc.ui.editor.DataBindingManager; @@ -52,7 +52,6 @@ import org.lamport.tla.toolbox.tool.tlc.ui.util.IgnoringListener; import org.lamport.tla.toolbox.tool.tlc.ui.util.SemanticHelper; import org.lamport.tla.toolbox.tool.tlc.ui.util.TLCUIHelper; import org.lamport.tla.toolbox.tool.tlc.ui.view.TLCErrorView; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; import org.lamport.tla.toolbox.util.UIHelper; import tla2sany.semantic.SymbolNode; @@ -153,9 +152,9 @@ public abstract class BasicFormPage extends FormPage implements IModelConfigurat // if it is a global TLC error, it will shift focus to the error view if (messages.length > 0 && messages[0].getMessage().equals(TLC_ERROR_STRING)) { - if (getConfig() != null) + if (getModel() != null) { - TLCErrorView.updateErrorView(getConfig()); + TLCErrorView.updateErrorView(getModel()); } } else { @@ -439,15 +438,10 @@ public abstract class BasicFormPage extends FormPage implements IModelConfigurat return image; } - /** - * Retrieves the configuration the editor is editing - * @return - */ - public ILaunchConfigurationWorkingCopy getConfig() - { - return ((ModelEditor) getEditor()).getConfig(); + public Model getModel() { + return ((ModelEditor) getEditor()).getModel(); } - + /** * Validates the data entries entered in the input fields. The validate method is called * on any change in the fields. For this to work, the corresponding listeners are registered @@ -558,7 +552,7 @@ public abstract class BasicFormPage extends FormPage implements IModelConfigurat IToolBarManager toolbarManager = mForm.getForm().getToolBarManager(); // get the usage status - boolean modelRunning = isModelRunning(); + boolean modelRunning = getModel().isRunning(); // refresh the title String title = mForm.getForm().getText(); @@ -572,21 +566,15 @@ public abstract class BasicFormPage extends FormPage implements IModelConfigurat if (modelRunning) { - if (isModelStale()) + if (getModel().isStale()) { mForm.getForm().setText(title + CRASHED_TITLE); - // the model crashed - toolbarManager.add(new DynamicContributionItem(new ModelRecoveryAction())); - if (headClientTBM != null) - { - headClientTBM.add(new DynamicContributionItem(new ModelRecoveryAction())); - } } else { mForm.getForm().setText(title + RUNNING_TITLE); } - } else if (isModelLocked()) + } else if (getModel().isLocked()) { mForm.getForm().setText(title + LOCKED_TITLE); } else @@ -608,35 +596,12 @@ public abstract class BasicFormPage extends FormPage implements IModelConfigurat } // refresh enablement status - setEnabled(!modelRunning && !isModelLocked()); + setEnabled(!modelRunning && !getModel().isLocked()); mForm.getForm().update(); } } - /** - * Returns true, if the model is being run, that is the attribute MODEL_IS_RUNNING is true - * @return true if the underlying model file has attribute MODEL_IS_RUNNING set to true - */ - public boolean isModelRunning() - { - return ((ModelEditor) getEditor()).isModelRunning(); - } - - /** - * Returns true, if the model is locked, that is the attribute MODEL_IS_LOCKED is true - * @return true if the underlying model file has attribute MODEL_IS_LOCKED set to true - */ - public boolean isModelLocked() - { - return ((ModelEditor) getEditor()).isModelLocked(); - } - - public boolean isModelStale() - { - return ((ModelEditor) getEditor()).isModelStale(); - } - /** * Checks if the elements of the given list comply with the requirement of being not already defined in the context * of the current model and the specification. The method will iterate through the list and check whether every element @@ -877,7 +842,8 @@ public abstract class BasicFormPage extends FormPage implements IModelConfigurat */ public boolean isEnabled() { - return !isModelRunning() && !isModelLocked(); + final Model model = getModel(); + return !model.isRunning() && !model.isLocked(); } } @@ -904,7 +870,7 @@ public abstract class BasicFormPage extends FormPage implements IModelConfigurat */ public boolean isEnabled() { - return !isModelRunning() && !isModelLocked(); + return !getModel().isRunning() && !getModel().isLocked(); } } @@ -931,7 +897,7 @@ public abstract class BasicFormPage extends FormPage implements IModelConfigurat */ public boolean isEnabled() { - return isModelRunning() && !isModelStale(); + return getModel().isRunning(); } } @@ -950,18 +916,12 @@ public abstract class BasicFormPage extends FormPage implements IModelConfigurat public void run() { - try - { - ModelHelper.recoverModel(((ModelEditor) getEditor()).getConfig()); - } catch (CoreException e) - { - TLCUIActivator.getDefault().logError("Error recovering the model", e); - } + ((ModelEditor) getEditor()).getModel().recover(); } public boolean isEnabled() { - return isModelStale(); + return getModel().isStale(); } } @@ -977,18 +937,12 @@ public abstract class BasicFormPage extends FormPage implements IModelConfigurat public void run() { - try - { - ModelHelper.setModelLocked(getConfig(), false); - } catch (CoreException e) - { - TLCUIActivator.getDefault().logError("There was an error unlocking the model.", e); - } + ((ModelEditor) getEditor()).getModel().setLocked(false); } public boolean isEnabled() { - return !isModelRunning() && isModelLocked(); + return !getModel().isRunning() && getModel().isLocked(); } } @@ -1023,18 +977,12 @@ public abstract class BasicFormPage extends FormPage implements IModelConfigurat return; } } - try - { - ModelHelper.setModelLocked(getConfig(), true); - } catch (CoreException e) - { - TLCUIActivator.getDefault().logError("There was an error locking the model.", e); - } + getModel().setLocked(true); } public boolean isEnabled() { - return !isModelLocked(); + return !getModel().isLocked(); } } } \ No newline at end of file diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/editor/page/MainModelPage.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/editor/page/MainModelPage.java index d15185c30d5cb0c7b33a4fd09d53f7b51d41198a..e51b874c6552e3538ac73d751edf90bd0d5964d3 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/editor/page/MainModelPage.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/editor/page/MainModelPage.java @@ -96,7 +96,6 @@ import util.TLCRuntime; * * * @author Simon Zambrovski - * @version $Id$ * This is the FormPage class for the Model Overview tabbed page of * the model editor. */ @@ -119,6 +118,7 @@ public class MainModelPage extends BasicFormPage implements IConfigurationConsta * Spinner to set the number of (expected) distributed FPSets. */ private Spinner distributedFPSetCountSpinner; + private Spinner distributedNodesCountSpinner; private Combo networkInterfaceCombo; private Scale maxHeapSize; private TableViewer invariantsTable; @@ -245,61 +245,61 @@ public class MainModelPage extends BasicFormPage implements IConfigurationConsta */ protected void loadData() throws CoreException { - int specType = getConfig().getAttribute(MODEL_BEHAVIOR_SPEC_TYPE, MODEL_BEHAVIOR_TYPE_DEFAULT); + int specType = getModel().getAttribute(MODEL_BEHAVIOR_SPEC_TYPE, MODEL_BEHAVIOR_TYPE_DEFAULT); // set up the radio buttons setSpecSelection(specType); // closed spec - String modelSpecification = getConfig().getAttribute(MODEL_BEHAVIOR_CLOSED_SPECIFICATION, EMPTY_STRING); + String modelSpecification = getModel().getAttribute(MODEL_BEHAVIOR_CLOSED_SPECIFICATION, EMPTY_STRING); Document closedDoc = new Document(modelSpecification); this.specSource.setDocument(closedDoc); // init - String modelInit = getConfig().getAttribute(MODEL_BEHAVIOR_SEPARATE_SPECIFICATION_INIT, EMPTY_STRING); + String modelInit = getModel().getAttribute(MODEL_BEHAVIOR_SEPARATE_SPECIFICATION_INIT, EMPTY_STRING); Document initDoc = new Document(modelInit); this.initFormulaSource.setDocument(initDoc); // next - String modelNext = getConfig().getAttribute(MODEL_BEHAVIOR_SEPARATE_SPECIFICATION_NEXT, EMPTY_STRING); + String modelNext = getModel().getAttribute(MODEL_BEHAVIOR_SEPARATE_SPECIFICATION_NEXT, EMPTY_STRING); Document nextDoc = new Document(modelNext); this.nextFormulaSource.setDocument(nextDoc); // fairness // String modelFairness = - // getConfig().getAttribute(MODEL_BEHAVIOR_SEPARATE_SPECIFICATION_FAIRNESS, + // getModel().getAttribute(MODEL_BEHAVIOR_SEPARATE_SPECIFICATION_FAIRNESS, // EMPTY_STRING); // Document fairnessDoc = new Document(modelFairness); // this.fairnessFormulaSource.setDocument(fairnessDoc); // number of workers - workers.setSelection(getConfig().getAttribute(LAUNCH_NUMBER_OF_WORKERS, LAUNCH_NUMBER_OF_WORKERS_DEFAULT)); + workers.setSelection(getModel().getAttribute(LAUNCH_NUMBER_OF_WORKERS, LAUNCH_NUMBER_OF_WORKERS_DEFAULT)); // max JVM heap size final int defaultMaxHeapSize = TLCUIActivator.getDefault().getPreferenceStore().getInt( ITLCPreferenceConstants.I_TLC_MAXIMUM_HEAP_SIZE_DEFAULT); - final int maxHeapSizeValue = getConfig().getAttribute(LAUNCH_MAX_HEAP_SIZE, defaultMaxHeapSize); + final int maxHeapSizeValue = getModel().getAttribute(LAUNCH_MAX_HEAP_SIZE, defaultMaxHeapSize); maxHeapSize.setSelection(maxHeapSizeValue); // check deadlock - boolean checkDeadlock = getConfig().getAttribute(MODEL_CORRECTNESS_CHECK_DEADLOCK, + boolean checkDeadlock = getModel().getAttribute(MODEL_CORRECTNESS_CHECK_DEADLOCK, MODEL_CORRECTNESS_CHECK_DEADLOCK_DEFAULT); this.checkDeadlockButton.setSelection(checkDeadlock); // invariants - List<String> serializedList = getConfig().getAttribute(MODEL_CORRECTNESS_INVARIANTS, new Vector<String>()); + List<String> serializedList = getModel().getAttribute(MODEL_CORRECTNESS_INVARIANTS, new Vector<String>()); FormHelper.setSerializedInput(invariantsTable, serializedList); // properties - serializedList = getConfig().getAttribute(MODEL_CORRECTNESS_PROPERTIES, new Vector<String>()); + serializedList = getModel().getAttribute(MODEL_CORRECTNESS_PROPERTIES, new Vector<String>()); FormHelper.setSerializedInput(propertiesTable, serializedList); // constants from the model - List<String> savedConstants = getConfig().getAttribute(MODEL_PARAMETER_CONSTANTS, new Vector<String>()); + List<String> savedConstants = getModel().getAttribute(MODEL_PARAMETER_CONSTANTS, new Vector<String>()); FormHelper.setSerializedInput(constantTable, savedConstants); // recover from the checkpoint - boolean recover = getConfig().getAttribute(LAUNCH_RECOVER, LAUNCH_RECOVER_DEFAULT); + boolean recover = getModel().getAttribute(LAUNCH_RECOVER, LAUNCH_RECOVER_DEFAULT); this.checkpointButton.setSelection(recover); /* @@ -307,11 +307,11 @@ public class MainModelPage extends BasicFormPage implements IConfigurationConsta */ String cloud = "off"; try { - cloud = getConfig().getAttribute(LAUNCH_DISTRIBUTED, LAUNCH_DISTRIBUTED_DEFAULT); + cloud = getModel().getAttribute(LAUNCH_DISTRIBUTED, LAUNCH_DISTRIBUTED_DEFAULT); } catch (CoreException e) { // LAUNCH_DISTRIBUTED might still be stored in a legacy format. The user is // opening an old model. - boolean distributed = getConfig().getAttribute(LAUNCH_DISTRIBUTED, false); + boolean distributed = getModel().getAttribute(LAUNCH_DISTRIBUTED, false); if (distributed) { cloud = "ad hoc"; } @@ -327,7 +327,7 @@ public class MainModelPage extends BasicFormPage implements IConfigurationConsta if (cloud.equalsIgnoreCase("aws-ec2") || cloud.equalsIgnoreCase("Azure")) { MainModelPage.this.putOnTopOfStack("jclouds", false, false); - String email = getConfig().getAttribute(LAUNCH_DISTRIBUTED_RESULT_MAIL_ADDRESS, LAUNCH_DISTRIBUTED_RESULT_MAIL_ADDRESS_DEFAULT); + String email = getModel().getAttribute(LAUNCH_DISTRIBUTED_RESULT_MAIL_ADDRESS, LAUNCH_DISTRIBUTED_RESULT_MAIL_ADDRESS_DEFAULT); resultMailAddressText.setText(email); } else if(cloud.equalsIgnoreCase("ad hoc")) { MainModelPage.this.putOnTopOfStack("ad hoc", false, true); @@ -336,10 +336,13 @@ public class MainModelPage extends BasicFormPage implements IConfigurationConsta } // distribute FPSet count - distributedFPSetCountSpinner.setSelection(getConfig().getAttribute(LAUNCH_DISTRIBUTED_FPSET_COUNT, LAUNCH_DISTRIBUTED_FPSET_COUNT_DEFAULT)); + distributedFPSetCountSpinner.setSelection(getModel().getAttribute(LAUNCH_DISTRIBUTED_FPSET_COUNT, LAUNCH_DISTRIBUTED_FPSET_COUNT_DEFAULT)); - // comments/description/notes - String commentsStr = getConfig().getAttribute(MODEL_COMMENTS, EMPTY_STRING); + // distribute FPSet count + distributedNodesCountSpinner.setSelection(getModel().getAttribute(LAUNCH_DISTRIBUTED_NODES_COUNT, LAUNCH_DISTRIBUTED_NODES_COUNT_DEFAULT)); + + // comments/description/notes + String commentsStr = getModel().getAttribute(MODEL_COMMENTS, EMPTY_STRING); commentsSource.setDocument(new Document(commentsStr)); } @@ -560,11 +563,11 @@ public class MainModelPage extends BasicFormPage implements IConfigurationConsta .getDefault() .getPreferenceStore() .getInt(ITLCPreferenceConstants.I_TLC_MAXIMUM_HEAP_SIZE_DEFAULT); - final int legacyValue = getConfig().getAttribute( + final int legacyValue = getModel().getAttribute( LAUNCH_MAX_HEAP_SIZE, defaultMaxHeapSize); // old default, silently convert to new default if (legacyValue == 500) { - getConfig().setAttribute( + getModel().setAttribute( LAUNCH_MAX_HEAP_SIZE, TLCPreferenceInitializer.MAX_HEAP_SIZE_DEFAULT); maxHeapSize.setSelection(TLCPreferenceInitializer.MAX_HEAP_SIZE_DEFAULT); } else if (legacyValue >= 100) { @@ -592,6 +595,20 @@ public class MainModelPage extends BasicFormPage implements IConfigurationConsta maxHeapSize.setBackground(new Color(Display.getDefault(), new RGB( 120 * y, 1 - y, 1f))); + // IP/network address correct? + final int networkAddressIndex = this.networkInterfaceCombo.getSelectionIndex(); + if (networkAddressIndex < 0) { + // Bogus input + modelEditor.addErrorMessage("strangeAddress1", + String.format( + "Found the manually inserted master's network address %s. " + + "This is usually unnecessary and hints at a misconfiguration. " + + "Make sure your computer running the TLC master is reachable at address %s.", + this.networkInterfaceCombo.getText(), this.networkInterfaceCombo.getText()), + this.getId(), IMessageProvider.WARNING, networkInterfaceCombo); + expandSection(SEC_HOW_TO_RUN); + } + // fill the checkpoints updateCheckpoints(); @@ -769,25 +786,25 @@ public class MainModelPage extends BasicFormPage implements IConfigurationConsta public void commit(boolean onSave) { final String comments = FormHelper.trimTrailingSpaces(commentsSource.getDocument().get()); - getConfig().setAttribute(MODEL_COMMENTS, comments); + getModel().setAttribute(MODEL_COMMENTS, comments); // TLCUIActivator.getDefault().logDebug("Main page commit"); // closed formula String closedFormula = FormHelper.trimTrailingSpaces(this.specSource.getDocument().get()); - getConfig().setAttribute(MODEL_BEHAVIOR_CLOSED_SPECIFICATION, closedFormula); + getModel().setAttribute(MODEL_BEHAVIOR_CLOSED_SPECIFICATION, closedFormula); // init formula String initFormula = FormHelper.trimTrailingSpaces(this.initFormulaSource.getDocument().get()); - getConfig().setAttribute(MODEL_BEHAVIOR_SEPARATE_SPECIFICATION_INIT, initFormula); + getModel().setAttribute(MODEL_BEHAVIOR_SEPARATE_SPECIFICATION_INIT, initFormula); // next formula String nextFormula = FormHelper.trimTrailingSpaces(this.nextFormulaSource.getDocument().get()); - getConfig().setAttribute(MODEL_BEHAVIOR_SEPARATE_SPECIFICATION_NEXT, nextFormula); + getModel().setAttribute(MODEL_BEHAVIOR_SEPARATE_SPECIFICATION_NEXT, nextFormula); // fairness formula // String fairnessFormula = // FormHelper.trimTrailingSpaces(this.fairnessFormulaSource.getDocument().get()); - // getConfig().setAttribute(MODEL_BEHAVIOR_SEPARATE_SPECIFICATION_FAIRNESS, + // getModel().setAttribute(MODEL_BEHAVIOR_SEPARATE_SPECIFICATION_FAIRNESS, // fairnessFormula); // mode @@ -806,53 +823,65 @@ public class MainModelPage extends BasicFormPage implements IConfigurationConsta specType = MODEL_BEHAVIOR_TYPE_DEFAULT; } - getConfig().setAttribute(MODEL_BEHAVIOR_SPEC_TYPE, specType); + getModel().setAttribute(MODEL_BEHAVIOR_SPEC_TYPE, specType); // number of workers - getConfig().setAttribute(LAUNCH_NUMBER_OF_WORKERS, workers.getSelection()); + getModel().setAttribute(LAUNCH_NUMBER_OF_WORKERS, workers.getSelection()); int maxHeapSizeValue = TLCUIActivator.getDefault().getPreferenceStore().getInt( ITLCPreferenceConstants.I_TLC_MAXIMUM_HEAP_SIZE_DEFAULT); maxHeapSizeValue = maxHeapSize.getSelection(); - getConfig().setAttribute(LAUNCH_MAX_HEAP_SIZE, maxHeapSizeValue); + getModel().setAttribute(LAUNCH_MAX_HEAP_SIZE, maxHeapSizeValue); // recover from deadlock boolean recover = this.checkpointButton.getSelection(); - getConfig().setAttribute(LAUNCH_RECOVER, recover); + getModel().setAttribute(LAUNCH_RECOVER, recover); // check deadlock boolean checkDeadlock = this.checkDeadlockButton.getSelection(); - getConfig().setAttribute(MODEL_CORRECTNESS_CHECK_DEADLOCK, checkDeadlock); + getModel().setAttribute(MODEL_CORRECTNESS_CHECK_DEADLOCK, checkDeadlock); // run in distributed mode String distributed = this.distributedCombo.getItem(this.distributedCombo.getSelectionIndex()); - getConfig().setAttribute(LAUNCH_DISTRIBUTED, distributed); + getModel().setAttribute(LAUNCH_DISTRIBUTED, distributed); String resultMailAddress = this.resultMailAddressText.getText(); - getConfig().setAttribute(LAUNCH_DISTRIBUTED_RESULT_MAIL_ADDRESS, resultMailAddress); + getModel().setAttribute(LAUNCH_DISTRIBUTED_RESULT_MAIL_ADDRESS, resultMailAddress); // distributed FPSet count - getConfig().setAttribute(LAUNCH_DISTRIBUTED_FPSET_COUNT, distributedFPSetCountSpinner.getSelection()); + getModel().setAttribute(LAUNCH_DISTRIBUTED_FPSET_COUNT, distributedFPSetCountSpinner.getSelection()); + + // distributed FPSet count + getModel().setAttribute(LAUNCH_DISTRIBUTED_NODES_COUNT, distributedNodesCountSpinner.getSelection()); // network interface - final String iface = this.networkInterfaceCombo.getItem(this.networkInterfaceCombo.getSelectionIndex()); - getConfig().setAttribute(LAUNCH_DISTRIBUTED_INTERFACE, iface); + String iface = ""; + final int index = this.networkInterfaceCombo.getSelectionIndex(); + if (index == -1) { + // Normally, the user selects an address from the provided list. + // This branch handles the case where the user manually entered an + // address. We don't verify it though. + iface = this.networkInterfaceCombo.getText(); + } else { + iface = this.networkInterfaceCombo.getItem(index); + } + getModel().setAttribute(LAUNCH_DISTRIBUTED_INTERFACE, iface); // invariants List<String> serializedList = FormHelper.getSerializedInput(invariantsTable); - getConfig().setAttribute(MODEL_CORRECTNESS_INVARIANTS, serializedList); + getModel().setAttribute(MODEL_CORRECTNESS_INVARIANTS, serializedList); // properties serializedList = FormHelper.getSerializedInput(propertiesTable); - getConfig().setAttribute(MODEL_CORRECTNESS_PROPERTIES, serializedList); + getModel().setAttribute(MODEL_CORRECTNESS_PROPERTIES, serializedList); // constants List<String> constants = FormHelper.getSerializedInput(constantTable); - getConfig().setAttribute(MODEL_PARAMETER_CONSTANTS, constants); + getModel().setAttribute(MODEL_PARAMETER_CONSTANTS, constants); // variables String variables = ModelHelper.createVariableList(SemanticHelper.getRootModuleNode()); - getConfig().setAttribute(MODEL_BEHAVIOR_VARS, variables); + getModel().setAttribute(MODEL_BEHAVIOR_VARS, variables); super.commit(onSave); } @@ -866,7 +895,7 @@ public class MainModelPage extends BasicFormPage implements IConfigurationConsta try { // checkpoint id - checkpoints = ModelHelper.getCheckpoints(getConfig(), false); + checkpoints = getModel().getCheckpoints(false); } catch (CoreException e) { TLCUIActivator.getDefault().logError("Error checking chekpoint data", e); @@ -1090,9 +1119,9 @@ public class MainModelPage extends BasicFormPage implements IConfigurationConsta int propFlags = sectionFlags; try { - if (!((String) getConfig().getAttribute(MODEL_PROPERTIES_EXPAND, "")).equals("")) { + if (!((String) getModel().getAttribute(MODEL_PROPERTIES_EXPAND, "")).equals("")) { propFlags = propFlags | Section.EXPANDED; - getConfig().setAttribute(MODEL_PROPERTIES_EXPAND, ""); + getModel().setAttribute(MODEL_PROPERTIES_EXPAND, ""); } } catch (CoreException e) { @@ -1322,7 +1351,7 @@ public class MainModelPage extends BasicFormPage implements IConfigurationConsta final IResource[] checkpoints; try { - checkpoints = ModelHelper.getCheckpoints(getConfig(), false); + checkpoints = getModel().getCheckpoints(false); if ((checkpoints != null) && checkpoints.length > 0) { @@ -1510,11 +1539,55 @@ public class MainModelPage extends BasicFormPage implements IConfigurationConsta distributedFPSetCountSpinner.setSelection(IConfigurationDefaults.LAUNCH_DISTRIBUTED_FPSET_COUNT_DEFAULT); dm.bindAttribute(LAUNCH_DISTRIBUTED_FPSET_COUNT, distributedFPSetCountSpinner, howToRunPart); + + /* + * Composite wrapping all widgets related to jclouds + */ + final Composite jcloudsOptions = new Composite(distributedOptions, SWT.NONE); + layout = new GridLayout(2, true); + jcloudsOptions.setLayout(layout); + gd = new GridData(); + gd.horizontalSpan = 2; + jcloudsOptions.setLayoutData(gd); + + /* + * Distributed nodes count + */ + + // composite + final Composite distributedNodesCount = new Composite(jcloudsOptions, SWT.NONE); + layout = new GridLayout(2, false); + distributedNodesCount.setLayout(layout); + gd = new GridData(); + gd.horizontalSpan = 2; + distributedNodesCount.setLayoutData(gd); + + // label + toolkit.createLabel(distributedNodesCount, "Number of compute nodes to use:"); + + // field + distributedNodesCountSpinner = new Spinner(distributedNodesCount, SWT.NONE); + distributedNodesCountSpinner.addSelectionListener(howToRunListener); + distributedNodesCountSpinner.addFocusListener(focusListener); + gd = new GridData(); + gd.grabExcessHorizontalSpace = true; + gd.horizontalIndent = 10; + gd.widthHint = 40; + distributedNodesCountSpinner.setLayoutData(gd); + + distributedNodesCountSpinner.setMinimum(1); + distributedNodesCountSpinner.setMaximum(64); // Haven't really tested this many distributed fpsets + distributedNodesCountSpinner.setPageIncrement(1); + distributedNodesCountSpinner.setToolTipText( + "Determines how many compute nodes/VMs will be launched. More VMs means faster results and higher costs."); + distributedNodesCountSpinner.setSelection(IConfigurationDefaults.LAUNCH_DISTRIBUTED_NODES_COUNT_DEFAULT); + + dm.bindAttribute(LAUNCH_DISTRIBUTED_NODES_COUNT, distributedNodesCountSpinner, howToRunPart); /* * Result mail address input */ - final Composite resultAddress = new Composite(distributedOptions, SWT.NONE) ; + final Composite resultAddress = new Composite(jcloudsOptions, SWT.NONE) ; layout = new GridLayout(2, true); resultAddress.setLayout(layout); @@ -1557,7 +1630,7 @@ public class MainModelPage extends BasicFormPage implements IConfigurationConsta resultMailAddressText.addModifyListener(howToRunListener); dm.bindAttribute(LAUNCH_DISTRIBUTED_RESULT_MAIL_ADDRESS, resultMailAddressText, howToRunPart); - distributedOptions.setData("jclouds", resultAddress); + distributedOptions.setData("jclouds", jcloudsOptions); distributedCombo.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/editor/page/ResultPage.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/editor/page/ResultPage.java index bbd1bc782b7664647b48153734e11bb0ca12cede..594622edf4e261c4636050e064fc500dd542a176 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/editor/page/ResultPage.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/editor/page/ResultPage.java @@ -21,7 +21,6 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.jface.action.Action; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.text.Document; @@ -64,6 +63,7 @@ import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.forms.widgets.TableWrapData; import org.eclipse.ui.forms.widgets.TableWrapLayout; import org.eclipse.ui.progress.UIJob; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.data.CoverageInformationItem; import org.lamport.tla.toolbox.tool.tlc.output.data.ITLCModelLaunchDataPresenter; import org.lamport.tla.toolbox.tool.tlc.output.data.StateSpaceInformationItem; @@ -126,16 +126,10 @@ public class ResultPage extends BasicFormPage implements ITLCModelLaunchDataPres public void linkActivated(HyperlinkEvent e) { - if (getConfig() != null) + if (getModel() != null) { - try - { - ModelHelper.setOriginalTraceShown(getConfig(), true); - } catch (CoreException e1) - { - TLCUIActivator.getDefault().logError("Error setting the original trace to be shown.", e1); - } - TLCErrorView.updateErrorView(getConfig()); + getModel().setOriginalTraceShown(true); + TLCErrorView.updateErrorView(getModel()); } } }; @@ -184,7 +178,16 @@ public class ResultPage extends BasicFormPage implements ITLCModelLaunchDataPres ResultPage.this.expressionEvalResult.getTextWidget().setText(dataProvider.getCalcOutput()); break; case START_TIME: - ResultPage.this.startTimestampText.setText(new Date(dataProvider.getStartTimestamp()).toString()); + final long startTimestamp = dataProvider.getStartTimestamp(); + if (startTimestamp < 0) { + // Leave the starttime text empty on a negative + // timestamp. A negative one indicates that the + // model has never been checked. See Long.MIN_VALUE in + // org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider.initialize() + ResultPage.this.startTimestampText.setText(""); + break; + } + ResultPage.this.startTimestampText.setText(new Date(startTimestamp).toString()); ResultPage.this.startTime = dataProvider.getStartTime(); break; case END_TIME: @@ -272,7 +275,7 @@ public class ResultPage extends BasicFormPage implements ITLCModelLaunchDataPres ResultPage.this.errorStatusHyperLink.setForeground(color); // update the error view - TLCErrorView.updateErrorView(dataProvider.getConfig()); + TLCErrorView.updateErrorView(dataProvider.getModel()); break; default: break; @@ -293,8 +296,7 @@ public class ResultPage extends BasicFormPage implements ITLCModelLaunchDataPres final Hashtable<String, Object> marker = ModelHelper.createMarkerDescription( "State space exploration incomplete", IMarker.SEVERITY_WARNING); marker.put(ModelHelper.TLC_MODEL_ERROR_MARKER_ATTRIBUTE_PAGE, 2); - incompleteStateExploration = ModelHelper.installModelProblemMarker(getConfig().getFile(), - marker, ModelHelper.TLC_MODEL_ERROR_MARKER_TLC); + incompleteStateExploration = getModel().setMarker(marker, ModelHelper.TLC_MODEL_ERROR_MARKER_TLC); } } else { if (incompleteStateExploration != null) { @@ -326,21 +328,18 @@ public class ResultPage extends BasicFormPage implements ITLCModelLaunchDataPres public void loadData() throws CoreException { - TLCOutputSourceRegistry modelCheckSourceRegistry = TLCOutputSourceRegistry.getModelCheckSourceRegistry(); - TLCModelLaunchDataProvider provider = modelCheckSourceRegistry.getProvider(getConfig()); - if (provider != null) - { - provider.setPresenter(this); - } else - { - // no data provider - reinit(); - } + TLCOutputSourceRegistry modelCheckSourceRegistry = TLCOutputSourceRegistry.getModelCheckSourceRegistry(); + TLCModelLaunchDataProvider provider = modelCheckSourceRegistry.getProvider(getModel()); + if (provider != null) { + provider.setPresenter(this); + } else { + // no data provider + reinit(); + } - // constant expression - String expression = getConfig().getAttribute(MODEL_EXPRESSION_EVAL, EMPTY_STRING); - expressionEvalInput.setDocument(new Document(expression)); - } + // constant expression + expressionEvalInput.setDocument(new Document(getModel().getEvalExpression())); + } /** * Reinitialize the fields @@ -397,7 +396,7 @@ public class ResultPage extends BasicFormPage implements ITLCModelLaunchDataPres JFaceResources.getFontRegistry().removeListener(fontChangeListener); TLCModelLaunchDataProvider provider = TLCOutputSourceRegistry.getModelCheckSourceRegistry() - .getProvider(getConfig()); + .getProvider(getModel()); if (provider != null) { provider.setPresenter(null); } @@ -573,7 +572,7 @@ public class ResultPage extends BasicFormPage implements ITLCModelLaunchDataPres // This makes the widget unsaved when text is entered. expressionEvalInput.getTextWidget().addModifyListener(new DirtyMarkingListener(calculatorSectionPart, false)); - getDataBindingManager().bindAttribute(MODEL_EXPRESSION_EVAL, expressionEvalInput, calculatorSectionPart); + getDataBindingManager().bindAttribute(Model.MODEL_EXPRESSION_EVAL, expressionEvalInput, calculatorSectionPart); getDataBindingManager().bindSection(calculatorSectionPart, SEC_EXPRESSION, getId()); // ------------------------------------------------------------------- @@ -658,9 +657,8 @@ public class ResultPage extends BasicFormPage implements ITLCModelLaunchDataPres final TLCOutputSourceRegistry modelCheckSourceRegistry = TLCOutputSourceRegistry .getModelCheckSourceRegistry(); modelCheckSourceRegistry - .removeTLCStatusSource(new ILaunchConfiguration[] { getConfig() }); - ModelHelper.createModelOutputLogFile(getConfig(), - new FileInputStream(new File(path)), monitor); + .removeTLCStatusSource(new Model[] { getModel() }); + getModel().createModelOutputLogFile(new FileInputStream(new File(path)), monitor); // Once the output has been imported on the // file/resource layer, update the UI. @@ -686,6 +684,16 @@ public class ResultPage extends BasicFormPage implements ITLCModelLaunchDataPres j.setRule(workspace.getRuleFactory().buildRule()); j.schedule(); } + + /* (non-Javadoc) + * @see org.eclipse.jface.action.Action#isEnabled() + */ + public boolean isEnabled() { + if (getModel().isLocked() || getModel().isRunning()) { + return false; + } + return super.isEnabled(); + } } @@ -695,7 +703,7 @@ public class ResultPage extends BasicFormPage implements ITLCModelLaunchDataPres public void commit(boolean onSave) { String expression = this.expressionEvalInput.getDocument().get(); - getConfig().setAttribute(MODEL_EXPRESSION_EVAL, expression); + getModel().unsavedSetEvalExpression(expression); super.commit(onSave); } @@ -1272,7 +1280,7 @@ public class ResultPage extends BasicFormPage implements ITLCModelLaunchDataPres */ private static String getGraphTitleSuffix(ResultPage resultPage) { - return "(" + ModelHelper.getModelName(resultPage.getConfig().getFile()) + ")"; + return "(" + resultPage.getModel().getName() + ")"; } private static String getGraphTitle(int columnNumber, ResultPage resultPage) diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/expression/ModelErrorsTester.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/expression/ModelErrorsTester.java index fc10bfd3c9297ae38c459a484cd20201e97da036..8247b443669fc93d308969aa93e8dd7e081d6dcf 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/expression/ModelErrorsTester.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/expression/ModelErrorsTester.java @@ -1,8 +1,8 @@ package org.lamport.tla.toolbox.tool.tlc.ui.expression; import org.eclipse.core.expressions.PropertyTester; -import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.ui.IEditorPart; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.source.TLCOutputSourceRegistry; import org.lamport.tla.toolbox.tool.tlc.ui.editor.ModelEditor; import org.lamport.tla.toolbox.util.UIHelper; @@ -10,11 +10,6 @@ import org.lamport.tla.toolbox.util.UIHelper; public class ModelErrorsTester extends PropertyTester { - public ModelErrorsTester() - { - // TODO Auto-generated constructor stub - } - /** * */ @@ -28,10 +23,10 @@ public class ModelErrorsTester extends PropertyTester if (activeEditor instanceof ModelEditor) { ModelEditor activeModelEditor = (ModelEditor) activeEditor; - ILaunchConfiguration config = activeModelEditor.getConfig(); - if (config != null) + Model model = activeModelEditor.getModel(); + if (model != null) { - return TLCOutputSourceRegistry.getModelCheckSourceRegistry().getProvider(config).getErrors().size() > 0; + return TLCOutputSourceRegistry.getModelCheckSourceRegistry().getProvider(model).getErrors().size() > 0; } } } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/modelexplorer/CloneModelContributionItem.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/modelexplorer/CloneModelContributionItem.java index a0cbb64e494b58dd58ca35a7c2e2adc0d0303ef7..0dac565c4fef51adedf83a6fd85ee6ee251df20c 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/modelexplorer/CloneModelContributionItem.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/modelexplorer/CloneModelContributionItem.java @@ -2,16 +2,13 @@ package org.lamport.tla.toolbox.tool.tlc.ui.modelexplorer; import java.util.HashMap; import java.util.Map; +import java.util.Set; import java.util.Vector; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationType; -import org.eclipse.debug.core.ILaunchManager; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.actions.CompoundContributionItem; @@ -20,9 +17,8 @@ import org.eclipse.ui.menus.CommandContributionItemParameter; import org.lamport.tla.toolbox.spec.Spec; import org.lamport.tla.toolbox.tool.ToolboxHandle; import org.lamport.tla.toolbox.tool.tlc.handlers.CloneModelHandlerDelegate; -import org.lamport.tla.toolbox.tool.tlc.launch.TLCModelLaunchDelegate; +import org.lamport.tla.toolbox.tool.tlc.model.TLCSpec; import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; import org.lamport.tla.toolbox.util.UIHelper; /** @@ -42,10 +38,6 @@ public class CloneModelContributionItem extends CompoundContributionItem protected IContributionItem[] getContributionItems() { - ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); - ILaunchConfigurationType launchConfigurationType = launchManager - .getLaunchConfigurationType(TLCModelLaunchDelegate.LAUNCH_CONFIGURATION_TYPE); - final Vector<CommandContributionItem> modelContributions = new Vector<CommandContributionItem>(); Spec currentSpec = ToolboxHandle.getCurrentSpec(); @@ -63,44 +55,31 @@ public class CloneModelContributionItem extends CompoundContributionItem // here. Meaning, why doesn't the resource fw handle this case // already? specProject.refreshLocal(IResource.DEPTH_ONE, new NullProgressMonitor()); + } catch (CoreException e) + { + e.printStackTrace(); + } - // First, search for all models for the given spec. - ILaunchConfiguration[] launchConfigurations = launchManager - .getLaunchConfigurations(launchConfigurationType); - for (int i = 0; i < launchConfigurations.length; i++) - { - String modelName = launchConfigurations[i].getName(); - - // skip launches from other specs - if (!specProject.equals(launchConfigurations[i].getFile().getProject())) - { - continue; - } - - // Next, set the command and the parameters for the command - // that will be called when the user selects this item. - Map<String, String> parameters = new HashMap<String, String>(); - - // user visible model name - String modelNameUser = ModelHelper.getModelName(launchConfigurations[i].getFile()); - - // fill the model name for the handler - parameters.put(CloneModelHandlerDelegate.PARAM_MODEL_NAME, modelNameUser); + // First, search for all models for the given spec. + final Set<String> modelNames = currentSpec.getAdapter(TLCSpec.class).getModels().keySet(); + for (String modelName : modelNames) { + // Next, set the command and the parameters for the command + // that will be called when the user selects this item. + Map<String, String> parameters = new HashMap<String, String>(); - // create the contribution item - CommandContributionItemParameter param = new CommandContributionItemParameter(UIHelper - .getActiveWindow(), "toolbox.command.model.clone." + modelName, - COMMAND_ID_ALWAYS_ENABLED, parameters, modelIcon, null, null, modelNameUser, null, - "Clones " + modelNameUser, CommandContributionItem.STYLE_PUSH, null, true); + // fill the model name for the handler + parameters.put(CloneModelHandlerDelegate.PARAM_MODEL_NAME, modelName); - // add contribution item to the list - modelContributions.add(new CommandContributionItem(param)); - } + // create the contribution item + CommandContributionItemParameter param = new CommandContributionItemParameter(UIHelper + .getActiveWindow(), "toolbox.command.model.clone." + modelName, + COMMAND_ID_ALWAYS_ENABLED, parameters, modelIcon, null, null, modelName, null, + "Clones " + modelName, CommandContributionItem.STYLE_PUSH, null, true); - } catch (CoreException e) - { - e.printStackTrace(); + // add contribution item to the list + modelContributions.add(new CommandContributionItem(param)); } + return (IContributionItem[]) modelContributions.toArray(new IContributionItem[modelContributions.size()]); } } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/modelexplorer/ModelContentProvider.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/modelexplorer/ModelContentProvider.java index 34e890e4b20f2f4f002cc2274146479711306f09..b57be03e436536c3bd7652d09d0897a2c330eff3 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/modelexplorer/ModelContentProvider.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/modelexplorer/ModelContentProvider.java @@ -25,23 +25,16 @@ ******************************************************************************/ package org.lamport.tla.toolbox.tool.tlc.ui.modelexplorer; -import java.util.Arrays; +import java.util.Collection; import java.util.HashMap; import java.util.Map; -import java.util.Vector; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationType; -import org.eclipse.debug.core.ILaunchManager; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; import org.lamport.tla.toolbox.spec.Spec; import org.lamport.tla.toolbox.tool.ToolboxHandle; -import org.lamport.tla.toolbox.tool.tlc.launch.TLCModelLaunchDelegate; -import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; +import org.lamport.tla.toolbox.tool.tlc.model.Model; +import org.lamport.tla.toolbox.tool.tlc.model.TLCSpec; import org.lamport.tla.toolbox.ui.provider.IGroup; /** @@ -53,35 +46,15 @@ public class ModelContentProvider implements ITreeContentProvider { public static final String TLC_NCE = "toolbox.content.ModelContent"; private static final Object[] EMPTY_ARRAY = new Object[0]; - private final Map<ILaunchConfiguration, Group> reverse = new HashMap<ILaunchConfiguration, Group>(); + private final Map<Model, Group> reverse = new HashMap<Model, Group>(); public Object[] getChildren(final Object parentElement) { if (parentElement instanceof Spec) { final Spec currentSpec = (Spec) parentElement; - final ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); - - final ILaunchConfigurationType configType = launchManager - .getLaunchConfigurationType(TLCModelLaunchDelegate.LAUNCH_CONFIGURATION_TYPE); - - final Vector<ILaunchConfiguration> models = new Vector<ILaunchConfiguration>(); - - final IProject specProject = currentSpec.getProject(); - try { - final ILaunchConfiguration[] configs = launchManager.getLaunchConfigurations(configType); - for (int i = 0; i < configs.length; i++) { - // skip launches from other specs (projects) - if (!specProject.equals(configs[i].getFile().getProject()) || !configs[i].exists()) { - continue; - } - models.add(configs[i]); - } - } catch (final CoreException e) { - TLCUIActivator.getDefault().logError("Error fetching the models", e); - } - // only get models of the current spec if (ToolboxHandle.getCurrentSpec() == parentElement) { - return new Group[] {new Group((Spec) parentElement, models.toArray(new ILaunchConfiguration[models.size()]))}; + final Collection<Model> models = currentSpec.getAdapter(TLCSpec.class).getModels().values(); + return new Group[] {new Group((Spec) parentElement, models.toArray(new Model[models.size()]))}; } } else if (parentElement instanceof Group) { return ((Group) parentElement).getModels(); @@ -90,10 +63,8 @@ public class ModelContentProvider implements ITreeContentProvider { } public Object getParent(final Object element) { - if (element instanceof ILaunchConfiguration) { - if (((ILaunchConfiguration) element).exists()) { - return ToolboxHandle.getSpecByName(((ILaunchConfiguration) element).getFile().getProject().getName()); - } + if (element instanceof Model) { + return ((Model) element).getSpec(); } return null; } @@ -122,15 +93,15 @@ public class ModelContentProvider implements ITreeContentProvider { public static final class Group implements IGroup { - private final ILaunchConfiguration[] models; + private final Model[] models; private final Spec spec; - public Group(Spec spec, ILaunchConfiguration[] iLaunchConfigurations) { + public Group(Spec spec, Model[] models) { this.spec = spec; - this.models = iLaunchConfigurations; + this.models = models; } - public ILaunchConfiguration[] getModels() { + public Model[] getModels() { return models; } @@ -141,6 +112,15 @@ public class ModelContentProvider implements ITreeContentProvider { public String toString() { return "models"; } + + /* + * equals/hashcode is custom tailored for the ToolboxExplorer's viewer. + * If the Group does not implement e/h as below, the viewer changes its + * expanded state upon refreshs. Since we know that a spec only ever + * has a single "models" group node, we can base equality on the Spec. + * Also, the set of models keeps changing which renders it unusable + * to determine equality. + */ /* (non-Javadoc) * @see java.lang.Object#hashCode() @@ -148,7 +128,7 @@ public class ModelContentProvider implements ITreeContentProvider { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + Arrays.hashCode(models); + result = prime * result + ((spec == null) ? 0 : spec.hashCode()); return result; } @@ -163,7 +143,10 @@ public class ModelContentProvider implements ITreeContentProvider { if (getClass() != obj.getClass()) return false; Group other = (Group) obj; - if (!Arrays.equals(models, other.models)) + if (spec == null) { + if (other.spec != null) + return false; + } else if (!spec.equals(other.spec)) return false; return true; } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/modelexplorer/ModelContributionItem.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/modelexplorer/ModelContributionItem.java index 862a97031bbaf539d4379e8a28dbe085ef3e65e6..5e498ef776df89e530325ac80474a6b96ee71038 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/modelexplorer/ModelContributionItem.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/modelexplorer/ModelContributionItem.java @@ -1,14 +1,10 @@ package org.lamport.tla.toolbox.tool.tlc.ui.modelexplorer; import java.util.HashMap; +import java.util.Map; +import java.util.Set; import java.util.Vector; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationType; -import org.eclipse.debug.core.ILaunchManager; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.actions.CompoundContributionItem; @@ -17,15 +13,13 @@ import org.eclipse.ui.menus.CommandContributionItemParameter; import org.lamport.tla.toolbox.spec.Spec; import org.lamport.tla.toolbox.tool.ToolboxHandle; import org.lamport.tla.toolbox.tool.tlc.handlers.OpenModelHandler; -import org.lamport.tla.toolbox.tool.tlc.launch.TLCModelLaunchDelegate; +import org.lamport.tla.toolbox.tool.tlc.model.TLCSpec; import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; import org.lamport.tla.toolbox.util.UIHelper; /** * Contributes a list of models * @author Simon Zambrovski - * @version $Id$ */ public class ModelContributionItem extends CompoundContributionItem { @@ -36,54 +30,31 @@ public class ModelContributionItem extends CompoundContributionItem */ protected IContributionItem[] getContributionItems() { - - ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); - ILaunchConfigurationType launchConfigurationType = launchManager - .getLaunchConfigurationType(TLCModelLaunchDelegate.LAUNCH_CONFIGURATION_TYPE); - - Vector modelContributions = new Vector(); + final Vector<CommandContributionItem> modelContributions = new Vector<CommandContributionItem>(); Spec currentSpec = ToolboxHandle.getCurrentSpec(); if (currentSpec == null) { return new IContributionItem[0]; } - IProject specProject = currentSpec.getProject(); - try - { - ILaunchConfiguration[] launchConfigurations = launchManager - .getLaunchConfigurations(launchConfigurationType); - for (int i = 0; i < launchConfigurations.length; i++) - { - String modelName = launchConfigurations[i].getName(); - - // skip launches from other specs - if (!specProject.equals(launchConfigurations[i].getFile().getProject())) - { - continue; - } - - HashMap parameters = new HashMap(); - // user visible model name - String modelNameUser = ModelHelper.getModelName(launchConfigurations[i].getFile()); + // First, search for all models for the given spec. + final Set<String> modelNames = currentSpec.getAdapter(TLCSpec.class).getModels().keySet(); + for (String modelName : modelNames) { - // fill the model name for the handler - parameters.put(OpenModelHandler.PARAM_MODEL_NAME, modelNameUser); + Map<String, String> parameters = new HashMap<String, String>(); - // create the contribution item - CommandContributionItemParameter param = new CommandContributionItemParameter(UIHelper - .getActiveWindow(), "toolbox.command.model.open." + modelName, OpenModelHandler.COMMAND_ID, - parameters, modelIcon, null, null, modelNameUser, null, "Opens " + modelNameUser, - CommandContributionItem.STYLE_PUSH, null, true); + // fill the model name for the handler + parameters.put(OpenModelHandler.PARAM_MODEL_NAME, modelName); - // add contribution item to the list - modelContributions.add(new CommandContributionItem(param)); - } + // create the contribution item + CommandContributionItemParameter param = new CommandContributionItemParameter(UIHelper + .getActiveWindow(), "toolbox.command.model.open." + modelName, OpenModelHandler.COMMAND_ID, + parameters, modelIcon, null, null, modelName, null, "Opens " + modelName, + CommandContributionItem.STYLE_PUSH, null, true); - } catch (CoreException e) - { - e.printStackTrace(); + // add contribution item to the list + modelContributions.add(new CommandContributionItem(param)); } - return (IContributionItem[]) modelContributions.toArray(new IContributionItem[modelContributions.size()]); + return modelContributions.toArray(new IContributionItem[modelContributions.size()]); } } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/modelexplorer/ModelLabelProvider.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/modelexplorer/ModelLabelProvider.java index 146e5463de9dac661979a2a9ef4c2943e712d8d8..f4118074c7b1e3e5b550855461b6275aef105913 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/modelexplorer/ModelLabelProvider.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/modelexplorer/ModelLabelProvider.java @@ -25,31 +25,24 @@ ******************************************************************************/ package org.lamport.tla.toolbox.tool.tlc.ui.modelexplorer; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchManager; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.navigator.IDescriptionProvider; -import org.lamport.tla.toolbox.tool.tlc.launch.IModelConfigurationConstants; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; import org.lamport.tla.toolbox.tool.tlc.ui.modelexplorer.ModelContentProvider.Group; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; /** * Provides labels for the TLC models */ public class ModelLabelProvider extends LabelProvider implements IDescriptionProvider { private Image image = TLCUIActivator.getImageDescriptor("/icons/full/choice_sc_obj.gif").createImage(); - private final ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); /** * Retrieves model's image */ public Image getImage(final Object element) { - if (element instanceof ILaunchConfiguration || element instanceof Group) { + if (element instanceof Model || element instanceof Group) { return image; } return super.getImage(element); @@ -59,33 +52,14 @@ public class ModelLabelProvider extends LabelProvider implements IDescriptionPro * Retrieves model's label */ public String getText(final Object element) { - if (element instanceof ILaunchConfiguration) { - final ILaunchConfiguration config = (ILaunchConfiguration) element; - final String modelName = ModelHelper.getModelName(config.getFile()); - try { - if (ModelHelper.isModelStale(config)) { - return modelName + " [ crashed ]"; - } - if (ModelHelper.isModelRunning(config)) { - final ILaunch[] launches = launchManager.getLaunches(); - boolean found = false; - for (int i = 0; i < launches.length; i++) { - if (launches[i].getLaunchConfiguration().contentsEqual(config)) { - found = true; - break; - } - } - if (found) { - return modelName + " [ modelchecking ]"; - } else { - // the MC crashed - // mark the error - ModelHelper.staleModel(config); - return modelName + " [ crashed ]"; - } - } - } catch (final CoreException e) { - TLCUIActivator.getDefault().logError("Error creating description for a model", e); + if (element instanceof Model) { + final Model model = (Model) element; + final String modelName = model.getName(); + if (model.isStale()) { + return modelName + " [ crashed ]"; + } + if (model.isRunning()) { + return modelName + " [ modelchecking ]"; } return modelName; } else if (element instanceof Group) { @@ -98,13 +72,13 @@ public class ModelLabelProvider extends LabelProvider implements IDescriptionPro * Description to be shown in the status bar */ public String getDescription(final Object element) { - if (element instanceof ILaunchConfiguration) { - try { - final ILaunchConfiguration ilc = (ILaunchConfiguration) element; - return ilc.getAttribute(IModelConfigurationConstants.MODEL_COMMENTS, getText(element)); - } catch (CoreException e) { + if (element instanceof Model) { + final Model model = (Model) element; + final String comments = model.getComments(); + if (comments.equals("")) { return getText(element); } + return comments; } return null; } @@ -119,5 +93,4 @@ public class ModelLabelProvider extends LabelProvider implements IDescriptionPro image = null; super.dispose(); } - } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/modelexplorer/SavedModuleContributionItem.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/modelexplorer/SavedModuleContributionItem.java index 72875a689450b4fd4bd7479ba961211ed8146c86..8aca444dc19b244411ba37e1b142a141849435ab 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/modelexplorer/SavedModuleContributionItem.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/modelexplorer/SavedModuleContributionItem.java @@ -56,8 +56,7 @@ public class SavedModuleContributionItem extends CompoundContributionItem IEditorPart editor = UIHelper.getActiveEditor(); if (editor instanceof ModelEditor) { - ModelEditor modelEditor = (ModelEditor) editor; - IFolder modelFolder = ModelHelper.getModelTargetDirectory(modelEditor.getConfig()); + IFolder modelFolder = ((ModelEditor) editor).getModel().getTargetDirectory(); if (modelFolder != null && modelFolder.exists()) { try diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/preference/TLCPreferenceInitializer.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/preference/TLCPreferenceInitializer.java index c06de09cb71a91aefaa313cd6c642abaab6d2724..8e4aef0ec643bd4663acd1f870176e9247d69930 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/preference/TLCPreferenceInitializer.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/preference/TLCPreferenceInitializer.java @@ -28,6 +28,7 @@ public class TLCPreferenceInitializer extends AbstractPreferenceInitializer store.setDefault(ITLCPreferenceConstants.I_TLC_REVALIDATE_ON_MODIFY, true); store.setDefault(ITLCPreferenceConstants.I_TLC_MAXIMUM_HEAP_SIZE_DEFAULT, MAX_HEAP_SIZE_DEFAULT); store.setDefault(ITLCPreferenceConstants.I_TLC_MAXSETSIZE_DEFAULT, TLCGlobals.setBound); + store.setDefault(ITLCPreferenceConstants.I_TLC_FPBITS_DEFAULT, 1); store.setDefault(ITLCPreferenceConstants.I_TLC_FPSETIMPL_DEFAULT, FPSetFactory.getImplementationDefault()); store.setDefault(ITLCPreferenceConstants.I_TLC_AUTO_LOCK_MODEL_TIME, IModelConfigurationDefaults.MODEL_AUTO_LOCK_TIME_DEFAULT); diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/preference/TLCPreferencePage.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/preference/TLCPreferencePage.java index b4f34012ebb71bbb6abc062f88fe6de6b6d1424d..5c93ea3b899e7fedf9d0c8670bb8639b6a303de8 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/preference/TLCPreferencePage.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/preference/TLCPreferencePage.java @@ -52,7 +52,7 @@ public class TLCPreferencePage extends FieldEditorPreferencePage implements IWor addField(new IntegerFieldEditor(ITLCPreferenceConstants.I_TLC_AUTO_LOCK_MODEL_TIME, "TLC run auto-lock time (in minutes)", getFieldEditorParent())); IntegerFieldEditor integerFieldEditor = new IntegerFieldEditor(ITLCPreferenceConstants.I_TLC_TRACE_MAX_SHOW_ERRORS, - "Maximum tail length of Trace explorer states", getFieldEditorParent()); + "Default number of states shown in error traces", getFieldEditorParent()); integerFieldEditor.setValidRange(1, Integer.MAX_VALUE); addField(integerFieldEditor); } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/util/ActionClickListener.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/util/ActionClickListener.java index cd28aa9e0658b83882c53602bad7d43833efc616..8654c0a616ed3fdd8a2de275222acb757941b5da 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/util/ActionClickListener.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/util/ActionClickListener.java @@ -12,9 +12,11 @@ import org.eclipse.swt.events.KeyListener; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.widgets.Display; +import org.lamport.tla.toolbox.tool.ToolboxHandle; +import org.lamport.tla.toolbox.tool.tlc.model.Model; +import org.lamport.tla.toolbox.tool.tlc.model.TLCSpec; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCError; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCState; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; import org.lamport.tla.toolbox.util.UIHelper; import tla2sany.st.Location; @@ -36,7 +38,7 @@ import tla2sany.st.Location; * */ public class ActionClickListener implements MouseListener, KeyListener { - + private final Viewer viewer; public ActionClickListener(final Viewer viewer) { @@ -71,6 +73,9 @@ public class ActionClickListener implements MouseListener, KeyListener { public void keyReleased(final KeyEvent event) { if (event.keyCode == SWT.CR) { goToAction(viewer.getSelection(), (event.stateMask & SWT.CTRL) != 0); + } else if (event.keyCode == SWT.KEYPAD_DIVIDE && (event.stateMask & SWT.ALT) != 0 + && this.viewer instanceof TreeViewer) { + ((TreeViewer) this.viewer).collapseAll(); } } @@ -100,10 +105,10 @@ public class ActionClickListener implements MouseListener, KeyListener { * shown in a nested saved module editor. If it is * false, we jump to the regular TLA editor instead. */ + Model model = ToolboxHandle.getCurrentSpec().getAdapter(TLCSpec.class).getModel(moduleLocatable + .getModelName()); final boolean jumpedToNested = TLCUIHelper - .jumpToSavedLocation(location, ModelHelper - .getModelByName(moduleLocatable - .getModelName())); + .jumpToSavedLocation(location, model); if (!jumpedToNested) { UIHelper.jumpToLocation(location, jumpToPCal); } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/util/ModelEditorAdapterFactory.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/util/ModelEditorAdapterFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..5ab7c34869e131b471d71fdfc45138411c97a095 --- /dev/null +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/util/ModelEditorAdapterFactory.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2015 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package org.lamport.tla.toolbox.tool.tlc.ui.util; + +import org.eclipse.core.runtime.IAdapterFactory; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.part.FileEditorInput; +import org.lamport.tla.toolbox.tool.tlc.model.Model; +import org.lamport.tla.toolbox.tool.tlc.ui.editor.ModelEditor; +import org.lamport.tla.toolbox.util.UIHelper; + +public class ModelEditorAdapterFactory implements IAdapterFactory { + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class) + */ + @SuppressWarnings("unchecked") + public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) { + if (!ModelEditor.class.equals(adapterType)) { + return null; + } + if (adaptableObject instanceof Model) { + final IWorkbenchPage activePage = UIHelper.getActivePage(); + if (activePage != null) { + final Model model = (Model) adaptableObject; + return (T) activePage.findEditor(new FileEditorInput(model.getFile())); + } + } + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList() + */ + public Class<?>[] getAdapterList() { + return new Class[] {Model.class}; + } + +} diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/util/ModelEditorPartListener.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/util/ModelEditorPartListener.java index ba17112d1c657f6388554c2bbcd1248bb4467906..d006948547affd7fd77ca6ba543c0250c56e749f 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/util/ModelEditorPartListener.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/util/ModelEditorPartListener.java @@ -1,16 +1,13 @@ package org.lamport.tla.toolbox.tool.tlc.ui.util; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.ui.IPartListener2; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPartReference; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCModelLaunchDataProvider; import org.lamport.tla.toolbox.tool.tlc.output.source.TLCOutputSourceRegistry; -import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; import org.lamport.tla.toolbox.tool.tlc.ui.editor.ModelEditor; import org.lamport.tla.toolbox.tool.tlc.ui.view.TLCErrorView; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; import org.lamport.tla.toolbox.util.UIHelper; /** @@ -84,17 +81,12 @@ public class ModelEditorPartListener implements IPartListener2 final ModelEditor editor = (ModelEditor) part; TLCModelLaunchDataProvider provider = null; - final ILaunchConfiguration config = editor.getConfig().getOriginal(); + final Model model = editor.getModel(); - try { - if (ModelHelper.isOriginalTraceShown(config)) { - provider = TLCOutputSourceRegistry.getModelCheckSourceRegistry().getProvider(config); - } else { - provider = TLCOutputSourceRegistry.getTraceExploreSourceRegistry().getProvider(config); - } - } catch (final CoreException e) { - TLCUIActivator.getDefault().logError( - "Error determining if original trace should be shown when model editor is made visible.", e); + if (model.isOriginalTraceShown()) { + provider = TLCOutputSourceRegistry.getModelCheckSourceRegistry().getProvider(model); + } else { + provider = TLCOutputSourceRegistry.getTraceExploreSourceRegistry().getProvider(model); } final TLCErrorView errorView = (TLCErrorView) UIHelper.findView(TLCErrorView.ID); @@ -115,7 +107,7 @@ public class ModelEditorPartListener implements IPartListener2 // 3) Run the model // 4) Cycle focus // 5) Bam! - TLCErrorView.updateErrorView(config, !UIHelper.isInSameStack(editor, TLCErrorView.ID)); + TLCErrorView.updateErrorView(model, !UIHelper.isInSameStack(editor, TLCErrorView.ID)); } else { errorView.clear(); } diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/util/TLCUIHelper.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/util/TLCUIHelper.java index f08312898996b5548dfeed307ab2056f949f8fde..27cbb891061321cbdb18522e02fffd26249da97c 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/util/TLCUIHelper.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/util/TLCUIHelper.java @@ -19,6 +19,7 @@ import org.eclipse.swt.widgets.Event; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.texteditor.ITextEditor; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.ui.TLCUIActivator; import org.lamport.tla.toolbox.tool.tlc.ui.editor.ModelEditor; import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; @@ -104,7 +105,7 @@ public class TLCUIHelper final String locationString = matcher.group(); // "consume" location string to prevent pcal matcher from consuming the same text again - // @see https://bugzilla.tlaplus.net/show_bug.cgi?id=269 + // @see Bug #269 in general/bugzilla/index.html text = text.replace(locationString, ""); Location location = Location.parseLocation(locationString); @@ -155,9 +156,9 @@ public class TLCUIHelper * * @param styledText * @param trigger - * @param config + * @param model */ - public static void openTLCLocationHyperlink(StyledText styledText, MouseEvent trigger, ILaunchConfiguration config) + public static void openTLCLocationHyperlink(StyledText styledText, MouseEvent trigger, Model model) { try { @@ -168,7 +169,7 @@ public class TLCUIHelper Object data = range.data; if (data instanceof Location) { - boolean jumpToSavedModule = jumpToSavedLocation((Location) data, config); + boolean jumpToSavedModule = jumpToSavedLocation((Location) data, model); if (!jumpToSavedModule) { UIHelper.jumpToLocation((Location) data, (trigger.stateMask & SWT.CTRL) != 0); @@ -227,12 +228,11 @@ public class TLCUIHelper * editor showing the saved module. * * @param location - * @param configuration * @return */ - public static boolean jumpToSavedLocation(Location location, ILaunchConfiguration configuration) + public static boolean jumpToSavedLocation(Location location, Model model) { - IEditorPart editor = ModelHelper.getEditorWithModelOpened(configuration); + IEditorPart editor = model.getAdapter(ModelEditor.class); if (editor instanceof ModelEditor) { ModelEditor modelEditor = (ModelEditor) editor; diff --git a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/view/TLCErrorView.java b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/view/TLCErrorView.java index a1500d2a745b324af76b2216aed437089131ec21..91af61d3a973439325d07c69fc942d6f10c1675b 100644 --- a/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/view/TLCErrorView.java +++ b/org.lamport.tla.toolbox.tool.tlc.ui/src/org/lamport/tla/toolbox/tool/tlc/ui/view/TLCErrorView.java @@ -3,13 +3,13 @@ package org.lamport.tla.toolbox.tool.tlc.ui.view; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; import java.util.Vector; +import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Pattern; import org.eclipse.core.runtime.Assert; -import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogSettings; @@ -58,8 +58,8 @@ import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.part.ViewPart; import org.lamport.tla.toolbox.Activator; -import org.lamport.tla.toolbox.tool.tlc.launch.IModelConfigurationConstants; import org.lamport.tla.toolbox.tool.tlc.model.Formula; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCError; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCFcnElementVariableValue; import org.lamport.tla.toolbox.tool.tlc.output.data.TLCFunctionVariableValue; @@ -86,6 +86,7 @@ import org.lamport.tla.toolbox.util.FontPreferenceChangeListener; import org.lamport.tla.toolbox.util.IHelpConstants; import org.lamport.tla.toolbox.util.UIHelper; +import tla2sany.st.Location; import tlc2.output.MP; /** @@ -128,11 +129,7 @@ public class TLCErrorView extends ViewPart private SourceViewer errorViewer; private TreeViewer variableViewer; private SourceViewer valueViewer; - /** - * a handle on the underlying configuration file representing the - * model for which errors are currently being displayed in this view - */ - private ILaunchConfiguration configFileHandle; + private Model model; private TraceExplorerComposite traceExplorerComposite; // listener on changes to the tlc output font preference @@ -318,7 +315,7 @@ public class TLCErrorView extends ViewPart public void mouseDown(MouseEvent e) { - TLCUIHelper.openTLCLocationHyperlink(text, e, getCurrentConfigFileHandle()); + TLCUIHelper.openTLCLocationHyperlink(text, e, model); } public void mouseDoubleClick(MouseEvent e) @@ -465,6 +462,37 @@ public class TLCErrorView extends ViewPart variableViewer.getTree().addMouseListener(new ActionClickListener(variableViewer)); variableViewer.getTree().addKeyListener(new ActionClickListener(variableViewer)); +// This is working but I'm not sure we need it. ActionClickListener +// has a keystroke to collapse the viewer. +// // Add a right click context menu to expand and collapse all variables. +// final MenuManager contextMenu = new MenuManager("#ViewerMenu"); //$NON-NLS-1$ +// contextMenu.setRemoveAllWhenShown(true); +// contextMenu.addMenuListener(new IMenuListener() { +// @Override +// public void menuAboutToShow(IMenuManager mgr) { +// mgr.add(new Action("&Collapse All") { +// public void run() { +// variableViewer.collapseAll(); +// } +// }); +// mgr.add(new Action("Expand to &default level") { +// public void run() { +// // expandAll() followed by expandToLevel(2) requires us +// // to collapse the viewer first. +// variableViewer.collapseAll(); +// variableViewer.expandToLevel(2); +// } +// }); +// mgr.add(new Action("&Expand All") { +// public void run() { +// variableViewer.expandAll(); +// } +// }); +// } +// }); +// final Menu menu = contextMenu.createContextMenu(variableViewer.getControl()); +// variableViewer.getControl().setMenu(menu); +// variableViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) @@ -623,88 +651,68 @@ public class TLCErrorView extends ViewPart } } + public void updateErrorView() { + updateErrorView(this.model); + } + /** * Display the errors in the view, or hides the view if no errors * Displays data from the most recent trace explorer run for config * iff {@link ModelHelper#isOriginalTraceShown(ILaunchConfiguration)} is false. * - * @param config TODO * @param errors * a list of {@link TLCError} */ - public static void updateErrorView(ILaunchConfiguration config) { - updateErrorView(config, true); + public static void updateErrorView(Model model) { + System.out.println(model); + updateErrorView(model, true); } - public static void updateErrorView(ILaunchConfiguration config, boolean openErrorView) + public static void updateErrorView(Model model, boolean openErrorView) { - - try + if (model == null) { - if (config == null) - { - return; - } - boolean isTraceExplorerUpdate; - isTraceExplorerUpdate = !ModelHelper.isOriginalTraceShown(config); + return; + } + boolean isTraceExplorerUpdate; + isTraceExplorerUpdate = !model.isOriginalTraceShown(); - TLCModelLaunchDataProvider provider = null; - if (isTraceExplorerUpdate) - { - provider = TLCOutputSourceRegistry.getTraceExploreSourceRegistry().getProvider(config); - } else - { - provider = TLCOutputSourceRegistry.getModelCheckSourceRegistry().getProvider(config); - } + TLCModelLaunchDataProvider provider = null; + if (isTraceExplorerUpdate) + { + provider = TLCOutputSourceRegistry.getTraceExploreSourceRegistry().getProvider(model); + } else + { + provider = TLCOutputSourceRegistry.getModelCheckSourceRegistry().getProvider(model); + } - if (provider == null) - { - return; - } - updateErrorView(provider, config, openErrorView); - } catch (CoreException e) + if (provider == null) { - TLCUIActivator.getDefault().logError("Error determining if trace explorer expressions should be shown", e); + return; } + updateErrorView(provider, model, openErrorView); } - public static void updateErrorView(final TLCModelLaunchDataProvider provider, final ILaunchConfiguration config, + public static void updateErrorView(final TLCModelLaunchDataProvider provider, final Model model, boolean openErrorView) { - try { - TLCErrorView errorView; - if (provider.getErrors().size() > 0 && openErrorView == true) { - errorView = (TLCErrorView) UIHelper.openView(TLCErrorView.ID); - } else { - errorView = (TLCErrorView) UIHelper.findView(TLCErrorView.ID); - } - if (errorView != null) { - /* - * We need a handle on the actual underlying configuration file handle - * in order to retrieve the expressions that should be put in the trace - * explorer table. Working copies of the configuration file may not have - * all of the expressions that should appear. The filling of the trace - * explorer table occurs in the fill() method. - */ - if (config.isWorkingCopy()) { - errorView.configFileHandle = ((ILaunchConfigurationWorkingCopy) config).getOriginal(); - } else { - errorView.configFileHandle = config; - } + TLCErrorView errorView; + if (provider.getErrors().size() > 0 && openErrorView == true) { + errorView = (TLCErrorView) UIHelper.openView(TLCErrorView.ID); + } else { + errorView = (TLCErrorView) UIHelper.findView(TLCErrorView.ID); + } + if (errorView != null) { + errorView.model= model; - final List<String> serializedInput = errorView.configFileHandle - .getAttribute(IModelConfigurationConstants.TRACE_EXPLORE_EXPRESSIONS, new Vector<String>()); - // fill the name and the errors - errorView.fill(ModelHelper.getModelName(provider.getConfig().getFile()), provider.getErrors(), - serializedInput); + final List<String> serializedInput = model.getTraceExplorerExpressions(); + // fill the name and the errors + errorView.fill(provider.getModel().getName(), provider.getErrors(), + serializedInput); - if (provider.getErrors().size() == 0) { - errorView.hide(); - } + if (provider.getErrors().size() == 0) { + errorView.hide(); } - } catch (CoreException e) { - TLCUIActivator.getDefault().logError("Error determining if trace explorer expressions should be shown", e); } - } /** @@ -879,11 +887,20 @@ public class TLCErrorView extends ViewPart predecessor.diff(child); } viewer.replace(parent, viewerIndex, child); - if (child.getVariablesAsList().size() > 0) { - viewer.setHasChildren(child, true); - } + // Always setHashChildren even if child has no children: This is + // a virtual table here meaning that it reduces the number of + // table items at the OS level by recycling them (the OS only + // creates a many items that fit into the visible area). If an + // item showing a regular state, is later recycled by a "back to + // state" or "stuttering" indicator (neither has children), + // the OS still incorrectly assumes the item has children. This + // crashes hard on Linux and results in erratic behavior on + // Windows and Mac. + viewer.setHasChildren(child, child.getVariablesAsList().size() > 0); // Lazily expand the children - viewer.expandToLevel(child, 1); + if (child.isExpandable()){ + viewer.expandToLevel(child, 1); + } } else if (parent instanceof TLCState) { final TLCState state = (TLCState) parent; if ((state.isStuttering() || state.isBackToState())) { @@ -893,9 +910,7 @@ public class TLCErrorView extends ViewPart if (variablesAsList.size() > viewerIndex) { final TLCVariable child = variablesAsList.get(viewerIndex); viewer.replace(parent, viewerIndex, child); - if (child.getChildCount() > 0) { - viewer.setHasChildren(child, true); - } + viewer.setHasChildren(child, child.getChildCount() > 0); } } } else if (parent instanceof TLCVariable @@ -903,31 +918,23 @@ public class TLCErrorView extends ViewPart final TLCMultiVariableValue multiValue = (TLCMultiVariableValue) ((TLCVariable) parent).getValue(); final TLCVariableValue child = multiValue.asList().get(viewerIndex); viewer.replace(parent, viewerIndex, child); - if (child.getChildCount() > 0) { - viewer.setHasChildren(child, true); - } + viewer.setHasChildren(child, child.getChildCount() > 0); } else if (parent instanceof TLCVariable) { final TLCVariable variable = (TLCVariable) parent; final TLCVariableValue child = variable.getValue(); viewer.replace(parent, viewerIndex, child); - if (child.getChildCount() > 0) { - viewer.setChildCount(child, child.getChildCount()); - } + viewer.setChildCount(child, child.getChildCount()); } else if (parent instanceof TLCMultiVariableValue) { final TLCMultiVariableValue multiValue = (TLCMultiVariableValue) parent; final TLCVariableValue child = multiValue.asList().get(viewerIndex); viewer.replace(parent, viewerIndex, child); - if (child.getChildCount() > 0) { - viewer.setHasChildren(child, true); - } + viewer.setHasChildren(child, child.getChildCount() > 0); } else if (parent instanceof TLCVariableValue && ((TLCVariableValue) parent).getValue() instanceof TLCMultiVariableValue) { final TLCMultiVariableValue multiValue = (TLCMultiVariableValue) ((TLCVariableValue) parent).getValue(); final TLCVariableValue child = multiValue.asList().get(viewerIndex); viewer.replace(parent, viewerIndex, child); - if (child.getChildCount() > 0) { - viewer.setHasChildren(child, true); - } + viewer.setHasChildren(child, child.getChildCount() > 0); } else { throw new IllegalArgumentException(); } @@ -1140,13 +1147,17 @@ public class TLCErrorView extends ViewPart return null; } + private static final Map<String, Color> location2color = new ConcurrentHashMap<String, Color>(); + //TODO Convert to Toolbox preference once this features proves useful. + private static final boolean coloring = Boolean.getBoolean(TLCErrorView.class.getName() + ".coloring"); + /** * The following method sets the background color of a row or column of * the table. It highlights the entire row for an added or deleted item. * For a changed value, only the value is highlighted. */ private Color getBackground(Object element, int column) { - if (element instanceof TLCVariable) { + if (element instanceof TLCVariable) { final TLCVariable var = (TLCVariable) element; if (var.isChanged() && column == VALUE) { return TLCUIActivator.getDefault().getChangedColor(); @@ -1162,6 +1173,21 @@ public class TLCErrorView extends ViewPart } else if (value.isDeleted()) { return TLCUIActivator.getDefault().getDeletedColor(); } + } else if (coloring && element instanceof TLCState) { + // Assign a color to each location to make actions in the error + // viewer easier distinguishable. + final TLCState state = (TLCState) element; + Location moduleLocation = state.getModuleLocation(); + if (moduleLocation == null) { + return null; + } + Color c = location2color.get(moduleLocation.toString()); + if (c == null) { + int color = SWT.COLOR_WHITE + (2 * location2color.size()); + c = TLCUIActivator.getColor(color); + location2color.put(state.getModuleLocation().toString(), c); + } + return c; } return null; } @@ -1240,16 +1266,9 @@ public class TLCErrorView extends ViewPart return (TLCError) variableViewer.getInput(); } - /** - * Returns a handle on the underlying configuration file for which - * errors are being shown by this view. Can return null. - * - * @return - */ - public ILaunchConfiguration getCurrentConfigFileHandle() - { - return configFileHandle; - } + public Model getModel() { + return model; + } private class HelpAction extends Action { @@ -1306,4 +1325,8 @@ public class TLCErrorView extends ViewPart valueViewer.setDocument(EMPTY_DOCUMENT()); } } + + public void setOriginalTraceShown(boolean b) { + this.model.setOriginalTraceShown(b); + } } diff --git a/org.lamport.tla.toolbox.tool.tlc/plugin.xml b/org.lamport.tla.toolbox.tool.tlc/plugin.xml index fcc16bfd082b8edbfbff2f985c626f79246d5ef7..baeb3f54acafcb15284ec5901edfb385a373acb8 100644 --- a/org.lamport.tla.toolbox.tool.tlc/plugin.xml +++ b/org.lamport.tla.toolbox.tool.tlc/plugin.xml @@ -131,7 +131,7 @@ id="toolbox.propertyTester.MarkerTester" namespace="toolbox.property" properties="hasMarker" - type="org.eclipse.debug.core.ILaunchConfiguration"> + type="org.lamport.tla.toolbox.tool.tlc.model.Model"> </propertyTester> </extension> <extension @@ -162,6 +162,26 @@ <persistent value="true"> </persistent> + </extension> + <extension + point="org.eclipse.core.runtime.adapters"> + <factory + adaptableType="org.eclipse.debug.core.ILaunchConfiguration" + class="org.lamport.tla.toolbox.tool.tlc.model.TLCModelFactory"> + <adapter + type="org.lamport.tla.toolbox.tool.tlc.model.Model"> + </adapter> + </factory> + </extension> + <extension + point="org.eclipse.core.runtime.adapters"> + <factory + adaptableType="org.lamport.tla.toolbox.spec.Spec" + class="org.lamport.tla.toolbox.tool.tlc.model.TLCSpecFactory"> + <adapter + type="org.lamport.tla.toolbox.tool.tlc.model.TLCSpec"> + </adapter> + </factory> </extension> <!-- NCE definition diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/TLCSpecLifeCycleParticipant.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/TLCSpecLifeCycleParticipant.java index dbc690c84e14128442a3f5c2efe131580901aef2..26635ecfdcf6dcdb17250c0077923867bd94d1e4 100644 --- a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/TLCSpecLifeCycleParticipant.java +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/TLCSpecLifeCycleParticipant.java @@ -1,10 +1,11 @@ package org.lamport.tla.toolbox.tool.tlc; import org.eclipse.core.runtime.jobs.Job; +import org.lamport.tla.toolbox.spec.Spec; import org.lamport.tla.toolbox.tool.SpecEvent; import org.lamport.tla.toolbox.tool.SpecLifecycleParticipant; import org.lamport.tla.toolbox.tool.SpecRenameEvent; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; +import org.lamport.tla.toolbox.tool.tlc.model.TLCSpec; /** * React on spec operations with cancellation of the corresponding processes @@ -27,8 +28,8 @@ public class TLCSpecLifeCycleParticipant extends SpecLifecycleParticipant { // if a spec gets renamed, it corresponding models have to be // renamed to prevent models from becoming unusable - final String aNewName = ((SpecRenameEvent) event).getNewName(); - ModelHelper.realignModelNames(event.getSpec(), aNewName); + final TLCSpec tlcSpec = event.getSpec().getAdapter(TLCSpec.class); + tlcSpec.rename(((SpecRenameEvent) event).getNewSpec()); break; default: diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/expression/MarkerPropertyTester.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/expression/MarkerPropertyTester.java index 15b03db27aa430e6362622d6a839d72c05cdb1cb..aeafa81e902d5cb3d227bf668b987015d87a42b7 100644 --- a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/expression/MarkerPropertyTester.java +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/expression/MarkerPropertyTester.java @@ -5,8 +5,8 @@ import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.ILaunchConfiguration; import org.lamport.tla.toolbox.tool.tlc.TLCActivator; +import org.lamport.tla.toolbox.tool.tlc.model.Model; /** * Test if the marker exists @@ -36,13 +36,14 @@ public class MarkerPropertyTester extends PropertyTester attributeName = (String) args[1]; } - if (receiver != null && receiver instanceof ILaunchConfiguration) + if (receiver != null && receiver instanceof Model) { // safeguard against non-existent files. // This might e.g. happen if another handler's changes // modifies the current selection before this property // tester is executed - final IFile file = ((ILaunchConfiguration) receiver).getFile(); + final Model model = (Model) receiver; + final IFile file = model.getLaunchConfiguration().getFile(); if(!file.exists()) { return false; } @@ -92,7 +93,7 @@ public class MarkerPropertyTester extends PropertyTester } catch (CoreException e) { - TLCActivator.getDefault().logError("Error testing markers", e); + TLCActivator.logError("Error testing markers", e); } } } diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/job/DistributedTLCJob.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/job/DistributedTLCJob.java index 6168622bafb2b451eeb8b392988a140c9dd221ce..2f6e75b32fd9905e33f04fc52799c4efaee32da5 100644 --- a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/job/DistributedTLCJob.java +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/job/DistributedTLCJob.java @@ -26,7 +26,7 @@ public class DistributedTLCJob extends TLCProcessJob { WHITELIST.add("-nowarning"); WHITELIST_WITH_ARG.add("-checkpoint"); -// Temporarily removed due to http://bugzilla.tlaplus.net/show_bug.cgi?id=212 +// Temporarily removed due to Bug #212 in general/bugzilla/index.html // WHITELIST_WITH_ARG.add("-coverage"); WHITELIST_WITH_ARG.add("-fp"); WHITELIST_WITH_ARG.add("-recover"); diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/job/TLCInternalJob.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/job/TLCInternalJob.java index 643ec4e2ec0340e54f43cf9e48d539c75c45943b..8d2fe2e31cb2893b49b8daab36f156246d1e3e6f 100644 --- a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/job/TLCInternalJob.java +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/job/TLCInternalJob.java @@ -7,6 +7,7 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.ILaunch; import org.lamport.tla.toolbox.tool.tlc.TLCActivator; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.IProcessOutputSink; import org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener; import org.lamport.tla.toolbox.util.RCPNameToFileIStream; @@ -37,7 +38,8 @@ public class TLCInternalJob extends TLCJob // initialize the progress reporting variable reported = 0; - outputListener = new BroadcastStreamListener(modelName, IProcessOutputSink.TYPE_OUT); + final Model model = launch.getLaunchConfiguration().getAdapter(Model.class); + outputListener = new BroadcastStreamListener(model, IProcessOutputSink.TYPE_OUT); } protected IStatus run(IProgressMonitor monitor) diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/job/TLCJob.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/job/TLCJob.java index f8aa473b69389d12e8e6b4d44f40cc2ebbd430f6..4276011cb73b84d113cad3da9b0674a433d96c95 100644 --- a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/job/TLCJob.java +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/job/TLCJob.java @@ -1,11 +1,8 @@ package org.lamport.tla.toolbox.tool.tlc.job; import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; +import java.util.Arrays; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; import java.util.Vector; import org.eclipse.core.resources.IFile; @@ -26,6 +23,7 @@ import org.lamport.tla.toolbox.tool.tlc.TLCActivator; import org.lamport.tla.toolbox.tool.tlc.launch.IModelConfigurationConstants; import org.lamport.tla.toolbox.tool.tlc.launch.IModelConfigurationDefaults; import org.lamport.tla.toolbox.tool.tlc.launch.TraceExplorerDelegate; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.result.IResultPresenter; import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; import org.lamport.tla.toolbox.util.ResourceHelper; @@ -36,7 +34,6 @@ import tlc2.TLCGlobals; /** * Abstract TLC job * @author Simon Zambrovski - * @version $Id$ */ public abstract class TLCJob extends AbstractJob implements IModelConfigurationConstants, IModelConfigurationDefaults { @@ -119,7 +116,7 @@ public abstract class TLCJob extends AbstractJob implements IModelConfigurationC */ protected String[] constructProgramArguments() throws CoreException { - Map<String, String> arguments = new HashMap<String, String>(); + final List<String> arguments = new ArrayList<String>(); ILaunchConfiguration config = launch.getLaunchConfiguration(); // deadlock @@ -127,11 +124,12 @@ public abstract class TLCJob extends AbstractJob implements IModelConfigurationC IModelConfigurationDefaults.MODEL_CORRECTNESS_CHECK_DEADLOCK_DEFAULT); if (!checkDeadlock) /* "!" added by LL on 22 Aug 2009 */ { - arguments.put("-deadlock", null); + arguments.add("-deadlock"); } // adjust checkpointing - arguments.put("-checkpoint", String.valueOf(CHECKPOINT_INTERVAL)); + arguments.add("-checkpoint"); + arguments.add(String.valueOf(CHECKPOINT_INTERVAL)); boolean hasSpec = config.getAttribute(MODEL_BEHAVIOR_SPEC_TYPE, MODEL_BEHAVIOR_TYPE_DEFAULT) != IModelConfigurationDefaults.MODEL_BEHAVIOR_TYPE_NO_SPEC; @@ -149,18 +147,20 @@ public abstract class TLCJob extends AbstractJob implements IModelConfigurationC // for depth-first run, look for the depth int dfidDepth = config.getAttribute(IModelConfigurationConstants.LAUNCH_DFID_DEPTH, IModelConfigurationDefaults.LAUNCH_DFID_DEPTH_DEFAULT); - arguments.put("-dfid", String.valueOf(dfidDepth)); + arguments.add("-dfid"); + arguments.add(String.valueOf(dfidDepth)); } } else { - arguments.put("-simulate", null); + arguments.add("-simulate"); // look for advanced simulation parameters int traceDepth = config.getAttribute(IModelConfigurationConstants.LAUNCH_SIMU_DEPTH, IModelConfigurationDefaults.LAUNCH_SIMU_DEPTH_DEFAULT); if (traceDepth != IModelConfigurationDefaults.LAUNCH_SIMU_DEPTH_DEFAULT) { - arguments.put("-depth", String.valueOf(traceDepth)); + arguments.add("-depth"); + arguments.add(String.valueOf(traceDepth)); } int aril = config.getAttribute(IModelConfigurationConstants.LAUNCH_SIMU_ARIL, @@ -169,11 +169,13 @@ public abstract class TLCJob extends AbstractJob implements IModelConfigurationC IModelConfigurationDefaults.LAUNCH_SIMU_SEED_DEFAULT); if (aril != IModelConfigurationDefaults.LAUNCH_SIMU_ARIL_DEFAULT) { - arguments.put("-aril", String.valueOf(aril)); + arguments.add("-aril"); + arguments.add(String.valueOf(aril)); } if (seed != IModelConfigurationDefaults.LAUNCH_SIMU_SEED_DEFAULT) { - arguments.put("-seed", String.valueOf(seed)); + arguments.add("-seed"); + arguments.add(String.valueOf(seed)); } } } @@ -185,10 +187,11 @@ public abstract class TLCJob extends AbstractJob implements IModelConfigurationC IModelConfigurationDefaults.LAUNCH_RECOVER_DEFAULT); if (recover) { - IResource[] checkpoints = ModelHelper.getCheckpoints(config, false); + IResource[] checkpoints = config.getAdapter(Model.class).getCheckpoints(false); if (checkpoints.length > 0) { - arguments.put("-recover", checkpoints[0].getName()); + arguments.add("-recover"); + arguments.add(checkpoints[0].getName()); } } } @@ -196,62 +199,62 @@ public abstract class TLCJob extends AbstractJob implements IModelConfigurationC // fpBits int fpBits = launch.getLaunchConfiguration().getAttribute(LAUNCH_FPBITS, -1); if(fpBits >= 0) { - arguments.put("-fpbits", String.valueOf(fpBits)); + arguments.add("-fpbits"); + arguments.add(String.valueOf(fpBits)); } // fp seed offset (decrease by one to map from [1, 64] interval to [0, 63] array address final int fpSeedOffset = launch.getLaunchConfiguration().getAttribute(LAUNCH_FP_INDEX, LAUNCH_FP_INDEX_DEFAULT); - arguments.put("-fp", String.valueOf(fpSeedOffset - 1)); + arguments.add("-fp"); + arguments.add(String.valueOf(fpSeedOffset - 1)); // add maxSetSize argument if not equal to the default // code added by LL on 9 Mar 2012 final int maxSetSize = launch.getLaunchConfiguration().getAttribute( LAUNCH_MAXSETSIZE, TLCGlobals.setBound); if (maxSetSize != TLCGlobals.setBound) { - arguments.put("-maxSetSize", String.valueOf(maxSetSize)); + arguments.add("-maxSetSize"); + arguments.add(String.valueOf(maxSetSize)); } - arguments.put("-config", cfgFile.getName()); // configuration file + arguments.add("-config"); + arguments.add(cfgFile.getName()); // configuration file // Should not add a coverage option only if TLC is being run // without a spec. This change added 10 Sep 2009 by LL & DR if (config.getAttribute(MODEL_BEHAVIOR_SPEC_TYPE, MODEL_BEHAVIOR_TYPE_DEFAULT) != MODEL_BEHAVIOR_TYPE_NO_SPEC) { // coverage 0.1 hour - arguments.put("-coverage", String.valueOf(COVERAGE_INTERVAL)); + arguments.add("-coverage"); + arguments.add(String.valueOf(COVERAGE_INTERVAL)); } // number of workers - arguments.put("-workers", String.valueOf(workers)); + arguments.add("-workers"); + arguments.add(String.valueOf(workers)); // debugging only //arguments.put("-debug", null); // run in tool mode - arguments.put("-tool", null); + arguments.add("-tool"); // running in directory - arguments.put("-metadir", launchDir.getLocation().toOSString()); + arguments.add("-metadir"); + arguments.add(launchDir.getLocation().toOSString()); // name of the module to check - arguments.put(ResourceHelper.getModuleName(rootModule), null); + arguments.add(ResourceHelper.getModuleName(rootModule)); // Replace any of the above parameters if explicitly given as extra TLC parameters final ILaunchConfiguration launchConfig = launch.getLaunchConfiguration(); final String tlcParameters = launchConfig.getAttribute(LAUNCH_TLC_PARAMETERS, (String) null); - arguments.putAll(parseTLCParameters(tlcParameters)); - - // Convert Map<String, String> of arguments to String[] - final List<String> res = new ArrayList<String>(arguments.size()); - final Iterator<Entry<String, String>> iterator = arguments.entrySet().iterator(); - while(iterator.hasNext()) { - Entry<String, String> elem = iterator.next(); - res.add(elem.getKey()); - if (elem.getValue() != null) { - res.add(elem.getValue()); - } + if (tlcParameters != null && !"".equals(tlcParameters.trim())) { + final String[] split = tlcParameters.trim().split("\\s+"); + arguments.addAll(Arrays.asList(split)); } - return (String[]) res.toArray(new String[arguments.size()]); + + return (String[]) arguments.toArray(new String[arguments.size()]); } /** @@ -267,7 +270,8 @@ public abstract class TLCJob extends AbstractJob implements IModelConfigurationC IResultPresenter[] registeredResultPresenters = getRegisteredResultPresenters(); for (int i = 0; i < registeredResultPresenters.length; i++) { - registeredResultPresenters[i].showResults(launch); + Model model = launch.getLaunchConfiguration().getAdapter(Model.class); + registeredResultPresenters[i].showResults(model); } } }; @@ -306,7 +310,9 @@ public abstract class TLCJob extends AbstractJob implements IModelConfigurationC { if (family != null) { - if (family instanceof ILaunchConfiguration) + if (family instanceof Model) { + return (this.launch.getLaunchConfiguration().getAdapter(Model.class).equals(family)); + } else if (family instanceof ILaunchConfiguration) { return (this.launch.getLaunchConfiguration().contentsEqual((ILaunchConfiguration) family)); } else if (family instanceof Spec) @@ -339,42 +345,9 @@ public abstract class TLCJob extends AbstractJob implements IModelConfigurationC validExtensions.add(extension); } catch (CoreException e) { - TLCActivator.getDefault().logError("Error instatiating the IResultPresenter extension", e); + TLCActivator.logError("Error instatiating the IResultPresenter extension", e); } } return validExtensions.toArray(new IResultPresenter[validExtensions.size()]); } - - /** - * Accepts a list like "-checkpoint 0 -workers 8 -tool" and creates a Map of - * "-checkpoint=0, -workers=8, -tool=null".<br> - * It does _not_ handle single non-command parameters like the name of the - * model file! This should generally be passed by the toolbox automatically. - * - * @param tlcParameters - * @return - */ - private Map<String, String> parseTLCParameters(final String tlcParameters) { - if (tlcParameters == null || "".equals(tlcParameters)) { - return new HashMap<String, String>(); - } else { - // use dash as a delimiter (prepend it later) - final String[] strings = tlcParameters.trim().split("-"); - - final Map<String, String> res = new HashMap<String, String>(strings.length); - - for (int i = 0; i < strings.length; i++) { - if (!"".equals(strings[i])) { - String[] split = strings[i].split(" "); - if (split.length == 2) { - res.put("-" + split[0].trim(), split[1].trim()); - } else { - res.put("-" + split[0].trim(), null); - } - } - } - - return res; - } - } } \ No newline at end of file diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/job/TLCJobFactory.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/job/TLCJobFactory.java index ae3cd10b530b1a185093bffe4d378be4071c0212..694602ca450376c7543e897454cf82e94efb2bef 100644 --- a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/job/TLCJobFactory.java +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/job/TLCJobFactory.java @@ -5,10 +5,14 @@ import java.util.Properties; import org.eclipse.core.runtime.jobs.Job; +import util.MailSender; + public interface TLCJobFactory { final String MAIN_CLASS = "mainClass"; - final String MAIL_ADDRESS = "result.mail.address"; + final String MAIL_ADDRESS = MailSender.MAIL_ADDRESS; + final String SPEC_NAME = MailSender.SPEC_NAME; + final String MODEL_NAME = MailSender.MODEL_NAME; Job getTLCJob(String aName, File aModelFolder, int numberOfWorkers, Properties props, String string); } diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/job/TLCProcessJob.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/job/TLCProcessJob.java index 4a441bb70783f34a954666688c12a08fd66615d6..6f53bdbddfc3004d5bb6f4808502519a9dde0ed5 100644 --- a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/job/TLCProcessJob.java +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/job/TLCProcessJob.java @@ -24,6 +24,7 @@ import org.lamport.tla.toolbox.spec.Spec; import org.lamport.tla.toolbox.tool.ToolboxHandle; import org.lamport.tla.toolbox.tool.tlc.TLCActivator; import org.lamport.tla.toolbox.tool.tlc.launch.TraceExplorerDelegate; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.IProcessOutputSink; import org.lamport.tla.toolbox.tool.tlc.output.internal.BroadcastStreamListener; import org.lamport.tla.toolbox.util.ResourceHelper; @@ -158,7 +159,7 @@ public class TLCProcessJob extends TLCJob // register the broadcasting listener - String modelFileName = launch.getLaunchConfiguration().getFile().getName(); + final Model model = launch.getLaunchConfiguration().getAdapter(Model.class); /* * If TLC is being run for model checking then the stream kind passed to @@ -174,7 +175,7 @@ public class TLCProcessJob extends TLCJob kind = IProcessOutputSink.TYPE_TRACE_EXPLORE; } - listener = new BroadcastStreamListener(modelFileName, kind); + listener = new BroadcastStreamListener(model, kind); process.getStreamsProxy().getOutputStreamMonitor().addListener(listener); process.getStreamsProxy().getErrorStreamMonitor().addListener(listener); @@ -204,6 +205,29 @@ public class TLCProcessJob extends TLCJob } } + // Wait for the process to terminate. Otherwise, it + // opens the door to a race condition in + // org.lamport.tla.toolbox.tool.tlc.model.Model such + // that isRunning returns true querying the Launch (which + // is directly connected to the Process instance), even + // after the outer TLCProcessJob's JobListener + // ...launch.TLCModelLaunchDelegate.TLCJobChangeListener + // has setRunning(false). + int i = 0; + while (!process.isTerminated() || i++ >= 10) { + try { + Thread.sleep(100L); + } catch (InterruptedException e) { + e.printStackTrace(); + return new Status(IStatus.ERROR, TLCActivator.PLUGIN_ID, + "Error waiting for process termianation.", e); + } + } + if (!process.isTerminated()) { + TLCActivator.logInfo( + "TLC process failed to terminate within expected time window. Expect Toolbox to show an incorrect model state."); + } + // abnormal termination tlcEndTime = System.currentTimeMillis(); return Status.CANCEL_STATUS; @@ -344,4 +368,17 @@ public class TLCProcessJob extends TLCJob return tlcEndTime; } + /** + * @return The processee's exit/return value or -1 if unknown. + */ + public int getExitValue() { + if (this.process != null) { + try { + return this.process.getExitValue(); + } catch (DebugException shouldNotHappen) { + shouldNotHappen.printStackTrace(); + } + } + return -1; + } } diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/launch/IConfigurationConstants.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/launch/IConfigurationConstants.java index 30fb15150f403fa6ecf29bf14c3744213dd59656..0090fad7b5c03f41843f3677a6c5697b238b5527 100644 --- a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/launch/IConfigurationConstants.java +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/launch/IConfigurationConstants.java @@ -45,6 +45,10 @@ public interface IConfigurationConstants * Distributed FPSets */ public static final String LAUNCH_DISTRIBUTED_FPSET_COUNT = "distributedFPSetCount"; + /** + * Distributed Nodes count + */ + public static final String LAUNCH_DISTRIBUTED_NODES_COUNT = "distributedNodesCount"; /** * Network interface under which TLC server process will listen (java.rmi.server.hostname) */ diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/launch/IConfigurationDefaults.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/launch/IConfigurationDefaults.java index 5b9651cb7f3066be284412f946584e7d765340cc..53832731ef1d7d24ea5127b4bee70d5a6e7b5566 100644 --- a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/launch/IConfigurationDefaults.java +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/launch/IConfigurationDefaults.java @@ -37,6 +37,11 @@ public interface IConfigurationDefaults */ public static final int LAUNCH_DISTRIBUTED_FPSET_COUNT_DEFAULT = 0; + /** + * Distributed nodes default count + */ + public static final int LAUNCH_DISTRIBUTED_NODES_COUNT_DEFAULT = 1; + /** * Additional (e.g. RMI specific) VM args for distributed model checker */ diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/launch/TLCModelLaunchDelegate.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/launch/TLCModelLaunchDelegate.java index 7ece962398f7d8f8b84f15a977d9a479fc4c2cf8..db1493dfc1f3b0cd2d5582f802a3109bbd56d2e3 100644 --- a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/launch/TLCModelLaunchDelegate.java +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/launch/TLCModelLaunchDelegate.java @@ -31,8 +31,11 @@ import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.core.runtime.jobs.MultiRule; +import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.model.IProcess; +import org.eclipse.debug.core.model.IStreamsProxy; import org.eclipse.debug.core.model.LaunchConfigurationDelegate; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.text.FindReplaceDocumentAdapter; @@ -49,9 +52,10 @@ import org.lamport.tla.toolbox.tool.tlc.job.DistributedTLCJob; import org.lamport.tla.toolbox.tool.tlc.job.ITLCJobStatus; import org.lamport.tla.toolbox.tool.tlc.job.TLCJobFactory; import org.lamport.tla.toolbox.tool.tlc.job.TLCProcessJob; +import org.lamport.tla.toolbox.tool.tlc.model.Model; +import org.lamport.tla.toolbox.tool.tlc.model.ModelWriter; import org.lamport.tla.toolbox.tool.tlc.model.TypedSet; import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; -import org.lamport.tla.toolbox.tool.tlc.util.ModelWriter; import org.lamport.tla.toolbox.util.AdapterFactory; import org.lamport.tla.toolbox.util.ResourceHelper; import org.lamport.tla.toolbox.util.TLAMarkerInformationHolder; @@ -76,7 +80,6 @@ import tlc2.TLCGlobals; * Some of them run on any launch type, others only in the modelcheck mode * * @author Simon Zambrovski - * @version $Id$ * Modified on 10 Sep 2009 to add No Spec TLC launch option. */ @SuppressWarnings("restriction") @@ -130,6 +133,27 @@ public class TLCModelLaunchDelegate extends LaunchConfigurationDelegate implemen { return false; } + + // check and lock the model + final Model model = config.getAdapter(Model.class); + synchronized (config) + { + // read out the running attribute + if (/*model.isRunning() || */model.isLocked()) + { + // previous run has not been completed + // exit + throw new CoreException( + new Status( + IStatus.ERROR, + TLCActivator.PLUGIN_ID, + "The running attribute for " + + modelName + + " has been set to true or that model is locked. " + + "Another TLC is possible running on the same model, has been terminated non-gracefully " + + "or you tried to run TLC on a locked model. Running TLC on a locked model is not possible.")); + } + } try { @@ -169,6 +193,8 @@ public class TLCModelLaunchDelegate extends LaunchConfigurationDelegate implemen public boolean buildForLaunch(ILaunchConfiguration config, String mode, IProgressMonitor monitor) throws CoreException { + final Model model = config.getAdapter(Model.class); + // generate the model here int STEP = 100; @@ -219,7 +245,7 @@ public class TLCModelLaunchDelegate extends LaunchConfigurationDelegate implemen } else { final boolean recover = config.getAttribute(LAUNCH_RECOVER, LAUNCH_RECOVER_DEFAULT); - final IResource[] checkpoints = ModelHelper.getCheckpoints(config, false); + final IResource[] checkpoints = config.getAdapter(Model.class).getCheckpoints(false); ISchedulingRule deleteRule = ResourceHelper.getDeleteRule(members); @@ -292,7 +318,10 @@ public class TLCModelLaunchDelegate extends LaunchConfigurationDelegate implemen throw new CoreException(new Status(IStatus.ERROR, TLCActivator.PLUGIN_ID, "Error copying " + specRootFilename + " into " + targetFolderPath.toOSString())); } - + + // Copy the spec's root file userModule override if any. + copyUserModuleOverride(monitor, 2, project, targetFolderPath, specRootFile); + // get the list of dependent modules List extendedModules = ToolboxHandle.getExtendedModules(specRootFile.getName()); @@ -308,10 +337,11 @@ public class TLCModelLaunchDelegate extends LaunchConfigurationDelegate implemen moduleFile = ResourceHelper.getLinkedFile(project, module, false); if (moduleFile != null) { - try { - moduleFile.copy(targetFolderPath.append(moduleFile.getProjectRelativePath()), IResource.DERIVED - | IResource.FORCE, new SubProgressMonitor(monitor, STEP / extendedModules.size())); - } catch (ResourceException re) { + try { + moduleFile.copy(targetFolderPath.append(moduleFile.getProjectRelativePath()), IResource.DERIVED + | IResource.FORCE, new SubProgressMonitor(monitor, STEP / extendedModules.size())); + copyUserModuleOverride(monitor, STEP / extendedModules.size(), project, targetFolderPath, moduleFile); + } catch (ResourceException re) { // Trying to copy the file to the targetFolderPath produces an exception. // The most common cause is a dangling linked file in the .project metadata // of the Toolbox project. Usually, a dangling link is the effect of copying @@ -443,8 +473,8 @@ public class TLCModelLaunchDelegate extends LaunchConfigurationDelegate implemen } // calculator expression - writer.addConstantExpressionEvaluation(config.getAttribute(MODEL_EXPRESSION_EVAL, EMPTY_STRING), - MODEL_EXPRESSION_EVAL); + + writer.addConstantExpressionEvaluation(model.getEvalExpression(), Model.MODEL_EXPRESSION_EVAL); switch (specType) { case MODEL_BEHAVIOR_TYPE_NO_SPEC: @@ -513,6 +543,28 @@ public class TLCModelLaunchDelegate extends LaunchConfigurationDelegate implemen return false; } + // Copy userModule overrides (see tlc2.tool.Spec.processSpec(SpecObj)) if + // any. An override is an Java implementation of a user defined module. By + // convention, the Java class file name has to be aligned with the module + // name (i.e. Bits.tla -> Bits.class). For completeness, also copy the + // Java source file from which the user manually compiled the class file. + private void copyUserModuleOverride(IProgressMonitor monitor, int ticks, IProject project, IPath targetFolderPath, + IFile tlaFile) throws CoreException { + final IFile[] userModuleOverrides = ResourceHelper.getModuleOverrides(project, tlaFile); + for (IFile userModuleOverride : userModuleOverrides) { + try { + userModuleOverride.copy(targetFolderPath.append(userModuleOverride.getProjectRelativePath()), + IResource.DERIVED | IResource.FORCE, new SubProgressMonitor(monitor, ticks)); + } catch (CoreException e) { + // If the file could not be copied, the link is obviously stale + // and has to be removed to not create any problems in the + // future. A link gets stale if e.g. the user removed the module + // override manually in the file system. + userModuleOverride.delete(true, monitor); + } + } + } + /** * Launch the module parser on the root module and handle the errors * @@ -525,6 +577,8 @@ public class TLCModelLaunchDelegate extends LaunchConfigurationDelegate implemen { monitor.beginTask("Verifying model files", 4); + final Model model = configuration.getAdapter(Model.class); + IProject project = ResourceHelper.getProject(specName); IFolder launchDir = project.getFolder(modelName); IFile rootModule = launchDir.getFile(ModelHelper.FILE_TLA); @@ -538,7 +592,8 @@ public class TLCModelLaunchDelegate extends LaunchConfigurationDelegate implemen monitor.worked(1); // remove existing markers - ModelHelper.removeModelProblemMarkers(configuration, ModelHelper.TLC_MODEL_ERROR_MARKER_SANY); + + model.removeMarkers(Model.TLC_MODEL_ERROR_MARKER_SANY); monitor.worked(1); if (!detectedErrors.isEmpty()) @@ -574,12 +629,11 @@ public class TLCModelLaunchDelegate extends LaunchConfigurationDelegate implemen // find the error cause and install the error marker on the corresponding // field - Hashtable props = ModelHelper.createMarkerDescription(configuration, document, searchAdapter, + Hashtable props = ModelHelper.createMarkerDescription(document, searchAdapter, message, severity, coordinates); if (props != null) { - ModelHelper.installModelProblemMarker(configuration.getFile(), props, - ModelHelper.TLC_MODEL_ERROR_MARKER_SANY); + model.setMarker(props, Model.TLC_MODEL_ERROR_MARKER_SANY); } } else @@ -649,35 +703,13 @@ public class TLCModelLaunchDelegate extends LaunchConfigurationDelegate implemen "Error accessing the spec project " + specName)); } - // check and lock the model - synchronized (config) - { - // read out the running attribute - if (ModelHelper.isModelRunning(config) || ModelHelper.isModelLocked(config)) - { - // previous run has not been completed - // exit - throw new CoreException( - new Status( - IStatus.ERROR, - TLCActivator.PLUGIN_ID, - "The running attribute for " - + modelName - + " has been set to true or that model is locked." - + "Another TLC is possible running on the same model, or has been terminated non-gracefully" - + "or the user has tried to run TLC on a locked model. Running TLC on a locked model should not be possible.")); - } else - { - - // setup the running flag - // from this point any termination of the run must reset the - // flag - ModelHelper.setModelRunning(config, true); - } - } + // setup the running flag + // from this point any termination of the run must reset the + // flag + config.getAdapter(Model.class).setRunning(true); // set the model to have the original trace shown - ModelHelper.setOriginalTraceShown(config, true); + config.getAdapter(Model.class).setOriginalTraceShown(true); // number of workers int numberOfWorkers = config.getAttribute(LAUNCH_NUMBER_OF_WORKERS, LAUNCH_NUMBER_OF_WORKERS_DEFAULT); @@ -710,6 +742,7 @@ public class TLCModelLaunchDelegate extends LaunchConfigurationDelegate implemen job = new DistributedTLCJob(specName, modelName, launch, numberOfWorkers); job.setRule(mutexRule); } else { + numberOfWorkers = config.getAttribute(LAUNCH_DISTRIBUTED_NODES_COUNT, LAUNCH_DISTRIBUTED_NODES_COUNT_DEFAULT); //final IProject iproject = ResourceHelper.getProject(specName); final IFolder launchDir = project.getFolder(modelName); final File file = launchDir.getRawLocation().makeAbsolute().toFile(); @@ -723,10 +756,20 @@ public class TLCModelLaunchDelegate extends LaunchConfigurationDelegate implemen final IConfigurationElement[] elements = registry .getConfigurationElementsFor("org.lamport.tla.toolx.tlc.job"); for (IConfigurationElement element : elements) { + final DummyProcess process = new DummyProcess(launch); + launch.addProcess(process); final TLCJobFactory factory = (TLCJobFactory) element .createExecutableExtension("clazz"); final Properties props = new Properties(); props.put(TLCJobFactory.MAIN_CLASS, tlc2.TLC.class.getName()); + // Add model and spec name to properties to make the model + // checker run easily identifiable in the result email. + final Model model = config.getAdapter(Model.class); + props.put(TLCJobFactory.MODEL_NAME, model.getName()); + props.put(TLCJobFactory.SPEC_NAME, model.getSpec().getName()); + if (numberOfWorkers > 1) { + props.put(TLCJobFactory.MAIN_CLASS, tlc2.tool.distributed.TLCServer.class.getName()); + } props.put(TLCJobFactory.MAIL_ADDRESS, config.getAttribute( LAUNCH_DISTRIBUTED_RESULT_MAIL_ADDRESS, "tlc@localhost")); @@ -756,7 +799,7 @@ public class TLCModelLaunchDelegate extends LaunchConfigurationDelegate implemen } job = factory.getTLCJob(cloud, file, numberOfWorkers, props, tlcParams.toString()); - job.addJobChangeListener(new WithStatusJobChangeListener(config)); + job.addJobChangeListener(new WithStatusJobChangeListener(process, config.getAdapter(Model.class))); break; } // Notify the user that something went wrong and ask him to report it. This code path @@ -787,32 +830,89 @@ public class TLCModelLaunchDelegate extends LaunchConfigurationDelegate implemen job.setUser(true); // setup the job change listener - TLCJobChangeListener tlcJobListener = new TLCJobChangeListener(config); + TLCJobChangeListener tlcJobListener = new TLCJobChangeListener(config.getAdapter(Model.class)); job.addJobChangeListener(tlcJobListener); job.schedule(); } + + // A DummyProcess instance has to be attached to the corresponding ILaunch + // when the Job launched neither creates an IProcess nor IDebugTarget. In + // this case the call to ILaunch#isTerminated will always evaluate to false + // regardless of the real job's state. + // Remember to call DummyProcess#setTerminated upon completion of the Job + // with e.g. a IJobChangeListener. + class DummyProcess implements IProcess { + private final ILaunch launch; + private boolean termiated = false; + + public DummyProcess(ILaunch aLaunch) { + this.launch = aLaunch; + } + + public void setTerminated() { + this.termiated = true; + } + + public void terminate() throws DebugException { + } + + public boolean isTerminated() { + return termiated; + } + + public boolean canTerminate() { + return !termiated; + } + + public <T> T getAdapter(Class<T> adapter) { + return null; + } + + public String getAttribute(String key) { + return null; + } + + public void setAttribute(String key, String value) { + } + + public IStreamsProxy getStreamsProxy() { + return null; + } + + public ILaunch getLaunch() { + return launch; + } + + public String getLabel() { + return getClass().getSimpleName(); + } + + public int getExitValue() throws DebugException { + return 0; + } + } // This opens up a dialog at the end of the job showing the status message class WithStatusJobChangeListener extends SimpleJobChangeListener { - private final ILaunchConfiguration config; + private final Model model; + private final DummyProcess process; - public WithStatusJobChangeListener(ILaunchConfiguration config) { - this.config = config; + public WithStatusJobChangeListener(DummyProcess process, Model model) { + this.process = process; + this.model = model; } public void done(IJobChangeEvent event) { super.done(event); + // TLC models seem to require some clean-up - try { - ModelHelper.setModelLocked(config, false); - ModelHelper.setModelRunning(config, false); - ModelHelper.recoverModel(config); - } catch (CoreException doesNotHappen) { - doesNotHappen.printStackTrace(); - // Not supposed to happen - } + model.setLocked(false); + model.setRunning(false); + model.recover(); + + process.setTerminated(); final IStatus status = event.getJob().getResult(); final String message = status.getMessage(); @@ -847,89 +947,86 @@ public class TLCModelLaunchDelegate extends LaunchConfigurationDelegate implemen */ class TLCJobChangeListener extends SimpleJobChangeListener { - private ILaunchConfiguration config; + private Model model; /** * Constructs the change listener - * @param config the config to modify after the job completion + * @param model the config to modify after the job completion */ - public TLCJobChangeListener(ILaunchConfiguration config) + public TLCJobChangeListener(Model model) { - this.config = config; + this.model = model; } public void done(IJobChangeEvent event) { super.done(event); - try - { - /* - * After the job has completed, new check points - * may have been created in the file system but - * not yet recognized by the eclipse resource - * framework. The following method - * is called with the flag to refresh. This synch's - * the resource framework with the new checkpoints (if any). - * - * This refresh operation is wrapped in a job. The following - * explains why. To read about jobs in general, check out: - * http://www.eclipse.org/articles/Article-Concurrency/jobs-api.html. - * - * The refresh operation is a long running job. This means - * that it cannot be run within the running code of another - * job whose scheduling rule does not encompass the scheduling rule - * of the refresh operation. This method (done()) seems to be - * called during the running of the TLC job. Therefore, simply - * calling ModelHelper.getCheckpoints(config, true) results - * in an exception because getCheckpoints calls the refresh - * operation which has a scheduling rule that is not included - * by the TLC job scheduling rule. - * - * To solve this problem, we wrap the call to getCheckpoints() - * in another job, set the scheduling rule to be a scheduling rule - * for refreshing the model folder, and schedule that wrapping job - * to be run later. - */ - IProject project = ResourceHelper.getProject(specName); - IFolder modelFolder = project.getFolder(modelName); - WorkspaceJob refreshJob = new WorkspaceJob("") { - - public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException - { - ModelHelper.getCheckpoints(config, true); - return Status.OK_STATUS; - } - }; - refreshJob.setRule(ResourcesPlugin.getWorkspace().getRuleFactory().refreshRule(modelFolder)); - refreshJob.schedule(); - - // make the model modification in order to make it runnable again - if (event.getJob() instanceof TLCProcessJob) { - Assert.isTrue(event.getJob() instanceof TLCProcessJob); - Assert.isNotNull(event.getResult()); - TLCProcessJob tlcJob = (TLCProcessJob) event.getJob(); - if (event.getResult().isOK()) - { - int autoLockTime = config.getAttribute(LAUNCH_AUTO_LOCK_MODEL_TIME, - IModelConfigurationDefaults.MODEL_AUTO_LOCK_TIME_DEFAULT); - // auto lock time is in minutes, getTLCStartTime() and getTLCEndTime() - // are in milliseconds - if (tlcJob.getTlcEndTime() - tlcJob.getTlcStartTime() > autoLockTime * 60 * 1000) - { - // length of job execution exceeded a certain length of time - // should lock - ModelHelper.setModelLocked(config, true); - } - } - } + /* + * After the job has completed, new check points + * may have been created in the file system but + * not yet recognized by the eclipse resource + * framework. The following method + * is called with the flag to refresh. This synch's + * the resource framework with the new checkpoints (if any). + * + * This refresh operation is wrapped in a job. The following + * explains why. To read about jobs in general, check out: + * http://www.eclipse.org/articles/Article-Concurrency/jobs-api.html. + * + * The refresh operation is a long running job. This means + * that it cannot be run within the running code of another + * job whose scheduling rule does not encompass the scheduling rule + * of the refresh operation. This method (done()) seems to be + * called during the running of the TLC job. Therefore, simply + * calling ModelHelper.getCheckpoints(config, true) results + * in an exception because getCheckpoints calls the refresh + * operation which has a scheduling rule that is not included + * by the TLC job scheduling rule. + * + * To solve this problem, we wrap the call to getCheckpoints() + * in another job, set the scheduling rule to be a scheduling rule + * for refreshing the model folder, and schedule that wrapping job + * to be run later. + */ + IProject project = ResourceHelper.getProject(specName); + IFolder modelFolder = project.getFolder(modelName); + WorkspaceJob refreshJob = new WorkspaceJob("") { - ModelHelper.setModelRunning(config, false); - } catch (CoreException e) - { - TLCActivator.logError("Error setting lock and running markers on the model", e); + public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException + { + model.getCheckpoints(true); + return Status.OK_STATUS; + } + }; + refreshJob.setRule(ResourcesPlugin.getWorkspace().getRuleFactory().refreshRule(modelFolder)); + refreshJob.schedule(); + + // make the model modification in order to make it runnable again + if (event.getJob() instanceof TLCProcessJob) { + Assert.isTrue(event.getJob() instanceof TLCProcessJob); + Assert.isNotNull(event.getResult()); + TLCProcessJob tlcJob = (TLCProcessJob) event.getJob(); + if (event.getResult().isOK()) + { + int autoLockTime = model.getAutoLockTime(); + // auto lock time is in minutes, getTLCStartTime() and getTLCEndTime() + // are in milliseconds + if (tlcJob.getTlcEndTime() - tlcJob.getTlcStartTime() > autoLockTime * 60 * 1000) + { + // length of job execution exceeded a certain length of time + // should lock + model.setLocked(true); + } + } + if (!Status.CANCEL_STATUS.equals(event.getJob().getResult()) && tlcJob.getExitValue() > 0) { + // if TLC crashed with exit value > 0 and the user did *not* + // click cancel, mark the job as crashed. + model.setStale(); + } } - } + model.setRunning(false); + } } /** diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/launch/TraceExplorerDelegate.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/launch/TraceExplorerDelegate.java index 7da30e408b0f438d73ed5317af5adcc2661fc95a..a355826768aa070d7ca77542d4d21c94e9d65710 100644 --- a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/launch/TraceExplorerDelegate.java +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/launch/TraceExplorerDelegate.java @@ -58,10 +58,11 @@ import org.lamport.tla.toolbox.tool.tlc.job.TLCJob; import org.lamport.tla.toolbox.tool.tlc.job.TLCProcessJob; import org.lamport.tla.toolbox.tool.tlc.job.TraceExplorerJob; import org.lamport.tla.toolbox.tool.tlc.model.Assignment; +import org.lamport.tla.toolbox.tool.tlc.model.Model; +import org.lamport.tla.toolbox.tool.tlc.model.ModelWriter; import org.lamport.tla.toolbox.tool.tlc.model.TypedSet; import org.lamport.tla.toolbox.tool.tlc.traceexplorer.SimpleTLCState; import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; -import org.lamport.tla.toolbox.tool.tlc.util.ModelWriter; import org.lamport.tla.toolbox.util.ResourceHelper; import org.lamport.tla.toolbox.util.TLAMarkerInformationHolder; import org.lamport.tla.toolbox.util.UIHelper; @@ -261,12 +262,13 @@ public class TraceExplorerDelegate extends TLCModelLaunchDelegate implements ILa public boolean buildForLaunch(ILaunchConfiguration config, String mode, IProgressMonitor monitor) throws CoreException { + final Model model = config.getAdapter(Model.class); + final IProject project = model.getSpec().getProject(); - int STEP = 100; + int STEP = 100; // retrieve the project containing the specification - IProject project = ResourceHelper.getProject(specName); - IFolder modelFolder = project.getFolder(config.getAttribute(MODEL_NAME, EMPTY_STRING)); + final IFolder modelFolder = model.getFolder(); if (!modelFolder.exists()) { throw new CoreException(new Status(IStatus.ERROR, TLCActivator.PLUGIN_ID, @@ -288,7 +290,7 @@ public class TraceExplorerDelegate extends TLCModelLaunchDelegate implements ILa * the model is not locked. Before copying, the previous spec * files must be deleted. */ - if (!ModelHelper.isModelLocked(config)) + if (!model.isLocked()) { /****************************************************************** @@ -307,7 +309,7 @@ public class TraceExplorerDelegate extends TLCModelLaunchDelegate implements ILa // This ModelHelper method should return an array of // size one because there should only be one checkpoint // folder. - final IResource[] checkpoints = ModelHelper.getCheckpoints(config, false); + final IResource[] checkpoints = model.getCheckpoints(false); ISchedulingRule deleteRule = ResourceHelper.getDeleteRule(members); @@ -328,7 +330,16 @@ public class TraceExplorerDelegate extends TLCModelLaunchDelegate implements ILa || members[i].getName().equals(ModelHelper.FILE_CFG) || members[i].getName().equals(ModelHelper.FILE_TLA) || members[i].getName().equals(ModelHelper.FILE_OUT) - || members[i].getName().equals(ModelHelper.TE_TRACE_SOURCE)) + || members[i].getName().equals(ModelHelper.TE_TRACE_SOURCE) + // Iff the model has been run with a module + // override, then there is a .class (and + // optionally a .java) file in the folder. + // We must not delete the .class file. + // The TraceExplorer won't work unless + // the module overrides also come with a + // pure TLA+ implementation. + || members[i].getName().endsWith(".class") + || members[i].getName().endsWith(".java")) { // We don't want to delete the checkpoints folder // or any of the MC files or the MC_TE.out file. @@ -404,7 +415,7 @@ public class TraceExplorerDelegate extends TLCModelLaunchDelegate implements ILa // retrieve the trace produced by running the model checker on the // config // trace = TLCErrorTraceRegistry.getErrorTraceRegistry().getTrace(config); - trace = ModelHelper.getErrorTrace(config); + trace = model.getErrorTrace(); ModelWriter writer = new ModelWriter(); @@ -646,7 +657,7 @@ public class TraceExplorerDelegate extends TLCModelLaunchDelegate implements ILa modelFolder.refreshLocal(IResource.DEPTH_ONE, new SubProgressMonitor(monitor, 100)); // set the model to have the trace with trace explorer expression shown - ModelHelper.setOriginalTraceShown(configuration, false); + configuration.getAdapter(Model.class).setOriginalTraceShown(false); // launch should proceed return true; diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/model/Model.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/model/Model.java new file mode 100644 index 0000000000000000000000000000000000000000..0119edca86ade3bf3b2d736020c3f25fe7abaec8 --- /dev/null +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/model/Model.java @@ -0,0 +1,969 @@ +/******************************************************************************* + * Copyright (c) 2015 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package org.lamport.tla.toolbox.tool.tlc.model; + +import java.io.InputStream; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.Vector; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IMarker; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IResourceRuleFactory; +import org.eclipse.core.resources.IWorkspace; +import org.eclipse.core.resources.IWorkspaceRunnable; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.Assert; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.core.runtime.jobs.ISchedulingRule; +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.ILaunch; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; +import org.eclipse.debug.core.ILaunchManager; +import org.eclipse.jface.text.BadLocationException; +import org.eclipse.jface.text.FindReplaceDocumentAdapter; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.IRegion; +import org.eclipse.ui.editors.text.FileDocumentProvider; +import org.eclipse.ui.part.FileEditorInput; +import org.lamport.tla.toolbox.spec.Spec; +import org.lamport.tla.toolbox.tool.ToolboxHandle; +import org.lamport.tla.toolbox.tool.tlc.TLCActivator; +import org.lamport.tla.toolbox.tool.tlc.launch.IConfigurationConstants; +import org.lamport.tla.toolbox.tool.tlc.launch.IModelConfigurationConstants; +import org.lamport.tla.toolbox.tool.tlc.launch.IModelConfigurationDefaults; +import org.lamport.tla.toolbox.tool.tlc.traceexplorer.SimpleTLCState; +import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; +import org.lamport.tla.toolbox.util.ResourceHelper; + +import tlc2.output.MP; + +/** + * This class represents a Toolbox Model that can be executed by TLC. + */ +public class Model implements IModelConfigurationConstants, IAdaptable { + + /** + * Marker indicating an error in the model + */ + private static final String TLC_MODEL_ERROR_MARKER = "org.lamport.tla.toolbox.tlc.modelErrorMarker"; + /** + * boolean attribute indicating if the original trace of a model checking + * run should be shown in the error view for that model + */ + private static final String IS_ORIGINAL_TRACE_SHOWN = "isOriginalTraceShown"; + /** + * marker on .launch file with boolean attribute modelIsRunning + */ + public static final String TLC_MODEL_IN_USE_MARKER = "org.lamport.tla.toolbox.tlc.modelMarker"; + /** + * marker on .launch file, binary semantics + */ + private static final String TLC_CRASHED_MARKER = "org.lamport.tla.toolbox.tlc.crashedModelMarker"; + /** + * model is being run + */ + private static final String MODEL_IS_RUNNING = "modelIsRunning"; + /** + * model is locked by a user lock + */ + private static final String MODEL_IS_LOCKED = "modelIsLocked"; + /** + * marker on .launch file, with boolean attribute isOriginalTraceShown + */ + private static final String TRACE_EXPLORER_MARKER = "org.lamport.tla.toolbox.tlc.traceExplorerMarker"; + + public static final String SPEC_MODEL_DELIM = "___"; + + static String sanitizeName(String aModelName) { + Assert.isNotNull(aModelName); + if (aModelName.contains(SPEC_MODEL_DELIM)) { + // Strip spec prefix + aModelName = aModelName.split(SPEC_MODEL_DELIM)[1]; + } + if (aModelName.endsWith(".launch")) { + // Strip file name extension + aModelName = aModelName.substring(0, aModelName.length() - ".launch".length()); + } + return aModelName; + } + + /** + * @param fullQualifiedModelName The full-qualified (includes the Spec name and separator too) name of the Model. + * @return A Model, iff a Model by the given name exists and <code>null</code> otherwise. + */ + public static Model getByName(final String modelName) { + return TLCModelFactory.getByName(modelName); + } + + private TLCSpec spec; + private ILaunchConfiguration launchConfig; + + // transient fields + /** + * The working copy is the temporary storage for pending model changes until + * they are saved. Upon save, the changes are merged back into launchConfig + * and the working copy is nulled. + * <p> + * A null workingCopy indicates that the model is *not* dirty/has no pending, + * unsaved changes. + */ + private ILaunchConfigurationWorkingCopy workingCopy; + private ILaunch launch; + + /** + * Marker indicating the SANY Errors + */ + public static final String TLC_MODEL_ERROR_MARKER_SANY = "org.lamport.tla.toolbox.tlc.modelErrorSANY"; + + /** + * Only supposed to be called by {@link TLCModelFactory} + */ + protected Model(ILaunchConfiguration launchConfig) { + /* + * The only caller of this method should only ever be + * TLCModelFactory.getAdapter(Object, Class<T>). All others should use + * ILaunchConfiguration.getAdapter(Model.class). + */ + Assert.isNotNull(launchConfig); + this.launchConfig = launchConfig; + } + + public TLCSpec getSpec() { + if (this.spec == null) { + final String launchName = this.launchConfig.getName(); + Assert.isTrue(launchName.contains(SPEC_MODEL_DELIM)); + + final Spec spec = ToolboxHandle.getSpecByName(launchName.split(SPEC_MODEL_DELIM)[0]); + Assert.isNotNull(spec, "Failed to lookup spec with name " + launchName.split(SPEC_MODEL_DELIM)[0]); + + this.spec = spec.getAdapter(TLCSpec.class); + } + return this.spec; + } + + public Model copy(String newModelName) { + newModelName = sanitizeName(newModelName); + try { + final ILaunchConfigurationWorkingCopy copy = this.launchConfig + .copy(getSpec().getName() + SPEC_MODEL_DELIM + newModelName); + copy.setAttribute(ModelHelper.MODEL_NAME, newModelName); + return copy.doSave().getAdapter(Model.class); + } catch (CoreException e) { + TLCActivator.logError("Error cloning model.", e); + return null; + } + } + + public void rename(String newModelName) { + renameLaunch(getSpec(), sanitizeName(newModelName)); + } + + /** + * The {@link Model}'s parent {@link TLCSpec} has been renamed. Update the {@link Model} too. + * @param newSpecName + */ + void specRename(final Spec newSpec) { + renameLaunch(newSpec, getName()); + // The spec's name has changed. Force a re-lookup of the instance with + // the updated name. + this.spec = null; + } + + private void renameLaunch(final Spec newSpec, String newModelName) { + try { + // create the model with the new name + final ILaunchConfigurationWorkingCopy copy = this.launchConfig + .copy(newSpec.getName() + SPEC_MODEL_DELIM + newModelName); + copy.setAttribute(SPEC_NAME, newSpec.getName()); + copy.setAttribute(ModelHelper.MODEL_NAME, newModelName); + copy.setContainer(newSpec.getProject()); + final ILaunchConfiguration renamed = copy.doSave(); + + // delete the old model + this.launchConfig.delete(); + this.launchConfig = renamed; + } catch (CoreException e) { + TLCActivator.logError("Error renaming model.", e); + } + } + + public int getAutoLockTime() { + try { + return this.launchConfig.getAttribute(IConfigurationConstants.LAUNCH_AUTO_LOCK_MODEL_TIME, + IModelConfigurationDefaults.MODEL_AUTO_LOCK_TIME_DEFAULT); + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + } + return 0; + } + + public void setAutoLockTime(int autoLockTime) { + try { + this.launchConfig.getWorkingCopy().setAttribute(IConfigurationConstants.LAUNCH_AUTO_LOCK_MODEL_TIME, + autoLockTime); + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + } + } + + public String getName() { + try { + return this.launchConfig.getAttribute(ModelHelper.MODEL_NAME, (String) null); + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + return null; + } + } + + public String getComments() { + try { + return this.launchConfig.getAttribute(IModelConfigurationConstants.MODEL_COMMENTS, ""); + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + return ""; + } + } + + public boolean isRunning() { + final boolean marker = isMarkerSet(TLC_MODEL_IN_USE_MARKER, MODEL_IS_RUNNING); + final ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); + final ILaunch[] launches = launchManager.getLaunches(); + for (int i = 0; i < launches.length; i++) { + final ILaunch launch = launches[i]; + if (launch.getLaunchConfiguration() != null + && launch.getLaunchConfiguration().contentsEqual(this.launchConfig)) { + if (!launch.isTerminated()) { + if (marker != true) { + TLCActivator.logInfo("Model state out-of-sync. Close and reopen spec to sync."); + } + return true; + } + } + } + if (marker != false) { + TLCActivator.logInfo("Model state out-of-sync. Close and reopen spec to sync."); + } + return false; + } + + public void setRunning(boolean isRunning) { + if (isRunning) { + // Clear the stale/crashed marker. After all, the model is obviously + // running now. + recover(); + } + + // There marker is set regardless of the actual isRunning() state + // returned by the ILaunchManager above. This is, because the marker + // mechanism is used to send "events" to the Toolbox's UI to update the + // model editor. + setMarker(TLC_MODEL_IN_USE_MARKER, MODEL_IS_RUNNING, isRunning); + } + + public boolean isLocked() { + return isMarkerSet(TLC_MODEL_IN_USE_MARKER, MODEL_IS_LOCKED); + } + + public void setLocked(boolean isLocked) { + setMarker(TLC_MODEL_IN_USE_MARKER, MODEL_IS_LOCKED, isLocked); + } + + /** + * Looks up if the model has a stale marker. The stale marker is installed + * when the TLC process crashed (terminated with exit code > 0). + */ + public boolean isStale() { + final IFile resource = getFile(); + if (resource.exists()) { + IMarker[] foundMarkers; + try { + foundMarkers = resource.findMarkers(TLC_CRASHED_MARKER, false, IResource.DEPTH_ZERO); + if (foundMarkers.length > 0) { + return true; + } else { + return false; + } + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + } + } + return false; + } + + public void setStale() { + try { + getFile().createMarker(TLC_CRASHED_MARKER); + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + } + } + + /** + * Returns whether the original trace or the trace with trace explorer expressions from the + * most recent run of the trace explorer for the model should be shown in the TLC error view. + * + * See {@link ModelHelper#setOriginalTraceShown(ILaunchConfiguration, boolean)} for setting this + * return value. + * + * @return whether the original trace or the trace with trace explorer expressions from the + * most recent run of the trace explorer for the model should be shown in the TLC error view + */ + public boolean isOriginalTraceShown() { + return isMarkerSet(TRACE_EXPLORER_MARKER, IS_ORIGINAL_TRACE_SHOWN); + } + + /** + * Sets whether the original trace or the trace with trace explorer expressions + * should be shown in the TLC error view for the model represented by this + * configuration. + * + * Code the raises the TLC error view or updates the TLC error view for a model + * can use {@link ModelHelper#isOriginalTraceShown(ILaunchConfiguration)} to determine + * if the original trace should be shown for a given model. + * + * @param isOriginalTraceShown true if the original trace should be shown, false if + * the trace with trace explorer expressions should be shown + */ + public void setOriginalTraceShown(boolean isOriginalTraceShown) { + setMarker(TRACE_EXPLORER_MARKER, IS_ORIGINAL_TRACE_SHOWN, isOriginalTraceShown); + } + + private boolean isMarkerSet(String markerType, final String attributeName) { + // marker + final IFile resource = getFile(); + if (resource.exists()) { + try { + final IMarker[] foundMarkers = resource.findMarkers(markerType, false, IResource.DEPTH_ZERO); + if (foundMarkers.length > 0) { + boolean set = foundMarkers[0].getAttribute(attributeName, false); + // remove trash if any + for (int i = 1; i < foundMarkers.length; i++) { + foundMarkers[i].delete(); + } + return set; + } else { + return false; + } + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + } + } + return false; + } + + private void setMarker(final String markerType, final String attributeName, boolean value) { + final IFile resource = getFile(); + if (resource.exists()) { + try { + IMarker marker; + final IMarker[] foundMarkers = resource.findMarkers(markerType, false, IResource.DEPTH_ZERO); + if (foundMarkers.length > 0) { + marker = foundMarkers[0]; + // remove trash if any + for (int i = 1; i < foundMarkers.length; i++) { + foundMarkers[i].delete(); + } + } else { + marker = resource.createMarker(markerType); + } + + marker.setAttribute(attributeName, value); + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + } + } + } + + /** + * Installs a marker on the model + * @param properties a map of attribute names to attribute values + * (key type : <code>String</code> value type : <code>String</code>, + * <code>Integer</code>, or <code>Boolean</code>) or <code>null</code> + */ + public IMarker setMarker(Map<String, Object> properties, String markerType) { + try { + IMarker marker = getFile().createMarker(markerType); + marker.setAttributes(properties); + return marker; + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + } + return null; + } + + public IMarker[] getMarkers() { + final IFile resource = getFile(); + if (resource.exists()) { + try { + return resource.findMarkers(TLC_MODEL_ERROR_MARKER, true, IResource.DEPTH_ZERO); + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + } + } + return new IMarker[0]; + } + + public void removeMarkers(final String markerType) { + try { + final IMarker[] foundMarkers = getFile().findMarkers(markerType, true, + IResource.DEPTH_ONE); + for (int i = 0; i < foundMarkers.length; i++) { + foundMarkers[i].delete(); + } + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + } + } + + /** + * Tries to recover model after an abnormal TLC termination + * It deletes all temporary files on disk and restores the state to unlocked. + */ + public void recover() { + final IFile resource = getFile(); + if (resource.exists()) { + try { + // remove any crashed markers + IMarker[] foundMarkers = resource.findMarkers(TLC_CRASHED_MARKER, false, IResource.DEPTH_ZERO); + if (foundMarkers.length == 0) { + return; + } + + for (int i = 0; i < foundMarkers.length; i++) { + foundMarkers[i].delete(); + } + + foundMarkers = resource.findMarkers(TLC_MODEL_IN_USE_MARKER, false, IResource.DEPTH_ZERO); + for (int i = 0; i < foundMarkers.length; i++) { + foundMarkers[i].delete(); + } + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + } + } + } + + public ILaunchConfiguration getLaunchConfiguration() { + return this.launchConfig; + } + + public void delete(IProgressMonitor monitor) throws CoreException { + + final IResource[] members; + + // if the model has never been model checked, no model folder will exist + final IFolder modelFolder = getTargetDirectory(); + if(modelFolder != null) { + members = new IResource[2]; + members[0] = modelFolder; // model folder + members[1] = getLaunchConfiguration().getFile(); // modle launch config + } else { + members = new IResource[]{getLaunchConfiguration().getFile()}; + } + + // schedule combined deletion of both the model folder as well as the + // launch config + final ISchedulingRule deleteRule = ResourceHelper.getDeleteRule(members); + + ResourcesPlugin.getWorkspace().run( + new IWorkspaceRunnable() { + + /* (non-Javadoc) + * @see org.eclipse.core.resources.IWorkspaceRunnable#run(org.eclipse.core.runtime.IProgressMonitor) + */ + public void run(IProgressMonitor subMonitor) + throws CoreException { + subMonitor.beginTask("Deleting files", members.length); + + // actually deletes all IResource members + try { + for (int i = 0; i < members.length; i++) { + members[i].delete(IResource.FORCE, + new SubProgressMonitor(subMonitor, 1)); + } + } catch (CoreException e) { + TLCActivator.logError("Error deleting a file " + + e.getMessage(), e); + throw e; + } + + subMonitor.done(); + } + }, deleteRule, IWorkspace.AVOID_UPDATE, + new SubProgressMonitor(monitor, members.length)); + } + + /** + * Retrieves the working directory for the model + * <br>Note, this is a handle operation only, the resource returned may not exist + * @param config + * @return the Folder. + */ + public IFolder getTargetDirectory() { + return (IFolder) getSpec().getProject().findMember(getName()); + } + + /** + * Retrieves the TLA file that is being model checked on the model run + * + * @param config + * configuration representing the model + * @return a file handle or <code>null</code> + */ + public IFile getTLAFile() { + return getFile(ModelHelper.FILE_TLA); + } + + public IFile getOutputLogFile() { + return getOutputLogFile(false); + } + + /** + * Retrieves a file where the log of the TLC run is written. If isTraceExploration is true, this + * will return the log file for trace exploration. If that flag is false, this will return the log file + * for normal model checking. + * + * @param config configuration representing the model + * @param getTraceExplorerOutput flag indicating if the log file for trace exploration is to be returned + * @return the file handle, or null + */ + public IFile getOutputLogFile(boolean getTraceExplorerOutput) { + if (getTraceExplorerOutput) { + return getFile(ModelHelper.TE_FILE_OUT); + } else { + return getFile(ModelHelper.FILE_OUT); + } + } + + /** + * Retrives the TLA file used by the trace explorer + * @return a file handle or <code>null</code> + */ + public IFile getTraceExplorerTLAFile() { + return getFile(ModelHelper.TE_FILE_TLA); + } + + private IFile getFile(final String id) { + final IFolder targetFolder = getTargetDirectory(); + if (targetFolder != null && targetFolder.exists()) { + final IFile teFile = (IFile) targetFolder.findMember(id); + if (teFile != null && teFile.exists()) { + return teFile; + } + } + return null; + } + + /** + * Returns a handle to the output file {@link ModelHelper#TE_TRACE_SOURCE} used by the + * trace explorer to retrieve the trace from the most recent run of TLC on + * the config. + * + * Note that this is a handle-only operation. The file need not exist in the + * underlying file system. + * + * @return + */ + public IFile getTraceSourceFile() { + final IFolder targetFolder = getTargetDirectory(); + if (targetFolder != null && targetFolder.exists()) { + final IFile logFile = targetFolder.getFile(ModelHelper.TE_TRACE_SOURCE); + Assert.isNotNull(logFile); + return logFile; + } + return null; + } + + public void createModelOutputLogFile(InputStream is, IProgressMonitor monitor) throws CoreException { + IFolder targetFolder = getTargetDirectory(); + // Create targetFolder which might be missing if the model has never + // been checked but the user wants to load TLC output anyway. + // This happens with distributed TLC, where the model is executed + // remotely and the log is send to the user afterwards. + if (targetFolder == null || !targetFolder.exists()) { + String modelName = getName(); + targetFolder = getSpec().getProject().getFolder(modelName); + targetFolder.create(true, true, monitor); + } + if (targetFolder != null && targetFolder.exists()) + { + // Always refresh the folder in case it has to override an existing + // file that is out-of-sync with the Eclipse foundation layer. + targetFolder.refreshLocal(IFolder.DEPTH_INFINITE, monitor); + + // Import MC.out + IFile mcOutFile = targetFolder.getFile(ModelHelper.FILE_OUT); + if (mcOutFile.exists()) { + mcOutFile.delete(true, monitor); + } + mcOutFile.create(is, true, monitor); // create closes the InputStream is. + + // Import MC_TE.out by copying the MC.out file to MC_TE.out. + // The reason why there are two identical files (MC.out and + // MC_TE.out) has been lost in history. + IFile mcTEOutfile = targetFolder.getFile(ModelHelper.TE_TRACE_SOURCE); + if (mcTEOutfile.exists()) { + mcTEOutfile.delete(true, monitor); + } + mcOutFile.copy(mcTEOutfile.getFullPath(), true, monitor); + } + } + + + public IFolder getFolder() { + return getSpec().getProject().getFolder(getName()); + } + + private static final String CHECKPOINT_STATES = ModelHelper.MC_MODEL_NAME + ".st.chkpt"; + private static final String CHECKPOINT_QUEUE = "queue.chkpt"; + private static final String CHECKPOINT_VARS = "vars.chkpt"; + + /** + * Checks whether the checkpoint files exist for a given model + * If doRefresh is set to true, this method will refresh the model directory, + * and if a checkpoint folder is found, it will refresh the contents of that folder. + * This means that the eclipse workspace representation of that directory will + * synch with the file system. This is a long running job, so this method should not + * be called within the running of another job unless the scheduling rule for + * refreshing the model directory is included in the scheduling rule of the job which + * is calling this method. This scheduling rule can be found by calling + * + * Note: Because the Toolbox deletes any existing checkpoint when running TLC, + * there should be at most one checkpoint. Therefore, this method should return an array + * of length 0 or 1. + * + * {@link IResourceRuleFactory#refreshRule(IResource)} + * @param config + * @param doRefresh whether the model directory's contents and any checkpoint + * folders contents should be refreshed + * @return the array of checkpoint directories, sorted from last to first + */ + public IResource[] getCheckpoints(boolean doRefresh) throws CoreException + { + // yy-MM-dd-HH-mm-ss + Pattern pattern = Pattern.compile("[0-9]{2}-[0-9]{2}-[0-9]{2}-[0-9]{2}-[0-9]{2}-[0-9]{2}"); + + Vector<IResource> checkpoints = new Vector<IResource>(); + IFolder directory = getTargetDirectory(); + + if (directory != null && directory.exists()) + { + // refreshing is necessary because TLC creates + // the checkpoint folders, but they may not have + // been incorporated into the toolbox workspace + // yet + // the depth is one to find any checkpoint folders + if (doRefresh) + { + directory.refreshLocal(IResource.DEPTH_ONE, null); + } + IResource[] members = directory.members(); + for (int i = 0; i < members.length; i++) + { + if (members[i].getType() == IResource.FOLDER) + { + Matcher matcher = pattern.matcher(members[i].getName()); + if (matcher.matches()) + { + // if there is a checkpoint folder, it is necessary + // to refresh its contents because they may not + // be part of the workspace yet + if (doRefresh) + { + members[i].refreshLocal(IResource.DEPTH_ONE, null); + } + if (((IFolder) members[i]).findMember(CHECKPOINT_QUEUE) != null + && ((IFolder) members[i]).findMember(CHECKPOINT_VARS) != null + && ((IFolder) members[i]).findMember(CHECKPOINT_STATES) != null) + { + checkpoints.add(members[i]); + } + } + } + } + } + IResource[] result = (IResource[]) checkpoints.toArray(new IResource[checkpoints.size()]); + // sort the result + Arrays.sort(result, new Comparator<IResource>() { + public int compare(IResource arg0, IResource arg1) + { + return arg0.getName().compareTo(arg1.getName()); + } + }); + + return result; + } + + private static final String CR = "\n"; + private static final String SPACE = " "; + + /** + * Returns a possibly empty List of {@link SimpleTLCState} that represents + * the error trace produced by the most recent run of TLC on config, if an error + * trace was produced. + */ + public List<SimpleTLCState> getErrorTrace() + { + /* + * Use a file editor input and file document provider to gain access to the + * document representation of the file containing the trace. + */ + FileEditorInput logFileEditorInput = new FileEditorInput(getTraceSourceFile()); + FileDocumentProvider logFileDocumentProvider = new FileDocumentProvider(); + try + { + logFileDocumentProvider.connect(logFileEditorInput); + IDocument logFileDocument = logFileDocumentProvider.getDocument(logFileEditorInput); + + FindReplaceDocumentAdapter logFileSearcher = new FindReplaceDocumentAdapter(logFileDocument); + + // the regular expression for searching for the start tag for state print outs + String regExStartTag = MP.DELIM + MP.STARTMSG + "[0-9]{4}" + MP.COLON + MP.STATE + SPACE + MP.DELIM + CR; + // the regular expression for searching for the end tag for state print outs + String regExEndTag = MP.DELIM + MP.ENDMSG + "[0-9]{4}" + SPACE + MP.DELIM; + + IRegion startTagRegion = logFileSearcher.find(0, regExStartTag, true, true, false, true); + + // vector of SimpleTLCStates + Vector<SimpleTLCState> trace = new Vector<SimpleTLCState>(); + + while (startTagRegion != null) + { + IRegion endTagRegion = logFileSearcher.find(startTagRegion.getOffset() + startTagRegion.getLength(), + regExEndTag, true, true, false, true); + + if (endTagRegion != null) + { + int stateInputStart = startTagRegion.getOffset() + startTagRegion.getLength(); + int stateInputLength = endTagRegion.getOffset() - stateInputStart; + // string from which the state can be parsed + String stateInputString = logFileDocument.get(stateInputStart, stateInputLength); + + trace.add(SimpleTLCState.parseSimpleTLCState(stateInputString)); + + } else + { + TLCActivator.logDebug("Found start tag region in model log file without end tag for model " + + getName() + "."); + } + // TLCActivator.getDefault().logDebug(logFileDocument.get(startTagRegion.getOffset() + startTagRegion.getLength(), + // endTagRegion.getOffset() - startTagRegion.getLength() - startTagRegion.getOffset())); + + startTagRegion = logFileSearcher.find(startTagRegion.getOffset() + startTagRegion.getLength(), + regExStartTag, true, true, false, true); + } + + return trace; + } catch (CoreException e) + { + TLCActivator.logError("Error connecting to model log file for model " + getName() + ".", e); + } catch (BadLocationException e) + { + TLCActivator.logError("Error searching model log file for " + getName() + ".", e); + } finally + { + /* + * The document provider is not needed. Always disconnect it to avoid a memory leak. + * + * Keeping it connected only seems to provide synchronization of + * the document with file changes. That is not necessary in this context. + */ + logFileDocumentProvider.disconnect(logFileEditorInput); + } + + return new Vector<SimpleTLCState>(); + } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + public String toString() { + // The model's full-qualified name + return getSpec().getName() + SPEC_MODEL_DELIM + getName(); + } + + public List<String> getTraceExplorerExpressions() { + final Vector<String> defaultValue = new Vector<String>(); + try { + return this.launchConfig.getAttribute(IModelConfigurationConstants.TRACE_EXPLORE_EXPRESSIONS, defaultValue); + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + return defaultValue; + } + } + + public void setTraceExplorerExpression(List<String> serializedInput) { + // TODO Why is this written into a working copy? => One can only write + // into a working copy, which is synced on save. Thus, make sure never + // to write to different copies concurrently. + try { + getWorkingCopy().setAttribute(IModelConfigurationConstants.TRACE_EXPLORE_EXPRESSIONS, serializedInput); + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + } + } + + public IFile getFile() { + return getLaunchConfiguration().getFile(); + } + + /** + * @return The last {@link ILaunch} or <code>null</code> if {@link Model} has never been run. + */ + public ILaunch getLastLaunch() { + return launch; + } + + public void launch(String mode, IProgressMonitor subProgressMonitor, boolean build) { + try { + Assert.isTrue(this.workingCopy == null, "Cannot launch dirty model, save first."); + this.launch = this.launchConfig.launch(mode, subProgressMonitor, build); + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + } + } + + public Model save(final IProgressMonitor monitor) { + if (this.workingCopy != null) { + //TODO This is a workspace operation and thus should be decoupled from the UI thread. + try { + this.launchConfig = this.workingCopy.doSave(); + // Null the temporary working copy . Save effectively merges the + // changes in the working copy back into the launch config. + this.workingCopy = null; + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + } + } + TLCActivator.logDebug("Trying to save a clean Model."); + + // Fluent + return this; + } + + private ILaunchConfigurationWorkingCopy getWorkingCopy() throws CoreException { + if (this.workingCopy == null) { + this.workingCopy = this.launchConfig.getWorkingCopy(); + } + return this.workingCopy; + } + + public void unsavedSetEvalExpression(final String expression) { + setAttribute(MODEL_EXPRESSION_EVAL, expression); + } + + public String getEvalExpression() { + try { + return this.launchConfig.getAttribute(MODEL_EXPRESSION_EVAL, ""); + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + return ""; + } + } + + public int getAttribute(String key, int defaultValue) throws CoreException { + // TODO Replace this generic lookup method with real getters for the + // various keys. E.g. see getEvalExpression/unsavedSetEvalExpression + return this.launchConfig.getAttribute(key, defaultValue); + } + + public String getAttribute(String key, String defaultValue) throws CoreException { + // TODO Replace this generic lookup method with real getters for the + // various keys. E.g. see getEvalExpression/unsavedSetEvalExpression + return this.launchConfig.getAttribute(key, defaultValue); + } + + public boolean getAttribute(String key, boolean defaultValue) throws CoreException { + // TODO Replace this generic lookup method with real getters for the + // various keys. E.g. see getEvalExpression/unsavedSetEvalExpression + return this.launchConfig.getAttribute(key, defaultValue); + } + + public List<String> getAttribute(String key, List<String> defaultValue) throws CoreException { + // TODO Replace this generic lookup method with real getters for the + // various keys. E.g. see getEvalExpression/unsavedSetEvalExpression + return this.launchConfig.getAttribute(key, defaultValue); + } + + public void setAttribute(String key, int value) { + // TODO Replace this generic lookup method with real getters for the + // various keys. E.g. see getEvalExpression/unsavedSetEvalExpression + try { + getWorkingCopy().setAttribute(key, value); + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + } + } + + public void setAttribute(String key, String value) { + // TODO Replace this generic lookup method with real getters for the + // various keys. E.g. see getEvalExpression/unsavedSetEvalExpression + try { + getWorkingCopy().setAttribute(key, value); + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + } + } + + public void setAttribute(String key, boolean value) { + // TODO Replace this generic lookup method with real getters for the + // various keys. E.g. see getEvalExpression/unsavedSetEvalExpression + try { + getWorkingCopy().setAttribute(key, value); + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + } + } + + public void setAttribute(String key, List<String> value) { + // TODO Replace this generic lookup method with real getters for the + // various keys. E.g. see getEvalExpression/unsavedSetEvalExpression + try { + getWorkingCopy().setAttribute(key, value); + } catch (CoreException shouldNotHappen) { + TLCActivator.logError(shouldNotHappen.getMessage(), shouldNotHappen); + } + } + + /* IAdaptable */ + + public <T> T getAdapter(Class<T> adapter) { + return Platform.getAdapterManager().getAdapter(this, adapter); + } +} diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/util/ModelWriter.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/model/ModelWriter.java similarity index 96% rename from org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/util/ModelWriter.java rename to org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/model/ModelWriter.java index 4374083409d974b74b4e208073a4c746d7996e05..4713750461e97b23cef648775a790d889c459622 100644 --- a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/util/ModelWriter.java +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/model/ModelWriter.java @@ -23,12 +23,13 @@ * Contributors: * Simon Zambrovski - initial API and implementation ******************************************************************************/ -package org.lamport.tla.toolbox.tool.tlc.util; +package org.lamport.tla.toolbox.tool.tlc.model; import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Vector; +import java.util.concurrent.atomic.AtomicLong; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -41,11 +42,9 @@ import org.eclipse.jface.text.Region; import org.lamport.tla.toolbox.tool.ToolboxHandle; import org.lamport.tla.toolbox.tool.tlc.launch.IModelConfigurationConstants; import org.lamport.tla.toolbox.tool.tlc.launch.TraceExpressionInformationHolder; -import org.lamport.tla.toolbox.tool.tlc.model.Assignment; -import org.lamport.tla.toolbox.tool.tlc.model.Formula; -import org.lamport.tla.toolbox.tool.tlc.model.TypedSet; import org.lamport.tla.toolbox.tool.tlc.traceexplorer.SimpleTLCState; import org.lamport.tla.toolbox.tool.tlc.traceexplorer.SimpleTLCVariable; +import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; import org.lamport.tla.toolbox.util.ResourceHelper; import tla2sany.modanalyzer.SpecObj; @@ -59,7 +58,7 @@ public class ModelWriter /** * Counter to be able to generate unique identifiers */ - private static long globalCounter = 1; + private static final AtomicLong COUNTER = new AtomicLong(1L); public static final String SPEC_SCHEME = "spec"; public static final String INIT_SCHEME = "init"; @@ -1615,7 +1614,7 @@ public class ModelWriter * @param text text containing IDs (error text) * @return array of regions or empty array */ - static IRegion[] findIds(String text) + public static IRegion[] findIds(String text) { if (text == null || text.length() == 0) { @@ -1636,15 +1635,7 @@ public class ModelWriter * @param schema a naming schema, one of the {@link ModelWriter} SCHEMA constants * @return a valid identifier */ - public static synchronized String getValidIdentifier(String schema) - { - try - { - Thread.sleep(10); - } catch (InterruptedException e) - { - } - return schema + "_" + System.currentTimeMillis() + 1000 * (++globalCounter); - } - + public static String getValidIdentifier(String schema) { + return String.format("%s_%s%s", schema, System.currentTimeMillis(), 1000 * COUNTER.incrementAndGet()); + } } diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/model/TLCModelFactory.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/model/TLCModelFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..c572c2f0b1ebba3b1cd3271f736228efbbd7e2f6 --- /dev/null +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/model/TLCModelFactory.java @@ -0,0 +1,157 @@ +/******************************************************************************* + * Copyright (c) 2015 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package org.lamport.tla.toolbox.tool.tlc.model; + +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.Assert; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IAdapterFactory; +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.ILaunchConfigurationListener; +import org.eclipse.debug.core.ILaunchConfigurationType; +import org.eclipse.debug.core.ILaunchManager; +import org.lamport.tla.toolbox.tool.tlc.launch.TLCModelLaunchDelegate; + +public class TLCModelFactory implements IAdapterFactory, ILaunchConfigurationListener { + + private final Map<IFile, Model> launch2model = new HashMap<IFile, Model>(); + + public TLCModelFactory() { + final ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); + launchManager.addLaunchConfigurationListener(this); + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class) + */ + @SuppressWarnings("unchecked") + public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) { + if (!Model.class.equals(adapterType)) { + return null; + } + if (adaptableObject instanceof ILaunchConfiguration) { + final ILaunchConfiguration launchConfiguration = (ILaunchConfiguration) adaptableObject; + // The ILC instances change all the time due to working copies being + // created dynamically upon save. Thus, map the various ILC's to one + // model by using the canonical IFile that all ILC instances are + // technically represented by. + final IFile key = launchConfiguration.getFile(); + Assert.isNotNull(key); + if (!launch2model.containsKey(key)) { + launch2model.put(key, new Model(launchConfiguration)); + } + return (T) launch2model.get(key); + } + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList() + */ + public Class<?>[] getAdapterList() { + return new Class[] {ILaunchConfiguration.class}; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.ILaunchConfigurationListener#launchConfigurationAdded(org.eclipse.debug.core.ILaunchConfiguration) + */ + public void launchConfigurationAdded(final ILaunchConfiguration configuration) { + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.ILaunchConfigurationListener#launchConfigurationChanged(org.eclipse.debug.core.ILaunchConfiguration) + */ + public void launchConfigurationChanged(final ILaunchConfiguration configuration) { + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.ILaunchConfigurationListener#launchConfigurationRemoved(org.eclipse.debug.core.ILaunchConfiguration) + */ + public void launchConfigurationRemoved(final ILaunchConfiguration configuration) { + // If the launch2model mapping has an entry for the removed launch + // config, also dispose the corresponding Model instance. For example + // Model#rename(String) internally creates a new ILaunchConfiguration + // making the old obsolete. + final IFile key = configuration.getFile(); + Assert.isNotNull(key); + launch2model.remove(key); + } + + /** + * @see Model#getByName(String) + */ + public static Model getByName(final String fullQualifiedModelName) { + Assert.isNotNull(fullQualifiedModelName); + Assert.isLegal(!fullQualifiedModelName.contains(Model.SPEC_MODEL_DELIM), "Not a full-qualified model name."); + + final ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); + final ILaunchConfigurationType launchConfigurationType = launchManager + .getLaunchConfigurationType(TLCModelLaunchDelegate.LAUNCH_CONFIGURATION_TYPE); + + try { + final ILaunchConfiguration[] launchConfigurations = launchManager.getLaunchConfigurations(launchConfigurationType); + for (int i = 0; i < launchConfigurations.length; i++) { + // Can do equals here because of full qualified name. + final ILaunchConfiguration launchConfiguration = launchConfigurations[i]; + if (fullQualifiedModelName.equals(launchConfiguration.getName())) { + return launchConfiguration.getAdapter(Model.class); + } + } + } catch (CoreException shouldNeverHappen) { + shouldNeverHappen.printStackTrace(); + } + + return null; + } + + public static Model getBy(final IFile aFile) { + Assert.isNotNull(aFile); + + final ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); + final ILaunchConfigurationType launchConfigurationType = launchManager + .getLaunchConfigurationType(TLCModelLaunchDelegate.LAUNCH_CONFIGURATION_TYPE); + + try { + final ILaunchConfiguration[] launchConfigurations = launchManager.getLaunchConfigurations(launchConfigurationType); + for (int i = 0; i < launchConfigurations.length; i++) { + // Can do equals here because of full qualified name. + final ILaunchConfiguration launchConfiguration = launchConfigurations[i]; + if (aFile.equals(launchConfiguration.getFile())) { + return launchConfiguration.getAdapter(Model.class); + } + } + } catch (CoreException shouldNeverHappen) { + shouldNeverHappen.printStackTrace(); + } + + return null; + } +} diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/model/TLCSpec.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/model/TLCSpec.java new file mode 100644 index 0000000000000000000000000000000000000000..1b0a6beb791e47a00defa845f874aac78cea2361 --- /dev/null +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/model/TLCSpec.java @@ -0,0 +1,155 @@ +/******************************************************************************* + * Copyright (c) 2015 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package org.lamport.tla.toolbox.tool.tlc.model; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.ILaunchConfigurationType; +import org.eclipse.debug.core.ILaunchManager; +import org.lamport.tla.toolbox.spec.Spec; +import org.lamport.tla.toolbox.tool.tlc.launch.TLCModelLaunchDelegate; + +/** + * {@link TLCSpec} is the glue between {@link Spec} and {@link Model}. Why do we + * need glue? The Toolbox is written in a modular style. Thus, it is + * (theoretically) possible to use the Toolbox with all TLC specifics stripped. + * When thats done, the {@link Model} class would not be available to + * {@link Spec} which in turn will make it fail to load by the classloader. + * <p> + * The general pattern to lookup a {@link Model} instance when you have a + * {@link Spec}, is to either do Spec.getAdapter(TLCClass.class).getModels() and + * select the desired instance from the {@link Map}. Or + * Spec.getAdapter(TLCClass.class).getModel(Fully Qualified Model Name). + */ +public class TLCSpec extends Spec { + + /** + * Only supposed to be called by {@link TLCSpecFactory} + */ + TLCSpec(Spec spec) { + super(spec.getProject()); + } + + /** + * @return All {@link Model}s associated with the given {@link Spec} + */ + public Map<String, Model> getModels() { + final ILaunchConfiguration[] launchConfigurations = getAllLaunchConfigurations(); + + final Map<String, Model> res = new HashMap<String, Model>(); + + final IPath location = getProject().getLocation(); + for (int i = 0; i < launchConfigurations.length; i++) { + final ILaunchConfiguration aConfiguration = launchConfigurations[i]; + if (location.isPrefixOf(aConfiguration.getFile().getLocation())) { + final Model model = aConfiguration.getAdapter(Model.class); + res.put(model.getName(), model); + } + } + + return res; + } + + private static ILaunchConfiguration[] getAllLaunchConfigurations() { + final ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); + final ILaunchConfigurationType launchConfigurationType = launchManager + .getLaunchConfigurationType(TLCModelLaunchDelegate.LAUNCH_CONFIGURATION_TYPE); + try { + return launchManager.getLaunchConfigurations(launchConfigurationType); + } catch (CoreException shouldNeverHappen) { + shouldNeverHappen.printStackTrace(); + return new ILaunchConfiguration[0]; + } + } + + public Model getModel(final String modelName) { + return getModels().get(Model.sanitizeName(modelName)); + } + + public void rename(final Spec aNewSpec) { + // The specs name is changed in Spec. What is left, is to fix up the + // model names. A model name is prefix with the spec's name. + // Note that the triggering event is sent prior to the actual spec + // rename. The result returned by Spec#getName() is still the old one. + final Collection<Model> models = getModels().values(); + for (Model model : models) { + model.specRename(aNewSpec); + } + } + + /** + * Constructs the model called Foo___Model_1 from the SpecName Foo + * if Foo___Model_1 already exists, delivers Foo___Model_2, and so on... + * + * This method tests the existence of the launch configuration AND of the file + * + * @return + */ + public String getModelNameSuggestion() { + return getModelNameSuggestion("Model_1"); + } + + private String getModelNameSuggestion(String proposition) { + Model model = getModel(proposition); + if (model != null || getProject().getFile(proposition + ".tla").exists()) { + String oldNumber = proposition.substring(proposition.lastIndexOf("_") + 1); + int number = Integer.parseInt(oldNumber) + 1; + proposition = proposition.substring(0, proposition.lastIndexOf("_") + 1); + return getModelNameSuggestion(proposition + number); + } + + return proposition; + } + + /** + * Try to be clever in proposing a name for the clone. If the list + * of models (related to that spec) follows the Model_1, ..., + * Model_23, the name to suggest will be Model_24. If the sequence + * has gaps, the lowest gap is chosen starting at model. + */ + public String getModelNameSuggestion(final Model model) { + final String modelName = model.getName(); + final int idx = modelName.lastIndexOf("_"); + if (idx > 0) { + final String suffix = modelName.substring(idx + 1, modelName.length()); + try { + Integer.parseInt(suffix); + } catch (NumberFormatException ignore) { + // Fall through and suggest basic ..._Copy + return modelName + "_Copy"; + } + return getModelNameSuggestion(model.getName()); + } + return modelName + "_Copy"; + } +} diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/model/TLCSpecFactory.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/model/TLCSpecFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..6b0e11dab9d2f21c28f7b92ff0ee08a51251bde0 --- /dev/null +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/model/TLCSpecFactory.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * Copyright (c) 2015 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package org.lamport.tla.toolbox.tool.tlc.model; + +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.core.runtime.IAdapterFactory; +import org.lamport.tla.toolbox.spec.Spec; + +public class TLCSpecFactory implements IAdapterFactory { + + private final Map<Spec, TLCSpec> spec2tclSpec = new HashMap<Spec, TLCSpec>(); + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class) + */ + @SuppressWarnings("unchecked") + public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) { + if (TLCSpec.class.equals(adapterType) && adaptableObject instanceof Spec) { + if (!spec2tclSpec.containsKey(adaptableObject)) { + final Spec spec = (Spec) adaptableObject; + spec2tclSpec.put(spec, new TLCSpec(spec)); + } + return (T) spec2tclSpec.get(adaptableObject); + } + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList() + */ + public Class<?>[] getAdapterList() { + return new Class[] {Spec.class}; + } +} diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/output/IProcessOutputSink.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/output/IProcessOutputSink.java index 5761fed1871e585492f6ac5e3c662dc1412bd705..d43bf0752a3eabe6abfbd07aef6b36b4934b12c8 100644 --- a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/output/IProcessOutputSink.java +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/output/IProcessOutputSink.java @@ -1,9 +1,10 @@ package org.lamport.tla.toolbox.tool.tlc.output; +import org.lamport.tla.toolbox.tool.tlc.model.Model; + /** * Basic interface for the sink * @author Simon Zambrovski - * @version $Id$ */ public interface IProcessOutputSink { @@ -36,10 +37,10 @@ public interface IProcessOutputSink /** * Called prior the usage to initialize the sink - * @param processName name of the process + * @param model name of the process * @param sinkType type, see constants {@link IProcessOutputSink#TYPE_DEBUG}, {@link IProcessOutputSink#TYPE_ERROR}, {@link IProcessOutputSink#TYPE_OUT}, {@link IProcessOutputSink#TYPE_TRACE_EXPLORE} */ - public void initializeSink(String processName, int sinkType); + public void initializeSink(Model model, int sinkType); /** * Signal to the sink that the process has terminated and no data will be sent diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/output/internal/BroadcastStreamListener.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/output/internal/BroadcastStreamListener.java index 54645b9bf9ae31365d6875aa72d4f573624d1a07..9a787bdb28356030780fdf678ad67939f2afae39 100644 --- a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/output/internal/BroadcastStreamListener.java +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/output/internal/BroadcastStreamListener.java @@ -8,6 +8,7 @@ import org.eclipse.core.runtime.Platform; import org.eclipse.debug.core.IStreamListener; import org.eclipse.debug.core.model.IStreamMonitor; import org.lamport.tla.toolbox.tool.tlc.TLCActivator; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.IProcessOutputSink; /** @@ -20,12 +21,12 @@ public class BroadcastStreamListener implements IStreamListener /** * - * @param streamName + * @param model * @param kind, see constants {@link IProcessOutputSink#TYPE_DEBUG}, {@link IProcessOutputSink#TYPE_ERROR}, {@link IProcessOutputSink#TYPE_OUT} */ - public BroadcastStreamListener(String streamName, int kind) + public BroadcastStreamListener(Model model, int kind) { - this.listeners = getRegisteredStreamManagers(streamName, kind); + this.listeners = getRegisteredStreamManagers(model, kind); } /* (non-Javadoc) @@ -75,7 +76,7 @@ public class BroadcastStreamListener implements IStreamListener * Retrieves all registered listener managers * @return */ - private IProcessOutputSink[] getRegisteredStreamManagers(String name, int type) + private IProcessOutputSink[] getRegisteredStreamManagers(Model model, int type) { IConfigurationElement[] decls = Platform.getExtensionRegistry().getConfigurationElementsFor( IProcessOutputSink.EXTENSION_ID); @@ -86,7 +87,7 @@ public class BroadcastStreamListener implements IStreamListener try { IProcessOutputSink extension = (IProcessOutputSink) decls[i].createExecutableExtension("class"); - extension.initializeSink(name, type); + extension.initializeSink(model, type); validExtensions.add(extension); } catch (CoreException e) { diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/output/internal/FileProcessOutputSink.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/output/internal/FileProcessOutputSink.java index 398674157ce8a5d4105366da729f5f41b978fec4..913f7145bcb83dc10ca750da47ad9948c2594e44 100644 --- a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/output/internal/FileProcessOutputSink.java +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/output/internal/FileProcessOutputSink.java @@ -11,22 +11,20 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; -import org.eclipse.debug.core.ILaunchConfiguration; import org.lamport.tla.toolbox.tool.tlc.TLCActivator; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.IProcessOutputSink; -import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; import org.lamport.tla.toolbox.util.ResourceHelper; /** * Sink writing the MC.out file * @author Simon Zambrovski - * @version $Id$ */ public class FileProcessOutputSink implements IProcessOutputSink { protected ISchedulingRule rule; protected IFile outFile; - protected String processName; + private Model model; public FileProcessOutputSink() { @@ -51,7 +49,7 @@ public class FileProcessOutputSink implements IProcessOutputSink // if the console output is active, print to it } catch (CoreException e) { - TLCActivator.getDefault().logError("Error writing the TLC process output file for " + processName, e); + TLCActivator.logError("Error writing the TLC process output file for " + model.getName(), e); } } @@ -59,13 +57,12 @@ public class FileProcessOutputSink implements IProcessOutputSink /* (non-Javadoc) * @see org.lamport.tla.toolbox.tool.tlc.output.IProcessOutputSink#initializeSink(java.lang.String, int) */ - public void initializeSink(String processName, int sinkType) + public void initializeSink(Model model, int sinkType) { boolean isTraceExplore = sinkType == TYPE_TRACE_EXPLORE; - this.processName = processName; - ILaunchConfiguration config = ModelHelper.getModelByName(processName); - this.outFile = ModelHelper.getModelOutputLogFile(config, isTraceExplore); + this.model = model; + this.outFile = model.getOutputLogFile(isTraceExplore); this.rule = ResourceHelper.getModifyRule(outFile); } diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/output/internal/TraceExplorerTraceSourceOutputSink.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/output/internal/TraceExplorerTraceSourceOutputSink.java index 3ad0b9e69054c1b7e4ad0c90c35e0e85f2027301..7f12413fe490b4b6c7f150d66c05643cf605dc8b 100644 --- a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/output/internal/TraceExplorerTraceSourceOutputSink.java +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/output/internal/TraceExplorerTraceSourceOutputSink.java @@ -2,7 +2,7 @@ package org.lamport.tla.toolbox.tool.tlc.output.internal; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.debug.core.ILaunchConfiguration; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.tool.tlc.output.IProcessOutputSink; import org.lamport.tla.toolbox.tool.tlc.util.ModelHelper; import org.lamport.tla.toolbox.util.ResourceHelper; @@ -56,13 +56,10 @@ public class TraceExplorerTraceSourceOutputSink extends FileProcessOutputSink /* (non-Javadoc) * @see org.lamport.tla.toolbox.tool.tlc.output.IProcessOutputSink#initializeSink(java.lang.String, int) */ - public void initializeSink(String processName, int sinkType) + public void initializeSink(Model model, int sinkType) { this.isTraceExplorerOutput = sinkType == IProcessOutputSink.TYPE_TRACE_EXPLORE; - this.processName = processName; - ILaunchConfiguration config = ModelHelper.getModelByName(processName); - - this.outFile = ModelHelper.getTraceSourceFile(config); + this.outFile = model.getTraceSourceFile(); this.rule = ResourceHelper.getModifyRule(outFile); // flag the output file to be cleared before the first text is appended diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/result/IResultPresenter.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/result/IResultPresenter.java index 73f2aba1b78762e3f57fdf9fd37ee62969a078d2..2bc170b7eebf71df6f17443e1b97a939b7babbad 100644 --- a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/result/IResultPresenter.java +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/result/IResultPresenter.java @@ -1,11 +1,10 @@ package org.lamport.tla.toolbox.tool.tlc.result; -import org.eclipse.debug.core.ILaunch; +import org.lamport.tla.toolbox.tool.tlc.model.Model; /** * Interface for the TLC job result presenter used in the extension point * @author Simon Zambrovski - * @version $Id$ */ public interface IResultPresenter { @@ -15,5 +14,5 @@ public interface IResultPresenter /** * Show the results of the launch */ - public void showResults(ILaunch launch); + public void showResults(Model model); } diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/util/ChangedSpecModulesGatheringDeltaVisitor.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/util/ChangedSpecModulesGatheringDeltaVisitor.java index 1fe9a8e1b40292afbb8259c9f316d552e7f0402d..a4f5ecd35140622e24014a301a00733c57cc0983 100644 --- a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/util/ChangedSpecModulesGatheringDeltaVisitor.java +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/util/ChangedSpecModulesGatheringDeltaVisitor.java @@ -9,9 +9,8 @@ import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.IResourceDeltaVisitor; import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.ILaunchConfiguration; import org.lamport.tla.toolbox.Activator; -import org.lamport.tla.toolbox.tool.tlc.TLCActivator; +import org.lamport.tla.toolbox.tool.tlc.model.Model; import org.lamport.tla.toolbox.util.ResourceHelper; /** @@ -21,15 +20,15 @@ import org.lamport.tla.toolbox.util.ResourceHelper; public abstract class ChangedSpecModulesGatheringDeltaVisitor implements IResourceDeltaVisitor { - private IContainer rootFileParent; - private Vector modules = new Vector(); + private final IContainer rootFileParent; + private Vector<IResource> modules = new Vector<IResource>(); private IResource model = null; private boolean checkpointsChanged = false; - private IFolder modelDir; + private final IFolder modelDir; - public ChangedSpecModulesGatheringDeltaVisitor(ILaunchConfiguration config) + public ChangedSpecModulesGatheringDeltaVisitor(Model model) { - modelDir = ModelHelper.getModelTargetDirectory(config); + modelDir = model.getTargetDirectory(); rootFileParent = Activator.getSpecManager().getSpecLoaded().getRootFile().getParent(); } @@ -85,7 +84,7 @@ public abstract class ChangedSpecModulesGatheringDeltaVisitor implements IResour * Retrieves found modules, or an empty list, if nothing found * @return a list with found modules */ - public List getModules() + public List<IResource> getModules() { return modules; } diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/util/ModelHelper.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/util/ModelHelper.java index 807b2b5efc58958f3afa65c388fa721efe99fadd..fd07160c3f2f96e57fadfb08040cae60a213fca0 100644 --- a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/util/ModelHelper.java +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/util/ModelHelper.java @@ -26,7 +26,6 @@ package org.lamport.tla.toolbox.tool.tlc.util; import java.io.ByteArrayInputStream; -import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -34,24 +33,16 @@ import java.util.Comparator; import java.util.Hashtable; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.Vector; import java.util.regex.Matcher; -import java.util.regex.Pattern; import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IMarker; -import org.eclipse.core.resources.IMarkerDelta; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceChangeEvent; -import org.eclipse.core.resources.IResourceChangeListener; -import org.eclipse.core.resources.IResourceRuleFactory; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; @@ -62,7 +53,6 @@ import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.MultiRule; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationType; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.jface.text.BadLocationException; @@ -70,21 +60,15 @@ import org.eclipse.jface.text.FindReplaceDocumentAdapter; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.Region; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.editors.text.FileDocumentProvider; -import org.eclipse.ui.part.FileEditorInput; -import org.lamport.tla.toolbox.spec.Spec; import org.lamport.tla.toolbox.tool.ToolboxHandle; import org.lamport.tla.toolbox.tool.tlc.TLCActivator; import org.lamport.tla.toolbox.tool.tlc.launch.IModelConfigurationConstants; import org.lamport.tla.toolbox.tool.tlc.launch.IModelConfigurationDefaults; -import org.lamport.tla.toolbox.tool.tlc.launch.TLCModelLaunchDelegate; import org.lamport.tla.toolbox.tool.tlc.model.Assignment; import org.lamport.tla.toolbox.tool.tlc.model.Formula; -import org.lamport.tla.toolbox.tool.tlc.traceexplorer.SimpleTLCState; -import org.lamport.tla.toolbox.util.AdapterFactory; +import org.lamport.tla.toolbox.tool.tlc.model.Model; +import org.lamport.tla.toolbox.tool.tlc.model.ModelWriter; import org.lamport.tla.toolbox.util.ResourceHelper; -import org.lamport.tla.toolbox.util.UIHelper; import tla2sany.modanalyzer.SpecObj; import tla2sany.semantic.ModuleNode; @@ -92,7 +76,6 @@ import tla2sany.semantic.OpDeclNode; import tla2sany.semantic.OpDefNode; import tla2sany.semantic.SymbolNode; import tla2sany.st.Location; -import tlc2.output.MP; /** * Provides utility methods for model manipulation @@ -100,26 +83,14 @@ import tlc2.output.MP; public class ModelHelper implements IModelConfigurationConstants, IModelConfigurationDefaults { - private static final String SPEC_MODEL_DELIM = "___"; - /** * Empty location */ public static final int[] EMPTY_LOCATION = new int[] { 0, 0, 0, 0 }; - - /** - * Marker indicating an error in the model - */ - public static final String TLC_MODEL_ERROR_MARKER = "org.lamport.tla.toolbox.tlc.modelErrorMarker"; /** * Marker indicating the TLC Errors */ public static final String TLC_MODEL_ERROR_MARKER_TLC = "org.lamport.tla.toolbox.tlc.modelErrorTLC"; - /** - * Marker indicating the SANY Errors - */ - public static final String TLC_MODEL_ERROR_MARKER_SANY = "org.lamport.tla.toolbox.tlc.modelErrorSANY"; - public static final String TLC_MODEL_ERROR_MARKER_ATTRIBUTE_NAME = "attributeName"; public static final String TLC_MODEL_ERROR_MARKER_ATTRIBUTE_IDX = "attributeIndex"; @@ -128,41 +99,14 @@ public class ModelHelper implements IModelConfigurationConstants, IModelConfigur */ public static final String TLC_MODEL_ERROR_MARKER_ATTRIBUTE_PAGE = "basicFormPageId"; - /** - * marker on .launch file with boolean attribute modelIsRunning - */ - public static final String TLC_MODEL_IN_USE_MARKER = "org.lamport.tla.toolbox.tlc.modelMarker"; - /** - * marker on .launch file, binary semantics - */ - public static final String TLC_CRASHED_MARKER = "org.lamport.tla.toolbox.tlc.crashedModelMarker"; - /** - * model is being run - */ - private static final String MODEL_IS_RUNNING = "modelIsRunning"; - /** - * model is locked by a user lock - */ - private static final String MODEL_IS_LOCKED = "modelIsLocked"; - /** - * marker on .launch file, with boolean attribute isOriginalTraceShown - */ - public static final String TRACE_EXPLORER_MARKER = "org.lamport.tla.toolbox.tlc.traceExplorerMarker"; - /** - * boolean attribute indicating if the original trace of a model checking - * run should be shown in the error view for that model - */ - public static final String IS_ORIGINAL_TRACE_SHOWN = "isOriginalTraceShown"; /** * Delimiter used to serialize lists */ private static final String LIST_DELIMITER = ";"; - private static final String CR = "\n"; /** * Delimiter used to serialize parameter-value pair */ private static final String PARAM_DELIMITER = ":"; - private static final String SPACE = " "; public static final String MC_MODEL_NAME = "MC"; public static final String FILE_TLA = MC_MODEL_NAME + ".tla"; @@ -178,146 +122,6 @@ public class ModelHelper implements IModelConfigurationConstants, IModelConfigur // that the trace explorer can retrieve the trace when it is run public static final String TE_TRACE_SOURCE = "MC_TE.out"; - private static final String CHECKPOINT_STATES = MC_MODEL_NAME + ".st.chkpt"; - private static final String CHECKPOINT_QUEUE = "queue.chkpt"; - private static final String CHECKPOINT_VARS = "vars.chkpt"; - - /** - * Constructs the model called Foo___Model_1 from the SpecName Foo - * if Foo___Model_1 already exists, delivers Foo___Model_2, and so on... - * - * This method tests the existence of the launch configuration AND of the file - * - * @param specProject - * @return - */ - public static String constructModelName(IProject specProject) - { - - return doConstructModelName(specProject, "Model_1"); - } - - /** - * Implementation of the {@link ModelHelper#constructModelName(IProject, String)} - * @param specProject - * @param proposition - * @return - */ - public static String doConstructModelName(IProject specProject, String proposition) - { - - ILaunchConfiguration existingModel = getModelByName(specProject, proposition); - if (existingModel != null || specProject.getFile(proposition + ".tla").exists()) - { - String oldNumber = proposition.substring(proposition.lastIndexOf("_") + 1); - int number = Integer.parseInt(oldNumber) + 1; - proposition = proposition.substring(0, proposition.lastIndexOf("_") + 1); - return doConstructModelName(specProject, proposition + number); - } - - return proposition; - } - public static String getModelName(ILaunchConfiguration config) { - return getModelName(config.getFile()); - } - - /** - * Transforms a model name to the name visible to the user - * @param modelFile - * @return - */ - public static String getModelName(IFile modelFile) - { - String name = modelFile.getLocation().removeFileExtension().lastSegment(); - int i = name.indexOf(modelFile.getProject().getName() + SPEC_MODEL_DELIM); - if (i != -1) - { - name = name.substring(i + (modelFile.getProject().getName() + SPEC_MODEL_DELIM).length()); - } - return name; - } - - /** - * Convenience method retrieving the model for the project of the current specification - * @param modelName name of the model - * @return launch configuration or null, if not found - */ - public static ILaunchConfiguration getModelByName(String modelName) - { - Assert.isNotNull(modelName); - final Spec currentSpec = ToolboxHandle.getCurrentSpec(); - if (currentSpec != null) { - return getModelByName(currentSpec.getProject(), modelName); - } else { - return null; - } - } - - /** - * Retrieves the model name by name - * @param specProject - * @param modelName - * @return ILaunchConfiguration representing a model or null - */ - public static ILaunchConfiguration getModelByName(IProject specProject, String modelName) - { - // a model name can be "spec__modelname" or just "modelname" - if (modelName.indexOf(specProject.getName() + SPEC_MODEL_DELIM) != 0) - { - modelName = specProject.getName() + SPEC_MODEL_DELIM + modelName; - } - - if (modelName.endsWith(".launch")) - { - modelName = modelName.substring(0, modelName.length() - ".launch".length()); - } - - try - { - ILaunchConfiguration[] launchConfigurations = getAllLaunchConfigurations(); - for (int i = 0; i < launchConfigurations.length; i++) - { - - if (launchConfigurations[i].getName().equals(modelName)) - { - return launchConfigurations[i]; - } - } - - } catch (CoreException e) - { - TLCActivator.logError("Error finding the model name", e); - } - - return null; - } - - /** - * @return All models associated with the given spec - * @throws CoreException - */ - public static List<ILaunchConfiguration> getModelsBySpec(final Spec aSpec) throws CoreException { - final List<ILaunchConfiguration> res = new ArrayList<ILaunchConfiguration>(); - - final ILaunchConfiguration[] launchConfigurations = getAllLaunchConfigurations(); - for (int i = 0; i < launchConfigurations.length; i++) { - final ILaunchConfiguration iLaunchConfiguration = launchConfigurations[i]; - if (getSpecPrefix(iLaunchConfiguration).equals(aSpec.getName())) { - res.add(iLaunchConfiguration); - } - } - - return res; - } - - private static ILaunchConfiguration[] getAllLaunchConfigurations() throws CoreException { - final ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); - final ILaunchConfigurationType launchConfigurationType = launchManager - .getLaunchConfigurationType(TLCModelLaunchDelegate.LAUNCH_CONFIGURATION_TYPE); - - return launchManager.getLaunchConfigurations(launchConfigurationType); - } - /** * Convenience method * @param modelFile file containing the model @@ -328,70 +132,13 @@ public class ModelHelper implements IModelConfigurationConstants, IModelConfigur ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); return launchManager.getLaunchConfiguration(modelFile); } - - - /** - * Rename all models of the given spec to be aligned with the spec name - * @param aSpec - * @param aNewSpecName - */ - public static void realignModelNames(final Spec aSpec, final String aNewSpecName) { - try { - final List<ILaunchConfiguration> models = ModelHelper.getModelsBySpec(aSpec); - for (ILaunchConfiguration model : models) { - renameModel(model, aNewSpecName, getModelSuffix(model)); - } - } catch(CoreException e) { - TLCActivator.logError("Error realigning models.", e); - } - } - - /** - * Renames the given model to the new model name passed - * @param model - * @param specPrefix - * @param newModelSuffix - */ - public static void renameModel(final ILaunchConfiguration model, final String specPrefix, final String newModelSuffix) { - try { - // create the model with the new name - final ILaunchConfigurationWorkingCopy copy = model.copy(specPrefix + SPEC_MODEL_DELIM + newModelSuffix); - copy.setAttribute(MODEL_NAME, newModelSuffix); - copy.doSave(); - - // delete the old model - model.delete(); - } catch (CoreException e) { - TLCActivator.logError("Error renaming model.", e); - } - } - - public static String getSpecPrefix(final ILaunchConfiguration aModel) { - final String oldModelName = aModel.getName(); // old full qualified name - int indexOf = oldModelName.indexOf(SPEC_MODEL_DELIM); // position model delimiter - return oldModelName.substring(0, indexOf); - } - - public static String getModelSuffix(final ILaunchConfiguration aModel) { - final String oldModelName = aModel.getName(); // old full qualified name - int indexOf = oldModelName.indexOf(SPEC_MODEL_DELIM); // position model delimiter - return oldModelName.substring(indexOf + SPEC_MODEL_DELIM.length()); - } /** * Saves the config working copy * @param config */ - public static void doSaveConfigurationCopy(ILaunchConfigurationWorkingCopy config) - { - try - { - config.doSave(); - } catch (CoreException e) - { - TLCActivator.logError("Error saving the model", e); - } - } + public static void doSaveConfigurationCopy(ILaunchConfigurationWorkingCopy config) { + } /** * Creates a serial version of the assignment list, to be stored in the {@link ILaunchConfiguration} @@ -702,588 +449,6 @@ public class ModelHelper implements IModelConfigurationConstants, IModelConfigur return constantsToDelete; } - /** - * Retrieves the editor with model instance opened, or null, if no editor found - * @param model - * @return - */ - public static IEditorPart getEditorWithModelOpened(ILaunchConfiguration model) - { - if (model != null) - { - return UIHelper.getActivePage().findEditor(new FileEditorInput(model.getFile())); - } - return null; - } - - /** - * Retrieves the working directory for the model - * <br>Note, this is a handle operation only, the resource returned may not exist - * @param config - * @return the Folder. - */ - public static IFolder getModelTargetDirectory(ILaunchConfiguration config) - { - Assert.isNotNull(config); - Assert.isTrue(config.getFile().exists()); - return (IFolder) config.getFile().getProject().findMember(getModelName(config.getFile())); - } - - /** - * Retrieves a file where the log of the TLC run is written. If isTraceExploration is true, this - * will return the log file for trace exploration. If that flag is false, this will return the log file - * for normal model checking. - * - * @param config configuration representing the model - * @param getTraceExplorerOutput flag indicating if the log file for trace exploration is to be returned - * @return the file handle, or null - */ - public static IFile getModelOutputLogFile(ILaunchConfiguration config, boolean getTraceExplorerOutput) - { - Assert.isNotNull(config); - IFolder targetFolder = ModelHelper.getModelTargetDirectory(config); - if (targetFolder != null && targetFolder.exists()) - { - String fileName = ModelHelper.FILE_OUT; - if (getTraceExplorerOutput) - { - fileName = ModelHelper.TE_FILE_OUT; - } - IFile logFile = (IFile) targetFolder.findMember(fileName); - if (logFile != null && logFile.exists()) - { - return logFile; - } - } - - return null; - } - - public static void createModelOutputLogFile(ILaunchConfiguration config, InputStream is, IProgressMonitor monitor) throws CoreException { - Assert.isNotNull(config); - IFolder targetFolder = ModelHelper.getModelTargetDirectory(config); - // Create targetFolder which might be missing if the model has never - // been checked but the user wants to load TLC output anyway. - // This happens with distributed TLC, where the model is executed - // remotely and the log is send to the user afterwards. - if (targetFolder == null || !targetFolder.exists()) { - String modelName = getModelName(config.getFile()); - targetFolder = config.getFile().getProject().getFolder(modelName); - targetFolder.create(true, true, monitor); - } - if (targetFolder != null && targetFolder.exists()) - { - // Always refresh the folder in case it has to override an existing - // file that is out-of-sync with the Eclipse foundation layer. - targetFolder.refreshLocal(IFolder.DEPTH_INFINITE, monitor); - - // Import MC.out - IFile mcOutFile = targetFolder.getFile(ModelHelper.FILE_OUT); - if (mcOutFile.exists()) { - mcOutFile.delete(true, monitor); - } - mcOutFile.create(is, true, monitor); // create closes the InputStream is. - - // Import MC_TE.out by copying the MC.out file to MC_TE.out. - // The reason why there are two identical files (MC.out and - // MC_TE.out) has been lost in history. - IFile mcTEOutfile = targetFolder.getFile(ModelHelper.TE_TRACE_SOURCE); - if (mcTEOutfile.exists()) { - mcTEOutfile.delete(true, monitor); - } - mcOutFile.copy(mcTEOutfile.getFullPath(), true, monitor); - } - } - - /** - * Retrieves the TLA file that is being model checked on the model run - * @param config configuration representing the model - * @return a file handle or <code>null</code> - */ - public static IFile getModelTLAFile(ILaunchConfiguration config) - { - Assert.isNotNull(config); - IFolder targetFolder = ModelHelper.getModelTargetDirectory(config); - if (targetFolder != null && targetFolder.exists()) - { - IFile mcFile = (IFile) targetFolder.findMember(ModelHelper.FILE_TLA); - if (mcFile != null && mcFile.exists()) - { - return mcFile; - } - } - return null; - } - - /** - * Retrives the TLA file used by the trace explorer - * @param config configuration representing the model - * @return a file handle or <code>null</code> - */ - public static IFile getTraceExplorerTLAFile(ILaunchConfiguration config) - { - Assert.isNotNull(config); - IFolder targetFolder = ModelHelper.getModelTargetDirectory(config); - if (targetFolder != null && targetFolder.exists()) - { - IFile teFile = (IFile) targetFolder.findMember(ModelHelper.TE_FILE_TLA); - if (teFile != null && teFile.exists()) - { - return teFile; - } - } - return null; - } - - /** - * Installs a model modification change listener - * @param provider provider for the file representing the model - * @param runnable a runnable to run if the model is changed - */ - public static IResourceChangeListener installModelModificationResourceChangeListener(final IFileProvider provider, - final Runnable runnable) - { - // construct the listener - IResourceChangeListener listener = new IResourceChangeListener() { - public void resourceChanged(IResourceChangeEvent event) - { - // get the marker changes - IMarkerDelta[] markerChanges = event.findMarkerDeltas(TLC_MODEL_IN_USE_MARKER, false); - - // usually this list has at most one element - for (int i = 0; i < markerChanges.length; i++) - { - if (provider.getResource(IFileProvider.TYPE_MODEL).equals(markerChanges[i].getResource())) - { - UIHelper.runUIAsync(runnable); - } - } - } - }; - - // add to the workspace root - ResourcesPlugin.getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_CHANGE); - - // return the listener - return listener; - } - - /** - * Checks whether the model is running or not - * @param config - * @return - * @throws CoreException - */ - public static boolean isModelRunning(ILaunchConfiguration config) throws CoreException - { - // marker - IFile resource = config.getFile(); - if (resource.exists()) - { - IMarker marker; - IMarker[] foundMarkers = resource.findMarkers(TLC_MODEL_IN_USE_MARKER, false, IResource.DEPTH_ZERO); - if (foundMarkers.length > 0) - { - marker = foundMarkers[0]; - // remove trash if any - for (int i = 1; i < foundMarkers.length; i++) - { - foundMarkers[i].delete(); - } - - return marker.getAttribute(MODEL_IS_RUNNING, false); - } else - { - return false; - } - } else - { - return false; - } - /* - // persistence property - String isLocked = config.getFile().getPersistentProperty(new QualifiedName(TLCActivator.PLUGIN_ID, MODEL_IS_RUNNING)); - if (isLocked == null) - { - return false; - } else { - return Boolean.getBoolean(isLocked); - } - */ - - /* - return config.getAttribute(MODEL_IS_RUNNING, false); - */ - } - - /** - * Checks whether the model is locked or not - * @param config - * @return - * @throws CoreException - */ - public static boolean isModelLocked(ILaunchConfiguration config) throws CoreException - { - // marker - IFile resource = config.getFile(); - if (resource.exists()) - { - IMarker marker; - IMarker[] foundMarkers = resource.findMarkers(TLC_MODEL_IN_USE_MARKER, false, IResource.DEPTH_ZERO); - if (foundMarkers.length > 0) - { - marker = foundMarkers[0]; - // remove trash if any - for (int i = 1; i < foundMarkers.length; i++) - { - foundMarkers[i].delete(); - } - - return marker.getAttribute(MODEL_IS_LOCKED, false); - } else - { - return false; - } - } else - { - return false; - } - /* - // persistence property - String isLocked = config.getFile().getPersistentProperty(new QualifiedName(TLCActivator.PLUGIN_ID, MODEL_IS_RUNNING)); - if (isLocked == null) - { - return false; - } else { - return Boolean.getBoolean(isLocked); - } - */ - - /* - return config.getAttribute(MODEL_IS_RUNNING, false); - */ - } - - /** - * Looks up if the model has a stale marker. The stale marker is installed in case, - * if the model is locked, but no TLC is running on this model. - * @param config - * @return - * @throws CoreException - */ - public static boolean isModelStale(ILaunchConfiguration config) throws CoreException - { - // marker - IFile resource = config.getFile(); - if (resource.exists()) - { - IMarker[] foundMarkers = resource.findMarkers(TLC_CRASHED_MARKER, false, IResource.DEPTH_ZERO); - if (foundMarkers.length > 0) - { - return true; - } else - { - return false; - } - } else - { - return false; - } - } - - /** - * Returns whether the original trace or the trace with trace explorer expressions from the - * most recent run of the trace explorer for the model should be shown in the TLC error view. - * - * See {@link ModelHelper#setOriginalTraceShown(ILaunchConfiguration, boolean)} for setting this - * return value. - * - * @param config - * @return whether the original trace or the trace with trace explorer expressions from the - * most recent run of the trace explorer for the model should be shown in the TLC error view - * @throws CoreException - */ - public static boolean isOriginalTraceShown(ILaunchConfiguration config) throws CoreException - { - // marker - IFile resource = config.getFile(); - if (resource.exists()) - { - IMarker marker; - IMarker[] foundMarkers = resource.findMarkers(TRACE_EXPLORER_MARKER, false, IResource.DEPTH_ZERO); - if (foundMarkers.length > 0) - { - marker = foundMarkers[0]; - // remove trash if any - for (int i = 1; i < foundMarkers.length; i++) - { - foundMarkers[i].delete(); - } - - return marker.getAttribute(IS_ORIGINAL_TRACE_SHOWN, true); - } else - { - return true; - } - } else - { - return true; - } - } - - /** - * Tries to recover model after an abnormal TLC termination - * It deletes all temporary files on disk and restores the state to unlocked. - * @param config - */ - public static void recoverModel(ILaunchConfiguration config) throws CoreException - { - IFile resource = config.getFile(); - if (resource.exists()) - { - // remove any crashed markers - IMarker[] foundMarkers = resource.findMarkers(TLC_CRASHED_MARKER, false, IResource.DEPTH_ZERO); - if (foundMarkers.length == 0) - { - return; - } - - ModelHelper.cleanUp(config); - - for (int i = 0; i < foundMarkers.length; i++) - { - foundMarkers[i].delete(); - } - - foundMarkers = resource.findMarkers(TLC_MODEL_IN_USE_MARKER, false, IResource.DEPTH_ZERO); - for (int i = 0; i < foundMarkers.length; i++) - { - foundMarkers[i].delete(); - } - } - } - - /** - * Cleans up the TLC working directory - * @param config - */ - private static void cleanUp(ILaunchConfiguration config) throws CoreException - { - - } - - /** - * Signals that the model is staled - */ - public static void staleModel(ILaunchConfiguration config) throws CoreException - { - config.getFile().createMarker(TLC_CRASHED_MARKER); - } - - /** - * Signals the start of model execution - * @param config - * @param isRunning whether TLC is running on the config or not - */ - public static void setModelRunning(ILaunchConfiguration config, boolean isRunning) throws CoreException - { - IFile resource = config.getFile(); - if (resource.exists()) - { - IMarker marker; - IMarker[] foundMarkers = resource.findMarkers(TLC_MODEL_IN_USE_MARKER, false, IResource.DEPTH_ZERO); - if (foundMarkers.length > 0) - { - marker = foundMarkers[0]; - // remove trash if any - for (int i = 1; i < foundMarkers.length; i++) - { - foundMarkers[i].delete(); - } - } else - { - marker = resource.createMarker(TLC_MODEL_IN_USE_MARKER); - } - - marker.setAttribute(MODEL_IS_RUNNING, isRunning); - } - /* - // persistence property - config.getFile().setPersistentProperty(new QualifiedName(TLCActivator.PLUGIN_ID, MODEL_IS_RUNNING), Boolean.toString(true)); - */ - - /* - // file modification - ModelHelper.writeAttributeValue(config, IModelConfigurationConstants.MODEL_IS_RUNNING, true); - */ - } - - /** - * Signals that the model is locked if isLocked is true, signals that - * the model is unlocked if isLocked is false - * @param config - * @param lock whether the model should be locked or not - * @throws CoreException - */ - public static void setModelLocked(ILaunchConfiguration config, boolean lock) throws CoreException - { - IFile resource = config.getFile(); - if (resource.exists()) - { - IMarker marker; - IMarker[] foundMarkers = resource.findMarkers(TLC_MODEL_IN_USE_MARKER, false, IResource.DEPTH_ZERO); - if (foundMarkers.length > 0) - { - marker = foundMarkers[0]; - // remove trash if any - for (int i = 1; i < foundMarkers.length; i++) - { - foundMarkers[i].delete(); - } - } else - { - marker = resource.createMarker(TLC_MODEL_IN_USE_MARKER); - } - - marker.setAttribute(MODEL_IS_LOCKED, lock); - } - /* - // persistence property - config.getFile().setPersistentProperty(new QualifiedName(TLCActivator.PLUGIN_ID, MODEL_IS_RUNNING), Boolean.toString(true)); - */ - - /* - // file modification - ModelHelper.writeAttributeValue(config, IModelConfigurationConstants.MODEL_IS_RUNNING, true); - */ - } - - /** - * Sets whether the original trace or the trace with trace explorer expressions - * should be shown in the TLC error view for the model represented by this - * configuration. - * - * Code the raises the TLC error view or updates the TLC error view for a model - * can use {@link ModelHelper#isOriginalTraceShown(ILaunchConfiguration)} to determine - * if the original trace should be shown for a given model. - * - * @param config - * @param isOriginalTraceShown true if the original trace should be shown, false if - * the trace with trace explorer expressions should be shown - */ - public static void setOriginalTraceShown(ILaunchConfiguration config, boolean isOriginalTraceShown) - throws CoreException - { - IFile resource = config.getFile(); - if (resource.exists()) - { - IMarker marker; - IMarker[] foundMarkers = resource.findMarkers(TRACE_EXPLORER_MARKER, false, IResource.DEPTH_ZERO); - if (foundMarkers.length > 0) - { - marker = foundMarkers[0]; - // remove trash if any - for (int i = 1; i < foundMarkers.length; i++) - { - foundMarkers[i].delete(); - } - } else - { - marker = resource.createMarker(TRACE_EXPLORER_MARKER); - } - - marker.setAttribute(IS_ORIGINAL_TRACE_SHOWN, isOriginalTraceShown); - } - } - - /** - * Write a boolean value into the launch config and saves it - * @param config - * @param attributeName - * @param value - */ - public static void writeAttributeValue(ILaunchConfiguration config, String attributeName, boolean value) - throws CoreException - { - ILaunchConfigurationWorkingCopy copy; - if (config instanceof ILaunchConfigurationWorkingCopy) - { - copy = (ILaunchConfigurationWorkingCopy) config; - } else - { - copy = config.getWorkingCopy(); - } - - copy.setAttribute(attributeName, value); - copy.doSave(); - } - - /** - * Simple interface for getting a resource - */ - public static interface IFileProvider - { - public static final int TYPE_MODEL = 1; - public static final int TYPE_RESULT = 2; - - public IFile getResource(int type); - } - - /** - * Remove a model marker of a particular type - * @param configuration the model to remove markers from - * @param type the marker type - */ - public static void removeModelProblemMarkers(ILaunchConfiguration configuration, String type) - { - try - { - IMarker[] foundMarkers = configuration.getFile().findMarkers(type, true, IResource.DEPTH_ONE); - for (int i = 0; i < foundMarkers.length; i++) - { - foundMarkers[i].delete(); - } - } catch (CoreException e) - { - TLCActivator.logError("Error removing model markers", e); - } - } - - /** - * Delete all model error markers from a resource - * @param configuration the model to remove markers from - */ - public static void removeModelProblemMarkers(ILaunchConfiguration configuration) - { - removeModelProblemMarkers(configuration, TLC_MODEL_ERROR_MARKER); - } - - /** - * Installs a marker on the model - * @param resource the model file to install markers on - * @param properties a map of attribute names to attribute values - * (key type : <code>String</code> value type : <code>String</code>, - * <code>Integer</code>, or <code>Boolean</code>) or <code>null</code> - */ - public static IMarker installModelProblemMarker(IResource resource, Map<String, Object> properties, String markerType) - { - Assert.isNotNull(resource); - Assert.isTrue(resource.exists()); - - try - { - // create an empty marker - IMarker marker = resource.createMarker(markerType); - marker.setAttributes(properties); - return marker; - } catch (CoreException e) - { - TLCActivator.logError("Error installing a model marker", e); - } - - return null; - } - /** * For an given id that is used in the document retrieves the four coordinates of it's first occurrence. * @param document @@ -1313,21 +478,6 @@ public class ModelHelper implements IModelConfigurationConstants, IModelConfigur } } - /** - * Converts four-int-location to a region - * @param document - * @param location - * @return - * @throws BadLocationException - * @deprecated use {@link AdapterFactory#locationToRegion(IDocument, Location)} instead - */ - public static IRegion locationToRegion(IDocument document, Location location) throws BadLocationException - { - int offset = document.getLineOffset(location.beginLine() - 1) + location.beginColumn() - 1; - int length = document.getLineOffset(location.endLine() - 1) + location.endColumn() - offset; - return new Region(offset, length); - } - /** * Recalculate region in a document to four-int-coordinates * @param document @@ -1386,7 +536,6 @@ public class ModelHelper implements IModelConfigurationConstants, IModelConfigur * Using the supplied findReplaceAdapter finds the name of the attribute * (saved in the comment, previous to the region in which the error has been detected) * - * @param configuration the configuration of the launch * @param document the document of the file containing the generated model .tla file * @param searchAdapter the search adapter on the document * @param message the error message @@ -1405,7 +554,7 @@ public class ModelHelper implements IModelConfigurationConstants, IModelConfigur * </ul> * @throws CoreException if something goes wrong */ - public static Hashtable<String, Object> createMarkerDescription(ILaunchConfiguration configuration, IDocument document, + public static Hashtable<String, Object> createMarkerDescription(IDocument document, FindReplaceDocumentAdapter searchAdapter, String message, int severity, int[] coordinates) throws CoreException { @@ -1674,7 +823,7 @@ public class ModelHelper implements IModelConfigurationConstants, IModelConfigur } else if (attributeName.equals(MODEL_PARAMETER_VIEW)) { return "View"; - } else if (attributeName.equals(MODEL_EXPRESSION_EVAL)) + } else if (attributeName.equals(Model.MODEL_EXPRESSION_EVAL)) { return "Expression"; } @@ -1682,99 +831,6 @@ public class ModelHelper implements IModelConfigurationConstants, IModelConfigur } /** - * Retrieves error markers of the model - * @param config - * @return - * @throws CoreException - */ - public static IMarker[] getModelProblemMarker(ILaunchConfiguration config) throws CoreException - { - IFile resource = config.getFile(); - if (resource.exists()) - { - IMarker[] foundMarkers = resource.findMarkers(TLC_MODEL_ERROR_MARKER, true, IResource.DEPTH_ZERO); - return foundMarkers; - } - - return new IMarker[0]; - } - - /** - * Checks whether the checkpoint files exist for a given model - * If doRefresh is set to true, this method will refresh the model directory, - * and if a checkpoint folder is found, it will refresh the contents of that folder. - * This means that the eclipse workspace representation of that directory will - * synch with the file system. This is a long running job, so this method should not - * be called within the running of another job unless the scheduling rule for - * refreshing the model directory is included in the scheduling rule of the job which - * is calling this method. This scheduling rule can be found by calling - * - * Note: Because the Toolbox deletes any existing checkpoint when running TLC, - * there should be at most one checkpoint. Therefore, this method should return an array - * of length 0 or 1. - * - * {@link IResourceRuleFactory#refreshRule(IResource)} - * @param config - * @param doRefresh whether the model directory's contents and any checkpoint - * folders contents should be refreshed - * @return the array of checkpoint directories, sorted from last to first - */ - public static IResource[] getCheckpoints(ILaunchConfiguration config, boolean doRefresh) throws CoreException - { - // yy-MM-dd-HH-mm-ss - Pattern pattern = Pattern.compile("[0-9]{2}-[0-9]{2}-[0-9]{2}-[0-9]{2}-[0-9]{2}-[0-9]{2}"); - - Vector<IResource> checkpoints = new Vector<IResource>(); - IFolder directory = getModelTargetDirectory(config); - - if (directory != null && directory.exists()) - { - // refreshing is necessary because TLC creates - // the checkpoint folders, but they may not have - // been incorporated into the toolbox workspace - // yet - // the depth is one to find any checkpoint folders - if (doRefresh) - { - directory.refreshLocal(IResource.DEPTH_ONE, null); - } - IResource[] members = directory.members(); - for (int i = 0; i < members.length; i++) - { - if (members[i].getType() == IResource.FOLDER) - { - Matcher matcher = pattern.matcher(members[i].getName()); - if (matcher.matches()) - { - // if there is a checkpoint folder, it is necessary - // to refresh its contents because they may not - // be part of the workspace yet - if (doRefresh) - { - members[i].refreshLocal(IResource.DEPTH_ONE, null); - } - if (((IFolder) members[i]).findMember(CHECKPOINT_QUEUE) != null - && ((IFolder) members[i]).findMember(CHECKPOINT_VARS) != null - && ((IFolder) members[i]).findMember(CHECKPOINT_STATES) != null) - { - checkpoints.add(members[i]); - } - } - } - } - } - IResource[] result = (IResource[]) checkpoints.toArray(new IResource[checkpoints.size()]); - // sort the result - Arrays.sort(result, new Comparator<IResource>() { - public int compare(IResource arg0, IResource arg1) - { - return arg0.getName().compareTo(arg1.getName()); - } - }); - - return result; - } - /** * Find the IDs in the given text and return the array of * regions pointing to those or an empty array, if no IDs were found. @@ -1915,65 +971,6 @@ public class ModelHelper implements IModelConfigurationConstants, IModelConfigur } } - - public static void deleteModels(ILaunchConfiguration[] ilcs, IProgressMonitor monitor) throws CoreException { - for (int i = 0; i < ilcs.length; i++) { - deleteModel(ilcs[i], monitor); - } - } - - /** - * Deletes the given model plus its model folder - * @param monitor - * @param ilc the config file corresponding to the model folder - * @throws CoreException - */ - public static void deleteModel(final ILaunchConfiguration ilc, - IProgressMonitor monitor) throws CoreException { - - final IResource[] members; - - // if the model has never been model checked, no model folder will exist - final IFolder modelFolder = ModelHelper.getModelTargetDirectory(ilc); - if(modelFolder != null) { - members = new IResource[2]; - members[0] = modelFolder; // model folder - members[1] = ilc.getFile(); // modle launch config - } else { - members = new IResource[]{ilc.getFile()}; - } - - // schedule combined deletion of both the model folder as well as the - // launch config - final ISchedulingRule deleteRule = ResourceHelper.getDeleteRule(members); - - ResourcesPlugin.getWorkspace().run( - new IWorkspaceRunnable() { - - /* (non-Javadoc) - * @see org.eclipse.core.resources.IWorkspaceRunnable#run(org.eclipse.core.runtime.IProgressMonitor) - */ - public void run(IProgressMonitor subMonitor) - throws CoreException { - subMonitor.beginTask("Deleting files", members.length); - - // actually deletes all IResource members - try { - for (int i = 0; i < members.length; i++) { - members[i].delete(IResource.FORCE, - new SubProgressMonitor(subMonitor, 1)); - } - } catch (CoreException e) { - TLCActivator.logError("Error deleting a file " - + e.getMessage(), e); - throw e; - } - - subMonitor.done(); - } - }, deleteRule, IWorkspace.AVOID_UPDATE, - new SubProgressMonitor(monitor, members.length)); - } /** * Copies the module files that are extended by specRootFile into the @@ -2011,101 +1008,6 @@ public class ModelHelper implements IModelConfigurationConstants, IModelConfigur } } - /** - * Returns a possibly empty List of {@link SimpleTLCState} that represents - * the error trace produced by the most recent run of TLC on config, if an error - * trace was produced. - * - * @param config - * @return - */ - public static List<SimpleTLCState> getErrorTrace(ILaunchConfiguration config) - { - // try - // { - // File logFile = getModelOutputLogFile(config, false).getFullPath().toFile(); - // if (logFile.exists()) - // { - // FileInputStream fis = new FileInputStream(logFile); - // } else - // { - // TLCActivator.getDefault().logDebug("Could not locate log file for model " + config.getName() + "."); - // } - // } catch (FileNotFoundException e) - // { - // e.printStackTrace(); - // } - - /* - * Use a file editor input and file document provider to gain access to the - * document representation of the file containing the trace. - */ - FileEditorInput logFileEditorInput = new FileEditorInput(getTraceSourceFile(config)); - FileDocumentProvider logFileDocumentProvider = new FileDocumentProvider(); - try - { - logFileDocumentProvider.connect(logFileEditorInput); - IDocument logFileDocument = logFileDocumentProvider.getDocument(logFileEditorInput); - - FindReplaceDocumentAdapter logFileSearcher = new FindReplaceDocumentAdapter(logFileDocument); - - // the regular expression for searching for the start tag for state print outs - String regExStartTag = MP.DELIM + MP.STARTMSG + "[0-9]{4}" + MP.COLON + MP.STATE + SPACE + MP.DELIM + CR; - // the regular expression for searching for the end tag for state print outs - String regExEndTag = MP.DELIM + MP.ENDMSG + "[0-9]{4}" + SPACE + MP.DELIM; - - IRegion startTagRegion = logFileSearcher.find(0, regExStartTag, true, true, false, true); - - // vector of SimpleTLCStates - Vector<SimpleTLCState> trace = new Vector<SimpleTLCState>(); - - while (startTagRegion != null) - { - IRegion endTagRegion = logFileSearcher.find(startTagRegion.getOffset() + startTagRegion.getLength(), - regExEndTag, true, true, false, true); - - if (endTagRegion != null) - { - int stateInputStart = startTagRegion.getOffset() + startTagRegion.getLength(); - int stateInputLength = endTagRegion.getOffset() - stateInputStart; - // string from which the state can be parsed - String stateInputString = logFileDocument.get(stateInputStart, stateInputLength); - - trace.add(SimpleTLCState.parseSimpleTLCState(stateInputString)); - - } else - { - TLCActivator.logDebug("Found start tag region in model log file without end tag for model " - + config.getName() + "."); - } - // TLCActivator.getDefault().logDebug(logFileDocument.get(startTagRegion.getOffset() + startTagRegion.getLength(), - // endTagRegion.getOffset() - startTagRegion.getLength() - startTagRegion.getOffset())); - - startTagRegion = logFileSearcher.find(startTagRegion.getOffset() + startTagRegion.getLength(), - regExStartTag, true, true, false, true); - } - - return trace; - } catch (CoreException e) - { - TLCActivator.logError("Error connecting to model log file for model " + config.getName() + ".", e); - } catch (BadLocationException e) - { - TLCActivator.logError("Error searching model log file for " + config.getName() + ".", e); - } finally - { - /* - * The document provider is not needed. Always disconnect it to avoid a memory leak. - * - * Keeping it connected only seems to provide synchronization of - * the document with file changes. That is not necessary in this context. - */ - logFileDocumentProvider.disconnect(logFileEditorInput); - } - - return new Vector<SimpleTLCState>(); - } - /** * Determines if the spec with root module rootModuleName is dependent on a * module with the same name as the root module used for model checking. @@ -2161,36 +1063,19 @@ public class ModelHelper implements IModelConfigurationConstants, IModelConfigur return false; } - - /** - * Returns a handle to the output file {@link ModelHelper#TE_TRACE_SOURCE} used by the - * trace explorer to retrieve the trace from the most recent run of TLC on - * the config. - * - * Note that this is a handle-only operation. The file need not exist in the - * underlying file system. - * - * @param config - * @return - */ - public static IFile getTraceSourceFile(ILaunchConfiguration config) - { - - Assert.isNotNull(config); - IFolder targetFolder = ModelHelper.getModelTargetDirectory(config); - if (targetFolder != null && targetFolder.exists()) - { - IFile logFile = targetFolder.getFile(TE_TRACE_SOURCE); - Assert.isNotNull(logFile); - return logFile; - } - return null; - } + + public static String prettyPrintConstants(final Model model, String delim) throws CoreException { + return prettyPrintConstants(model.getLaunchConfiguration(), delim, false); + } public static String prettyPrintConstants(final ILaunchConfiguration config, String delim) throws CoreException { return prettyPrintConstants(config, delim, false); } + public static String prettyPrintConstants(final Model model, String delim, boolean align) throws CoreException { + return prettyPrintConstants(model.getLaunchConfiguration(), delim, align); + } + public static String prettyPrintConstants(final ILaunchConfiguration config, String delim, boolean align) throws CoreException { final List<Assignment> assignments = deserializeAssignmentList( config.getAttribute(IModelConfigurationConstants.MODEL_PARAMETER_CONSTANTS, new ArrayList<String>())); diff --git a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/util/ModelNameValidator.java b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/util/ModelNameValidator.java index 009dc1747d0588e96cf44d4864a6abd7f409fbff..c88b507b08520ae71b9c328367433a2fd24f57dd 100644 --- a/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/util/ModelNameValidator.java +++ b/org.lamport.tla.toolbox.tool.tlc/src/org/lamport/tla/toolbox/tool/tlc/util/ModelNameValidator.java @@ -3,21 +3,20 @@ */ package org.lamport.tla.toolbox.tool.tlc.util; -import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IStatus; -import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.jface.dialogs.IInputValidator; +import org.lamport.tla.toolbox.spec.Spec; +import org.lamport.tla.toolbox.tool.tlc.model.Model; +import org.lamport.tla.toolbox.tool.tlc.model.TLCSpec; public class ModelNameValidator implements IInputValidator { - private final IProject project; - - public ModelNameValidator(IProject project) - { - this.project = project; - + private final Spec spec; + + public ModelNameValidator(Spec spec) { + this.spec = spec; } public String isValid(String newText) @@ -27,7 +26,7 @@ public class ModelNameValidator implements IInputValidator { return "Model name must be not empty"; } - ILaunchConfiguration existingModel = ModelHelper.getModelByName(project, newText); + Model existingModel = spec.getAdapter(TLCSpec.class).getModel(newText); if (existingModel != null) { return "Model with the name " + newText + " already exists. Please choose a different name"; @@ -35,9 +34,9 @@ public class ModelNameValidator implements IInputValidator // a model name cannot start with the name of the spec + __ // this causes a NPE in OpenModelHandler because the method // ModelHelper.getModelByName() will not be able to find the model - if (newText.indexOf(project.getName()+"___") == 0) + if (newText.indexOf(spec.getName()+"___") == 0) { - return "Model name cannot begin with \"" + project.getName() + "___\"."; + return "Model name cannot begin with \"" + spec.getName() + "___\"."; } if (newText.contains(":")) { return "Model name cannot contain ':' characters."; diff --git a/examples/DieHard/DieHard.cfg b/org.lamport.tla.toolbox.uitest/DieHard/DieHard.cfg similarity index 100% rename from examples/DieHard/DieHard.cfg rename to org.lamport.tla.toolbox.uitest/DieHard/DieHard.cfg diff --git a/examples/DieHard/DieHard.tla b/org.lamport.tla.toolbox.uitest/DieHard/DieHard.tla similarity index 100% rename from examples/DieHard/DieHard.tla rename to org.lamport.tla.toolbox.uitest/DieHard/DieHard.tla diff --git a/examples/N-Queens/Queens.toolbox/.project b/org.lamport.tla.toolbox.uitest/DieHard/DieHard.toolbox/.project similarity index 82% rename from examples/N-Queens/Queens.toolbox/.project rename to org.lamport.tla.toolbox.uitest/DieHard/DieHard.toolbox/.project index f3367dca575e603235849c745cfff73e795c33fe..eb9e72f4aef867e4a640e2737f99879ed9782dc2 100644 --- a/examples/N-Queens/Queens.toolbox/.project +++ b/org.lamport.tla.toolbox.uitest/DieHard/DieHard.toolbox/.project @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <projectDescription> - <name>Queens</name> + <name>DieHard</name> <comment></comment> <projects> </projects> @@ -21,9 +21,9 @@ </natures> <linkedResources> <link> - <name>Queens.tla</name> + <name>DieHard.tla</name> <type>1</type> - <location>/Users/merz/projects/tla/Queens.tla</location> + <locationURI>PARENT-1-PROJECT_LOC/DieHard.tla</locationURI> </link> </linkedResources> </projectDescription> diff --git a/org.lamport.tla.toolbox.uitest/DieHard/DieHard.toolbox/.settings/org.lamport.tla.toolbox.prefs b/org.lamport.tla.toolbox.uitest/DieHard/DieHard.toolbox/.settings/org.lamport.tla.toolbox.prefs new file mode 100644 index 0000000000000000000000000000000000000000..f80647dfed7bee785185cd1b9faca015a17075de --- /dev/null +++ b/org.lamport.tla.toolbox.uitest/DieHard/DieHard.toolbox/.settings/org.lamport.tla.toolbox.prefs @@ -0,0 +1,2 @@ +ProjectRootFile=PARENT-1-PROJECT_LOC/DieHard.tla +eclipse.preferences.version=1 diff --git a/org.lamport.tla.toolbox.uitest/META-INF/MANIFEST.MF b/org.lamport.tla.toolbox.uitest/META-INF/MANIFEST.MF index 8ad2332b6df7fe6c9eb83bd62c0318d3d1bbdd5f..039a173c1b91f593f062aa74711ea86399acfd2e 100644 --- a/org.lamport.tla.toolbox.uitest/META-INF/MANIFEST.MF +++ b/org.lamport.tla.toolbox.uitest/META-INF/MANIFEST.MF @@ -5,12 +5,16 @@ Bundle-SymbolicName: org.lamport.tla.toolbox.uitest Bundle-Version: 1.0.0.qualifier Bundle-Vendor: Leslie Lamport, Markus Alexander Kuppe Bundle-RequiredExecutionEnvironment: J2SE-1.5 -Import-Package: org.osgi.framework;version="1.3.0" +Import-Package: org.eclipse.core.resources, + org.lamport.tla.toolbox.editor.basic, + org.osgi.framework;version="1.3.0" Require-Bundle: org.eclipse.swt;bundle-version="3.5.0";visibility:=reexport, org.eclipse.swtbot.go;bundle-version="2.0.0";visibility:=reexport, org.aspectj.runtime;bundle-version="1.6.0";visibility:=reexport, org.lamport.tla.toolbox;bundle-version="1.0.0";visibility:=reexport, - org.apache.log4j;visibility:=reexport + org.apache.log4j;visibility:=reexport, + org.eclipse.ui.editors;bundle-version="3.9.0", + org.eclipse.ui.forms;bundle-version="3.6.200" Eclipse-RegisterBuddy: org.apache.log4j Eclipse-SupplementBundle: org.lamport.tla.toolbox* Export-Package: org.lamport.tla.toolbox.test, diff --git a/org.lamport.tla.toolbox.uitest/pom.xml b/org.lamport.tla.toolbox.uitest/pom.xml index 17fd3fd9b207705aa3571190e9308c501baa40d0..501526535b348f389f00c388eee5b278ce929092 100644 --- a/org.lamport.tla.toolbox.uitest/pom.xml +++ b/org.lamport.tla.toolbox.uitest/pom.xml @@ -13,6 +13,10 @@ <artifactId>org.lamport.tla.toolbox.uitest</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>eclipse-test-plugin</packaging> + <properties> + <!-- Do not include test project in Sonar reporting. --> + <sonar.skip>true</sonar.skip> + </properties> <dependencies> <dependency> @@ -32,6 +36,22 @@ <build> <plugins> + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <version>0.7.9</version> + <executions> + <execution> + <goals> + <goal>prepare-agent</goal> + </goals> + <configuration> + <!-- Where to put jacoco coverage report --> + <destFile>target/jacoco.exec</destFile> + </configuration> + </execution> + </executions> + </plugin> <!-- Compile java sources and exclude aspects --> <plugin> <groupId>org.eclipse.tycho</groupId> @@ -71,7 +91,7 @@ <showEclipseLog>true</showEclipseLog> <useUIHarness>true</useUIHarness> <useUIThread>${tycho.test.vm.useUiThread}</useUIThread> - <argLine>${tycho.test.vm.argline}</argLine> + <argLine>${tycho.test.vm.argline} ${tycho.testArgLine}</argLine> <!-- use our product and application to launch the tests --> <product>org.lamport.tla.toolbox.product.standalone.product</product> <application>org.lamport.tla.toolbox.application</application> @@ -79,7 +99,7 @@ <systemProperties combine.children="append"> <!-- References used by tests to access spec files --> <org.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecA>${project.build.directory}/../org.lamport.tla.toolbox.test/farsite/DistributedSystemModule.tla</org.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecA> - <org.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecB>${project.build.directory}/../../examples/DieHard/DieHard.tla</org.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecB> + <org.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecB>${project.build.directory}/../org.lamport.tla.toolbox.uitest/DieHard/DieHard.tla</org.lamport.tla.toolbox.tool.tlc.ui.test.PathToSpecB> </systemProperties> <dependencies> diff --git a/org.lamport.tla.toolbox.uitest/src/org/lamport/tla/toolbox/ui/handler/DeleteSpecHandlerTest.java b/org.lamport.tla.toolbox.uitest/src/org/lamport/tla/toolbox/ui/handler/DeleteSpecHandlerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..96ffcf02b86dd30408fc1a80c5dfb1726baeb8ee --- /dev/null +++ b/org.lamport.tla.toolbox.uitest/src/org/lamport/tla/toolbox/ui/handler/DeleteSpecHandlerTest.java @@ -0,0 +1,146 @@ +package org.lamport.tla.toolbox.ui.handler; + +import static org.eclipse.swtbot.swt.finder.matchers.WidgetMatcherFactory.withText; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; + +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.Path; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.MenuItem; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot; +import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView; +import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner; +import org.eclipse.swtbot.swt.finder.matchers.WidgetMatcherFactory; +import org.eclipse.swtbot.swt.finder.waits.Conditions; +import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree; +import org.eclipse.ui.PlatformUI; +import org.hamcrest.Matcher; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.lamport.tla.toolbox.Activator; +import org.lamport.tla.toolbox.spec.Spec; +import org.lamport.tla.toolbox.test.RCPTestSetupHelper; +import org.lamport.tla.toolbox.ui.navigator.ToolboxExplorer; +import org.lamport.tla.toolbox.util.ResourceHelper; +import org.lamport.tla.toolbox.util.UIHelper; + +@RunWith(SWTBotJunit4ClassRunner.class) +public class DeleteSpecHandlerTest { + + private static SWTWorkbenchBot bot; + + @BeforeClass + public static void beforeClass() throws Exception { + RCPTestSetupHelper.beforeClass(); + + // Force shell activation to counter, no active Shell when running SWTBot tests in Xvfb/Xvnc + // see https://wiki.eclipse.org/SWTBot/Troubleshooting#No_active_Shell_when_running_SWTBot_tests_in_Xvfb + Display.getDefault().syncExec(new Runnable() { + public void run() { + PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().forceActive(); + } + }); + + bot = new SWTWorkbenchBot(); + + // Wait for the Toolbox shell to be available + final Matcher<Shell> withText = withText("TLA+ Toolbox"); + bot.waitUntil(Conditions.waitForShell(withText), 30000); + + // Wait for the Toolbox UI to be fully started. + final Matcher<MenuItem> withMnemonic = WidgetMatcherFactory.withMnemonic("File"); + final Matcher<MenuItem> matcher = WidgetMatcherFactory.allOf(WidgetMatcherFactory.widgetOfType(MenuItem.class), + withMnemonic); + bot.waitUntil(Conditions.waitForMenu(bot.shell("TLA+ Toolbox"), matcher), 30000); + } + + @Test + public void deleteMultipleSpecs() throws CoreException, IOException { + // Make sure there are no specs at first + assertEquals(0, Activator.getSpecManager().getSpecs().size()); + + // create a valid path + File fileA = File.createTempFile("DeleteMultiSpecA", ".tla"); + fileA.delete(); + // Create the spec file + ResourcesPlugin.getWorkspace().run(ResourceHelper.createTLAModuleCreationOperation(new Path(fileA.getAbsolutePath())), + new NullProgressMonitor()); + // Create the spec + final Spec spec = Spec.createNewSpec("SpecA", fileA.getAbsolutePath(), false, new NullProgressMonitor()); + // Register the spec + Activator.getSpecManager().addSpec(spec); + + // create a second valid path + File fileB = File.createTempFile("DeleteMultiSpecB", ".tla"); + fileB.delete(); + // Create the spec file + ResourcesPlugin.getWorkspace().run(ResourceHelper.createTLAModuleCreationOperation(new Path(fileB.getAbsolutePath())), + new NullProgressMonitor()); + // Create the spec + Spec specB = Spec.createNewSpec("SpecB", fileB.getAbsolutePath(), false, new NullProgressMonitor()); + // Register the spec + Activator.getSpecManager().addSpec(specB); + + // Make sure there are no specs at first + assertEquals(2, Activator.getSpecManager().getSpecs().size()); + + Activator.getSpecManager().setSpecLoaded(spec); + + // Trigger update so that both specs show up in the explorer + UIHelper.runUISync(new Runnable() { + public void run() { + ToolboxExplorer.refresh(); + final HashMap<String, String> parameters = new HashMap<String, String>(); + parameters.put(OpenSpecHandler.PARAM_SPEC, spec.getName()); + + // runs the command + UIHelper.runCommand(OpenSpecHandler.COMMAND_ID, parameters); + } + }); + + bot.waitUntil(new SpecEditorOpenCondition(fileA.getName())); + + // Make sure one spec is open and has an editor + assertEquals(1, UIHelper.getActivePage().getEditorReferences().length); + assertNotNull(Activator.getSpecManager().getSpecLoaded()); + + // Select tree + SWTBotView specExplorer = bot.viewById(ToolboxExplorer.VIEW_ID); + specExplorer.setFocus(); + + // select tree items + final SWTBotTree specExplorerTree = specExplorer.bot().tree(); + specExplorerTree.select(bot.tree().getTreeItem("SpecA [ " + fileA.getName() + " ]"), + bot.tree().getTreeItem("SpecB [ " + fileB.getName() + " ]")); + + // main menu delete + bot.menu("Edit").menu("Delete").click(); + + // click the two dialogs that confirm deletion + bot.shell("Delete specification?").activate(); + bot.button("Yes").click(); + bot.shell("Delete specification?").activate(); + bot.button("Yes").click(); + + // Make sure all specs are gone + assertEquals(0, Activator.getSpecManager().getSpecs().size()); + + // Make sure no editor remained open + assertEquals(0, UIHelper.getActivePage().getEditorReferences().length); + } + + @AfterClass + public static void sleep() { + bot.sleep(2000); + } +} diff --git a/org.lamport.tla.toolbox.uitest/src/org/lamport/tla/toolbox/ui/handler/SpecEditorOpenCondition.java b/org.lamport.tla.toolbox.uitest/src/org/lamport/tla/toolbox/ui/handler/SpecEditorOpenCondition.java new file mode 100644 index 0000000000000000000000000000000000000000..55cc3e0a860560eabe9498cbc7d6766d35d5e5e5 --- /dev/null +++ b/org.lamport.tla.toolbox.uitest/src/org/lamport/tla/toolbox/ui/handler/SpecEditorOpenCondition.java @@ -0,0 +1,34 @@ +package org.lamport.tla.toolbox.ui.handler; + +import org.eclipse.swtbot.swt.finder.waits.DefaultCondition; +import org.eclipse.ui.IEditorPart; +import org.lamport.tla.toolbox.editor.basic.TLAEditorAndPDFViewer; +import org.lamport.tla.toolbox.util.UIHelper; + +public class SpecEditorOpenCondition extends DefaultCondition { + + private String prefix = ""; + + public SpecEditorOpenCondition(final String aPrefix) { + prefix = aPrefix; + } + + /* (non-Javadoc) + * @see org.eclipse.swtbot.swt.finder.waits.ICondition#test() + */ + public boolean test() throws Exception { + IEditorPart activeEditor = UIHelper.getActiveEditor(); + if(activeEditor instanceof TLAEditorAndPDFViewer) { + final String aTitle = activeEditor.getTitle(); + return aTitle.startsWith(prefix); + } + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.swtbot.swt.finder.waits.ICondition#getFailureMessage() + */ + public String getFailureMessage() { + return String.format("Timed out waiting for editor with %s to open", prefix); + } +} diff --git a/org.lamport.tla.toolbox/META-INF/MANIFEST.MF b/org.lamport.tla.toolbox/META-INF/MANIFEST.MF index 0e2ce0338024cbfa869aec5d08e5db318df6239e..61031a1930fdd347833a007b8a93d0a245446251 100644 --- a/org.lamport.tla.toolbox/META-INF/MANIFEST.MF +++ b/org.lamport.tla.toolbox/META-INF/MANIFEST.MF @@ -65,8 +65,12 @@ Export-Package: org.lamport.tla.toolbox, org.lamport.tla.toolbox.util.pref Eclipse-BundleShape: dir Import-Package: org.eclipse.e4.core.contexts, + org.eclipse.e4.core.services.events, org.eclipse.e4.ui.model.application, org.eclipse.e4.ui.model.application.ui, org.eclipse.e4.ui.model.application.ui.basic, - org.eclipse.e4.ui.workbench.modeling + org.eclipse.e4.ui.workbench, + org.eclipse.e4.ui.workbench.lifecycle, + org.eclipse.e4.ui.workbench.modeling, + org.osgi.service.event;version="1.3.0" diff --git a/org.lamport.tla.toolbox/plugin.xml b/org.lamport.tla.toolbox/plugin.xml index 1ec66e70c268c16786f24ef42eb51daac4262b38..8336e07b903edbc0c64d6044d1c75dbe71ba893c 100644 --- a/org.lamport.tla.toolbox/plugin.xml +++ b/org.lamport.tla.toolbox/plugin.xml @@ -221,6 +221,11 @@ description="Create a new specification" id="toolbox.command.spec.new" name="New Specification"> + <commandParameter + id="toolbox.command.spec.new.param" + name="specPath" + optional="true"> + </commandParameter> </command> <command categoryId="toolbox.command.category.spec" diff --git a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/Activator.java b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/Activator.java index 59bd2e61b56d6a23334a06ea403a73cdd2cbbc27..07ab418bb807d04a8b52d8e65c0e1dc001a97c2b 100644 --- a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/Activator.java +++ b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/Activator.java @@ -68,7 +68,7 @@ public class Activator extends AbstractTLCActivator // (start/stop) methods. Initializing the WorkspaceSpecManager involves // I/O though, which makes it a potentially long-running task. // - // @see https://bugzilla.tlaplus.net/show_bug.cgi?id=260 + // @see Bug #260 in general/bugzilla/index.html final Job initializerJob = new WorkspaceJob("Initializing workspace...") { /* (non-Javadoc) * @see org.eclipse.core.resources.WorkspaceJob#runInWorkspace(org.eclipse.core.runtime.IProgressMonitor) @@ -99,6 +99,12 @@ public class Activator extends AbstractTLCActivator } }; initializerJob.setRule(workspace.getRuleFactory().buildRule()); + // Give initializerJob a higher priority than regular (autobuild) jobs + // (e.g. TLAParsingBuilder/PCalDetectingBuilder) which belong to the + // same job family but have a lower priority. Some - again e.g. + // TLAParsingBuilder/PCalDetectingBuilder - require the initializerJob + // to be done. + initializerJob.setPriority(Job.LONG); initializerJob.schedule(); // Running plug-in tests with Eclipse 4.5, the foundation suspends the diff --git a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/OpenFileManager.java b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/OpenFileManager.java new file mode 100644 index 0000000000000000000000000000000000000000..85bdbbe73cbed9bca3bee9550e0a4090a9e05fca --- /dev/null +++ b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/OpenFileManager.java @@ -0,0 +1,101 @@ +// Copyright (c) Dec 08, 2016 Microsoft Corporation. All rights reserved. +package org.lamport.tla.toolbox; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.e4.core.services.events.IEventBroker; +import org.eclipse.e4.ui.workbench.UIEvents; +import org.eclipse.e4.ui.workbench.lifecycle.PostContextCreate; +import org.eclipse.equinox.app.IApplicationContext; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; +import org.lamport.tla.toolbox.spec.Spec; +import org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager; +import org.lamport.tla.toolbox.ui.handler.NewSpecHandler; +import org.lamport.tla.toolbox.ui.handler.OpenSpecHandler; +import org.lamport.tla.toolbox.util.UIHelper; + +@SuppressWarnings("restriction") +public class OpenFileManager implements Listener { + + @PostContextCreate + void postContextCreate(final IApplicationContext appContext, final Display display, final IEventBroker broker) { + // postContextCreate is registered as a LifeCycle listener via + // ../org.lamport.tla.toolbox.product.standalone/plugin.xml. When it is + // called, the Eclipse workbench has not been created yet. Thus, we + // register with the IEventBroker to be notified once the workbench is + // there. We then spawn a Runnable to let the Toolbox UI fully come up + // before we call the open/new handler. + broker.subscribe(UIEvents.UILifeCycle.ACTIVATE, new org.osgi.service.event.EventHandler() { + /* (non-Javadoc) + * @see org.osgi.service.event.EventHandler#handleEvent(org.osgi.service.event.Event) + */ + public void handleEvent(org.osgi.service.event.Event event) { + // We do not want to be called again. + broker.unsubscribe(this); + + UIHelper.runUIAsync(new Runnable() { + public void run() { + final Object argObject = appContext.getArguments().get(IApplicationContext.APPLICATION_ARGS); + if (argObject != null && argObject instanceof String[]) { + final String[] args = (String[]) argObject; + if (args.length > 0) { + openOrCreateSpec(args[0]); + } + } else if (argObject != null && argObject instanceof String) { + openOrCreateSpec((String) argObject); + } + + // After we have handled the file parameter with which + // the Toolbox got started, we now registered for + // subsequent file open calls, see handleEvent(Event). + display.addListener(SWT.OpenDocument, OpenFileManager.this); + } + }); + } + }); + } + + /* (non-Javadoc) + * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event) + */ + public void handleEvent(Event event) { + final String absolutePath = event.text; + if (absolutePath != null) { + openOrCreateSpec(absolutePath); + } + } + + private void openOrCreateSpec(final String file) { + // Convert relative file to absolute one if necessary. + File absoluteFile = new File(file); + if (!absoluteFile.isAbsolute()) { + final String absolutePath = new File(".").getAbsolutePath(); + absoluteFile = new File(absolutePath + File.separator + file); + } + + if (absoluteFile.exists() && absoluteFile.isFile()) { + final Map<String, String> parameters = new HashMap<String, String>(); + + // Try to find the corresponding spec. + final WorkspaceSpecManager specManager = Activator.getSpecManager(); + final Spec spec = specManager.getSpecByRootModule(absoluteFile.getAbsolutePath()); + + if (spec != null) { + if (!spec.isCurrentSpec()) { + // Open the spec unless it is already open. + parameters.put(OpenSpecHandler.PARAM_SPEC, spec.getName()); + UIHelper.runCommand(OpenSpecHandler.COMMAND_ID, parameters); + } + } else { + // Prompt the user to add a new spec. + parameters.put(NewSpecHandler.PARAM_PATH, absoluteFile.getAbsolutePath()); + UIHelper.runCommand(NewSpecHandler.COMMAND_ID, parameters); + } + } + } +} diff --git a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/spec/Spec.java b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/spec/Spec.java index 61a5c9cf3cd386685bc59fa6b8a471693039d979..21ce075599af6e01e1075ddc66f1c475c7c85626 100644 --- a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/spec/Spec.java +++ b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/spec/Spec.java @@ -129,6 +129,13 @@ public class Spec implements IAdaptable { initProjectProperties(); } + public Spec(IProject project, IFile rootFile) { + Assert.isNotNull(project); + this.project = project; + Assert.isNotNull(rootFile); + this.rootFile = rootFile; + } + /** * Factory method Creates a new specification, the underlying IProject link * the root file @@ -154,9 +161,10 @@ public class Spec implements IAdaptable { * complete path name, from which one could extract the path * names of those files and then rewrite them as needed. * @param monitor + * @throws CoreException */ public static Spec createNewSpec(String name, String rootFilename, - boolean importExisting, IProgressMonitor monitor) { + boolean importExisting, IProgressMonitor monitor) throws CoreException { IProject project = ResourceHelper.getProject(name, rootFilename, true, importExisting, monitor); PreferenceStoreHelper.storeRootFilename(project, rootFilename); @@ -297,10 +305,9 @@ public class Spec implements IAdaptable { /** * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) */ - @SuppressWarnings("unchecked") - public Object getAdapter(@SuppressWarnings("rawtypes") Class adapter) { + public <T> T getAdapter(Class<T> adapter) { // lookup the IAdapterManager service - IAdapterManager manager = Platform.getAdapterManager(); + final IAdapterManager manager = Platform.getAdapterManager(); // forward the request to IAdapterManager service return manager.getAdapter(this, adapter); } diff --git a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/spec/manager/WorkspaceSpecManager.java b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/spec/manager/WorkspaceSpecManager.java index dcb192a8bf79fa1e1e7968f6d89c2484b2dfa4f7..48de9e543a86abca5619ef786bcee084a33a6ba8 100644 --- a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/spec/manager/WorkspaceSpecManager.java +++ b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/spec/manager/WorkspaceSpecManager.java @@ -1,6 +1,7 @@ package org.lamport.tla.toolbox.spec.manager; import java.util.Collection; +import java.util.Collections; import java.util.Comparator; import java.util.Hashtable; import java.util.Iterator; @@ -267,22 +268,33 @@ public class WorkspaceSpecManager extends GenericSelectionProvider implements IS * @param spec * @param newName */ - public void renameSpec(Spec spec, final String newName, final IProgressMonitor aMonitor) + public void renameSpec(final Spec oldSpec, final String newName, final IProgressMonitor aMonitor) { - this.lifecycleManager.sendEvent(new SpecRenameEvent(spec, newName)); - // remove from storage - specStorage.remove(spec.getName()); + specStorage.remove(oldSpec.getName()); // rename the underlying resource - IProject project = ResourceHelper.projectRename(spec.getProject(), newName, aMonitor); + final IProject project = ResourceHelper.projectRename(oldSpec.getProject(), newName, aMonitor); // create new project with updated name - spec = new Spec(project); - spec.setLastModified(); + final Spec newSpec = new Spec(project); + newSpec.setLastModified(); // add it to storage - addSpec(spec); + addSpec(newSpec); + + this.lifecycleManager.sendEvent(new SpecRenameEvent(oldSpec, newSpec)); + + try { + // Renaming a spec constitutes various updates/changes in dependent + // bundles such as the TLC Model. A Model indirectly references the + // old IProject through its ILaunchConfiguration. Thus, defer the + // deletion of the old IProject _after_ dependent bundles had a + // chance to react to the renaming event. + oldSpec.getProject().delete(IResource.NONE, aMonitor); + } catch (CoreException shouldNotHappen) { + shouldNotHappen.printStackTrace(); + } } /** @@ -314,6 +326,12 @@ public class WorkspaceSpecManager extends GenericSelectionProvider implements IS this.lifecycleManager.sendEvent(new SpecEvent(spec, SpecEvent.TYPE_DELETE)); ResourceHelper.deleteProject(spec.getProject(), aMonitor, isForget); specStorage.remove(spec.getName()); + if (loadedSpec == spec) { + // If the spec being deleted is the current open one, unset the + // loadedSpec. Otherwise getMostRecentlyOpenedSpec will return the + // deleted one later if no other spec is opened in between. + loadedSpec = null; + } } /** @@ -412,6 +430,10 @@ public class WorkspaceSpecManager extends GenericSelectionProvider implements IS return null; } + public Collection<Spec> getSpecs() { + return Collections.unmodifiableCollection(specStorage.values()); + } + /** * @return The {@link Spec} most recently opened or null if no specs are known */ diff --git a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/spec/nature/PCalDetectingBuilder.java b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/spec/nature/PCalDetectingBuilder.java index cb719e0a96608bf1e9181f7dd5ddd90bb7512b22..9fd16016df77fec2588754abcdc3fca767f84f54 100644 --- a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/spec/nature/PCalDetectingBuilder.java +++ b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/spec/nature/PCalDetectingBuilder.java @@ -10,6 +10,7 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceVisitor; import org.eclipse.core.resources.IncrementalProjectBuilder; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; @@ -39,6 +40,16 @@ public class PCalDetectingBuilder extends IncrementalProjectBuilder */ protected IProject[] build(int kind, @SuppressWarnings("rawtypes") Map args, IProgressMonitor monitor) throws CoreException { + if (!Activator.isSpecManagerInstantiated()) { + // Reschedule the build assuming the spec manager will be + // instantiated later. The spec manager gets created by a workspace + // job in Activator#start, thus belonging to the same job family + // which is why it can run with us concurrently. + // Also see TLAParsingBuilder. + ResourcesPlugin.getWorkspace().build(kind, null); + return null; + } + final Spec spec = Activator.getSpecManager().getSpecLoaded(); if (spec == null) { diff --git a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/spec/nature/TLAParsingBuilder.java b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/spec/nature/TLAParsingBuilder.java index e49208b5dbf633c0bf937edbd286f6189919d3f9..b6a8bc039415786a7760f446438cfcec2077d0db 100644 --- a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/spec/nature/TLAParsingBuilder.java +++ b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/spec/nature/TLAParsingBuilder.java @@ -11,6 +11,7 @@ import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.IResourceDeltaVisitor; import org.eclipse.core.resources.IncrementalProjectBuilder; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.SubProgressMonitor; @@ -33,6 +34,9 @@ public class TLAParsingBuilder extends IncrementalProjectBuilder { public static final String BUILDER_ID = "toolbox.builder.TLAParserBuilder"; + /* (non-Javadoc) + * @see org.eclipse.core.resources.IncrementalProjectBuilder#clean(org.eclipse.core.runtime.IProgressMonitor) + */ protected void clean(IProgressMonitor monitor) throws CoreException { Activator.getDefault().logDebug("Clean has been invoked"); @@ -52,6 +56,16 @@ public class TLAParsingBuilder extends IncrementalProjectBuilder */ protected IProject[] build(int kind, @SuppressWarnings("rawtypes") Map args, IProgressMonitor monitor) throws CoreException { + if (!Activator.isSpecManagerInstantiated()) { + // Reschedule the build assuming the spec manager will be + // instantiated later. The spec manager gets created by a workspace + // job in Activator#start, thus belonging to the same job family + // which is why it can run with us concurrently. + // Also see PCalDetectingBuilder. + ResourcesPlugin.getWorkspace().build(kind, null); + return null; + } + Spec spec = Activator.getSpecManager().getSpecLoaded(); if (spec == null || getProject() != spec.getProject()) { diff --git a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/tool/SpecRenameEvent.java b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/tool/SpecRenameEvent.java index a312e1fc4f9ce04a5e8d7b908b357c49b85ea1fa..f2ded735d2373f6931fa21e92f89809b5fd7ddbb 100644 --- a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/tool/SpecRenameEvent.java +++ b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/tool/SpecRenameEvent.java @@ -5,18 +5,15 @@ import org.lamport.tla.toolbox.spec.Spec; public class SpecRenameEvent extends SpecEvent { - private final String newName; + private final Spec newSpec; - public SpecRenameEvent(final Spec spec, final String aNewName) { + public SpecRenameEvent(final Spec spec, final Spec newSpec) { super(spec, SpecEvent.TYPE_RENAME); - Assert.isNotNull(aNewName); - this.newName = aNewName; + Assert.isNotNull(newSpec); + this.newSpec = newSpec; } - /** - * @return the newName - */ - public String getNewName() { - return newName; + public Spec getNewSpec() { + return newSpec; } } diff --git a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/tool/ToolboxHandle.java b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/tool/ToolboxHandle.java index 991a7b3c484d72ae4f4871e0ce5cb332dd999bf4..2cf0fd17add3664232b9566506291f33bbe65b01 100644 --- a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/tool/ToolboxHandle.java +++ b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/tool/ToolboxHandle.java @@ -171,7 +171,7 @@ public class ToolboxHandle // Without this explicitly version check, the Toolbox // might accidentally use an old tla version which leads to // undefined behavior. - // @see https://bugzilla.tlaplus.net/show_bug.cgi?id=285 + // @see Bug #285 in general/bugzilla/index.html Version otherVersion = bundle != null ? bundle.getVersion() : Version.parseVersion("0.0.0"); if (aBundle.getVersion().compareTo(otherVersion) > 0) { diff --git a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/handler/DeleteSpecHandler.java b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/handler/DeleteSpecHandler.java index 4a340ff2028ed3efe953a06909930fc92ccdec50..70818dcc249dad38a40e22acf7a9ec31127a4c90 100644 --- a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/handler/DeleteSpecHandler.java +++ b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/handler/DeleteSpecHandler.java @@ -1,6 +1,5 @@ package org.lamport.tla.toolbox.ui.handler; -import java.util.HashMap; import java.util.Iterator; import org.eclipse.core.commands.AbstractHandler; @@ -30,7 +29,6 @@ import org.lamport.tla.toolbox.util.UIHelper; * on 3 August 2011 because of the addition of the Forget command. * * @author Simon Zambrovski - * @version $Id$ */ public class DeleteSpecHandler extends AbstractHandler implements IHandler { @@ -51,19 +49,24 @@ public class DeleteSpecHandler extends AbstractHandler implements IHandler && !((IStructuredSelection) selection).isEmpty()) { - Iterator<Spec> selectionIterator = ((IStructuredSelection) selection).iterator(); + Iterator<Object> selectionIterator = ((IStructuredSelection) selection).iterator(); while (selectionIterator.hasNext()) { - final Spec spec = selectionIterator.next(); + Object next = selectionIterator.next(); + if (!(next instanceof Spec)) { + // The selection can contain models and groups too. + continue; + } + final Spec spec = (Spec) next; // 3 Aug 2011: LL changed the dialog's message to make it clearer what the Delete command does. boolean answer = MessageDialog.openQuestion(UIHelper.getShellProvider().getShell(), "Delete specification?", - "Do you really want the Toolbox to forget the specification " + spec.getName() + " and delete its models?"); + "Do you really want the Toolbox to forget the specification " + spec.getName() + " and delete all its models?"); if (answer) { // close the spec handler (in the ui thread) final WorkspaceSpecManager specManager = Activator.getSpecManager(); if (specManager.isSpecLoaded(spec)) { - UIHelper.runCommand(CloseSpecHandler.COMMAND_ID, new HashMap<String, String>()); + new CloseSpecHandler().execute(event); } // use confirmed rename -> rename diff --git a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/handler/ForgetSpecHandler.java b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/handler/ForgetSpecHandler.java index 5551b83d4341f64846502f640feda7d238b76228..41ce731f1327ffa18fba9bbf3f0da39772ead8d8 100644 --- a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/handler/ForgetSpecHandler.java +++ b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/handler/ForgetSpecHandler.java @@ -1,6 +1,5 @@ package org.lamport.tla.toolbox.ui.handler; -import java.util.HashMap; import java.util.Iterator; import org.eclipse.core.commands.AbstractHandler; @@ -12,7 +11,6 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IWorkbenchPage; @@ -22,7 +20,6 @@ import org.lamport.tla.toolbox.spec.manager.WorkspaceSpecManager; import org.lamport.tla.toolbox.ui.navigator.ToolboxExplorer; import org.lamport.tla.toolbox.util.ToolboxJob; import org.lamport.tla.toolbox.util.UIHelper; -import org.lamport.tla.toolbox.util.pref.PreferenceStoreHelper; /** * Forget specification. @@ -73,7 +70,6 @@ import org.lamport.tla.toolbox.util.pref.PreferenceStoreHelper; * should be re-examined if additional features are added to that page. * * @author Leslie Lamport - * @version $Id$ */ public class ForgetSpecHandler extends AbstractHandler implements IHandler { @@ -94,10 +90,15 @@ public class ForgetSpecHandler extends AbstractHandler implements IHandler && !((IStructuredSelection) selection).isEmpty()) { - Iterator<Spec> selectionIterator = ((IStructuredSelection) selection).iterator(); + Iterator<Object> selectionIterator = ((IStructuredSelection) selection).iterator(); while (selectionIterator.hasNext()) { - final Spec spec = selectionIterator.next(); + Object next = selectionIterator.next(); + if (!(next instanceof Spec)) { + // The selection can contain models and groups too. + continue; + } + final Spec spec = (Spec) next; boolean answer = MessageDialog.openQuestion(UIHelper.getShellProvider().getShell(), "Forget specification?", "Do you really want to remove specification " + spec.getName() + " from the Toolbox's list of specs?"); if (answer) @@ -105,7 +106,7 @@ public class ForgetSpecHandler extends AbstractHandler implements IHandler // close the spec handler (in the ui thread) final WorkspaceSpecManager specManager = Activator.getSpecManager(); if (specManager.isSpecLoaded(spec)) { - UIHelper.runCommand(CloseSpecHandler.COMMAND_ID, new HashMap<String, String>()); + new CloseSpecHandler().execute(event); } // use confirmed rename -> rename diff --git a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/handler/NewSpecHandler.java b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/handler/NewSpecHandler.java index 628136bd2ab21f1d91e724c4985ac44959d2c9ba..18bcf553a42b04247d9cf92395b04a13bf6efa87 100644 --- a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/handler/NewSpecHandler.java +++ b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/handler/NewSpecHandler.java @@ -6,6 +6,7 @@ import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.IHandler; +import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Assert; @@ -24,6 +25,7 @@ import org.eclipse.ui.handlers.HandlerUtil; import org.eclipse.ui.progress.UIJob; import org.lamport.tla.toolbox.Activator; import org.lamport.tla.toolbox.spec.Spec; +import org.lamport.tla.toolbox.ui.navigator.ToolboxExplorer; import org.lamport.tla.toolbox.ui.wizard.NewSpecWizard; import org.lamport.tla.toolbox.util.ResourceHelper; import org.lamport.tla.toolbox.util.ToolboxJob; @@ -38,6 +40,7 @@ public class NewSpecHandler extends AbstractHandler implements IHandler { public static final String COMMAND_ID = "toolbox.command.spec.new"; + public static final String PARAM_PATH = "toolbox.command.spec.new.param"; /** * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent) @@ -47,7 +50,7 @@ public class NewSpecHandler extends AbstractHandler implements IHandler IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event); // Create the wizard - NewSpecWizard wizard = new NewSpecWizard(); + NewSpecWizard wizard = new NewSpecWizard(event.getParameter(PARAM_PATH)); // we pass null for structured selection, cause we just not using it wizard.init(window.getWorkbench(), null); Shell parentShell = window.getShell(); @@ -83,60 +86,95 @@ public class NewSpecHandler extends AbstractHandler implements IHandler Assert.isNotNull(rootFilename); Assert.isNotNull(specName); - final Job job = new ToolboxJob("NewSpecWizard job") { - /* (non-Javadoc) - * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor) - */ - @Override - protected IStatus run(final IProgressMonitor monitor) { - // if the root file does not exist, a module has to be created - final IPath rootNamePath = new Path(rootFilename); - if (!rootNamePath.toFile().exists()) - { - try - { - IWorkspaceRunnable createTLAModuleCreationOperation = ResourceHelper.createTLAModuleCreationOperation(rootNamePath); - ResourcesPlugin.getWorkspace().run(createTLAModuleCreationOperation, monitor); - } catch (final CoreException e) - { - final String message = "Error creating module " + rootNamePath; - Activator.getDefault().logError(message, e); - // exception, no chance to recover - return new Status(Status.ERROR, "", message, e); - } - } + final Job job = new NewSpecHandlerJob(specName, rootFilename, importExisting); + job.schedule(); + } + + public static class NewSpecHandlerJob extends ToolboxJob { + + private final String specName; + private final String rootFilename; + private final boolean importExisting; + + public NewSpecHandlerJob(String specName, String rootFilename, boolean importExisting) { + super("NewSpecWizard job"); + this.specName = specName; + this.rootFilename = rootFilename; + this.importExisting = importExisting; + } + + @Override + protected IStatus run(IProgressMonitor monitor) { + final IProject project = ResourceHelper.getProject(specName); + if (project.exists() && Activator.getSpecManager().getSpecByName(specName) == null) { + // There exists a project by that name already without + // a corresponding spec instance. This is most likely + // the result of an earlier delete that went south. Ask the user + // if the project should be deleted. + Activator.getSpecManager().addSpec(new Spec(project, project.getFile("Delete me"))); + UIHelper.runUIAsync(new Runnable() { + public void run() { + // This refresh should not be necessary when the + // ToolboxExplorer would correctly listen for the spec + // created event fired by the spec manager. + ToolboxExplorer.refresh(); + } + }); + return new Status(Status.ERROR, "org.lamport.tla.toolbox", + String.format( + "The workspace already contains a spec by the name '%1$s' located at '%2$s'. " + + "Please delete the spec '%1$s [ %3$s ]' from the Spec Explorer. " + + "Afterwards, try to create your new spec again.\n" + + "If there is no spec '%1$s [ %3$s ]' in the Spec Explorer, then " + + "this is a bug. Please file a bug report and choose a different " + + "specification name when you create a new spec in the meantime.", + specName, project.getLocation().toOSString(), "Delete me")); + } + + // if the root file does not exist, a module has to be created + final IPath rootNamePath = new Path(rootFilename); + try { + if (!rootNamePath.toFile().exists()) { + IWorkspaceRunnable createTLAModuleCreationOperation = ResourceHelper + .createTLAModuleCreationOperation(rootNamePath); + ResourcesPlugin.getWorkspace().run(createTLAModuleCreationOperation, monitor); + } // create and add spec to the spec manager - final Spec spec = Spec.createNewSpec(specName, rootFilename, importExisting, monitor); + final Spec spec = Spec.createNewSpec(specName, rootFilename, importExisting, monitor); Activator.getSpecManager().addSpec(spec); - + // open editor since the spec has been created now openEditorInUIThread(spec); - - return Status.OK_STATUS; + } catch (final CoreException e) { + final String message = "Error creating module " + rootNamePath; + Activator.getDefault().logError(message, e); + // exception, no chance to recover + return new Status(Status.ERROR, "org.lamport.tla.toolbox", message, e); } - /** - * Opens the editor for the given spec (needs access to the UI thus has to - * run as a UI job) - */ - private void openEditorInUIThread(final Spec spec) { - // with parsing done, we are ready to open the spec editor - final UIJob uiJob = new UIJob("NewSpecWizardEditorOpener") { - @Override - public IStatus runInUIThread(final IProgressMonitor monitor) { - // create parameters for the handler - final HashMap<String, String> parameters = new HashMap<String, String>(); - parameters.put(OpenSpecHandler.PARAM_SPEC, spec.getName()); + return Status.OK_STATUS; + } - // runs the command - UIHelper.runCommand(OpenSpecHandler.COMMAND_ID, parameters); - return Status.OK_STATUS; - } - }; - uiJob.schedule(); - } - }; - job.schedule(); + /** + * Opens the editor for the given spec (needs access to the UI thus has to + * run as a UI job) + */ + private void openEditorInUIThread(final Spec spec) { + // with parsing done, we are ready to open the spec editor + final UIJob uiJob = new UIJob("NewSpecWizardEditorOpener") { + @Override + public IStatus runInUIThread(final IProgressMonitor monitor) { + // create parameters for the handler + final HashMap<String, String> parameters = new HashMap<String, String>(); + parameters.put(OpenSpecHandler.PARAM_SPEC, spec.getName()); + + // runs the command + UIHelper.runCommand(OpenSpecHandler.COMMAND_ID, parameters); + return Status.OK_STATUS; + } + }; + uiJob.schedule(); + } } } diff --git a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/handler/SaveDirtyEditorAbstractHandler.java b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/handler/SaveDirtyEditorAbstractHandler.java index 48f5e86abdbd466579ffcc28f72f338d19d26ff9..4b38acd01e6f5c40c106b6b02437a45683e39c25 100644 --- a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/handler/SaveDirtyEditorAbstractHandler.java +++ b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/handler/SaveDirtyEditorAbstractHandler.java @@ -5,11 +5,12 @@ package org.lamport.tla.toolbox.ui.handler; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.handlers.HandlerUtil; +import org.lamport.tla.toolbox.Activator; import org.lamport.tla.toolbox.util.UIHelper; /** @@ -24,36 +25,51 @@ public abstract class SaveDirtyEditorAbstractHandler extends AbstractHandler { * @return true iff the dirty editor has been saved, false otherwise */ public boolean saveDirtyEditor(final ExecutionEvent event) { - activeEditor = UIHelper.getActiveEditor(); - if (activeEditor.isDirty()) - { - final Shell shell = HandlerUtil.getActiveShell(event); - final MessageDialog dialog = new SaveMessageDialog(shell, getDialogTitle(), getDialogMessage()); - int res = dialog.open(); - if (res == MessageDialog.OK || res == MessageDialog.CONFIRM) { + activeEditor = UIHelper.getActiveEditor(); + if (activeEditor.isDirty()) { + getPrefs().setDefault(this.getClass() + ".dontBother", false); + if (getPrefs().getBoolean(this.getClass() + ".dontBother")) { // TODO decouple from ui thread activeEditor.doSave(new NullProgressMonitor()); } else { - return false; + final Shell shell = HandlerUtil.getActiveShell(event); + final MessageDialog dialog = new SaveMessageDialog(shell, getDialogTitle(), getDialogMessage()); + int res = dialog.open(); + if (res == 2) { // 2 is index of button in string[] below + // User doesn't want to be warned about a dirty editor any longer. + // Remember it for this handler (this.getClass). + getPrefs().setValue(this.getClass() + ".dontBother", true); + res = MessageDialog.OK; + } + if (res == MessageDialog.OK || res == MessageDialog.CONFIRM) { + // TODO decouple from ui thread + activeEditor.doSave(new NullProgressMonitor()); + } else { + return false; + } } // Use NullProgressMonitor instead of newly created monitor. The // parent ProgressMonitorDialog would need to be properly // initialized first. - // @see https://bugzilla.tlaplus.net/show_activity.cgi?id=256 - // + // @see Bug #256 in general/bugzilla/index.html + // // Generally though, saving a resource involves I/O which should be // decoupled from the UI thread in the first place. Properly doing // this, would be from inside a Job which provides a ProgressMonitor - activeEditor.doSave(new NullProgressMonitor()); - } + activeEditor.doSave(new NullProgressMonitor()); + } return true; } - + + private IPreferenceStore getPrefs() { + return Activator.getDefault().getPreferenceStore(); + } + protected String getDialogMessage() { return "The current editor has not been saved, should the editor be saved first?"; } - + protected String getDialogTitle() { return "Save " + activeEditor.getTitle() + " editor?"; } @@ -74,10 +90,9 @@ public abstract class SaveDirtyEditorAbstractHandler extends AbstractHandler { */ private class SaveMessageDialog extends MessageDialog { - public SaveMessageDialog(Shell parentShell, String dialogTitle, - String dialogMessage) { + public SaveMessageDialog(Shell parentShell, String dialogTitle, String dialogMessage) { super(parentShell, dialogTitle, null, dialogMessage, QUESTION, - new String[] { "Save", "Cancel" }, 0); + new String[] { "&Save", "&Cancel", "Save and &never ask again" }, 0); } } } diff --git a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/navigator/ToolboxExplorer.java b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/navigator/ToolboxExplorer.java index 73c1ece03bf7c5b7cc49f84f37a87a21fa4e8149..cf3277a5e42ca465313f7700ecc91999e8c2cc09 100644 --- a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/navigator/ToolboxExplorer.java +++ b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/navigator/ToolboxExplorer.java @@ -121,7 +121,7 @@ public class ToolboxExplorer extends CommonNavigator /** * Refreshes the instance of the viewer if any */ - static void refresh() + public static void refresh() { CommonViewer instance = getViewer(); if (instance != null) diff --git a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/wizard/NewSpecWizard.java b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/wizard/NewSpecWizard.java index 12fbf2e156f35ac2bf169d397e4a8bad99ff17f6..f1901cab411eca874863a558ee950480c50b2d92 100644 --- a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/wizard/NewSpecWizard.java +++ b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/wizard/NewSpecWizard.java @@ -20,6 +20,11 @@ public class NewSpecWizard extends Wizard implements INewWizard private String specName; private String rootFilename; private boolean importExisting; + private final String absolutePath; + + public NewSpecWizard(String absolutePath) { + this.absolutePath = absolutePath; + } /* * (non-Javadoc) @@ -52,7 +57,7 @@ public class NewSpecWizard extends Wizard implements INewWizard */ public void addPages() { - page = new NewSpecWizardPage(); + page = new NewSpecWizardPage(this.absolutePath); addPage(page); } diff --git a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/wizard/NewSpecWizardPage.java b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/wizard/NewSpecWizardPage.java index 3535353bf47d308b938d2d3757385654166923b5..2cc87b0b4de7ac9c80470b1ba7da332e8343f393 100644 --- a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/wizard/NewSpecWizardPage.java +++ b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/ui/wizard/NewSpecWizardPage.java @@ -1,6 +1,7 @@ package org.lamport.tla.toolbox.ui.wizard; import java.io.File; +import java.io.IOException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; @@ -46,13 +47,17 @@ public class NewSpecWizardPage extends WizardPage * directory */ private String lastBrowsedDirectory; + + private final String absolutePath; /** + * @param absolutePath * @param pageName */ - public NewSpecWizardPage() + public NewSpecWizardPage(String absolutePath) { super("newSpecWizardPage"); + this.absolutePath = absolutePath; setTitle("New TLA+ Specification"); setDescription("Creates a new TLA+ specification\nEnter a complete file name like c:\\jones\\specs\\foo.tla or click on Browse."); } @@ -134,9 +139,13 @@ public class NewSpecWizardPage extends WizardPage dialogChanged(); } }); - - // disable the next/finish button - setPageComplete(false); + + if (absolutePath != null) { + fileText.setText(absolutePath); + } else { + // disable the next/finish button + setPageComplete(false); + } UIHelper.setHelp(container, "NewSpecWizard"); @@ -239,7 +248,7 @@ public class NewSpecWizardPage extends WizardPage reportError("Root file name should have a file-system path"); return; // make sure module name does not violate valid spec name rules - // see http://bugzilla.tlaplus.net/show_bug.cgi?id=112 + // see Bug #112 in general/bugzilla/index.html } else if(!ResourceHelper.isValidSpecName(ResourceHelper.getModuleNameChecked(rootfilePath, false))) { // Give the user a hint what a valid spec name might be. E.g. if "Foo.tla" is given, // a valid spec name is "Foo" (without the ".tla" file extension). @@ -259,6 +268,24 @@ public class NewSpecWizardPage extends WizardPage return; } else { + // NTFS (although case-sensitive) does not allow a path + // c:/foo/bar/Spec.tla when there exists a similar path + // c:/foo/Bar/Spec.tla. Because the Toolbox keeps + // converting a Spec's path from String > IPath (Eclipse) > File + // > String... lets force the user to use the pre-existing path + // to be consistent. + final File f = new File(rootfilePath); + if (f.getParentFile() != null && f.getParentFile().exists()) { + try { + final String canonicalPath = f.getCanonicalPath(); + if (!rootfilePath.equals(canonicalPath)) { + rootfilePath = canonicalPath; + } + } catch (IOException e) { + e.printStackTrace(); + } + } + Spec existingSpec = Activator.getSpecManager().getSpecByRootModule(rootfilePath); if (existingSpec != null) { @@ -296,7 +323,7 @@ public class NewSpecWizardPage extends WizardPage Spec existingSpec = Activator.getSpecManager().getSpecByName(specName); if (existingSpec != null) { - reportError("The specification with provided name already exists \nand uses " + reportError("The specification with the provided name already exists \nand uses " + existingSpec.getRootFilename() + " as root module."); return; } @@ -345,6 +372,9 @@ public class NewSpecWizardPage extends WizardPage { // allow this reportWarning("Root file name does not exist. A new file will be created."); + } else if (rootfilePath != null && !rootfilePath.equals(getRootFilename())) { + reportWarning(String.format("Changed your path to its canonical form %s.", getRootFilename(), + rootfilePath)); } // we should not enable the next/finish if both fields are virgin diff --git a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/util/ResourceHelper.java b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/util/ResourceHelper.java index 7093397959a30d44d765f9643ba6965a8b8a2cc3..466f6b4692f962816d89e189976b12ccb4b26f2b 100644 --- a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/util/ResourceHelper.java +++ b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/util/ResourceHelper.java @@ -9,6 +9,7 @@ import java.io.IOException; import java.io.InvalidClassException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; @@ -214,27 +215,19 @@ public class ResourceHelper * <br>Eg. calling <tt>getProject("for", "c:/bar/bar.tla")</tt> * will cause the creation of the project (iff this does not exist) with location * <tt>"c:/bar/foo.toolbox"</tt> + * @throws CoreException * */ - public static IProject getProject(String name, String rootFilename, boolean createMissing, boolean importExisting, IProgressMonitor monitor) + public static IProject getProject(String name, String rootFilename, boolean createMissing, boolean importExisting, IProgressMonitor monitor) throws CoreException { - if (name == null) - { - return null; - } - + Assert.isNotNull(name); + Assert.isNotNull(rootFilename); + IProject project = getProject(name); // create a project if (!project.exists() && createMissing) { - try - { - if (rootFilename == null) - { - return null; - } - String parentDirectory = getParentDirName(rootFilename); Assert.isNotNull(parentDirectory); @@ -354,11 +347,6 @@ public class ResourceHelper { relocateFiles(project, new Path(parentDirectory), monitor); } - - } catch (CoreException e) - { - Activator.getDefault().logError("Error creating the project " + name, e); - } } return project; @@ -406,6 +394,32 @@ public class ResourceHelper return file; } + public static IFile getLinkedFileUnchecked(IContainer project, String name, boolean createNew) throws CoreException + { + if (name == null || project == null) + { + return null; + } + IPath location = new Path(name); + IFile file = project.getFile(new Path(location.lastSegment())); + if (createNew) + { + if (!file.isLinked()) + { + file.createLink(location, IResource.NONE, new NullProgressMonitor()); + return file; + } + if (file.exists()) + { + return file; + } else + { + return null; + } + } + return file; + } + /** * On relocation, all linked files in the project become invalid. This method fixes this issue * @param project project containing links to the non-existing files @@ -672,6 +686,30 @@ public class ResourceHelper } } + /** + * Returns IFile handles to user module overrides. Let moduleFile be Foo.tla and its + * corresponding folder contain to files Foo.class and Foo.java, the IFile[] will + * contain two handles to Foo.class and Foo.java. + */ + public static IFile[] getModuleOverrides(final IProject project, final IFile moduleFile) { + final int indexOfFileExtension = moduleFile.getFileExtension().length() + 1; + final String moduleName = moduleFile.getName().substring(0, moduleFile.getName().length() - indexOfFileExtension); + + final List<IFile> res = new ArrayList<IFile>(); + final String[] extensions = new String[] { ".class", ".java" }; + for (final String extension : extensions) { + try { + IFile userModuleOverride = ResourceHelper.getLinkedFileUnchecked(project, + ResourceHelper.PARENT_ONE_PROJECT_LOC + moduleName + extension, true); + if (userModuleOverride != null && userModuleOverride.exists()) { + res.add(userModuleOverride); + } + } catch (CoreException ignoredOnPurpose) { + } + } + return res.toArray(new IFile[0]); + } + /** * Determines if the given member is a TLA+ module * @param resource @@ -907,10 +945,12 @@ public class ResourceHelper } /** - * Renames and moves the project - * @param project - * @param aNewName - */ + * Renames and moves the project, but does not delete the old project. It's + * the callee's reponsibility. + * + * @param project + * @param aNewName + */ public static IProject projectRename(final IProject project, final String aNewName, final IProgressMonitor aMonitor) { try @@ -926,7 +966,6 @@ public class ResourceHelper project.refreshLocal(IResource.DEPTH_INFINITE, aMonitor); project.copy(description, IResource.NONE | IResource.SHALLOW, aMonitor); - project.delete(IResource.NONE, aMonitor); return ResourcesPlugin.getWorkspace().getRoot().getProject(aNewName); } catch (CoreException e) @@ -973,13 +1012,14 @@ public class ResourceHelper { try { - if (isForget) { - // This statement deletes the spec but not the .toolbox directory - project.delete(IResource.NEVER_DELETE_PROJECT_CONTENT, aMonitor); - } else { - // This statement deletes the spec and the .toolbox directory - project.delete(true, aMonitor); - } + if (isForget) { + // This statement deletes the spec but not the .toolbox + // directory + project.delete(IResource.NEVER_DELETE_PROJECT_CONTENT, aMonitor); + } else { + // This statement deletes the spec and the .toolbox directory + project.delete(true, aMonitor); + } } catch (CoreException e) { diff --git a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/util/UIHelper.java b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/util/UIHelper.java index b9cfaa354c373afe0f49a081310298bbd9ab4aa6..0af3b03517f75f4f99453166885499ff8fa1ede5 100644 --- a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/util/UIHelper.java +++ b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/util/UIHelper.java @@ -196,11 +196,23 @@ public class UIHelper { * @return the reference to the view */ public static IViewPart openViewNoFocus(final String viewId) { + return openViewNoFocus(viewId, null); + } + + /** + * Opens a view but does *not* give it focus (useful for informational views + * that should not distract the user's workflow (e.g. typing in the editor). + * + * @param viewId + * @param secondId Secondary view id + * @return the reference to the view + */ + public static IViewPart openViewNoFocus(final String viewId, final String secondaryId) { IViewPart view = null; try { IWorkbenchPage activePage = getActivePage(); if (activePage != null) { - view = activePage.showView(viewId, null, IWorkbenchPage.VIEW_VISIBLE); + view = activePage.showView(viewId, secondaryId, IWorkbenchPage.VIEW_VISIBLE); } } catch (PartInitException e) { Activator.getDefault().logError("Error opening a view " + viewId, e); @@ -363,9 +375,17 @@ public class UIHelper { * @throws PartInitException */ public static IEditorPart openEditorUnchecked(String editorId, IFile file) throws PartInitException { - return openEditorUnchecked(editorId, new FileEditorInput(file)); + return openEditorUnchecked(editorId, new FileEditorInput(file), true); + } + + public static IEditorPart openEditorUnchecked(String editorId, IFile file, boolean activate) throws PartInitException { + return openEditorUnchecked(editorId, new FileEditorInput(file), activate); } + public static IEditorPart openEditorUnchecked(String editorId, IEditorInput input) throws PartInitException { + return openEditorUnchecked(editorId, input, true); + } + /** * Opens an editor in current workbench window * @@ -374,10 +394,10 @@ public class UIHelper { * @return the created or reopened IEditorPart * @throws PartInitException */ - public static IEditorPart openEditorUnchecked(String editorId, IEditorInput input) throws PartInitException { + public static IEditorPart openEditorUnchecked(String editorId, IEditorInput input, boolean activate) throws PartInitException { final IWorkbenchPage activePage = getActivePage(); if (activePage != null) { - final IEditorPart openEditor = activePage.openEditor(input, editorId); + final IEditorPart openEditor = activePage.openEditor(input, editorId, activate); // Trigger re-evaluation of the handler enablement state by // cycling the activepage. Cycling the active page causes an @@ -491,17 +511,14 @@ public class UIHelper { ParameterizedCommand pCommand = ParameterizedCommand.generateCommand(command, parameters); return handlerService.executeCommand(pCommand, null); } catch (NotDefinedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + Activator.getDefault().logError(e.getMessage(), e); } catch (NotEnabledException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + Activator.getDefault().logError(e.getMessage(), e); } catch (NotHandledException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + Activator.getDefault().logError(e.getMessage(), e); } catch (ExecutionException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + MessageDialog.openError(getShell(), "Failed to execute.", e.getMessage()); + Activator.getDefault().logError(e.getMessage(), e); } return null; diff --git a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/util/pref/PreferenceInitializer.java b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/util/pref/PreferenceInitializer.java index 0b1c304e8b214373e02d29b10ea7733631e70ec5..5016d3153614818b854d1949c4b4884912b48d27 100644 --- a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/util/pref/PreferenceInitializer.java +++ b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/util/pref/PreferenceInitializer.java @@ -28,6 +28,11 @@ public class PreferenceInitializer extends AbstractPreferenceInitializer // store.setDefault(IPreferenceConstants.I_PARSE_FILES_ON_MODIFY, true); store.setDefault(IPreferenceConstants.I_PARSE_SPEC_ON_MODIFY, true); + /* + * Set default (and only) option for PlusCal translator. (Added by LL on 13 May 2016.) + */ + store.setDefault(IPreferenceConstants.PCAL_CAL_PARAMS, "-nocfg"); + // set editor page preference defaults store.setDefault(EditorPreferencePage.EDITOR_RIGHT_MARGIN, EditorPreferencePage.EDITOR_RIGHT_MARGIN_DEFAULT); @@ -41,6 +46,7 @@ public class PreferenceInitializer extends AbstractPreferenceInitializer store.setDefault(EditorPreferencePage.RENUMBER_KEY, EditorPreferencePage.ALL_NAMES); store.setDefault(EditorPreferencePage.SAVE_MODULE, true); + } } diff --git a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/util/pref/PreferenceStoreHelper.java b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/util/pref/PreferenceStoreHelper.java index b959c3c6392c1072fce44be4de832e54fbe2ccba..1ecabd0565aaa8271591974a7b87a45afe4040d4 100644 --- a/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/util/pref/PreferenceStoreHelper.java +++ b/org.lamport.tla.toolbox/src/org/lamport/tla/toolbox/util/pref/PreferenceStoreHelper.java @@ -30,7 +30,9 @@ public class PreferenceStoreHelper // AddModuleHandler will not work. The claim is that spec files are // always in the parent folder of the IProject. final IPath path = new Path(rootFilename); - Assert.isTrue(ResourceHelper.isProjectParent(path.removeLastSegments(1), project)); + Assert.isTrue(ResourceHelper.isProjectParent(path.removeLastSegments(1), project), + project.getLocation().toOSString() + " is *not* a subdirectory of " + rootFilename + + ". This is commonly caused by a symlink contained in the latter path."); // Store the filename *without* any path information, but prepend the // magical PARENT-1-PROJECT-LOC. It indicates that the file can be found // *one* level up (hence the "1") from the project location. diff --git a/org.lamport.tlatools.feature/pom.xml b/org.lamport.tlatools.feature/pom.xml index 37e6f6d42931023ca61af90dbd89123b8350ac97..6451099583c108f3dbed75b7f406dad399a28b0a 100644 --- a/org.lamport.tlatools.feature/pom.xml +++ b/org.lamport.tlatools.feature/pom.xml @@ -13,4 +13,8 @@ <artifactId>org.lamport.tlatools.feature</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>eclipse-feature</packaging> + <properties> + <!-- Do not include non-code project in Sonar reporting. --> + <sonar.skip>true</sonar.skip> + </properties> </project> diff --git a/pom.xml b/pom.xml index 93a6bce55179225a2500cafec5e763ae9917ba5a..1a0a4d30958ad86e9ccb917eba32a1091f5ae73d 100644 --- a/pom.xml +++ b/pom.xml @@ -5,6 +5,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>tlatoolbox</groupId> <artifactId>parent</artifactId> + <name>TLA+ Tools and TLA Toolbox</name> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> @@ -14,13 +15,13 @@ </organization> <issueManagement> - <system>Bugzilla</system> - <url>http://bugzilla.tlaplus.net</url> + <system>GitHub</system> + <url>https://github.com/tlaplus/tlaplus/issues</url> </issueManagement> <scm> - <connection>scm:svn:svn+ssh://svn.msr-inria.inria.fr/var/lib/svn/repository</connection> - <developerConnection>scm:svn:svn+ssh://svn.msr-inria.inria.fr/var/lib/svn/repository</developerConnection> + <connection>scm:git:https://github.com/tlaplus/tlaplus</connection> + <developerConnection>scm:git:https://github.com/tlaplus/tlaplus</developerConnection> <tag>HEAD</tag> </scm> @@ -86,11 +87,33 @@ <!-- http://maven.apache.org/general.html#encoding-warning --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - <tycho-version>0.24.0</tycho-version> + <tycho-version>0.26.0</tycho-version> <!-- no default here --> <tycho.test.vm.argline>-Xmx500m -Xdebug -Xrunjdwp:transport=dt_socket,address=1044,server=y,suspend=n</tycho.test.vm.argline> <tycho.test.vm.useUiThread>false</tycho.test.vm.useUiThread> + + <!-- These properties define a dummy certificate store that is used unless the developer passes overwrites to maven --> + <!-- see http://stackoverflow.com/a/3620575 for how such an overwrite would look like. --> + <keystore.path>${project.basedir}/../keystore</keystore.path> + <keystore.alias>msr</keystore.alias> + <keystore.store.password>secret</keystore.store.password> + <keystore.key.password>secret</keystore.key.password> + <!-- + Set to the values below if the signature should include a timestamp. You want this for a release build + because a timestamp makes sure the signature remains valid after the certificate expired. + If you activate RFC3161, make sure the machine running the build has sufficient entropy available. Otherwise + expect to see intermittent hangs when the build attempts to sign a jar. On Linux the haveged and rng-tools + can help to collect entropy. + <tsa.flag>-tsa</tsa.flag> + <tsa.server>http://timestamp.comodoca.com</tsa.server> + --> + <tsa.flag></tsa.flag> + <tsa.server></tsa.server> + + <!-- Report into the tlaplus organization at SonarQube. --> + <!-- Organizations support reporting different branches. --> + <sonar.organization>tlaplus</sonar.organization> </properties> <build> @@ -122,6 +145,34 @@ </archive> </configuration> </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jarsigner-plugin</artifactId> + <version>1.4</version> + <configuration> + <keystore>${keystore.path}</keystore> + <alias>${keystore.alias}</alias> + <storepass>${keystore.store.password}</storepass> + <keypass>${keystore.key.password}</keypass> + <verbose>false</verbose> + <arguments> + <!-- Embed a current timestamp in the signed content (file). With this timestamp, + the signature of the content remains valid *after* the signing certificate + expired. --> + <argument>${tsa.flag}</argument> + <argument>${tsa.server}</argument> + </arguments> + </configuration> + <executions> + <execution> + <id>sign</id> + <goals> + <goal>sign</goal> + <goal>verify</goal> + </goals> + </execution> + </executions> + </plugin> <plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>target-platform-configuration</artifactId> @@ -184,49 +235,6 @@ </environments> </configuration> - </plugin> - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-enforcer-plugin</artifactId> - <version>1.3.1</version> - <executions> - <!-- Newer maven versions (e.g. 3.2) fail with a cyclic dependency error - during resolution --> - <!-- Read http://maven.apache.org/enforcer/enforcer-rules/versionRanges.html - on version range syntax --> - <execution> - <id>enforce-maven-3</id> - <goals> - <goal>enforce</goal> - </goals> - <configuration> - <rules> - <requireMavenVersion> - <version>[3.0.0,3.1)</version> - </requireMavenVersion> - </rules> - <fail>true</fail> - </configuration> - </execution> - <!-- The toolbox's build is broken with Java 1.8 right now due to an older - AspectJ dependency. Upgrading to a newer aspectJ is probably going to fix - this problem by creating a new one. --> - <!-- http://maven.apache.org/enforcer/enforcer-rules/requireJavaVersion.html --> - <execution> - <id>enforce-java</id> - <goals> - <goal>enforce</goal> - </goals> - <configuration> - <rules> - <requireJavaVersion> - <version>[1.5,1.9)</version> - </requireJavaVersion> - </rules> - </configuration> - </execution> - </executions> </plugin> </plugins> </build> diff --git a/tlatools/customBuild.xml b/tlatools/customBuild.xml index 25ac4df0d82be8b0bce9109f7b409434394b5eb0..b5b906c5a1ece0d48de9e8a118d37a180ae83081 100644 --- a/tlatools/customBuild.xml +++ b/tlatools/customBuild.xml @@ -27,17 +27,33 @@ <pathelement location="lib/aspectjtools-1.8.5.jar" /> </classpath> </taskdef> - + <condition property="test.skip"> <istrue value="${maven.test.skip}"/> </condition> - <target name="info" description="Prints information"> + <condition property="test.halt"> + <istrue value="${maven.test.halt}"/> + </condition> + + <!-- https://github.com/alx3apps/jgit-buildnumber --> + <target name="git-revision"> + <taskdef name="jgit-buildnumber" classname="ru.concerteza.util.buildnumber.JGitBuildNumberAntTask"> + <classpath> + <pathelement location="lib/org.eclipse.jgit-2.3.1.201302201838-r.jar"/> + <pathelement location="lib/jgit-buildnumber-ant-task-1.2.10.jar" /> + </classpath> + </taskdef> + <jgit-buildnumber/> + </target> + + <target name="info" description="Prints information" depends="git-revision"> <echo message="ANT_HOME : ${env.ANT_HOME}" /> <echo message="Ant Version : ${ant.version}" /> <echo message="Java Version : ${ant.java.version}" /> <echo message="Skipping Tests : ${test.skip}" /> <echo message="With AspectJ: ${withaj}" /> + <echo message="Git BuildNumber: ${git.branch}_${git.tag}_${git.shortRevision}" /> </target> <target name="default" depends="info" description="Default"> @@ -45,6 +61,7 @@ <antcall target="compile-aj" inheritall="true" inheritrefs="true" /> <antcall target="compile-test" inheritall="true" inheritrefs="true" /> <antcall target="test" inheritall="true" inheritrefs="true" /> + <antcall target="git-revision" inheritall="true" inheritrefs="true" /> <antcall target="dist" inheritall="true" inheritrefs="true" /> <antcall target="test-dist" inheritall="true" inheritrefs="true" /> </target> @@ -83,6 +100,10 @@ <fileset dir="${class.dir}" includes="*/**" /> <fileset dir="${test.class.dir}" includes="*/**" /> </delete> + <!-- Delete leftovers from previous junit invocation --> + <delete includeemptydirs="true" failonerror="false"> + <fileset dir="states/" includes="*/**" /> + </delete> </target> <!-- Compiles the TLA+ tools code --> @@ -181,6 +202,13 @@ <attribute name="Implementation-Title" value="TLA+ Tools" /> <attribute name="Implementation-Version" value="${version} ${TODAY}" /> <attribute name="Implementation-Vendor" value="Microsoft Corp." /> + <!-- Git revision --> + <attribute name="X-Git-Branch" value="${git.branch}" /> + <attribute name="X-Git-Tag" value="${git.tag}" /> + <attribute name="X-Git-Revision" value="${git.revision}" /> + <attribute name="X-Git-ShortRevision" value="${git.shortRevision}" /> + <attribute name="X-Git-BuildNumber" value="${git.branch}_${git.tag}_${git.shortRevision}" /> + <attribute name="X-Git-Commits-Count" value="${git.commitsCount}" /> <!-- App-Name and Permissions is required by Java Webstart used by distributed TLC --> <!-- Depending on security level, the user will see a warning otherwise. --> <!-- http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/security/manifest.html --> @@ -198,11 +226,16 @@ <javac includeantruntime="false" srcdir="${test.dir}" destdir="${test.class.dir}" debug="true" verbose="false"> <classpath refid="project.classpath" /> <classpath> - <pathelement location="lib/junit-4.8.2.jar" /> + <pathelement location="lib/junit-4.12.jar" /> + <pathelement location="lib/hamcrest-core-1.3.jar" /> <pathelement location="lib/easymock-3.3.1.jar" /> <pathelement path="${class.dir}" /> </classpath> </javac> + <!-- Include auxilliary files when compiling classes. --> + <copy todir="${test.class.dir}"> + <fileset dir="${test.dir}" includes="**/*.dot"/> + </copy> <!-- copy class.dir to path with whitespace --> <!-- this is required by some tests to make sense --> <!-- even throw a non digit in --> @@ -217,30 +250,44 @@ <!-- run junit tests --> <mkdir dir="${test.reports}" /> <jacoco:coverage destfile="target/code-coverage.exec"> - <junit printsummary="yes" haltonfailure="no" haltonerror="no" forkmode="perTest" fork="yes"> + <junit printsummary="yes" haltonfailure="${test.halt}" haltonerror="${test.halt}" forkmode="perTest" fork="yes"> <!-- enable all assertions --> <jvmarg value="-ea"/> + <!-- Uncomment to run TLC with alternative fingerprintset impl. See sysproperty below too. + <jvmarg value="-XX:MaxDirectMemorySize=32m"/> + --> <!-- Uncomment to open a debug port in each forked VM to remote attach your Eclipse at port 1044. <jvmarg value="-Xdebug" /> <jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044" /> --> <classpath refid="project.classpath" /> <classpath> - <pathelement location="lib/junit-4.8.2.jar" /> + <pathelement location="lib/junit-4.12.jar" /> + <pathelement location="lib/hamcrest-core-1.3.jar" /> <pathelement location="lib/cglib-nodep-3.1.jar" /> <pathelement location="lib/objenesis-2.1.jar" /> <pathelement location="lib/easymock-3.3.1.jar" /> + <pathelement location="lib/javax.mail.jar" /> <pathelement path="${class.dir}" /> <pathelement path="${test.class.dir}" /> </classpath> <formatter type="xml" /> <!-- Pass the base path of the tlatools project to unit tests in case they need it to locate TLA+ specs or configs --> - <sysproperty key="basedir" value="${basedir}/"/> + <sysproperty key="basedir" value="${basedir}/"/> + <!-- Uncomment to run TLC with alternative fingerprintset impl. See jvmarg above too. + <sysproperty key="tlc2.tool.fp.FPSet.impl" value="tlc2.tool.fp.OffHeapDiskFPSet"/> + --> + <sysproperty key="util.FileUtil.milliseconds" value="true"/> + <sysproperty key="tlc2.tool.distributed.TLCWorker.threadCount" value="4"/> <batchtest fork="yes" todir="${test.reports}"> <fileset dir="${test.dir}"> <include name="**/*Test*.java" /> + <exclude name="**/CommonTestCase.java" /> <exclude name="**/ModelCheckerTestCase.java" /> + <exclude name="**/SuiteTestCase.java" /> + <exclude name="**/SuiteETestCase.java" /> + <exclude name="**/DistributedTLCTestCase.java" /> <exclude name="**/TLCServerTestCase.java" /> <exclude name="**/SuccessfulSimulationTestCase.java" /> <exclude name="**/AbstractExampleTestCase.java" /> @@ -262,12 +309,13 @@ <target name="test-dist" unless="test.skip"> <!-- run junit tests on tlatools.jar --> <mkdir dir="${test.reports}/onJar" /> - <junit printsummary="yes" haltonfailure="no" haltonerror="no" forkmode="perTest" fork="yes"> + <junit printsummary="yes" haltonfailure="${test.halt}" haltonerror="${test.halt}" forkmode="perTest" fork="yes"> <!-- enable all assertions --> <jvmarg value="-ea"/> <classpath refid="project.classpath" /> <classpath> - <pathelement location="lib/junit-4.8.2.jar" /> + <pathelement location="lib/junit-4.12.jar" /> + <pathelement location="lib/hamcrest-core-1.3.jar" /> <pathelement location="lib/cglib-nodep-3.1.jar" /> <pathelement location="lib/objenesis-2.1.jar" /> <pathelement location="lib/easymock-3.3.1.jar" /> @@ -277,11 +325,16 @@ <formatter type="xml" /> <sysproperty key="basedir" value="${basedir}/"/> + <sysproperty key="util.FileUtil.milliseconds" value="true"/> <batchtest fork="yes" todir="${test.reports}/onJar"> <fileset dir="${test.dir}"> <include name="**/*Test*.java" /> - <exclude name="**/ModelCheckerTestCase.java" /> + <exclude name="**/CommonTestCase.java" /> + <exclude name="**/ModelCheckerTestCase.java" /> + <exclude name="**/SuiteTestCase.java" /> + <exclude name="**/SuiteETestCase.java" /> + <exclude name="**/DistributedTLCTestCase.java" /> <exclude name="**/TLCServerTestCase.java" /> <exclude name="**/SuccessfulSimulationTestCase.java" /> <exclude name="**/AbstractExampleTestCase.java" /> @@ -305,7 +358,8 @@ <javac includeantruntime="false" srcdir="${test.dir}-long" destdir="${test.class.dir}" debug="true" verbose="false"> <classpath refid="project.classpath" /> <classpath> - <pathelement location="lib/junit-4.8.2.jar" /> + <pathelement location="lib/junit-4.12.jar" /> + <pathelement location="lib/hamcrest-core-1.3.jar" /> <pathelement path="${class.dir}" /> </classpath> </javac> @@ -326,7 +380,8 @@ <sysproperty key="aj.weaving.verbose" value="false"/> <classpath refid="project.classpath" /> <classpath> - <pathelement location="lib/junit-4.8.2.jar" /> + <pathelement location="lib/junit-4.12.jar" /> + <pathelement location="lib/hamcrest-core-1.3.jar" /> <pathelement location="${dist.file}" /> <pathelement path="${test.class.dir}" /> <!-- Need class.dir on path to find AspectJ related classes which don't get packaged into dist --> @@ -358,6 +413,7 @@ <!-- Verifies TLC parts with NASA's pathfinder model checker --> <target name="test-verify"> + <mkdir dir="${test.class.dir}"/> <!-- Compile our boilerplate code needed to verify TLC. E.g. the StateQueueVerify creates --> <!-- examplary produces & consumers and a dummy implementation of StateQueue. --> <javac includeantruntime="false" srcdir="${test.dir}-verify" destdir="${test.class.dir}" debug="true" verbose="false"> @@ -373,7 +429,8 @@ dir="${basedir}/test-verify" > <classpath refid="project.classpath" /> <classpath> - <pathelement location="lib/junit-4.8.2.jar" /> + <pathelement location="lib/junit-4.12.jar" /> + <pathelement location="lib/hamcrest-core-1.3.jar" /> <pathelement location="lib/jpf.jar" /> <pathelement location="lib/jpf-classes.jar" /> <pathelement path="${class.dir}" /> diff --git a/tlatools/ide/RunAllTLCTests.launch b/tlatools/ide/RunAllTLCTests.launch new file mode 100644 index 0000000000000000000000000000000000000000..03463076c018d99aaab0f1a51edeb8aa21a44304 --- /dev/null +++ b/tlatools/ide/RunAllTLCTests.launch @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<launchConfiguration type="org.eclipse.ant.AntLaunchConfigurationType"> +<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/> +<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${project}"/> +<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> +<listEntry value="/tlatools/customBuild.xml"/> +</listAttribute> +<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> +<listEntry value="1"/> +</listAttribute> +<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/> +<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/> +<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.ant.internal.launching.remote.InternalAntRunner"/> +<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="tlatools"/> +<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_ANT_TARGETS" value="test,"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LAUNCH_CONFIGURATION_BUILD_SCOPE" value="${none}"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/tlatools/customBuild.xml}"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/tlatools}"/> +<stringAttribute key="process_factory_id" value="org.eclipse.ant.ui.remoteAntProcessFactory"/> +</launchConfiguration> diff --git a/tlatools/javacc/README/README.txt b/tlatools/javacc/README/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..92b6b2cecb5506f25e0bee7d71be50260e926d01 --- /dev/null +++ b/tlatools/javacc/README/README.txt @@ -0,0 +1,13 @@ +The lexer code for SANY is produced by running JavaCC version 4.0 on the file tla+.jj +and then making some hand modifications of the output. + +The file javacc-tutorial.pdf contains documentation for JavaCC, which I believe was +written for version 4.0. + +The files method.txt and methods-sany1.txt contain instructions for making the +necessary modifications, along with miscellaneous documentation of the SANY code. + +The last modifications of those files seem to have been made on: + + methods.txt - 5 October 2009 + methods-sany1.txt - 15 March 2007 diff --git a/tlatools/javacc/README/javacc-4.0.zip b/tlatools/javacc/README/javacc-4.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..f0afe4f59bbbeeccc1200b23a41397aa02176fe1 Binary files /dev/null and b/tlatools/javacc/README/javacc-4.0.zip differ diff --git a/tlatools/javacc/README/javacc-tutorial.pdf b/tlatools/javacc/README/javacc-tutorial.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2bd0fe0e6c9c97108f09b986d0b3b64e5b5fa9ff Binary files /dev/null and b/tlatools/javacc/README/javacc-tutorial.pdf differ diff --git a/tlatools/javacc/README/methods-sany1.txt b/tlatools/javacc/README/methods-sany1.txt new file mode 100644 index 0000000000000000000000000000000000000000..3aef1cf5933af22b450f2dd0a605c37aa9d1cf55 --- /dev/null +++ b/tlatools/javacc/README/methods-sany1.txt @@ -0,0 +1,428 @@ +Note: There are almost identical copies of the files Token.java and +TokenMgrError.java in both the parser/ and configuration/ directories. +Both need to be there to compile correctly. Clearly, something is +wrong here. + +tlasany/drivers directory +----------------- +FrontEndException.java + Simple extension to Exception to create an exception specific to the FrontEnd + +InitException.java + Simple extension to Exception to create an exception specific to the FrontEnd + +SemanticException.java + Simple extension to Exception to create an exception specific to the FrontEnd + +SANY.java + static SANYmain + The main driver, called by tlasany/SANY.java. It handles + the command line and calles frontEndMain. + static frontEndMain + The real main driver, called by SANYmain. + static frontEndInitialize + [called from] frontEndMain + initializes Configuration, Context, level data. + throws InitException in case of problems. + static frontEndParse + [called from] frontEndMain + loads and parse the spec file. + uses SpecObj.loadSpec + static frontEndSemanticAnalysis + [called from] frontEndMain + Coming out of parsing, we have all the modules required to analyse + the file from the SpecObj. They are organized in a vector, ordered + from modules with no dependencies to modules with most dependencies. + Semantic analysis is done incrementally, with the context of each + module stored in a gobal table for easy retrieval. + +================================================================== +tlasany/parser directory +----------------------- + +This directory contains classes implementing the parser. There are +different group of classes: + 1. implementing support for identifying matching alignments + 2. implementing the expression parser + 3. implementing the parser + 4. support + +1. Implementing support for identifying matching alignments +----------------------------------------------------------- +BracketStack.java + class to support the enforcement of alignment as delimiter in TLA+, e.g. + /\ + /\ + /\ + /\ + /\ + we keep track of the kind of "bracket", e.g. AND, OR, but + identified from the type of STN. It is organized as a stack as + operators are embedded in expressions. Stacks are created, + pushed or popped. With the top reference, we can compare whether + an operator will be aligned, to the right or the left. + +StackElement.java + An element in BracketStack + +2. Implementing the expression parser +------------------------------------- +Expression parser: + The "high level" parser simply pushed expression elements on a stack, + on which well formed expressions are reduced, according to precedence + + associativity rules. + +OSelement.java + Defines the objects that go on the operator stack: the operator and + the syntax node. An OSelement object can be viewed as an + information cache, really. + +Operator.java + The Operator object associated with an operator defines the symbol + and its properties--e.g. "+" is infix. An operator will also have + low and high precedence levels, to direct the order in which + expressions are evaluated. e.g. a*b+c is (a*b)+c + + Note that there is a lack of modularity between Operator and + Operators. An interface should be defined to define in one place + constant values (nofix, infix, ...) and string representations + thereof. + +OperatorStack.java + This class name is a misnommer. Or rather a short for Operator + Expression Reduction Stack. It is also really a stack of stacks. + See comments in file. + + Operators are pushed onto the stack, and reduction operations called + periodically. As well as a final operation once we have captured + all elements of the expression. + +Operators.java + Creates and manages all symbols defined in the grammar. Initialized + by Configuration. + +3. implementing the parser +-------------------------- +SyntaxTreeNode.java + +The following are automatically generated from tla+.jj, the +implementation of the parser. + ParseException.java + SimpleCharStream.java + TLAplusParser.java + TLAplusParserConstants.java + TLAplusParserTokenManager.java + TokenMgrError.java + Token.java + +The ParseException.java file produced by javacc must be modified for +use by the other parser files. The modification consists of adding the +method getShortMessage(), whose current code is given at the end of +this file. That method is called by code in TLAplusParser.java that is +obtained from the tla+.jj grammar file. + +4. Support +---------- +ParseError.java + An exception. +ParseErrors.java + An array of ParseError objects. + + +Note: +The current directory also contains ASCII_CharStream.java, which is +obsolete. It was constructed by an earlier version of javacc, which +now constructs SimpleCharStream.java instead. + +================================================================== +tlasany/st directory +----------------------- + +st (short for Syntax Tree) creates an abstract view of the parse tree. +It was created for decoupling from other operations, but its use is +certainly not strictly necessary. + +Only Location and SyntaxTreeNode are required. + +Location.java + A location specifies the position of a syntactic unit in the source + - beginLine() start line of a syntactic unit + - beginColumn() start line of a syntactic unit + - endLine() start column of a syntactic unit + - endColumn() end column of a syntactic unit + - source() returns source file + - toString() returns a pprintable version of content + +SyntaxTreeConstants.java + Interface defining all constants for SyntaxTreeNodes. This extends + the numbering of tokens, which is done by javacc and put in + TLAplusParserConstants.java, to SyntaxTreeNode objects' `kind' + field. Both tokens and nodes are in the syntax tree. This class + also contains an array of strings which give a printable version of + the tree node kinds. + +The ParseError and ParseErrors interfaces in this directory (st) are +implemented by the classes of the same name in the parser/ directory. +These interfaces are also implemented by classes in modanalyzer/. +------ +ParseError.java + interface for a parse error + prescribes + - String reportedError() + - String defaultError() + +ParseErrors.java + interface to an Array of Parse Errors. + + +ParseTree.java + Interface to parse tree. Used in modanalyzer/ classes. + +TreeNode.java + interface for TreeNode. Used in semantic/ classes + +================================================================== +tlasany/utilities directory +--------------------------- +Assert.java + Assertion, obsolete in java 1.5 +IntWrapper.java + Abstraction of int: value can be set, read, or incremented. +Stack.java + Stack abstraction, pre-java Generics +Strings.java + Add an indentation method to basic (java) strings. +Vector.java + A generic (Object-based) java abstraction for dynamic vectors. Can be + resized. supported methods: + - int size () + - String toString() + - void addElement( Obj) + - void setElementAt( Obj, int) + - bool contains (Obj) + - void append( Vector) + - void appendNoRepeats ( Vector) + - Enumeration elements () + - void removeAllElements () + - void removeElementAt (int) + - void insertElementAt (Obj, int) + +VectorEnumeration.java + Support class for Vector. Creates an enumeration. + - implements nextElement, hasMoreElements for an Enumeration on vectors + - create a local copy of references to obj content. + +================================================================== +tlasany/explorer directory +----------------------- + This is an interface to the semantic Tree, for exploration, that is + mainly to display the semantic tree. It interacts with an inputStream + for commands. The operations are really straightforward: identifying + a symbol and printing relevant information. + +ExploreNode.java + interface to retrieve information fron node +Explorer.java + getLine + printNode + lookUpAndPrintSyntaxTree( String) + lookUpAndPrintDef( String) + levelDataPrint( String ) + executeCommand() + parseAndExecuteCommand() + printSyntaxTree() + main() + +ExplorerQuitException.java + Exception in case of Explorer problem. + +================================================================== +tlasany/configuration directory +------------------------------- + +ConfigConstants.java + This file was originally generated by javacc for parsing + defaultConfig, and then J-Ch added the definition of defaultConfig + to it. + +The following files were originally generated by javacc from a +grammar file that has vanished. They parse the string +ConfigConstants.defaultConfig to build Operators.BuiltinTable. +-------------------- +ASCII_CharStream.java +Configuration.java +ConfigurationTokenManager.java +ParseException.java +Token.java +TokenMgrError.java + +================================================================== +tlasany/error directory +----------------------- + +As noted below, this entire directory can be eliminated. + +ErrorRegistry.java + Doesn't appear to be used. + +Log.java + Used by BracketStack for no good purpose. It can be removed and + references to it eliminated. + +LogCategories.java + Used only by Log.java + +Timing.java + Appears to be unused. + +ToolkitError.java + Appears to be unused. +================================================================== +tlasany/modanalyzer directory +----------------------------- +The files in this directory are used as a interface between the driver +and the single-module parser. It contains the mechanics to extract +which modules have been referenced, to map module names to files, and +to keep track of which modules have already been parsed. + +ModuleContext.java +ModulePointer.java +ModuleRelationships.java +ModuleRelatives.java +NameToFileIStream.java +NamedInputStream.java +ParseUnit.java +ParseUnitRelatives.java +ParseUnitsTable.java +SpecObj.java +StringToNamedInputStream.java +SyntaxTreePrinter.java + +================================================================== +tlasany/semantic directory +----------------------- +ASTConstants.java + Defines the values of the semantic nodes' `kind' field and their + printed names. + +AbortException.java + Random exception. +SemanticsException.java + Random exception. + +ArgLevelParam.java + Seems to be the object that contains the level information for an + operator. + +BuiltInLevel.java + Seems to define the levels of the built-in operators. + +Context.java + A hashtable of definition and declaration nodes. + +Errors.java + Probably used to keep track of the errors found during semantic + analysis. + +ExternalModuleTable.java + Seems to keep track of contexts and level (constant or non-constant) + of modules that have been semantically analyzed. + +FrontEnd.java + This class contains the methods by which a tool calls the Front End + to parse input and to create a semantic tree, and for various other + interactions. + +Generator.java + Generates a semantic graph from a parse tree. It also uses the list + of modules to access contexts to instantiate or extend. + +LevelConstants.java + Trivial constants. + +LevelException.java + A random exception. + +Subst.java + This class represents a single substitution of the form + op <- expr such as appears in module instantiations + +SetOfArgLevelConstraints.java + Implements a map mapping arg-level parameters (ParamAndPosition) to + levels (Integer). An entry <pap,x> means that the argument + pap.position of the operator pap.param must have a level >= x. + +SetOfLevelConstraints.java + Implements a map mapping parameters to levels. An entry <p,x> in + the set means that p must have a level <= x. + +SymbolTable.java + The Symbol Table builds the stack of context tables. + +SemanticNode.java + The abstract class that is the superclass of all individual node + classes. These node classes are: + AssumeNode.java + AssumeProveNode.java + ParamAndPosition.java + ProofNode.java + TheoremNode.java + LevelNode.java + This is an abstract class that extends SemanticNode + and is extended by: + InstanceNode.java + ExprOrOpArgNode.java + This is abstract and is extended by + ExprNode.java + This is an abstract node that is extended by: + LetInNode.java + AtNode.java + DecimalNode.java + NumeralNode.java + StringNode.java + SubstInNode.java + OpApplNode.java + OpArgNode.java + SymbolNode.java + This is an abstract class that is extended by + FormalParamNode.java ModuleNode.java + OpDefOrDeclNode.java + Is extended by: + OpDeclNode.java + OpDefNode.java + + +================================================================== + +The method getShortMessage() to be inserted into ParseException.java. + + /** + * * shorter variation on the following + * + */ + public String getShortMessage() { + if (!specialConstructor) { + return super.getMessage(); + } + int maxSize = 0; + for (int i = 0; i < expectedTokenSequences.length; i++) { + if (maxSize < expectedTokenSequences[i].length) { + maxSize = expectedTokenSequences[i].length; + } + } + String retval = "Encountered \""; + Token tok = currentToken.next; + + for (int i = 0; i < maxSize; i++) { + if (i != 0) retval += " "; + if (tok.kind == 0) { + retval += tokenImage[0]; + break; + } + retval += tok.image; + // retval += add_escapes(tok.image); + tok = tok.next; + } + retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn; + return retval; + } diff --git a/tlatools/javacc/README/methods.txt b/tlatools/javacc/README/methods.txt new file mode 100644 index 0000000000000000000000000000000000000000..aaeabd2812cab8ffc722870dfef6957207df9b9f --- /dev/null +++ b/tlatools/javacc/README/methods.txt @@ -0,0 +1,491 @@ +Note: The following files produced by javacc have been edited. + + parser/ParseException.java + The method at the end of this file was added--I believe by J-Ch + The method in question seems to be getShortMessage(). + + configuration/Configuration.java + configuration/ASCII_CharStream.java + configuration/ConfigurationTokenManager + These have small bug fixes introduced by David Jefferson. Search for + "DRJ" to find them. These files were originally produced by running + javacc on config.jj, a grammar file that specifies the + parsing of the string ConfigConstants.defaultConfig. + I suspect that current the version of javacc would not produce + the ASCI_CharStream.java file, but I'm not sure. I just know that + running javacc on tla+.jj doesn't produce such a file. + +tlasany/drivers directory +----------------- +FrontEndException.java + Simple extension to Exception to create an exception specific to the FrontEnd + +InitException.java + Simple extension to Exception to create an exception specific to the FrontEnd + +SemanticException.java + Simple extension to Exception to create an exception specific to the FrontEnd + +SANY.java + static SANYmain + The main driver, called by tlasany/SANY.java. It handles + the command line and calles frontEndMain. + static frontEndMain + The real main driver, called by SANYmain. + static frontEndInitialize + [called from] frontEndMain + initializes Configuration, Context, level data. + throws InitException in case of problems. + static frontEndParse + [called from] frontEndMain + loads and parse the spec file. + uses SpecObj.loadSpec + static frontEndSemanticAnalysis + [called from] frontEndMain + Coming out of parsing, we have all the modules required to analyse + the file from the SpecObj. They are organized in a vector, ordered + from modules with no dependencies to modules with most dependencies. + Semantic analysis is done incrementally, with the context of each + module stored in a gobal table for easy retrieval. + +================================================================== +tlasany/parser directory +----------------------- + +This directory contains classes implementing the parser. There are +different group of classes: + 1. implementing support for identifying matching alignments + 2. implementing the expression parser + 3. implementing the parser + 4. support + +1. Implementing support for identifying matching alignments +----------------------------------------------------------- +BracketStack.java + class to support the enforcement of alignment as delimiter in TLA+, e.g. + /\ + /\ + /\ + /\ + /\ + we keep track of the kind of "bracket", e.g. AND, OR, but + identified from the type of STN. It is organized as a stack as + operators are embedded in expressions. Stacks are created, + pushed or popped. With the top reference, we can compare whether + an operator will be aligned, to the right or the left. + +StackElement.java + An element in BracketStack + +2. Implementing the expression parser +------------------------------------- +Expression parser: + The "high level" parser simply pushed expression elements on a stack, + on which well formed expressions are reduced, according to precedence + + associativity rules. + +OSelement.java + Defines the objects that go on the operator stack: the operator and + the syntax node. An OSelement object can be viewed as an + information cache, really. + +Operator.java + The Operator object associated with an operator defines the symbol + and its properties--e.g. "+" is infix. An operator will also have + low and high precedence levels, to direct the order in which + expressions are evaluated. e.g. a*b+c is (a*b)+c + + Note that there is a lack of modularity between Operator and + Operators. An interface should be defined to define in one place + constant values (nofix, infix, ...) and string representations + thereof. + +OperatorStack.java + This class name is a misnommer. Or rather a short for Operator + Expression Reduction Stack. It is also really a stack of stacks. + See comments in file. + + Operators are pushed onto the stack, and reduction operations called + periodically. As well as a final operation once we have captured + all elements of the expression. + +Operators.java + Creates and manages all symbols defined in the grammar. Initialized + by Configuration. + +3. implementing the parser +-------------------------- +SyntaxTreeNode.java + +The following are automatically generated from tla+.jj, the +implementation of the parser. + ParseException.java + SimpleCharStream.java + TLAplusParser.java + TLAplusParserConstants.java + TLAplusParserTokenManager.java + TokenMgrError.java + Token.java + +The ParseException.java file produced by javacc must be modified for +use by the other parser files. The modification consists of adding the +method getShortMessage(), whose current code is given at the end of +this file. That method is called by code in TLAplusParser.java that is +obtained from the tla+.jj grammar file. + +4. Support +---------- +ParseError.java + An exception. +ParseErrors.java + An array of ParseError objects. + + +Note: +The current directory also contains ASCII_CharStream.java, which is +obsolete. It was constructed by an earlier version of javacc, which +now constructs SimpleCharStream.java instead. + +================================================================== +tlasany/st directory +----------------------- + +st (short for Syntax Tree) creates an abstract view of the parse tree. +It was created for decoupling from other operations, but its use is +certainly not strictly necessary. + +Only Location and SyntaxTreeNode are required. + +Location.java + A location specifies the position of a syntactic unit in the source + - beginLine() start line of a syntactic unit + - beginColumn() start line of a syntactic unit + - endLine() start column of a syntactic unit + - endColumn() end column of a syntactic unit + - source() returns source file + - toString() returns a pprintable version of content + +SyntaxTreeConstants.java + Interface defining all constants for SyntaxTreeNodes. This extends + the numbering of tokens, which is done by javacc and put in + TLAplusParserConstants.java, to SyntaxTreeNode objects' `kind' + field. Both tokens and nodes are in the syntax tree. This class + also contains an array of strings which gives a printable version of + the tree node kinds. + +The ParseError and ParseErrors interfaces in this directory (st) are +implemented by the classes of the same name in the parser/ directory. +These interfaces are also implemented by classes in modanalyzer/. +------ +ParseError.java + interface for a parse error + prescribes + - String reportedError() + - String defaultError() + +ParseErrors.java + interface to an Array of Parse Errors. + + +ParseTree.java + Interface to parse tree. Used in modanalyzer/ classes. + +TreeNode.java + Interface for TreeNode. Imported by a lot of classes + in semantic/ and modanalyzer/, and by + parser/{SyntaxTreeNode,TLAplusParser, TLAplusParserTokenManager} + It seems to be implemented only by SyntaxTreeNode. + +================================================================== +tlasany/utilities directory +--------------------------- +Assert.java + Assertion, obsolete in java 1.5 +IntWrapper.java + Abstraction of int: value can be set, read, or incremented. +Stack.java + Stack abstraction, pre-java Generics +Strings.java + Add an indentation method to basic (java) strings. +Vector.java + A generic (Object-based) java abstraction for dynamic vectors. Can be + resized. supported methods: + - int size () + - String toString() + - void addElement( Obj) + - void setElementAt( Obj, int) + - bool contains (Obj) + - void append( Vector) + - void appendNoRepeats ( Vector) + - Enumeration elements () + - void removeAllElements () + - void removeElementAt (int) + - void insertElementAt (Obj, int) + +VectorEnumeration.java + Support class for Vector. Creates an enumeration. + - implements nextElement, hasMoreElements for an Enumeration on vectors + - create a local copy of references to obj content. + +================================================================== +tlasany/explorer directory +----------------------- + This is an interface to the semantic Tree, for exploration, that is + mainly to display the semantic tree. It interacts with an inputStream + for commands. The operations are really straightforward: identifying + a symbol and printing relevant information. + +ExploreNode.java + interface to retrieve information fron node + methods: String toString(int depth); + String levelDataToString(); + void walkGraph(Hashtable semNodesTable); + + +Explorer.java + getLine + printNode + lookUpAndPrintSyntaxTree( String) + lookUpAndPrintDef( String) + levelDataPrint( String ) + executeCommand() + parseAndExecuteCommand() + printSyntaxTree() + main() + +ExplorerQuitException.java + Exception in case of Explorer problem. + +================================================================== +tlasany/configuration directory +------------------------------- + +ConfigConstants.java + This file was originally generated by javacc for parsing + defaultConfig, and then J-Ch added the definition of defaultConfig + to it. + +The following files were originally generated by javacc from a +grammar file that has vanished. They parse the string +ConfigConstants.defaultConfig to build Operators.BuiltinTable. +-------------------- +ASCII_CharStream.java +Configuration.java +ConfigurationTokenManager.java +ParseException.java +Token.java +TokenMgrError.java + +================================================================== +tlasany/error directory +----------------------- + +As noted below, this entire directory can be eliminated. + +ErrorRegistry.java + Doesn't appear to be used. + +Log.java + Used by BracketStack for no good purpose. It can be removed and + references to it eliminated. + +LogCategories.java + Used only by Log.java + +Timing.java + Appears to be unused. + +ToolkitError.java + Appears to be unused. +================================================================== +tlasany/modanalyzer directory +----------------------------- +The files in this directory are used as a interface between the driver +and the single-module parser. It contains the mechanics to extract +which modules have been referenced, to map module names to files, and +to keep track of which modules have already been parsed. + +ModuleContext.java +ModulePointer.java +ModuleRelationships.java +ModuleRelatives.java +NameToFileIStream.java +NamedInputStream.java +ParseUnit.java + This class contains the code that walks through a module's parse + tree to find the names of EXTENDed or INSTANCEd modules. +ParseUnitRelatives.java +ParseUnitsTable.java +SpecObj.java +StringToNamedInputStream.java +SyntaxTreePrinter.java + +================================================================== +tlasany/semantic directory +----------------------- +ASTConstants.java + Defines the values of the semantic nodes' `kind' field and their + printed names. + +AbortException.java + Random exception. +SemanticsException.java + Random exception. + +ArgLevelParam.java + Seems to be the object that contains the level information for an + operator. + +BuiltInLevel.java + Seems to define the levels of the built-in operators. + +Context.java + A hashtable of definition and declaration nodes. + +Errors.java + Probably used to keep track of the errors found during semantic + analysis. + +ExternalModuleTable.java + Seems to keep track of contexts and level (constant or non-constant) + of modules that have been semantically analyzed. + +FrontEnd.java + This class contains the methods by which a tool calls the Front End + to parse input and to create a semantic tree, and for various other + interactions. + +Generator.java + Generates a semantic graph from a parse tree. It also uses the list + of modules to access contexts to instantiate or extend. + +LevelConstants.java + Trivial constants. + +LevelException.java + A random exception. + +OpDefOrLabelNode.java + An interface implemented by OpDefNode, ThmOrAssumpDefNode, and + LabelNode. It contains methods for accessing the set of labels + "immediately within" this node. [Added by LL on 23 Apr 2007] + +Subst.java + This class represents a single substitution of the form + op <- expr such as appears in module instantiations + +SetOfArgLevelConstraints.java + Implements a map mapping arg-level parameters (ParamAndPosition) to + levels (Integer). An entry <pap,x> means that the argument + pap.position of the operator pap.param must have a level >= x. + +SetOfLevelConstraints.java + Implements a map mapping parameters to levels. An entry <p,x> in + the set means that p must have a level <= x. + +SymbolTable.java + The Symbol Table builds the stack of context tables. + +SemanticNode.java + The abstract class that is the superclass of all individual node + classes. These node classes are: + ParamAndPosition.java + LevelNode.java + This is an abstract class that extends SemanticNode + and is extended by: + AssumeNode.java + TheoremNode.java + [AssumeNode and TheoremNode moved here by LL 22 Jul 2007. + I don't know why they weren't already here.] + ProofNode.java + This is abstract and is extended by + LeafProofNode.java + NonLeafProofNode.java + InstanceNode.java + obsolete: QEDStepNode.java + ExprOrOpArgNode.java + This is abstract and is extended by + ExprNode.java + This is an abstract node that is extended by: + LabelNode.java [Added by LL 23 Apr 2007] + LetInNode.java + AtNode.java + DecimalNode.java + NumeralNode.java + StringNode.java + OpApplNode.java + SubstInNode.java + OpArgNode.java + AssumeProveNode.java [Moved here by LL 15 Mar 2007] + NewSymbNode [Added by LL 15 Mar 2007 ] + UseOrHideNode.java [Added by LL 29 Jul 2007] + DefStepNode.java [Added by LL 16 Aug 2007] + APSubstInNode.java [Added by LL 6 Aug 2007] + SymbolNode.java + This is an abstract class that extends LevelNode by + adding the following concrete methods: + getName(), occur(), isParam() + and the following abstract methods: + getArity(), isLocal(), and match() [for testing arity]. + It is extended by + FormalParamNode.java + ModuleNode.java + OpDefOrDeclNode.java + Abstract class that adds the fields + ModuleNode originallyDefinedInModule + SymbolTable st + int arity + Is extended by: + OpDeclNode.java + OpDefNode.java + ThmOrAssumpDefNode.java [Added by LL 17 Mar 2007] + +================================================================== + +To add a new BuiltIn operator, search for $Nop and OP_nop in the files + + semantic/ASTConstants.java + semantic/BuiltInLevel.java + configuration/ConfigConstants.java + +and copy what's done there. If the model checker needs to be able to +evaluate the operator, search for Op_nop and OPCODE_nop in + + tool/BuiltInOPs.java + tool/Tool.java + tool/ToolGlobals.java + +================================================================== + +The method getShortMessage() to be inserted into ParseException.java. + + /** + * * shorter variation on the following + * + */ + public String getShortMessage() { + if (!specialConstructor) { + return super.getMessage(); + } + int maxSize = 0; + for (int i = 0; i < expectedTokenSequences.length; i++) { + if (maxSize < expectedTokenSequences[i].length) { + maxSize = expectedTokenSequences[i].length; + } + } + String retval = "Encountered \""; + Token tok = currentToken.next; + + for (int i = 0; i < maxSize; i++) { + if (i != 0) retval += " "; + if (tok.kind == 0) { + retval += tokenImage[0]; + break; + } + retval += tok.image; + // retval += add_escapes(tok.image); + tok = tok.next; + } + retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn; + return retval; + } diff --git a/tlatools/jfr/Overview.jpg b/tlatools/jfr/Overview.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ecb56cfa28f403492d40d8d72c17aa5b0551f72 Binary files /dev/null and b/tlatools/jfr/Overview.jpg differ diff --git a/tlatools/jfr/README.md b/tlatools/jfr/README.md new file mode 100644 index 0000000000000000000000000000000000000000..9a594fa7efcd77b20147c75f42538fa56864d981 --- /dev/null +++ b/tlatools/jfr/README.md @@ -0,0 +1,43 @@ +This folder contains all libraries and config files to profile TLC with Java Flight Recorder (JFR). + +A default JFR is created with: + +-XX:+UnlockCommercialFeatures +-XX:+FlightRecorder +-XX:FlightRecorderOptions=defaultrecording=true,disk=true,repository=/tmp,dumponexit=true,dumponexitpath=dump.jfr,maxage=1h,settings=${project_loc:tlatools}/jfr/tlc.jfc + +To additionally record JMX data in the flight recording, add: + +-javaagent:${project_loc:tlatools}/jfr/jmx2jfr.jar=${project_loc:tlatools}/jfr/jmxprobes.xml + +and replace the "default" settings with ${project_loc:tlatools}/jfr/tlc.jfc + +Afterwards, the resulting flight recording can be opened with Java Mission Control (JMC). + + +Further processing (charting...) is best done by converting the .jfr to xml: + +java oracle.jrockit.jfr.parser.Parser -xml dump.jfr > dump.xml + +To select all TLC related elements, do: + +xmlstarlet sel + -N jfr=http://www.oracle.com/hotspot/jvm/ + -N jvm=http://www.oracle.com/hotspot/jvm/ + -N p4108=http://www.hirt.se/jfr/jmx2jfr/ + -t -c "//p4108:MBeans_tlc2_tool_ModelChecker" dump.xml + +Do print all the attributes of "StatesGeneratedPerMinute do: + +xmlstarlet sel + -N jfr=http://www.oracle.com/hotspot/jvm/ + -N jvm=http://www.oracle.com/hotspot/jvm/ + -N p4108=http://www.hirt.se/jfr/jmx2jfr/ + -t -v "//p4108:MBeans_tlc2_tool_ModelChecker/p4108:StatesGeneratedPerMinute" dump.xml + +--- +http://www.slideshare.net/marcushirt/java-mission-control-java-flight-recorder-deep-dive +https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr004.html#BABHCDEA +https://docs.oracle.com/javacomponents/jmc-5-4/jfr-runtime-guide/run.htm#JFRUH179 +http://hirt.se/blog/?p=689 +http://hirt.se/blog/?p=446 \ No newline at end of file diff --git a/tlatools/jfr/jmx2jfr.jar b/tlatools/jfr/jmx2jfr.jar new file mode 100644 index 0000000000000000000000000000000000000000..9ceb7bc92b12c0350b5175d214142d05e632b9f3 Binary files /dev/null and b/tlatools/jfr/jmx2jfr.jar differ diff --git a/tlatools/jfr/jmxprobes.xml b/tlatools/jfr/jmxprobes.xml new file mode 100644 index 0000000000000000000000000000000000000000..0a17520e52dfab302b1060d737a1801b76915b31 --- /dev/null +++ b/tlatools/jfr/jmxprobes.xml @@ -0,0 +1,241 @@ +<!-- + This is an example configuration file. It should be edited to capture the MBean + attributes you are interested in. + + Use it with the agent in the following manner: + java -javaagent:<path to jmx2jfr.jar>=<path to this file> <your normal vmargs> +--> +<jmx2jfr> + <!-- Time to wait before retrying getting an MBean attribute in ms --> + <retrytime>60000</retrytime> + + <!-- Time to wait until starting in ms --> + <delay>10000</delay> + + <!-- How often to get the attributes and emit events for them, in ms --> + <period>30000</period> + + <!-- clean: Use name or type keys for event name. Leads to cleaner event + type names, but can result in name collisions if you have MBeans with + the same name in the same domain. + canonical: ugly event type names, but guaranteed not to collide --> + <namingmode>clean</namingmode> + + <!-- objectname: MBean name - look it up in JMC + attributename: Attribute name - look it up in JMC + contenttype: [None | Bytes | Timestamp | Millis | Nanos | Ticks | Address] --> + <attributes> + <attribute> + <objectname>java.lang:type=OperatingSystem</objectname> + <attributename>FreeSwapSpaceSize</attributename> + <contenttype>Bytes</contenttype> + </attribute> + <attribute> + <objectname>java.lang:type=OperatingSystem</objectname> + <attributename>TotalSwapSpaceSize</attributename> + <contenttype>Bytes</contenttype> + </attribute> + <attribute> + <objectname>java.lang:type=OperatingSystem</objectname> + <attributename>AvailableProcessors</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>java.lang:type=OperatingSystem</objectname> + <attributename>AvailableProcessors</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>java.lang:type=OperatingSystem</objectname> + <attributename>Name</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>java.lang:type=Threading</objectname> + <attributename>PeakThreadCount</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>java.lang:type=Threading</objectname> + <attributename>CurrentThreadCpuTime</attributename> + <contenttype>Nanos</contenttype> + </attribute> + <attribute> + <objectname>java.lang:type=Runtime</objectname> + <attributename>StartTime</attributename> + <contenttype>Timestamp</contenttype> + </attribute> + <attribute> + <objectname>java.lang:type=Runtime</objectname> + <attributename>StartTime</attributename> + <contenttype>Timestamp</contenttype> + </attribute> + <attribute> + <objectname>java.lang:type=Runtime</objectname> + <attributename>Uptime</attributename> + <contenttype>Millis</contenttype> + </attribute> + <!-- tlc2.tool:type=ModelChecker --> + <attribute> + <objectname>tlc2.tool:type=ModelChecker</objectname> + <attributename>StatesGenerated</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool:type=ModelChecker</objectname> + <attributename>StatesGeneratedPerMinute</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool:type=ModelChecker</objectname> + <attributename>DistinctStatesGenerated</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool:type=ModelChecker</objectname> + <attributename>DistinctStatesGeneratedPerMinute</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool:type=ModelChecker</objectname> + <attributename>StateQueueSize</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool:type=ModelChecker</objectname> + <attributename>Progress</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool:type=ModelChecker</objectname> + <attributename>WorkerCount</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool:type=ModelChecker</objectname> + <attributename>AverageBlockCnt</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool:type=ModelChecker</objectname> + <attributename>RuntimeRatio</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool:type=ModelChecker</objectname> + <attributename>SpecName</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool:type=ModelChecker</objectname> + <attributename>ModelName</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool:type=ModelChecker</objectname> + <attributename>CommandLine</attributename> + <contenttype>None</contenttype> + </attribute> + <!-- tlc2.tool.fp:type=DiskFPSet0 --> + <attribute> + <objectname>tlc2.tool.fp:type=DiskFPSet0</objectname> + <attributename>BucketCapacity</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool.fp:type=DiskFPSet0</objectname> + <attributename>TblCapacity</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool.fp:type=DiskFPSet0</objectname> + <attributename>IndexCapacity</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool.fp:type=DiskFPSet0</objectname> + <attributename>OverallCapacity</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool.fp:type=DiskFPSet0</objectname> + <attributename>TblLoad</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool.fp:type=DiskFPSet0</objectname> + <attributename>TblCnt</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool.fp:type=DiskFPSet0</objectname> + <attributename>MaxTblCnt</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool.fp:type=DiskFPSet0</objectname> + <attributename>FileCnt</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool.fp:type=DiskFPSet0</objectname> + <attributename>DiskLookupCnt</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool.fp:type=DiskFPSet0</objectname> + <attributename>MemHitCnt</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool.fp:type=DiskFPSet0</objectname> + <attributename>DiskHitCnt</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool.fp:type=DiskFPSet0</objectname> + <attributename>DiskWriteCnt</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool.fp:type=DiskFPSet0</objectname> + <attributename>DiskSeekCnt</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool.fp:type=DiskFPSet0</objectname> + <attributename>DiskSeekCache</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool.fp:type=DiskFPSet0</objectname> + <attributename>GrowDiskMark</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool.fp:type=DiskFPSet0</objectname> + <attributename>CheckPointMark</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool.fp:type=DiskFPSet0</objectname> + <attributename>FlushTime</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool.fp:type=DiskFPSet0</objectname> + <attributename>ReaderWriterCnt</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool.fp:type=DiskFPSet0</objectname> + <attributename>LoadFactor</attributename> + <contenttype>None</contenttype> + </attribute> + <attribute> + <objectname>tlc2.tool.fp:type=DiskFPSet0</objectname> + <attributename>LockCnt</attributename> + <contenttype>None</contenttype> + </attribute> + </attributes> +</jmx2jfr> \ No newline at end of file diff --git a/tlatools/jfr/tlc.jfc b/tlatools/jfr/tlc.jfc new file mode 100644 index 0000000000000000000000000000000000000000..89b444acaca862cd7bc7aed983ad94278344b6eb --- /dev/null +++ b/tlatools/jfr/tlc.jfc @@ -0,0 +1,456 @@ +<?xml version="1.0" encoding="UTF-8"?> +<configuration version="1.0" name="Settings for 'My Recording'" description="These settings were used to start the recording 'flight_recording_18091tlc2TLC18748.jfr'." provider="Oracle"> + + <producer uri="http://www.oracle.com/hotspot/jvm/" label="Oracle JDK"> + + <event path="java/statistics/thread_allocation"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="java/statistics/class_loading"> + <setting name="enabled">true</setting> + <setting name="period">1000 ms</setting> + </event> + + <event path="java/statistics/threads"> + <setting name="enabled">true</setting> + <setting name="period">1000 ms</setting> + </event> + + <event path="java/thread_start"> + <setting name="enabled">true</setting> + </event> + + <event path="java/thread_end"> + <setting name="enabled">true</setting> + </event> + + <event path="java/thread_sleep"> + <setting name="enabled">true</setting> + <setting name="stackTrace">true</setting> + <setting name="threshold">10 ms</setting> + </event> + + <event path="java/thread_park"> + <setting name="enabled">true</setting> + <setting name="stackTrace">true</setting> + <setting name="threshold">10 ms</setting> + </event> + + <event path="java/monitor_enter"> + <setting name="enabled">true</setting> + <setting name="stackTrace">true</setting> + <setting name="threshold">10 ms</setting> + </event> + + <event path="java/monitor_wait"> + <setting name="enabled">true</setting> + <setting name="stackTrace">true</setting> + <setting name="threshold">10 ms</setting> + </event> + + <event path="vm/class/load"> + <setting name="enabled">false</setting> + <setting name="stackTrace">true</setting> + <setting name="threshold">0 ms</setting> + </event> + + <event path="vm/class/unload"> + <setting name="enabled">false</setting> + </event> + + <event path="vm/info"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="vm/initial_system_property"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="vm/prof/execution_sample"> + <setting name="enabled">true</setting> + <setting name="period">10 ms</setting> + </event> + + <event path="vm/prof/execution_sampling_info"> + <setting name="enabled">false</setting> + <setting name="threshold">1 ms</setting> + </event> + + <event path="vm/runtime/execute_vm_operation"> + <setting name="enabled">true</setting> + <setting name="threshold">10 ms</setting> + </event> + + <event path="vm/runtime/thread_dump"> + <setting name="enabled">true</setting> + <setting name="period">60 s</setting> + </event> + + <event path="vm/flag/long"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="vm/flag/ulong"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="vm/flag/double"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="vm/flag/boolean"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="vm/flag/string"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="vm/flag/long_changed"> + <setting name="enabled">true</setting> + </event> + + <event path="vm/flag/ulong_changed"> + <setting name="enabled">true</setting> + </event> + + <event path="vm/flag/double_changed"> + <setting name="enabled">true</setting> + </event> + + <event path="vm/flag/boolean_changed"> + <setting name="enabled">true</setting> + </event> + + <event path="vm/flag/string_changed"> + <setting name="enabled">true</setting> + </event> + + <event path="vm/gc/detailed/object_count"> + <setting name="enabled">false</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="vm/gc/configuration/gc"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="vm/gc/configuration/heap"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="vm/gc/configuration/young_generation"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="vm/gc/configuration/tlab"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="vm/gc/configuration/survivor"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="vm/gc/detailed/object_count_after_gc"> + <setting name="enabled">false</setting> + </event> + + <event path="vm/gc/heap/summary"> + <setting name="enabled">true</setting> + </event> + + <event path="vm/gc/heap/ps_summary"> + <setting name="enabled">true</setting> + </event> + + <event path="vm/gc/heap/metaspace_summary"> + <setting name="enabled">true</setting> + </event> + + <event path="vm/gc/metaspace/gc_threshold"> + <setting name="enabled">true</setting> + </event> + + <event path="vm/gc/metaspace/allocation_failure"> + <setting name="enabled">true</setting> + <setting name="stackTrace">true</setting> + </event> + + <event path="vm/gc/metaspace/out_of_memory"> + <setting name="enabled">true</setting> + <setting name="stackTrace">true</setting> + </event> + + <event path="vm/gc/metaspace/chunk_free_list_summary"> + <setting name="enabled">true</setting> + </event> + + <event path="vm/gc/collector/garbage_collection"> + <setting name="enabled">true</setting> + <setting name="threshold">0 ms</setting> + </event> + + <event path="vm/gc/collector/parold_garbage_collection"> + <setting name="enabled">true</setting> + <setting name="threshold">0 ms</setting> + </event> + + <event path="vm/gc/collector/young_garbage_collection"> + <setting name="enabled">true</setting> + <setting name="threshold">0 ms</setting> + </event> + + <event path="vm/gc/collector/old_garbage_collection"> + <setting name="enabled">true</setting> + <setting name="threshold">0 ms</setting> + </event> + + <event path="vm/gc/collector/g1_garbage_collection"> + <setting name="enabled">true</setting> + <setting name="threshold">0 ms</setting> + </event> + + <event path="vm/gc/phases/pause"> + <setting name="enabled">true</setting> + <setting name="threshold">0 ms</setting> + </event> + + <event path="vm/gc/phases/pause_level_1"> + <setting name="enabled">true</setting> + <setting name="threshold">0 ms</setting> + </event> + + <event path="vm/gc/phases/pause_level_2"> + <setting name="enabled">true</setting> + <setting name="threshold">0 ms</setting> + </event> + + <event path="vm/gc/phases/pause_level_3"> + <setting name="enabled">false</setting> + <setting name="threshold">0 ms</setting> + </event> + + <event path="vm/gc/reference/statistics"> + <setting name="enabled">true</setting> + </event> + + <event path="vm/gc/detailed/promotion_failed"> + <setting name="enabled">true</setting> + </event> + + <event path="vm/gc/detailed/evacuation_failed"> + <setting name="enabled">true</setting> + </event> + + <event path="vm/gc/detailed/evacuation_info"> + <setting name="enabled">true</setting> + </event> + + <event path="vm/gc/detailed/concurrent_mode_failure"> + <setting name="enabled">true</setting> + </event> + + <event path="vm/gc/detailed/allocation_requiring_gc"> + <setting name="enabled">false</setting> + <setting name="stackTrace">true</setting> + </event> + + <event path="vm/compiler/config"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="vm/compiler/stats"> + <setting name="enabled">true</setting> + <setting name="period">1000 ms</setting> + </event> + + <event path="vm/compiler/compilation"> + <setting name="enabled">true</setting> + <setting name="threshold">100 ms</setting> + </event> + + <event path="vm/compiler/phase"> + <setting name="enabled">true</setting> + <setting name="threshold">10 s</setting> + </event> + + <event path="vm/compiler/failure"> + <setting name="enabled">true</setting> + </event> + + <event path="vm/code_sweeper/config"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="vm/code_sweeper/stats"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="vm/code_sweeper/sweep"> + <setting name="enabled">true</setting> + <setting name="threshold">100 ms</setting> + </event> + + <event path="vm/code_cache/config"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="vm/code_cache/stats"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="vm/code_cache/full"> + <setting name="enabled">true</setting> + </event> + + <event path="os/information"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="os/processor/cpu_information"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="os/processor/context_switch_rate"> + <setting name="enabled">true</setting> + <setting name="period">10 s</setting> + </event> + + <event path="os/processor/cpu_load"> + <setting name="enabled">true</setting> + <setting name="period">1000 ms</setting> + </event> + + <event path="os/processor/cpu_tsc"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="os/system_process"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="os/initial_environment_variable"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="os/memory/physical_memory"> + <setting name="enabled">true</setting> + <setting name="period">everyChunk</setting> + </event> + + <event path="java/object_alloc_in_new_TLAB"> + <setting name="enabled">true</setting> + <setting name="stackTrace">true</setting> + </event> + + <event path="java/object_alloc_outside_TLAB"> + <setting name="enabled">true</setting> + <setting name="stackTrace">true</setting> + </event> + + </producer> + + <producer uri="http://www.oracle.com/hotspot/jdk/" label="Oracle JDK"> + + <event path="java/file_read"> + <setting name="enabled">true</setting> + <setting name="stackTrace">true</setting> + <setting name="threshold">10 ms</setting> + </event> + + <event path="java/file_write"> + <setting name="enabled">true</setting> + <setting name="stackTrace">true</setting> + <setting name="threshold">10 ms</setting> + </event> + + <event path="java/socket_read"> + <setting name="enabled">true</setting> + <setting name="stackTrace">true</setting> + <setting name="threshold">10 ms</setting> + </event> + + <event path="java/socket_write"> + <setting name="enabled">true</setting> + <setting name="stackTrace">true</setting> + <setting name="threshold">10 ms</setting> + </event> + + <event path="java/exception_throw"> + <setting name="enabled">false</setting> + <setting name="stackTrace">true</setting> + </event> + + <event path="java/error_throw"> + <setting name="enabled">true</setting> + <setting name="stackTrace">true</setting> + </event> + + <event path="java/statistics/throwables"> + <setting name="enabled">true</setting> + <setting name="period">1000 ms</setting> + </event> + + </producer> + + <producer uri="http://www.oracle.com/hotspot/jfr-info/" label="Oracle JDK"> + + <event path="recordings/recording"> + <setting name="enabled">true</setting> + </event> + + <event path="recordings/recording_setting"> + <setting name="enabled">true</setting> + </event> + + </producer> + + <producer uri="http://www.hirt.se/jfr/jmx2jfr/"> + + <event path="MBeans/java_lang/Runtime"> + <setting name="enabled">true</setting> + </event> + + <event path="MBeans/java_lang/OperatingSystem"> + <setting name="enabled">true</setting> + </event> + + <event path="MBeans/java_lang/Threading"> + <setting name="enabled">true</setting> + </event> + + <event path="MBeans/tlc2_tool/ModelChecker"> + <setting name="enabled">true</setting> + </event> + + <event path="MBeans/tlc2_tool_fp/DiskFPSet0"> + <setting name="enabled">true</setting> + </event> + + </producer> + +</configuration> diff --git a/tlatools/lib/hamcrest-core-1.3.jar b/tlatools/lib/hamcrest-core-1.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..9d5fe16e3dd37ebe79a36f61f5d0e1a69a653a8a Binary files /dev/null and b/tlatools/lib/hamcrest-core-1.3.jar differ diff --git a/tlatools/lib/jacocoant.jar b/tlatools/lib/jacocoant.jar index 43340ba1cc3fecd7345a296fcaa72ef5b86fc55e..e6c0d786172a99832381bc1e876ec0b0cc4e5d8b 100644 Binary files a/tlatools/lib/jacocoant.jar and b/tlatools/lib/jacocoant.jar differ diff --git a/tlatools/lib/jgit-buildnumber-ant-task-1.2.10.jar b/tlatools/lib/jgit-buildnumber-ant-task-1.2.10.jar new file mode 100644 index 0000000000000000000000000000000000000000..cc8269bb088123f7c77e02786fd7b8398734df2f Binary files /dev/null and b/tlatools/lib/jgit-buildnumber-ant-task-1.2.10.jar differ diff --git a/tlatools/lib/junit-4.12.jar b/tlatools/lib/junit-4.12.jar new file mode 100644 index 0000000000000000000000000000000000000000..3a7fc266c3e32283a2b21fe12166ebdcc33a1da1 Binary files /dev/null and b/tlatools/lib/junit-4.12.jar differ diff --git a/tlatools/lib/junit-4.8.2.jar b/tlatools/lib/junit-4.8.2.jar deleted file mode 100644 index 5b4bb849af9583fec1ea0a0ccc0d571ef49aa8ba..0000000000000000000000000000000000000000 Binary files a/tlatools/lib/junit-4.8.2.jar and /dev/null differ diff --git a/tlatools/lib/org.eclipse.jgit-2.3.1.201302201838-r.jar b/tlatools/lib/org.eclipse.jgit-2.3.1.201302201838-r.jar new file mode 100644 index 0000000000000000000000000000000000000000..5c6aa301f5aaea5b31348b11ab2c0cd5c3fb9d3d Binary files /dev/null and b/tlatools/lib/org.eclipse.jgit-2.3.1.201302201838-r.jar differ diff --git a/tlatools/logging.properties b/tlatools/logging.properties index 68d1db468dcd42188bf41335ef66080e2f324e21..d256cb507341669daa226bc0c55e91b36ee16d92 100644 --- a/tlatools/logging.properties +++ b/tlatools/logging.properties @@ -18,10 +18,8 @@ # "handlers" specifies a comma separated list of log Handler # classes. These handlers will be installed during VM startup. # Note that these classes must be on the system classpath. -# By default we only configure a FileHandler, which will only -# show messages at the INFO and above levels. -handlers= java.util.logging.FileHandler - +# By default we only configure a ConsoleHandler. +handlers= java.util.logging.ConsoleHandler # To also add the ConsoleHandler, use the following line instead. #handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler @@ -38,6 +36,9 @@ handlers= java.util.logging.FileHandler # Describes specific configuration info for Handlers. ############################################################ +# Omit the date line (requires Java >=1.7) +java.util.logging.SimpleFormatter.format=%5$s%6$s%n + # default file output is in user's home directory. # %u stands for a simple counter java.util.logging.FileHandler.pattern = %h/java%u.log @@ -45,11 +46,12 @@ java.util.logging.FileHandler.limit = 50000 java.util.logging.FileHandler.count = 1 java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter +java.util.logging.ConsoleHandler.level = ALL +java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter ############################################################ # Facility specific properties. # Provides extra control for each logger. ############################################################ -# For example, set the com.xyz.foo logger to only log SEVERE -# messages: -com.xyz.foo.level = SEVERE +#tlc2.tool.level = ALL +#tlc2.tool.liveness.level = ALL diff --git a/tlatools/pom.xml b/tlatools/pom.xml index 3ea4f1c5146947a39fee51d69816d783b3b1b9d4..ab33768f575571a6277983967840f06d806b300a 100644 --- a/tlatools/pom.xml +++ b/tlatools/pom.xml @@ -15,11 +15,56 @@ <version>1.0.0-SNAPSHOT</version> <packaging>eclipse-plugin</packaging> + <properties> + <!-- tlatools is a non-standard maven project. Its heart is customBuild.xml written for ant --> + <!-- which gets invoked from maven. Unfortunately, it means that the tasks which are executed --> + <!-- by ant are not visible to maven. In this case it results in sonar not finding necessary --> + <!-- data to include coverage information. The properties below make sure that sonar finds the data. --> + <sonar.sources>src,src-gen,src-aj</sonar.sources> + <sonar.tests>test,test-verify,test-long,test-concurrent</sonar.tests> + + <sonar.java.binaries>class</sonar.java.binaries> + <sonar.java.libraries>lib/*.jar</sonar.java.libraries> + + <sonar.java.test.binaries>class,test-class</sonar.java.test.binaries> + <sonar.java.test.libraries>lib/*.jar</sonar.java.test.libraries> + + <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin> + <sonar.surefire.reportsPath>target/surefire-reports</sonar.surefire.reportsPath> + <sonar.junit.reportsPath>target/surefire-reports</sonar.junit.reportsPath> + <sonar.jacoco.reportPaths>target/code-coverage.exec</sonar.jacoco.reportPaths> + + <!-- I have no idea why those two are special and have to be excluded. --> + <sonar.exclusions>src-gen/tla2sany/parser/TLAplusParser.java,src/tlc2/value/FcnParams.java</sonar.exclusions> + </properties> + + <build> <plugins> - <plugin> + <!-- Delete the ../states/ folder created by the Ant JUnit tests as part + of the maven-antrun-plugin of customBuild.xml. On the CI-machine, the ../states/ + folder gradually grows to eventually fill-up the entire disk. --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-clean-plugin</artifactId> + <version>3.0.0</version> + <configuration> + <filesets> + <fileset> + <directory>../states/</directory> + <includes> + <include>**/*</include> + </includes> + <followSymlinks>false</followSymlinks> + </fileset> + </filesets> + </configuration> + </plugin> + + <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> + <version>1.8</version> <executions> <execution> <id>compile</id> @@ -33,6 +78,7 @@ <property name="build.compiler" value="extJavac"/> <property name="maven.test.skip" value="${maven.test.skip}"/> + <property name="maven.test.halt" value="${maven.test.halt}"/> <ant antfile="customBuild.xml" inheritRefs="true"> <target name="default" /> <target name="dist-mixed-zip" /> diff --git a/tlatools/src/tla2sany/semantic/AnyDefNode.java b/tlatools/src/tla2sany/semantic/AnyDefNode.java index 64b159da6ad1e4730e668221220e7f3de135c465..490c3d56262dd6f61cb63afa21766a9e55c503a8 100644 --- a/tlatools/src/tla2sany/semantic/AnyDefNode.java +++ b/tlatools/src/tla2sany/semantic/AnyDefNode.java @@ -1,52 +1,52 @@ -/** - * The AnyDefNode interface is implemented by OpDefNode and ThmOrAssumpDefNode. - * It was added by LL on 24 Oct 2012 to fix a bug in the level-checking of - * ThmOrAssumpDefNode objects. When a module containing a theorem or assumption - * such as - * - * THEOREM Fab == ... - * - * is instantiated with parameters in a statement like - * - * I(x, y) == INSTANCE M WITH ... - * - * then level checking of the expression I(e1, e2)!Fab did not check that - * the levels of e1 and e2 were appropriate for the instantiation. This was - * because the levelCheck method of OpApplNode treated an operator like Fab - * defined with a ThmOrAssumpDefNode differently from one defined with an - * OpDefNode. To solve this problem, level checking of ThmOrAssumpDefNode was - * changed to be essentially the same as for OpDefNode. The levelCheck method - * of OpApplNode was changed to handle ThmOrAssumpDefNode and OpDefNode operators - * the same by changing OpDefNode to AnyDefNode in a couple of places, and by - * replacing one access to an OpDefNode field by a call of a new method that - * returns the value of that field. - */ -package tla2sany.semantic; - -import java.util.HashSet; - -import util.UniqueString; - -/** - * @author lamport - * - */ -public interface AnyDefNode { - public boolean levelCheck(int itr) ; - public int getMaxLevel(int i) ; - public UniqueString getName() ; - public int getMinMaxLevel(int i, int j) ; - public boolean getOpLevelCond(int i, int j, int k) ; - public int getLevel() ; - public int getWeight(int i) ; - public HashSet getLevelParams() ; - public HashSet getAllParams() ; - public HashSet getNonLeibnizParams() ; - public int getArity() ; - public boolean[] getIsLeibnizArg() ; - public boolean getIsLeibniz() ; - public SetOfLevelConstraints getLevelConstraints() ; - public HashSet getArgLevelParams() ; - public SetOfArgLevelConstraints getArgLevelConstraints() ; - public FormalParamNode[] getParams() ; -} +/** + * The AnyDefNode interface is implemented by OpDefNode and ThmOrAssumpDefNode. + * It was added by LL on 24 Oct 2012 to fix a bug in the level-checking of + * ThmOrAssumpDefNode objects. When a module containing a theorem or assumption + * such as + * + * THEOREM Fab == ... + * + * is instantiated with parameters in a statement like + * + * I(x, y) == INSTANCE M WITH ... + * + * then level checking of the expression I(e1, e2)!Fab did not check that + * the levels of e1 and e2 were appropriate for the instantiation. This was + * because the levelCheck method of OpApplNode treated an operator like Fab + * defined with a ThmOrAssumpDefNode differently from one defined with an + * OpDefNode. To solve this problem, level checking of ThmOrAssumpDefNode was + * changed to be essentially the same as for OpDefNode. The levelCheck method + * of OpApplNode was changed to handle ThmOrAssumpDefNode and OpDefNode operators + * the same by changing OpDefNode to AnyDefNode in a couple of places, and by + * replacing one access to an OpDefNode field by a call of a new method that + * returns the value of that field. + */ +package tla2sany.semantic; + +import java.util.HashSet; + +import util.UniqueString; + +/** + * @author lamport + * + */ +public interface AnyDefNode { + public boolean levelCheck(int itr) ; + public int getMaxLevel(int i) ; + public UniqueString getName() ; + public int getMinMaxLevel(int i, int j) ; + public boolean getOpLevelCond(int i, int j, int k) ; + public int getLevel() ; + public int getWeight(int i) ; + public HashSet getLevelParams() ; + public HashSet getAllParams() ; + public HashSet getNonLeibnizParams() ; + public int getArity() ; + public boolean[] getIsLeibnizArg() ; + public boolean getIsLeibniz() ; + public SetOfLevelConstraints getLevelConstraints() ; + public HashSet getArgLevelParams() ; + public SetOfArgLevelConstraints getArgLevelConstraints() ; + public FormalParamNode[] getParams() ; +} diff --git a/tlatools/src/tla2sany/semantic/DefStepNode.java b/tlatools/src/tla2sany/semantic/DefStepNode.java index 20f4de3b6ca80d1e73bf7b3db92a76f098c15cd2..05bb98e47b2480241f41e61331ed9448dfcccb76 100644 --- a/tlatools/src/tla2sany/semantic/DefStepNode.java +++ b/tlatools/src/tla2sany/semantic/DefStepNode.java @@ -1,92 +1,92 @@ -// Portions Copyright (c) 2007 Microsoft Corporation. All rights reserved. -package tla2sany.semantic; - -import java.util.Hashtable; - -import tla2sany.st.TreeNode; -import tla2sany.utilities.Strings; -import util.UniqueString; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -/*************************************************************************** -* This class represents definition step of a proof, which consists of a * -* sequence of operator-, function-, or module-definition steps. (A * -* module definition is something like "Id == INSTANCE...".) * -***************************************************************************/ - -public class DefStepNode extends LevelNode { - - /************************************************************************* - * The fields. * - *************************************************************************/ - private UniqueString stepNumber ; - /*********************************************************************** - * The step number of the step if it has one, otherwise null if it's * - * not a numbered step. * - ***********************************************************************/ - - private OpDefNode[] defs ; - /*********************************************************************** - * The sequence of definitions. * - ***********************************************************************/ - - /************************************************************************* - * The constructor. * - *************************************************************************/ - public DefStepNode(TreeNode stn, UniqueString stepNum, OpDefNode[] theDefs){ - super(DefStepKind, stn); - this.stepNumber = stepNum; - this.defs = theDefs; - } - - /************************************************************************* - * The methods just return the field values. * - *************************************************************************/ - public UniqueString getStepNumber() {return stepNumber ;} - public OpDefNode[] getDefs() {return defs;} - - public boolean levelCheck(int iter) { - /*********************************************************************** - * Level check the steps and the instantiated modules coming from * - * module definitions. * - ***********************************************************************/ - return this.levelCheckSubnodes(iter, defs) ; - } - - public void walkGraph(Hashtable semNodesTable) { - Integer uid = new Integer(myUID); - if (semNodesTable.get(uid) != null) return; - semNodesTable.put(new Integer(myUID), this); - for (int i = 0; i < defs.length; i++) { - defs[i].walkGraph(semNodesTable); - } ; - } - - public SemanticNode[] getChildren() { - SemanticNode[] res = new SemanticNode[defs.length]; - for (int i = 0; i < defs.length; i++) { - res[i] = defs[i]; - } - return res; - } - public String toString(int depth) { - if (depth <= 0) return ""; - String ret = "\n*DefStepNode:\n" - + super.toString(depth) - + Strings.indent(2, "\ndefs:") ; - for (int i = 0 ; i < this.defs.length; i++) { - ret += Strings.indent(4, this.defs[i].toString(depth-1)) ; - } ; - return ret; - } - - protected Element getLevelElement(Document doc, tla2sany.xml.SymbolContext context) { - Element e = doc.createElement("DefStepNode"); - for (int i=0; i<defs.length;i++) { - e.appendChild(defs[i].export(doc,context)); - } - return e; - } -} +// Portions Copyright (c) 2007 Microsoft Corporation. All rights reserved. +package tla2sany.semantic; + +import java.util.Hashtable; + +import tla2sany.st.TreeNode; +import tla2sany.utilities.Strings; +import util.UniqueString; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +/*************************************************************************** +* This class represents definition step of a proof, which consists of a * +* sequence of operator-, function-, or module-definition steps. (A * +* module definition is something like "Id == INSTANCE...".) * +***************************************************************************/ + +public class DefStepNode extends LevelNode { + + /************************************************************************* + * The fields. * + *************************************************************************/ + private UniqueString stepNumber ; + /*********************************************************************** + * The step number of the step if it has one, otherwise null if it's * + * not a numbered step. * + ***********************************************************************/ + + private OpDefNode[] defs ; + /*********************************************************************** + * The sequence of definitions. * + ***********************************************************************/ + + /************************************************************************* + * The constructor. * + *************************************************************************/ + public DefStepNode(TreeNode stn, UniqueString stepNum, OpDefNode[] theDefs){ + super(DefStepKind, stn); + this.stepNumber = stepNum; + this.defs = theDefs; + } + + /************************************************************************* + * The methods just return the field values. * + *************************************************************************/ + public UniqueString getStepNumber() {return stepNumber ;} + public OpDefNode[] getDefs() {return defs;} + + public boolean levelCheck(int iter) { + /*********************************************************************** + * Level check the steps and the instantiated modules coming from * + * module definitions. * + ***********************************************************************/ + return this.levelCheckSubnodes(iter, defs) ; + } + + public void walkGraph(Hashtable semNodesTable) { + Integer uid = new Integer(myUID); + if (semNodesTable.get(uid) != null) return; + semNodesTable.put(new Integer(myUID), this); + for (int i = 0; i < defs.length; i++) { + defs[i].walkGraph(semNodesTable); + } ; + } + + public SemanticNode[] getChildren() { + SemanticNode[] res = new SemanticNode[defs.length]; + for (int i = 0; i < defs.length; i++) { + res[i] = defs[i]; + } + return res; + } + public String toString(int depth) { + if (depth <= 0) return ""; + String ret = "\n*DefStepNode:\n" + + super.toString(depth) + + Strings.indent(2, "\ndefs:") ; + for (int i = 0 ; i < this.defs.length; i++) { + ret += Strings.indent(4, this.defs[i].toString(depth-1)) ; + } ; + return ret; + } + + protected Element getLevelElement(Document doc, tla2sany.xml.SymbolContext context) { + Element e = doc.createElement("DefStepNode"); + for (int i=0; i<defs.length;i++) { + e.appendChild(defs[i].export(doc,context)); + } + return e; + } +} diff --git a/tlatools/src/tla2sany/semantic/LeafProofNode.java b/tlatools/src/tla2sany/semantic/LeafProofNode.java index 289a17ae259cc8a03ff85e84094c1bd8777dcec9..798b27373dfa3121e17c046d40220a8e21194ba8 100644 --- a/tlatools/src/tla2sany/semantic/LeafProofNode.java +++ b/tlatools/src/tla2sany/semantic/LeafProofNode.java @@ -1,157 +1,157 @@ -// Copyright (c) 2007 Microsoft Corporation. All rights reserved. -package tla2sany.semantic; - -import java.util.Hashtable; - -import tla2sany.st.TreeNode; -import tla2sany.utilities.Strings; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -/*************************************************************************** -* This class represents a leaf proof. It is of kind LeafProffKind * -***************************************************************************/ -public class LeafProofNode extends ProofNode { - - /************************************************************************* - * The fields. * - * * - * A leaf proof has the syntax * - * * - * [PROOF] BY [ONLY] [facts] [DEF[S] defs]. * - * | OBVIOUS * - * | OMITTED * - * * - * The following two fields are the semantic nodes for the facts and * - * defs. * - *************************************************************************/ - LevelNode[] facts = null ; - /*********************************************************************** - * For each i, facts[i] will be either an ExprNode, a ModuleNode, or * - * an OpDefNode of type ModuleInstanceKind (with no parameters). A * - * proof management tool will probably put restrictions on the class * - * of expressions that can be used as facts. * - ***********************************************************************/ - SymbolNode[] defs = null ; - /*********************************************************************** - * For each i, defs[i] should be a UserDefinedOpDefKind or * - * ModuleInstanceKind OpDefNode or a ThmOrAssumpDefNode * - ***********************************************************************/ - boolean omitted ; - /*********************************************************************** - * True iff this is a "[PROOF] OMITTED" statement. In this case, the * - * facts and defs field will be null. But that is also the case for * - * an "OBVIOUS" proof. * - ***********************************************************************/ - boolean isOnly ; - /*********************************************************************** - * True iff this is a "BY ONLY" proof. * - ***********************************************************************/ - - /************************************************************************* - * The constructor. * - *************************************************************************/ - public LeafProofNode(TreeNode stn, LevelNode[] theFacts, - SymbolNode[] theDefs, boolean omit, boolean only) { - super(LeafProofKind, stn) ; - this.facts = theFacts ; - this.defs = theDefs ; - this.omitted = omit ; - this.isOnly = only ; - } ; - - - /************************************************************************* - * Methods that return the values of the fields. * - *************************************************************************/ - public LevelNode[] getFacts() {return facts ; } ; - public SymbolNode[] getDefs() {return defs ;} ; - public boolean getOmitted() {return omitted ;} ; - public boolean getOnlyFlag() {return isOnly ;} ; - - public boolean levelCheck(int iter) { - /*********************************************************************** - * Level checking is performed by level-checking the facts. Since the * - * defs should be defined operators, they have already been level * - * checked. * - ***********************************************************************/ - if (this.levelChecked >= iter) return this.levelCorrect; - return this.levelCheckSubnodes(iter, facts) ; - } - - /* - * The children are the facts. - * @see tla2sany.semantic.SemanticNode#getChildren() - */ - public SemanticNode[] getChildren() { - if (this.facts == null || this.facts.length == 0) { - return null; - } - SemanticNode[] res = new SemanticNode[this.facts.length]; - for (int i = 0; i < facts.length; i++) { - res[i] = facts[i]; - } - return res; - } - - public void walkGraph(Hashtable semNodesTable) { - Integer uid = new Integer(myUID); - if (semNodesTable.get(uid) != null) return; - semNodesTable.put(new Integer(myUID), this); - for (int i = 0; i < facts.length; i++) { - facts[i].walkGraph(semNodesTable); - } ; - /*********************************************************************** - * Note: there's no need to walk the defs array because all the nodes * - * on it are walked from the nodes under which they appear. * - ***********************************************************************/ - } - - public String toString(int depth) { - if (depth <= 0) return ""; - String ret = "\n*LeafProofNode:\n" - + super.toString(depth) - + Strings.indent(2, "\nfacts:") ; - for (int i = 0 ; i < this.facts.length; i++) { - ret += Strings.indent(4, this.facts[i].toString(depth-1)) ; - } ; - ret += Strings.indent(2, "\ndefs:") ; - for (int i = 0 ; i < this.defs.length; i++) { - ret += Strings.indent(4, this.defs[i].toString(depth-1)) ; - } ; - ret += Strings.indent(2, "\nomitted: " + this.omitted) - + Strings.indent(2, "\nonlyFlag: " + this.isOnly); - return ret; - } - - protected Element getLevelElement(Document doc, tla2sany.xml.SymbolContext context) { - Element e; - - if (getOmitted()) { - e = doc.createElement("omitted"); - } - else if (getFacts().length == 0 && getDefs().length == 0) { - e = doc.createElement("obvious"); - } - else { - //SemanticNode.SymbolContext context = new SemanticNode.SymbolContext(context2); - e = doc.createElement("by"); - - Element factse = doc.createElement("facts"); - Element definitions = doc.createElement("defs"); - - for (int i=0; i<facts.length; i++) factse.appendChild(facts[i].export(doc,context)); - for (int i=0; i<defs.length; i++) definitions.appendChild(defs[i].export(doc,context)); - - e.appendChild(factse); - e.appendChild(definitions); - if(getOnlyFlag()) e.appendChild(doc.createElement("only")); - // at the end, we append the context of the symbols used in this node - //e.appendChild(context.getContextElement(doc)); - } - - return e; - } - -} +// Copyright (c) 2007 Microsoft Corporation. All rights reserved. +package tla2sany.semantic; + +import java.util.Hashtable; + +import tla2sany.st.TreeNode; +import tla2sany.utilities.Strings; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +/*************************************************************************** +* This class represents a leaf proof. It is of kind LeafProffKind * +***************************************************************************/ +public class LeafProofNode extends ProofNode { + + /************************************************************************* + * The fields. * + * * + * A leaf proof has the syntax * + * * + * [PROOF] BY [ONLY] [facts] [DEF[S] defs]. * + * | OBVIOUS * + * | OMITTED * + * * + * The following two fields are the semantic nodes for the facts and * + * defs. * + *************************************************************************/ + LevelNode[] facts = null ; + /*********************************************************************** + * For each i, facts[i] will be either an ExprNode, a ModuleNode, or * + * an OpDefNode of type ModuleInstanceKind (with no parameters). A * + * proof management tool will probably put restrictions on the class * + * of expressions that can be used as facts. * + ***********************************************************************/ + SymbolNode[] defs = null ; + /*********************************************************************** + * For each i, defs[i] should be a UserDefinedOpDefKind or * + * ModuleInstanceKind OpDefNode or a ThmOrAssumpDefNode * + ***********************************************************************/ + boolean omitted ; + /*********************************************************************** + * True iff this is a "[PROOF] OMITTED" statement. In this case, the * + * facts and defs field will be null. But that is also the case for * + * an "OBVIOUS" proof. * + ***********************************************************************/ + boolean isOnly ; + /*********************************************************************** + * True iff this is a "BY ONLY" proof. * + ***********************************************************************/ + + /************************************************************************* + * The constructor. * + *************************************************************************/ + public LeafProofNode(TreeNode stn, LevelNode[] theFacts, + SymbolNode[] theDefs, boolean omit, boolean only) { + super(LeafProofKind, stn) ; + this.facts = theFacts ; + this.defs = theDefs ; + this.omitted = omit ; + this.isOnly = only ; + } ; + + + /************************************************************************* + * Methods that return the values of the fields. * + *************************************************************************/ + public LevelNode[] getFacts() {return facts ; } ; + public SymbolNode[] getDefs() {return defs ;} ; + public boolean getOmitted() {return omitted ;} ; + public boolean getOnlyFlag() {return isOnly ;} ; + + public boolean levelCheck(int iter) { + /*********************************************************************** + * Level checking is performed by level-checking the facts. Since the * + * defs should be defined operators, they have already been level * + * checked. * + ***********************************************************************/ + if (this.levelChecked >= iter) return this.levelCorrect; + return this.levelCheckSubnodes(iter, facts) ; + } + + /* + * The children are the facts. + * @see tla2sany.semantic.SemanticNode#getChildren() + */ + public SemanticNode[] getChildren() { + if (this.facts == null || this.facts.length == 0) { + return null; + } + SemanticNode[] res = new SemanticNode[this.facts.length]; + for (int i = 0; i < facts.length; i++) { + res[i] = facts[i]; + } + return res; + } + + public void walkGraph(Hashtable semNodesTable) { + Integer uid = new Integer(myUID); + if (semNodesTable.get(uid) != null) return; + semNodesTable.put(new Integer(myUID), this); + for (int i = 0; i < facts.length; i++) { + facts[i].walkGraph(semNodesTable); + } ; + /*********************************************************************** + * Note: there's no need to walk the defs array because all the nodes * + * on it are walked from the nodes under which they appear. * + ***********************************************************************/ + } + + public String toString(int depth) { + if (depth <= 0) return ""; + String ret = "\n*LeafProofNode:\n" + + super.toString(depth) + + Strings.indent(2, "\nfacts:") ; + for (int i = 0 ; i < this.facts.length; i++) { + ret += Strings.indent(4, this.facts[i].toString(depth-1)) ; + } ; + ret += Strings.indent(2, "\ndefs:") ; + for (int i = 0 ; i < this.defs.length; i++) { + ret += Strings.indent(4, this.defs[i].toString(depth-1)) ; + } ; + ret += Strings.indent(2, "\nomitted: " + this.omitted) + + Strings.indent(2, "\nonlyFlag: " + this.isOnly); + return ret; + } + + protected Element getLevelElement(Document doc, tla2sany.xml.SymbolContext context) { + Element e; + + if (getOmitted()) { + e = doc.createElement("omitted"); + } + else if (getFacts().length == 0 && getDefs().length == 0) { + e = doc.createElement("obvious"); + } + else { + //SemanticNode.SymbolContext context = new SemanticNode.SymbolContext(context2); + e = doc.createElement("by"); + + Element factse = doc.createElement("facts"); + Element definitions = doc.createElement("defs"); + + for (int i=0; i<facts.length; i++) factse.appendChild(facts[i].export(doc,context)); + for (int i=0; i<defs.length; i++) definitions.appendChild(defs[i].export(doc,context)); + + e.appendChild(factse); + e.appendChild(definitions); + if(getOnlyFlag()) e.appendChild(doc.createElement("only")); + // at the end, we append the context of the symbols used in this node + //e.appendChild(context.getContextElement(doc)); + } + + return e; + } + +} diff --git a/tlatools/src/tla2sany/semantic/LevelNode.java b/tlatools/src/tla2sany/semantic/LevelNode.java index ccd88bc3f782aa6de39290056fb3e4149fc9bdac..5e6caf692d861dbe2f5cbf3232ab3b833283eb30 100644 --- a/tlatools/src/tla2sany/semantic/LevelNode.java +++ b/tlatools/src/tla2sany/semantic/LevelNode.java @@ -324,7 +324,7 @@ public int levelChecked = 0 ; protected Element getSemanticElement(Document doc, tla2sany.xml.SymbolContext context) { // T.L. abstract method used to add data from subclasses - Element e = getLevelElement(doc, context); + Element e = getLevelElement(doc, context); //SymbolElement.getLevelElement is not supposed to be called try { Element l = appendText(doc,"level",Integer.toString(getLevel())); e.insertBefore(l,e.getFirstChild()); diff --git a/tlatools/src/tla2sany/semantic/NewSymbNode.java b/tlatools/src/tla2sany/semantic/NewSymbNode.java index 81e3d33a002aa8adef04a6d636eafb33b8dbb5c4..944e574aee944ddb254a13ca69591c854bafa2be 100644 --- a/tlatools/src/tla2sany/semantic/NewSymbNode.java +++ b/tlatools/src/tla2sany/semantic/NewSymbNode.java @@ -1,198 +1,198 @@ -// Copyright (c) 2007 Microsoft Corporation. All rights reserved. - -// last modified on Fri 23 Nov 2007 at 17:21:52 PST by lamport -/*************************************************************************** -* The NewSymbNode constructor is invoked in semantic/Generator.java to * -* construct the nodes corresponding to a NewSymb syntactic node in an * -* AssumeProve. The NewSymb node represents a declaration in an ASSUME, * -* such as "ASSUME CONSTANT x \in S ". * -* * -* The node has two descendants in the semantic tree, returned * -* by these methods: * -* OpDeclNode getOpDeclNode() * -* An OpDeclNode for the declaration. * -* * -* ExprNode getSet() * -* If the node represents a declaration such as "CONSTANT x \in S", * -* then this returns the ExprNode for S. Otherwise, it returns null. * -***************************************************************************/ - -package tla2sany.semantic; - -import java.util.Hashtable; - -import tla2sany.st.TreeNode; -import tla2sany.utilities.Strings; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -public class NewSymbNode extends LevelNode { - - /************************************************************************* - * Fields. * - *************************************************************************/ - private OpDeclNode opDeclNode = null; - /*********************************************************************** - * The OpDeclNode for the declaration represented by the NewSymbNode * - * object. * - ***********************************************************************/ - private ExprNode set = null; - /*********************************************************************** - * The ExprNode for expression S in "CONSTANT id \in S". * - ***********************************************************************/ -// There's now a level field for all LevelNode subclasses, and this.levelChecked -// indicates if levelCheck has been callsed -// private int level = -1; -// /*********************************************************************** -// * The level. The value of -1 indicates that levelCheck has not yet * -// * been called. * -// ***********************************************************************/ - -// Role subsumed by this.levelCorrect -// private boolean theLevelCheck = true ; -// /*********************************************************************** -// * Set by this.levelCheck to the value to be returned on subsequent * -// * calls. * -// ***********************************************************************/ - - /************************************************************************* - * The Constructor. * - *************************************************************************/ - public NewSymbNode( - OpDeclNode opDeclNode, // The OpDeclNode for the declaration. - ExprNode set, // Expression S in "CONSTANT x \in S", - // null for other kinds of declaration. - TreeNode stn // The syntax node. - ) { - super(NewSymbKind, stn) ; - this.set = set; - this.opDeclNode = opDeclNode ; - } - - - /************************************************************************* - * Methods particular to the NewSymb node. * - *************************************************************************/ - public final ExprNode getSet() {return set;} - public final OpDeclNode getOpDeclNode() {return opDeclNode;} - - /************************************************************************* - * The implementation of the LevelNode abstract methods. * - * * - * The level of the node is the maximum of opDeclNode's level and the * - * level of the `set' expression, if it's non-null. Any other level * - * information comes from the `set' expression. * - *************************************************************************/ - public boolean levelCheck(int iter) { - - if (levelChecked < iter) { - /********************************************************************* - * This is the first call of levelCheck, so the level information * - * must be computed. Actually, with the current implementation, * - * there's no need to call opDeclNode.levelCheck, since that just * - * returns true. However, we do it anyway in case the OpDeclNode * - * class is changed to make levelCheck do something. * - *********************************************************************/ - levelChecked = iter ; - boolean opDeclLevelCheck = opDeclNode.levelCheck(iter) ; - level = opDeclNode.getLevel() ; - if (set != null) { - levelCorrect = set.levelCheck(iter) ; - level = Math.max(set.getLevel(), level); - if (level == TemporalLevel) { - levelCorrect = false; - errors.addError(this.stn.getLocation(), - "Level error:\n" + - "Temporal formula used as set."); - } - } ; - levelCorrect = levelCorrect && opDeclLevelCheck; - if (set != null) { - levelParams = set.getLevelParams(); - allParams = set.getAllParams(); - levelConstraints = set.getLevelConstraints(); - argLevelConstraints = set.getArgLevelConstraints(); - argLevelParams = set.getArgLevelParams(); - }; // if (set != null) - }; // if (levelChecked < iter) - return levelCorrect; - } - -// public int getLevel() {return this.level; } -// -// public HashSet getLevelParams() { -// if (set == null) {return EmptySet;} -// else return set.getLevelParams(); -// } -// -// public SetOfLevelConstraints getLevelConstraints() { -// if (set == null) {return EmptyLC;} -// else return set.getLevelConstraints(); -// } -// -// public SetOfArgLevelConstraints getArgLevelConstraints() { -// if (set == null) {return EmptyALC;} -// else return set.getArgLevelConstraints(); -// } -// -// public HashSet getArgLevelParams() { -// if (set == null) {return EmptySet;} -// else return set.getArgLevelParams(); -// } - - /** - * toString, levelDataToString and walkGraph methods to implement - * ExploreNode interface - */ -// public final String levelDataToString() { -// return "Level: " + this.level + "\n" + -// "LevelParameters: " + this.getLevelParams() + "\n" + -// "LevelConstraints: " + this.getLevelConstraints() + "\n" + -// "ArgLevelConstraints: " + this.getArgLevelConstraints() + "\n" + -// "ArgLevelParams: " + this.getArgLevelParams() + "\n"; -// } - - /** - * The body is the node's only child. - */ - - public SemanticNode[] getChildren() { - if (this.set == null) { - return null; - } else { - return new SemanticNode[] {this.set}; - } - } - - public final void walkGraph(Hashtable semNodesTable) { - Integer uid = new Integer(myUID); - if (semNodesTable.get(uid) != null) return; - semNodesTable.put(new Integer(myUID), this); - if (set != null) { set.walkGraph(semNodesTable); } ; - } - - public final String toString(int depth) { - if (depth <= 0) return ""; - String setString = "" ; - if (this.set != null) { - setString = Strings.indent(2, - "\nSet:" + Strings.indent(2, this.set.toString(depth-1))); - } - return "\n*NewSymbNode: " + - " " + super.toString(depth) + - Strings.indent(2, "\nKind: " + this.getKind() + - "\nopDeclNode:" + Strings.indent(2, - this.opDeclNode.toString(depth-1)) + - setString); - } - - protected Element getLevelElement(Document doc, tla2sany.xml.SymbolContext context) { - Element e = doc.createElement("NewSymbNode"); - e.appendChild(getOpDeclNode().export(doc,context)); - if (getSet() != null) { - e.appendChild(getSet().export(doc,context)); - } - return e; - } -} +// Copyright (c) 2007 Microsoft Corporation. All rights reserved. + +// last modified on Fri 23 Nov 2007 at 17:21:52 PST by lamport +/*************************************************************************** +* The NewSymbNode constructor is invoked in semantic/Generator.java to * +* construct the nodes corresponding to a NewSymb syntactic node in an * +* AssumeProve. The NewSymb node represents a declaration in an ASSUME, * +* such as "ASSUME CONSTANT x \in S ". * +* * +* The node has two descendants in the semantic tree, returned * +* by these methods: * +* OpDeclNode getOpDeclNode() * +* An OpDeclNode for the declaration. * +* * +* ExprNode getSet() * +* If the node represents a declaration such as "CONSTANT x \in S", * +* then this returns the ExprNode for S. Otherwise, it returns null. * +***************************************************************************/ + +package tla2sany.semantic; + +import java.util.Hashtable; + +import tla2sany.st.TreeNode; +import tla2sany.utilities.Strings; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +public class NewSymbNode extends LevelNode { + + /************************************************************************* + * Fields. * + *************************************************************************/ + private OpDeclNode opDeclNode = null; + /*********************************************************************** + * The OpDeclNode for the declaration represented by the NewSymbNode * + * object. * + ***********************************************************************/ + private ExprNode set = null; + /*********************************************************************** + * The ExprNode for expression S in "CONSTANT id \in S". * + ***********************************************************************/ +// There's now a level field for all LevelNode subclasses, and this.levelChecked +// indicates if levelCheck has been callsed +// private int level = -1; +// /*********************************************************************** +// * The level. The value of -1 indicates that levelCheck has not yet * +// * been called. * +// ***********************************************************************/ + +// Role subsumed by this.levelCorrect +// private boolean theLevelCheck = true ; +// /*********************************************************************** +// * Set by this.levelCheck to the value to be returned on subsequent * +// * calls. * +// ***********************************************************************/ + + /************************************************************************* + * The Constructor. * + *************************************************************************/ + public NewSymbNode( + OpDeclNode opDeclNode, // The OpDeclNode for the declaration. + ExprNode set, // Expression S in "CONSTANT x \in S", + // null for other kinds of declaration. + TreeNode stn // The syntax node. + ) { + super(NewSymbKind, stn) ; + this.set = set; + this.opDeclNode = opDeclNode ; + } + + + /************************************************************************* + * Methods particular to the NewSymb node. * + *************************************************************************/ + public final ExprNode getSet() {return set;} + public final OpDeclNode getOpDeclNode() {return opDeclNode;} + + /************************************************************************* + * The implementation of the LevelNode abstract methods. * + * * + * The level of the node is the maximum of opDeclNode's level and the * + * level of the `set' expression, if it's non-null. Any other level * + * information comes from the `set' expression. * + *************************************************************************/ + public boolean levelCheck(int iter) { + + if (levelChecked < iter) { + /********************************************************************* + * This is the first call of levelCheck, so the level information * + * must be computed. Actually, with the current implementation, * + * there's no need to call opDeclNode.levelCheck, since that just * + * returns true. However, we do it anyway in case the OpDeclNode * + * class is changed to make levelCheck do something. * + *********************************************************************/ + levelChecked = iter ; + boolean opDeclLevelCheck = opDeclNode.levelCheck(iter) ; + level = opDeclNode.getLevel() ; + if (set != null) { + levelCorrect = set.levelCheck(iter) ; + level = Math.max(set.getLevel(), level); + if (level == TemporalLevel) { + levelCorrect = false; + errors.addError(this.stn.getLocation(), + "Level error:\n" + + "Temporal formula used as set."); + } + } ; + levelCorrect = levelCorrect && opDeclLevelCheck; + if (set != null) { + levelParams = set.getLevelParams(); + allParams = set.getAllParams(); + levelConstraints = set.getLevelConstraints(); + argLevelConstraints = set.getArgLevelConstraints(); + argLevelParams = set.getArgLevelParams(); + }; // if (set != null) + }; // if (levelChecked < iter) + return levelCorrect; + } + +// public int getLevel() {return this.level; } +// +// public HashSet getLevelParams() { +// if (set == null) {return EmptySet;} +// else return set.getLevelParams(); +// } +// +// public SetOfLevelConstraints getLevelConstraints() { +// if (set == null) {return EmptyLC;} +// else return set.getLevelConstraints(); +// } +// +// public SetOfArgLevelConstraints getArgLevelConstraints() { +// if (set == null) {return EmptyALC;} +// else return set.getArgLevelConstraints(); +// } +// +// public HashSet getArgLevelParams() { +// if (set == null) {return EmptySet;} +// else return set.getArgLevelParams(); +// } + + /** + * toString, levelDataToString and walkGraph methods to implement + * ExploreNode interface + */ +// public final String levelDataToString() { +// return "Level: " + this.level + "\n" + +// "LevelParameters: " + this.getLevelParams() + "\n" + +// "LevelConstraints: " + this.getLevelConstraints() + "\n" + +// "ArgLevelConstraints: " + this.getArgLevelConstraints() + "\n" + +// "ArgLevelParams: " + this.getArgLevelParams() + "\n"; +// } + + /** + * The body is the node's only child. + */ + + public SemanticNode[] getChildren() { + if (this.set == null) { + return null; + } else { + return new SemanticNode[] {this.set}; + } + } + + public final void walkGraph(Hashtable semNodesTable) { + Integer uid = new Integer(myUID); + if (semNodesTable.get(uid) != null) return; + semNodesTable.put(new Integer(myUID), this); + if (set != null) { set.walkGraph(semNodesTable); } ; + } + + public final String toString(int depth) { + if (depth <= 0) return ""; + String setString = "" ; + if (this.set != null) { + setString = Strings.indent(2, + "\nSet:" + Strings.indent(2, this.set.toString(depth-1))); + } + return "\n*NewSymbNode: " + + " " + super.toString(depth) + + Strings.indent(2, "\nKind: " + this.getKind() + + "\nopDeclNode:" + Strings.indent(2, + this.opDeclNode.toString(depth-1)) + + setString); + } + + protected Element getLevelElement(Document doc, tla2sany.xml.SymbolContext context) { + Element e = doc.createElement("NewSymbNode"); + e.appendChild(getOpDeclNode().export(doc,context)); + if (getSet() != null) { + e.appendChild(getSet().export(doc,context)); + } + return e; + } +} diff --git a/tlatools/src/tla2sany/semantic/OpApplNode.java b/tlatools/src/tla2sany/semantic/OpApplNode.java index 6454ce55d2d31f5fd0c066f7822dbe5989765759..c97e23ec5bc9e00af9f0197e5bd2f68557a598c3 100644 --- a/tlatools/src/tla2sany/semantic/OpApplNode.java +++ b/tlatools/src/tla2sany/semantic/OpApplNode.java @@ -31,7 +31,8 @@ import org.w3c.dom.Element; /** * OpApplNodes represent all kinds of operator applications in TLA+, - * including the application of builtin operators and user-defined + * including the application of builtin + * ors and user-defined * operators, operators with a variable number of arguments or a fixed * number (including, of course, 0), and including quantifiers and * choose, which involve bound variables with or without bounding sets. diff --git a/tlatools/src/tla2sany/semantic/OpArgNode.java b/tlatools/src/tla2sany/semantic/OpArgNode.java index 8f7f32f38025ff7cfc6194913377178534e5871c..a38ff91181dd4d8b2fd338e6014a6128834d9bf0 100644 --- a/tlatools/src/tla2sany/semantic/OpArgNode.java +++ b/tlatools/src/tla2sany/semantic/OpArgNode.java @@ -13,6 +13,7 @@ import util.UniqueString; import org.w3c.dom.Document; import org.w3c.dom.Element; +import org.w3c.dom.Node; /** * This class represents operators of arity > 0 used as arguments to @@ -136,9 +137,13 @@ public class OpArgNode extends ExprOrOpArgNode { protected Element getLevelElement(Document doc, tla2sany.xml.SymbolContext context) { Element e = doc.createElement("OpArgNode"); + Element n = doc.createElement("argument"); + Element ope = op.getSymbolElement(doc, context); + n.appendChild(ope); + e.appendChild(n); - e.appendChild(appendText(doc,"uniquename",getName().toString())); - e.appendChild(appendText(doc,"arity", Integer.toString(getArity()))); + //e.appendChild(appendText(doc,"uniquename",getName().toString())); + //e.appendChild(appendText(doc,"arity", Integer.toString(getArity()))); return e; } diff --git a/tlatools/src/tla2sany/semantic/OpDefOrLabelNode.java b/tlatools/src/tla2sany/semantic/OpDefOrLabelNode.java index d7eb889c0253dba0b5f92e8358d972e24dc07157..b82c507eb4cd333dcc95ee35a709efb8973cb024 100644 --- a/tlatools/src/tla2sany/semantic/OpDefOrLabelNode.java +++ b/tlatools/src/tla2sany/semantic/OpDefOrLabelNode.java @@ -1,66 +1,66 @@ -// Last modified on Sat 28 Apr 2007 at 14:37:16 PST by lamport - -/*************************************************************************** -* This interface is implemented by LabelNode, OpDefNode, and * -* ThmOrAssumpDefNode. It contains methods for accessing the set of * -* LabelNode objects for labels that occur immediately within this * -* node--that is, with no intervening LabelNode or OpDefNode in the * -* semantic tree. This set is represented by a Hashtable, and by the null * -* object if the set is empty. The Hashtable key of a LabelNode ln is * -* ln.getName(), which is a UniqueString. * -* * -* WARNING: If an OpDefNode odn represents an operator obtained by * -* instanting a module M, then each LabelNode object lab returned by * -* getLabel() and getLabels() is the same one as in the OpDefNode * -* from module M. Therefore, lab.body is an expression in module M, not in * -* the current module. The meaning of this label must be interpreted as * -* lab.body under the substitutions of the instantiation. This * -* substitution is described by the SubstInNode odn.body. Hence, to * -* interpret a label in the label set of an OpDefNode odn, one must check * -* if odn.body is a SubstInNode, in which case that substitution must be * -* applied to the body of the label. In general, odn is the result of a * -* series of k instantiations iff odn.body.body. ... .body is a SubstIn * -* node, for up to k ".body"s. * -* * -* A similar warning applies to ThmOrAssumpDefNode objects, except they * -* use APSubstInNode objects instead of SubstInNode objects for the * -* instantiation. * -***************************************************************************/ - -package tla2sany.semantic; - -import java.util.Hashtable; - -import util.UniqueString; - -interface OpDefOrLabelNode { - -public abstract void setLabels(Hashtable ht) ; - /************************************************************************* - * Set the set of labels to ht. * - *************************************************************************/ - -public abstract LabelNode getLabel(UniqueString us) ; - /************************************************************************* - * If the set contains an OpDefNode with name `us', then that OpDefNode * - * is returned; otherwise null is returned. * - *************************************************************************/ - -public abstract boolean addLabel(LabelNode odn) ; - /************************************************************************* - * If the set contains no LabelNode with the same name as odn, then odn * - * is added to the set and true is return; else the set is unchanged and * - * false is returned. * - *************************************************************************/ - -public abstract LabelNode[] getLabels() ; - /************************************************************************* - * Returns an array containing the Label objects in the set. * - *************************************************************************/ - -public abstract int getArity(); - /************************************************************************* - * Returns the arity of the label or operator. * - *************************************************************************/ - +// Last modified on Sat 28 Apr 2007 at 14:37:16 PST by lamport + +/*************************************************************************** +* This interface is implemented by LabelNode, OpDefNode, and * +* ThmOrAssumpDefNode. It contains methods for accessing the set of * +* LabelNode objects for labels that occur immediately within this * +* node--that is, with no intervening LabelNode or OpDefNode in the * +* semantic tree. This set is represented by a Hashtable, and by the null * +* object if the set is empty. The Hashtable key of a LabelNode ln is * +* ln.getName(), which is a UniqueString. * +* * +* WARNING: If an OpDefNode odn represents an operator obtained by * +* instanting a module M, then each LabelNode object lab returned by * +* getLabel() and getLabels() is the same one as in the OpDefNode * +* from module M. Therefore, lab.body is an expression in module M, not in * +* the current module. The meaning of this label must be interpreted as * +* lab.body under the substitutions of the instantiation. This * +* substitution is described by the SubstInNode odn.body. Hence, to * +* interpret a label in the label set of an OpDefNode odn, one must check * +* if odn.body is a SubstInNode, in which case that substitution must be * +* applied to the body of the label. In general, odn is the result of a * +* series of k instantiations iff odn.body.body. ... .body is a SubstIn * +* node, for up to k ".body"s. * +* * +* A similar warning applies to ThmOrAssumpDefNode objects, except they * +* use APSubstInNode objects instead of SubstInNode objects for the * +* instantiation. * +***************************************************************************/ + +package tla2sany.semantic; + +import java.util.Hashtable; + +import util.UniqueString; + +interface OpDefOrLabelNode { + +public abstract void setLabels(Hashtable ht) ; + /************************************************************************* + * Set the set of labels to ht. * + *************************************************************************/ + +public abstract LabelNode getLabel(UniqueString us) ; + /************************************************************************* + * If the set contains an OpDefNode with name `us', then that OpDefNode * + * is returned; otherwise null is returned. * + *************************************************************************/ + +public abstract boolean addLabel(LabelNode odn) ; + /************************************************************************* + * If the set contains no LabelNode with the same name as odn, then odn * + * is added to the set and true is return; else the set is unchanged and * + * false is returned. * + *************************************************************************/ + +public abstract LabelNode[] getLabels() ; + /************************************************************************* + * Returns an array containing the Label objects in the set. * + *************************************************************************/ + +public abstract int getArity(); + /************************************************************************* + * Returns the arity of the label or operator. * + *************************************************************************/ + } \ No newline at end of file diff --git a/tlatools/src/tla2sany/semantic/SymbolNode.java b/tlatools/src/tla2sany/semantic/SymbolNode.java index fd5a442d8fc79f78c1834cdc64fb0524cec9c51c..52b914760d3c06459b7e73ff72cce4dd0ec46b90 100644 --- a/tlatools/src/tla2sany/semantic/SymbolNode.java +++ b/tlatools/src/tla2sany/semantic/SymbolNode.java @@ -158,7 +158,7 @@ public abstract class SymbolNode extends LevelNode { * we also override getLevelElement as it should never be called */ protected Element getLevelElement(Document doc, tla2sany.xml.SymbolContext context) { - throw new UnsupportedOperationException("This should not be possible and therefore a bug"); + throw new UnsupportedOperationException("implementation Error: A symbol node may not be called for its level element."); } /** TL diff --git a/tlatools/src/tla2sany/semantic/TheoremNode.java b/tlatools/src/tla2sany/semantic/TheoremNode.java index ded540740327eb836f937973f7adbfc3c4ae27eb..b90eae5dca23294c996ff1ef4c844b2e9ffd564d 100644 --- a/tlatools/src/tla2sany/semantic/TheoremNode.java +++ b/tlatools/src/tla2sany/semantic/TheoremNode.java @@ -371,16 +371,18 @@ public final boolean levelCheck(int iter) { } public Element export(Document doc, tla2sany.xml.SymbolContext context) { - if (getDef() == null) - // we export the definition of the theorem - return super.export(doc,context); - else - // we export its name only, named theorem will be exported through the ThmOrAss.. - return getDef().export(doc,context); + Element e = super.export(doc, context); + return e; } protected Element getLevelElement(Document doc, tla2sany.xml.SymbolContext context) { Element e = doc.createElement("TheoremNode"); + //e.appendChild(appendText(doc,"uniquename",getName().toString())); + if (getDef() != null) { + //if there is a definition, export its name too + e.appendChild(appendText(doc, "uniquename",getDef().getName().toString())); + } + e.appendChild(getTheorem().export(doc,context)); if (getProof() != null) e.appendChild(getProof().export(doc,context)); if (isSuffices()) e.appendChild(doc.createElement("suffices")); diff --git a/tlatools/src/tla2sany/semantic/ThmOrAssumpDefNode.java b/tlatools/src/tla2sany/semantic/ThmOrAssumpDefNode.java index 1079a1216b60aba137083fd0ff2b73daa60b6ab4..80021c07b027d8e5d6d191635817268b51944e16 100644 --- a/tlatools/src/tla2sany/semantic/ThmOrAssumpDefNode.java +++ b/tlatools/src/tla2sany/semantic/ThmOrAssumpDefNode.java @@ -1,647 +1,666 @@ -// Copyright (c) 2007 Microsoft Corporation. All rights reserved. - -// last modified on Thu 2 July 2009 at 15:44:33 PST by lamport -/*************************************************************************** -* The ThmOrAssumpDefNode constructor is invoked in * -* semantic/Generator.java to construct the nodes corresponding to the * -* definition in something like * -* * -* THEOREM Foo == ... * -* * -* The following are the only public methods that a tool is likely to * -* call. (Search for the method to find an explanation of what it does.) * -* * -* LevelNode getBody() * -* ModuleNode getOriginallyDefinedInModuleNode() * -* boolean isTheorem() * -* boolean isSuffices() * -* ProofNode getProof() * -* FormalParamNode[] getParams() * -* ModuleNode getInstantiatedFrom() * -***************************************************************************/ - -package tla2sany.semantic; - -import java.util.Enumeration; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.Iterator; - -import tla2sany.st.TreeNode; -import tla2sany.utilities.Strings; -import tla2sany.utilities.Vector; -import util.UniqueString; -import util.WrongInvocationException; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -/*************************************************************************** -* This node represents the definition of Foo in * -* * -* THEOREM Foo == ... * -* ASSUME Foo == ... * -***************************************************************************/ - -public class ThmOrAssumpDefNode extends SymbolNode - implements OpDefOrLabelNode, AnyDefNode { - - // T.L. 2014 - the actual theorem or assumption associated with this def - // this is required in order to simplify presentation. After all normalizations - // we dont really need this def any more - // this field is being set by TheoremNode or AssumeNode - protected LevelNode thmOrAssump = null; - private LevelNode body = null; - private ModuleNode originallyDefinedInModule = null; - private boolean theorem = true; - /*********************************************************************** - * True if a theorem, false if an assumption. * - ***********************************************************************/ - private boolean suffices = false ; - /*********************************************************************** - * If this represents a theorem, then this is the value of the * - * TheoremNode's suffices field (which is false unless the TheoremNode * - * represents a SUFFICES proof step). This is a kludge added for the * - * following reason. To check if a reference to a subexpression of an * - * ASSUME/PROVE is legal, we need to know whether or not the * - * ASSUME/PROVE lies within a SUFFICES step. However, the reference * - * accesses the ThmOrAssumpDefNode, while it's the TheoremNode that * - * contains the suffices field. It might seem sensible to have the * - * ThmOrAssumpDefNode contain a pointer to the TheoremNode. However, * - * that's problematic. For one thing, instantiation creates a new * - * ThmOrAssumpDefNode for the imported definition, but does not create * - * a new TheoremNode. So, we copy just the suffices field (which will * - * be false for an instantiated node because proof steps don't get * - * instantiated). * - * * - * This field is set by setSuffices() and read by isSuffices() ; * - ***********************************************************************/ - - - /************************************************************************* - * The following field is used to implement the OpDefOrLabel interface. * - * It is a hashtable of OpDefNode objects representing labels within * - * the body that are not within the scope of an inner label or LET * - * definition. * - *************************************************************************/ - private Hashtable labels = null ; - public Hashtable getLabelsHT() { - /*********************************************************************** - * Return the labels field. Used to "clone" an OpDefNode for module * - * instantiation. * - ***********************************************************************/ - return labels ; - } - - public int arity = 0 ; - private FormalParamNode[] params = new FormalParamNode[0]; - /*********************************************************************** - * A theorem or assumption definition like * - * * - * THEOREM foo == ... * - * * - * has no parameters. However, it can acquire parameters when * - * the module it's in is instantiated. * - ***********************************************************************/ - ProofNode proof; - /********************************************************************** - * The proof, if there is one; else null. Obviously, only a theorem * - * can have a proof. * - **********************************************************************/ - - private ModuleNode instantiatedFrom = null ; - /*********************************************************************** - * If the theorem or assumption was obtained by instantiation, then * - * this is the module from which it was instantiated. * - ***********************************************************************/ - - /** - * The source field and its methods was added by LL on 15 June 2010. - * I don't know why it wasn't added to this class when it was added - * to OpDefNode. However, it's needed by the Toolbox, so it's being - * added now by trying to duplicate what was done for OpDefNode - */ - private ThmOrAssumpDefNode source = null; - - public ThmOrAssumpDefNode getSource() { - if (source == null) { - return this; - } - return source; - } - - /************************************************************************* - * The Constructor. * - *************************************************************************/ - public ThmOrAssumpDefNode( - UniqueString name, // The thm/assump name. - boolean thm, // true if a theorem, false if an assump. - LevelNode exp, // The body - ModuleNode oModNode, // Name of module. - SymbolTable st, // The current value of - // Generator.symbolTable - TreeNode stn, // The syntax node. - FormalParamNode[] parms, // The parameters, or null if none. - ModuleNode iFrom, // The instantiatedFrom field. - ThmOrAssumpDefNode src // The source field. - ) { - super(ThmOrAssumpDefKind, stn, name) ; - this.theorem = thm; - this.body = exp; - this.originallyDefinedInModule = oModNode; - /********************************************************************* - * Note that when this theorem or assumption is instantiated with a * - * parameter substitution, then the newly created ThmOrAssumpDefNode * - * has this field set to the instantiating module. Thus, this field * - * is not useful to track down the module of origin of a theorem. * - *********************************************************************/ - // On 1 Nov 2012,, LL moved the following two statements to here from - // the end of the constructor. It's necessary for the source field to be - // set before addSymbol is called. - this.instantiatedFrom = iFrom ; - this.source = src; - - if (st != null) {st.addSymbol(name, this);} ; - /********************************************************************* - * By some magic, this eventually puts the name into the current * - * module's context. * - *********************************************************************/ - if (parms != null) { - this.params = parms; - this.arity = parms.length; - } ; - } - - /************************************************************************* - * A place-holder constructor and a method for setting the remaining * - * fields. It is used in Generator.processTheorem, where the object * - * needs to be created before its body is generated. This method is * - * not used when created a ThmOrAssumpDefNode by instantiation, so * - * getInstantitedFrom will be null for this object. * - *************************************************************************/ - public ThmOrAssumpDefNode(UniqueString name, TreeNode stn) { - super(ThmOrAssumpDefKind, stn, name) ; - } - - public void construct( - boolean thm, // true if a theorem, false if an assump. - LevelNode exp, // The body - ModuleNode oModNode, // Name of module. - SymbolTable st, // The current value of - // Generator.symbolTable - FormalParamNode[] parms // The parameters, or null if none. - ) { - this.theorem = thm; - this.body = exp; - this.originallyDefinedInModule = oModNode; - if (st != null) {st.addSymbol(name, this);} ; - /********************************************************************* - * By some magic, this eventually puts the name into the current * - * module's context. * - *********************************************************************/ - if (parms != null) { - this.params = parms; - this.arity = parms.length; - } ; - } - - /************************************************************************* - * The methods. * - *************************************************************************/ - public LevelNode getBody() {return this.body; } ; - /*********************************************************************** - * Note: this is a LevelNode rather than an ExprNode because it could * - * be either an ExprNode, AssumeProve node, or an APSubstInNode whose * - * body is either an ExprNode or an AssumeProve node. To check if a * - * node N is an ExprNode, use the test * - * * - * N instanceof ExprNode * - ***********************************************************************/ - - public ModuleNode getOriginallyDefinedInModuleNode() - /*********************************************************************** - * This is the module for which the node was created, which for a * - * theorem or assumption instantiated with substitution is not the * - * module from which the theorem or assumption came. * - ***********************************************************************/ - { return originallyDefinedInModule; } - - public ModuleNode getInstantiatedFrom() { return this.instantiatedFrom ; } - /*********************************************************************** - * If the theorem or assumption was obtained by instantiation, then * - * this is the module from which it was instantiated. Otherwise, it * - * is null. * - ***********************************************************************/ - - public boolean isTheorem() {return this.theorem ;} - public boolean isSuffices() {return this.suffices ;}; - void setSuffices() {this.suffices = true;}; - - /************************************************************************* - * Return the proof of the theorem, which is null unless this is a * - * theorem and it has a proof. * - *************************************************************************/ - public final ProofNode getProof() {return this.proof;} - - public final FormalParamNode[] getParams() { return this.params; } - - public final boolean isExpr() { return this.body instanceof ExprNode; } - /*********************************************************************** - * Returns true iff the body is an ExprNode (rather than an * - * AssumeProveNode or APSubstInNode). * - ***********************************************************************/ - - - /************************************************************************* - * Implementations of the abstract methods of the SymbolNode superclass. * - *************************************************************************/ - public final int getArity() { return this.arity;} - /*********************************************************************** - * The name of a theorem or assumption has no parameters. * - ***********************************************************************/ - - // Modified by LL on 30 Oct 2012 to handle locally instantiated theorems - // and assumptions. - private boolean local = false ; - public final boolean isLocal() { return local; } - /*********************************************************************** - * Theorem and assumption definitions are local iff imported with a * - * LOCAL instance. * - ***********************************************************************/ - public final void setLocal(boolean localness) { - local = localness ; - } - -// public final ModuleNode getModuleNode() { return this.moduleNode; } - - public final boolean match( OpApplNode test, ModuleNode mn ) { - /*********************************************************************** - * True iff the current object has the same arity as the node operator * - * of the OpApplNode test. * - ***********************************************************************/ - SymbolNode odn = test.getOperator(); - return odn.getArity() == 0; - } - - - /************************************************************************* - * The following methods implement the OpDefOrLabel interface. * - * * - * These are the same as the other classes that implement the interface. * - * There doesn't seem to be any easy way to write these methods only * - * once. * - *************************************************************************/ - public void setLabels(Hashtable ht) {labels = ht; } - /*********************************************************************** - * Sets the set of labels. * - ***********************************************************************/ - - public LabelNode getLabel(UniqueString us) { - /*********************************************************************** - * If the hashtable `labels' contains a LabelNode with name `us', * - * then that LabelNode is returned; otherwise null is returned. * - ***********************************************************************/ - if (labels == null) {return null;} ; - return (LabelNode) labels.get(us) ; - } - - public boolean addLabel(LabelNode odn) { - /*********************************************************************** - * If the hashtable `labels' contains no OpDefNode with the same name * - * as odn, then odn is added to the set and true is return; else the * - * set is unchanged and false is returned. * - ***********************************************************************/ - if (labels == null) {labels = new Hashtable(); } ; - if (labels.containsKey(odn)) {return false ;} ; - labels.put(odn.getName(), odn) ; - return true; - } - - public LabelNode[] getLabels() { - /*********************************************************************** - * Returns an array containing the Label objects in the hashtable * - * `labels'. * - ***********************************************************************/ - if (labels == null) {return new LabelNode[0];} ; - Vector v = new Vector() ; - Enumeration e = labels.elements() ; - while (e.hasMoreElements()) { v.addElement(e.nextElement()); } ; - LabelNode[] retVal = new LabelNode[v.size()] ; - for (int i = 0 ; i < v.size() ; i++) - {retVal[i] = (LabelNode) v.elementAt(i); } ; - return retVal ; - } - -// On 24 Oct 2012 replaced the following levelCheck method with the current -// one, which was obtained by cloning the method from OpDefNode with some -// simplifications that were possible because a theorem or assumption, unlike -// and ordinary definition, cannot appear in the scope of a RECURSIVE declaration. -// He also made the ThmOrAssumpDefNode implement the AnyNode interface. -// See the comments in AnyDefNode.java for an explanation of why. - -// /************************************************************************* -// * Level checking. * -// *************************************************************************/ -// public boolean levelCheck(int iter) { -// if (levelChecked >= iter) {return levelCorrect;} ; -// levelChecked = iter ; -// levelCorrect = this.body.levelCheck(iter) ; -// level = this.body.level ; -// levelParams = this.body.levelParams ; -// allParams = this.body.allParams ; -// levelConstraints = this.body.levelConstraints ; -// argLevelConstraints = this.body.argLevelConstraints ; -// argLevelParams = this.body.argLevelParams ; -// return levelCorrect ; -// } -// -//// /************************************************************************* -//// * The implementation of the LevelNode abstract methods. They simply * -//// * return the corresponding values for the body. * -//// *************************************************************************/ -//// public final LevelNode getBody() {return this.body;} -//// public boolean levelCheck() {return this.body.levelCheck();} -//// public int getLevel() {return this.body.getLevel();} -//// public HashSet getLevelParams() {return this.body.getLevelParams();} -//// public SetOfLevelConstraints getLevelConstraints() -//// {return this.body.getLevelConstraints() ;} -//// public SetOfArgLevelConstraints getArgLevelConstraints() -//// {return this.body.getArgLevelConstraints() ; } -//// public HashSet getArgLevelParams() -//// {return this.body.getArgLevelParams() ; } - - /************************************************************************* - * The fields used for level checking. * - *************************************************************************/ -// These fields are now present in all LevelNode subclasses -// private boolean levelCorrect; -// private int level; -// private HashSet levelParams; -// private SetOfLevelConstraints levelConstraints; -// private SetOfArgLevelConstraints argLevelConstraints; -// private HashSet argLevelParams; - - - int[] maxLevels; - int[] weights; - int[][] minMaxLevel; - /*********************************************************************** - * According to LevelSpec.tla, if this is the OpDefNode for the * - * definition of op, then op.minMaxLevel[i][k] is the minimum value of * - * oparg.maxLevels[k] for the i-th argument of Op. Thus, * - * op.minMaxLevels[i] is a sequence whose length is the number of * - * arguments taken by the i-th argument of Op. (It equals 0 if the * - * i-th argument of Op is not an operator argument.) * - ***********************************************************************/ - - boolean[] isLeibnizArg; - boolean isLeibniz; - /*********************************************************************** - * If this is the OpDefNode for the definition of op, then * - * isLeibnizArg[i] is true iff the i-th argument of op is Leibniz, and * - * isLeibniz = \A i : isLeibnizArg[i] * - ***********************************************************************/ - public boolean[] getIsLeibnizArg() { - return isLeibnizArg; - } - public boolean getIsLeibniz() { - return isLeibniz; - } - private boolean[][][] opLevelCond; - /*********************************************************************** - * According to LevelSpec.tla, if thisnode defines op, * - * then op.opLevelCond[i][j][k] is true iff * - * the i-th argument of op is an operator argument opArg, and the * - * definition of op contains an expression in which the j-th formal * - * parameter of the definition of op appears within the k-th argument * - * of opArg. * - ***********************************************************************/ - public final boolean levelCheck(int itr) { - if (this.levelChecked >= itr) { return this.levelCorrect; } - this.levelChecked = itr ; - - /*********************************************************************** - * Initialize maxLevels to the least restrictive value and weights to 0.* - * Initialize isLeibniz and all isLeibniz[i] to true. * - ***********************************************************************/ - this.maxLevels = new int[this.params.length]; - this.weights = new int[this.params.length]; - for (int i = 0 ; i < this.params.length ; i++) { - this.maxLevels[i] = MaxLevel ; - this.weights[i] = 0 ; - this.isLeibniz = true; - this.isLeibnizArg = new boolean[this.params.length]; - this.isLeibnizArg[i] = true ; - } ; - - - // Level check the body: - this.levelCorrect = this.body.levelCheck(itr); - this.level = this.body.getLevel(); - - SetOfLevelConstraints lcSet = this.body.getLevelConstraints(); - for (int i = 0; i < this.params.length; i++) { - Object plevel = lcSet.get(params[i]); - if (plevel != null) { - this.maxLevels[i] = ((Integer)plevel).intValue(); - } - } - - for (int i = 0; i < this.params.length; i++) { - if (this.body.getLevelParams().contains(this.params[i])) { - this.weights[i] = this.weights[i]; - } - } - - this.minMaxLevel = new int[this.params.length][]; - SetOfArgLevelConstraints alcSet = this.body.getArgLevelConstraints(); - for (int i = 0; i < this.params.length; i++) { - int alen = this.params[i].getArity(); - this.minMaxLevel[i] = new int[alen]; - for (int j = 0; j < alen; j++) { - Object alevel = alcSet.get(new ParamAndPosition(this.params[i], j)); - if (alevel == null) { - this.minMaxLevel[i][j] = MinLevel; - } - else { - this.minMaxLevel[i][j] = ((Integer)alevel).intValue(); - } - } - } - - this.opLevelCond = new boolean[this.params.length][this.params.length][]; - HashSet alpSet = this.body.getArgLevelParams(); - for (int i = 0; i < this.params.length; i++) { - for (int j = 0; j < this.params.length; j++) { - this.opLevelCond[i][j] = new boolean[this.params[i].getArity()]; - for (int k = 0; k < this.params[i].getArity(); k++) { - ArgLevelParam alp = new ArgLevelParam(this.params[i], k, this.params[j]); - this.opLevelCond[i][j][k] = alpSet.contains(alp); - } - } - } - - this.levelParams.addAll(this.body.getLevelParams()); - this.allParams.addAll(this.body.getAllParams()); - this.nonLeibnizParams.addAll(this.body.getNonLeibnizParams()); - for (int i = 0; i < this.params.length; i++) { - this.levelParams.remove(this.params[i]); - this.allParams.remove(this.params[i]); - if (this.nonLeibnizParams.contains(this.params[i])) { - /******************************************************************* - * The i-th argument is non-Leibniz if this.params[i] is in the * - * body's nonLeibnizParams hashset (and hence now in this node's * - * nonLeibnizParams hashset. * - *******************************************************************/ - this.nonLeibnizParams.remove(this.params[i]) ; - this.isLeibnizArg[i] = false ; - this.isLeibniz = false ; - } ; - } - - this.levelConstraints = (SetOfLevelConstraints)lcSet.clone(); - for (int i = 0; i < this.params.length; i++) { - this.levelConstraints.remove(this.params[i]); - } - - this.argLevelConstraints = (SetOfArgLevelConstraints)alcSet.clone(); - for (int i = 0; i < this.params.length; i++) { - int alen = this.params[i].getArity(); - for (int j = 0; j < alen; j++) { - this.argLevelConstraints.remove(new ParamAndPosition(this.params[i], j)); - } - } - - Iterator iter = alpSet.iterator(); - while (iter.hasNext()) { - ArgLevelParam alp = (ArgLevelParam)iter.next(); - if (!alp.op.occur(this.params) || - !alp.param.occur(this.params)) { - this.argLevelParams.add(alp); - } - } - - return levelCorrect ; - } - - /*************************************************************************** - * The following Asserts can be removed after debugging. * - ***************************************************************************/ - public final int getMaxLevel(int i) { - if (this.levelChecked == 0) - {throw new WrongInvocationException("getMaxLevel called before levelCheck");}; - int idx = (this.getArity() == -1) ? 0 : i; - return this.maxLevels[idx]; - } - - public final int getWeight(int i) { - if (this.levelChecked == 0) - {throw new WrongInvocationException("getWeight called before levelCheck");}; - int idx = (this.getArity() == -1) ? 0 : i; - return this.weights[idx]; - } - - public final int getMinMaxLevel(int i, int j) { - if (this.levelChecked == 0) - {throw new WrongInvocationException("getMinMaxLevel called before levelCheck");}; - if (this.minMaxLevel == null) { - return ConstantLevel; - } - return this.minMaxLevel[i][j]; - } - - public final boolean getOpLevelCond(int i, int j, int k) { - if (this.levelChecked == 0) - {throw new WrongInvocationException("getOpLevelCond called before levelCheck");}; - if (this.opLevelCond == null) { - return false; - } - return this.opLevelCond[i][j][k]; - } - - /** - * toString, levelDataToString and walkGraph methods to implement - * ExploreNode interface - */ -// public final String levelDataToString() { -// return this.body.levelDataToString(); -// } - - - - /** - * The body is the node's only child. - */ - public SemanticNode[] getChildren() { - return new SemanticNode[] {this.body}; - } - - public final void walkGraph(Hashtable semNodesTable) { - Integer uid = new Integer(myUID); - if (semNodesTable.get(uid) != null) return; - semNodesTable.put(new Integer(myUID), this); - if(this.body != null) {this.body.walkGraph(semNodesTable) ;} ; - } - - public final String toString(int depth) { - if (depth <= 0) return ""; - String ret = - "\n*ThmOrAssumpDefNode: " + this.getName().toString() + - " " + super.toString(depth) + - " arity: " + this.arity + - " module: " + (originallyDefinedInModule != null - ? originallyDefinedInModule.getName().toString() - : "<null>" ) ; - if (instantiatedFrom != null) {ret += " instantiatedFrom: " + - instantiatedFrom.getName() ; } ; - if (params != null) { - String tempString = "\nFormal params: " + params.length; - for (int i = 0; i < params.length; i++) { - tempString += Strings.indent(2, ((params[i] != null) - ? params[i].toString(depth-1) - : "\nnull")); - } ; - ret += Strings.indent(2,tempString); - } ; - if (body != null) { - ret += Strings.indent(2, - "\nisTheorem(): " + theorem + - "\nBody:" + - Strings.indent(2, this.body.toString(depth-1)) + - "\nsuffices: " + this.isSuffices()); - } // if - /*********************************************************************** - * The following is the same for all classes that implement the * - * OpDefOrLabelNode interface. * - ***********************************************************************/ - if (labels != null) { - ret += "\n Labels: " ; - Enumeration list = labels.keys() ; - while (list.hasMoreElements()) { - ret += ((UniqueString) list.nextElement()).toString() + " " ; - } ; - } - else {ret += "\n Labels: null";}; - - return ret ; - } - - /** - * most of the information in this class is a duplication of the information - * in the TheoremNode. - * - * We care to export only the name of the theorem (CHECK what hppens when instantiated). - */ - protected String getNodeRef() { - if (theorem) - return "TheoremNodeRef"; - else - return "AssumeNodeRef"; - } - - protected Element getSymbolElement(Document doc, tla2sany.xml.SymbolContext context) { - // since this element doesnt seem to contain any additional information - // over theorems or assumptions, we just refer to them - return thmOrAssump.getLevelElement(doc,context); - } -} +// Copyright (c) 2007 Microsoft Corporation. All rights reserved. + +// last modified on Thu 2 July 2009 at 15:44:33 PST by lamport +/*************************************************************************** +* The ThmOrAssumpDefNode constructor is invoked in * +* semantic/Generator.java to construct the nodes corresponding to the * +* definition in something like * +* * +* THEOREM Foo == ... * +* * +* The following are the only public methods that a tool is likely to * +* call. (Search for the method to find an explanation of what it does.) * +* * +* LevelNode getBody() * +* ModuleNode getOriginallyDefinedInModuleNode() * +* boolean isTheorem() * +* boolean isSuffices() * +* ProofNode getProof() * +* FormalParamNode[] getParams() * +* ModuleNode getInstantiatedFrom() * +***************************************************************************/ + +package tla2sany.semantic; + +import java.util.Enumeration; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Iterator; + +import tla2sany.st.TreeNode; +import tla2sany.utilities.Strings; +import tla2sany.utilities.Vector; +import util.UniqueString; +import util.WrongInvocationException; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +/*************************************************************************** +* This node represents the definition of Foo in * +* * +* THEOREM Foo == ... * +* ASSUME Foo == ... * +***************************************************************************/ + +public class ThmOrAssumpDefNode extends SymbolNode + implements OpDefOrLabelNode, AnyDefNode { + + // T.L. 2014 - the actual theorem or assumption associated with this def + // this is required in order to simplify presentation. After all normalizations + // we dont really need this def any more + // this field is being set by TheoremNode or AssumeNode + protected LevelNode thmOrAssump = null; + private LevelNode body = null; + private ModuleNode originallyDefinedInModule = null; + private boolean theorem = true; + /*********************************************************************** + * True if a theorem, false if an assumption. * + ***********************************************************************/ + private boolean suffices = false ; + /*********************************************************************** + * If this represents a theorem, then this is the value of the * + * TheoremNode's suffices field (which is false unless the TheoremNode * + * represents a SUFFICES proof step). This is a kludge added for the * + * following reason. To check if a reference to a subexpression of an * + * ASSUME/PROVE is legal, we need to know whether or not the * + * ASSUME/PROVE lies within a SUFFICES step. However, the reference * + * accesses the ThmOrAssumpDefNode, while it's the TheoremNode that * + * contains the suffices field. It might seem sensible to have the * + * ThmOrAssumpDefNode contain a pointer to the TheoremNode. However, * + * that's problematic. For one thing, instantiation creates a new * + * ThmOrAssumpDefNode for the imported definition, but does not create * + * a new TheoremNode. So, we copy just the suffices field (which will * + * be false for an instantiated node because proof steps don't get * + * instantiated). * + * * + * This field is set by setSuffices() and read by isSuffices() ; * + ***********************************************************************/ + + + /************************************************************************* + * The following field is used to implement the OpDefOrLabel interface. * + * It is a hashtable of OpDefNode objects representing labels within * + * the body that are not within the scope of an inner label or LET * + * definition. * + *************************************************************************/ + private Hashtable labels = null ; + public Hashtable getLabelsHT() { + /*********************************************************************** + * Return the labels field. Used to "clone" an OpDefNode for module * + * instantiation. * + ***********************************************************************/ + return labels ; + } + + public int arity = 0 ; + private FormalParamNode[] params = new FormalParamNode[0]; + /*********************************************************************** + * A theorem or assumption definition like * + * * + * THEOREM foo == ... * + * * + * has no parameters. However, it can acquire parameters when * + * the module it's in is instantiated. * + ***********************************************************************/ + ProofNode proof; + /********************************************************************** + * The proof, if there is one; else null. Obviously, only a theorem * + * can have a proof. * + **********************************************************************/ + + private ModuleNode instantiatedFrom = null ; + /*********************************************************************** + * If the theorem or assumption was obtained by instantiation, then * + * this is the module from which it was instantiated. * + ***********************************************************************/ + + /** + * The source field and its methods was added by LL on 15 June 2010. + * I don't know why it wasn't added to this class when it was added + * to OpDefNode. However, it's needed by the Toolbox, so it's being + * added now by trying to duplicate what was done for OpDefNode + */ + private ThmOrAssumpDefNode source = null; + + public ThmOrAssumpDefNode getSource() { + if (source == null) { + return this; + } + return source; + } + + /************************************************************************* + * The Constructor. * + *************************************************************************/ + public ThmOrAssumpDefNode( + UniqueString name, // The thm/assump name. + boolean thm, // true if a theorem, false if an assump. + LevelNode exp, // The body + ModuleNode oModNode, // Name of module. + SymbolTable st, // The current value of + // Generator.symbolTable + TreeNode stn, // The syntax node. + FormalParamNode[] parms, // The parameters, or null if none. + ModuleNode iFrom, // The instantiatedFrom field. + ThmOrAssumpDefNode src // The source field. + ) { + super(ThmOrAssumpDefKind, stn, name) ; + this.theorem = thm; + this.body = exp; + this.originallyDefinedInModule = oModNode; + /********************************************************************* + * Note that when this theorem or assumption is instantiated with a * + * parameter substitution, then the newly created ThmOrAssumpDefNode * + * has this field set to the instantiating module. Thus, this field * + * is not useful to track down the module of origin of a theorem. * + *********************************************************************/ + // On 1 Nov 2012,, LL moved the following two statements to here from + // the end of the constructor. It's necessary for the source field to be + // set before addSymbol is called. + this.instantiatedFrom = iFrom ; + this.source = src; + + if (st != null) {st.addSymbol(name, this);} ; + /********************************************************************* + * By some magic, this eventually puts the name into the current * + * module's context. * + *********************************************************************/ + if (parms != null) { + this.params = parms; + this.arity = parms.length; + } ; + } + + /************************************************************************* + * A place-holder constructor and a method for setting the remaining * + * fields. It is used in Generator.processTheorem, where the object * + * needs to be created before its body is generated. This method is * + * not used when created a ThmOrAssumpDefNode by instantiation, so * + * getInstantitedFrom will be null for this object. * + *************************************************************************/ + public ThmOrAssumpDefNode(UniqueString name, TreeNode stn) { + super(ThmOrAssumpDefKind, stn, name) ; + } + + public void construct( + boolean thm, // true if a theorem, false if an assump. + LevelNode exp, // The body + ModuleNode oModNode, // Name of module. + SymbolTable st, // The current value of + // Generator.symbolTable + FormalParamNode[] parms // The parameters, or null if none. + ) { + this.theorem = thm; + this.body = exp; + this.originallyDefinedInModule = oModNode; + if (st != null) {st.addSymbol(name, this);} ; + /********************************************************************* + * By some magic, this eventually puts the name into the current * + * module's context. * + *********************************************************************/ + if (parms != null) { + this.params = parms; + this.arity = parms.length; + } ; + } + + /************************************************************************* + * The methods. * + *************************************************************************/ + public LevelNode getBody() {return this.body; } ; + /*********************************************************************** + * Note: this is a LevelNode rather than an ExprNode because it could * + * be either an ExprNode, AssumeProve node, or an APSubstInNode whose * + * body is either an ExprNode or an AssumeProve node. To check if a * + * node N is an ExprNode, use the test * + * * + * N instanceof ExprNode * + ***********************************************************************/ + + public ModuleNode getOriginallyDefinedInModuleNode() + /*********************************************************************** + * This is the module for which the node was created, which for a * + * theorem or assumption instantiated with substitution is not the * + * module from which the theorem or assumption came. * + ***********************************************************************/ + { return originallyDefinedInModule; } + + public ModuleNode getInstantiatedFrom() { return this.instantiatedFrom ; } + /*********************************************************************** + * If the theorem or assumption was obtained by instantiation, then * + * this is the module from which it was instantiated. Otherwise, it * + * is null. * + ***********************************************************************/ + + public boolean isTheorem() {return this.theorem ;} + public boolean isSuffices() {return this.suffices ;}; + void setSuffices() {this.suffices = true;}; + + /************************************************************************* + * Return the proof of the theorem, which is null unless this is a * + * theorem and it has a proof. * + *************************************************************************/ + public final ProofNode getProof() {return this.proof;} + + public final FormalParamNode[] getParams() { return this.params; } + + public final boolean isExpr() { return this.body instanceof ExprNode; } + /*********************************************************************** + * Returns true iff the body is an ExprNode (rather than an * + * AssumeProveNode or APSubstInNode). * + ***********************************************************************/ + + + /************************************************************************* + * Implementations of the abstract methods of the SymbolNode superclass. * + *************************************************************************/ + public final int getArity() { return this.arity;} + /*********************************************************************** + * The name of a theorem or assumption has no parameters. * + ***********************************************************************/ + + // Modified by LL on 30 Oct 2012 to handle locally instantiated theorems + // and assumptions. + private boolean local = false ; + public final boolean isLocal() { return local; } + /*********************************************************************** + * Theorem and assumption definitions are local iff imported with a * + * LOCAL instance. * + ***********************************************************************/ + public final void setLocal(boolean localness) { + local = localness ; + } + +// public final ModuleNode getModuleNode() { return this.moduleNode; } + + public final boolean match( OpApplNode test, ModuleNode mn ) { + /*********************************************************************** + * True iff the current object has the same arity as the node operator * + * of the OpApplNode test. * + ***********************************************************************/ + SymbolNode odn = test.getOperator(); + return odn.getArity() == 0; + } + + + /************************************************************************* + * The following methods implement the OpDefOrLabel interface. * + * * + * These are the same as the other classes that implement the interface. * + * There doesn't seem to be any easy way to write these methods only * + * once. * + *************************************************************************/ + public void setLabels(Hashtable ht) {labels = ht; } + /*********************************************************************** + * Sets the set of labels. * + ***********************************************************************/ + + public LabelNode getLabel(UniqueString us) { + /*********************************************************************** + * If the hashtable `labels' contains a LabelNode with name `us', * + * then that LabelNode is returned; otherwise null is returned. * + ***********************************************************************/ + if (labels == null) {return null;} ; + return (LabelNode) labels.get(us) ; + } + + public boolean addLabel(LabelNode odn) { + /*********************************************************************** + * If the hashtable `labels' contains no OpDefNode with the same name * + * as odn, then odn is added to the set and true is return; else the * + * set is unchanged and false is returned. * + ***********************************************************************/ + if (labels == null) {labels = new Hashtable(); } ; + if (labels.containsKey(odn)) {return false ;} ; + labels.put(odn.getName(), odn) ; + return true; + } + + public LabelNode[] getLabels() { + /*********************************************************************** + * Returns an array containing the Label objects in the hashtable * + * `labels'. * + ***********************************************************************/ + if (labels == null) {return new LabelNode[0];} ; + Vector v = new Vector() ; + Enumeration e = labels.elements() ; + while (e.hasMoreElements()) { v.addElement(e.nextElement()); } ; + LabelNode[] retVal = new LabelNode[v.size()] ; + for (int i = 0 ; i < v.size() ; i++) + {retVal[i] = (LabelNode) v.elementAt(i); } ; + return retVal ; + } + +// On 24 Oct 2012 replaced the following levelCheck method with the current +// one, which was obtained by cloning the method from OpDefNode with some +// simplifications that were possible because a theorem or assumption, unlike +// and ordinary definition, cannot appear in the scope of a RECURSIVE declaration. +// He also made the ThmOrAssumpDefNode implement the AnyNode interface. +// See the comments in AnyDefNode.java for an explanation of why. + +// /************************************************************************* +// * Level checking. * +// *************************************************************************/ +// public boolean levelCheck(int iter) { +// if (levelChecked >= iter) {return levelCorrect;} ; +// levelChecked = iter ; +// levelCorrect = this.body.levelCheck(iter) ; +// level = this.body.level ; +// levelParams = this.body.levelParams ; +// allParams = this.body.allParams ; +// levelConstraints = this.body.levelConstraints ; +// argLevelConstraints = this.body.argLevelConstraints ; +// argLevelParams = this.body.argLevelParams ; +// return levelCorrect ; +// } +// +//// /************************************************************************* +//// * The implementation of the LevelNode abstract methods. They simply * +//// * return the corresponding values for the body. * +//// *************************************************************************/ +//// public final LevelNode getBody() {return this.body;} +//// public boolean levelCheck() {return this.body.levelCheck();} +//// public int getLevel() {return this.body.getLevel();} +//// public HashSet getLevelParams() {return this.body.getLevelParams();} +//// public SetOfLevelConstraints getLevelConstraints() +//// {return this.body.getLevelConstraints() ;} +//// public SetOfArgLevelConstraints getArgLevelConstraints() +//// {return this.body.getArgLevelConstraints() ; } +//// public HashSet getArgLevelParams() +//// {return this.body.getArgLevelParams() ; } + + /************************************************************************* + * The fields used for level checking. * + *************************************************************************/ +// These fields are now present in all LevelNode subclasses +// private boolean levelCorrect; +// private int level; +// private HashSet levelParams; +// private SetOfLevelConstraints levelConstraints; +// private SetOfArgLevelConstraints argLevelConstraints; +// private HashSet argLevelParams; + + + int[] maxLevels; + int[] weights; + int[][] minMaxLevel; + /*********************************************************************** + * According to LevelSpec.tla, if this is the OpDefNode for the * + * definition of op, then op.minMaxLevel[i][k] is the minimum value of * + * oparg.maxLevels[k] for the i-th argument of Op. Thus, * + * op.minMaxLevels[i] is a sequence whose length is the number of * + * arguments taken by the i-th argument of Op. (It equals 0 if the * + * i-th argument of Op is not an operator argument.) * + ***********************************************************************/ + + boolean[] isLeibnizArg; + boolean isLeibniz; + /*********************************************************************** + * If this is the OpDefNode for the definition of op, then * + * isLeibnizArg[i] is true iff the i-th argument of op is Leibniz, and * + * isLeibniz = \A i : isLeibnizArg[i] * + ***********************************************************************/ + public boolean[] getIsLeibnizArg() { + return isLeibnizArg; + } + public boolean getIsLeibniz() { + return isLeibniz; + } + private boolean[][][] opLevelCond; + /*********************************************************************** + * According to LevelSpec.tla, if thisnode defines op, * + * then op.opLevelCond[i][j][k] is true iff * + * the i-th argument of op is an operator argument opArg, and the * + * definition of op contains an expression in which the j-th formal * + * parameter of the definition of op appears within the k-th argument * + * of opArg. * + ***********************************************************************/ + public final boolean levelCheck(int itr) { + if (this.levelChecked >= itr) { return this.levelCorrect; } + this.levelChecked = itr ; + + /*********************************************************************** + * Initialize maxLevels to the least restrictive value and weights to 0.* + * Initialize isLeibniz and all isLeibniz[i] to true. * + ***********************************************************************/ + this.maxLevels = new int[this.params.length]; + this.weights = new int[this.params.length]; + for (int i = 0 ; i < this.params.length ; i++) { + this.maxLevels[i] = MaxLevel ; + this.weights[i] = 0 ; + this.isLeibniz = true; + this.isLeibnizArg = new boolean[this.params.length]; + this.isLeibnizArg[i] = true ; + } ; + + + // Level check the body: + this.levelCorrect = this.body.levelCheck(itr); + this.level = this.body.getLevel(); + + SetOfLevelConstraints lcSet = this.body.getLevelConstraints(); + for (int i = 0; i < this.params.length; i++) { + Object plevel = lcSet.get(params[i]); + if (plevel != null) { + this.maxLevels[i] = ((Integer)plevel).intValue(); + } + } + + for (int i = 0; i < this.params.length; i++) { + if (this.body.getLevelParams().contains(this.params[i])) { + this.weights[i] = this.weights[i]; + } + } + + this.minMaxLevel = new int[this.params.length][]; + SetOfArgLevelConstraints alcSet = this.body.getArgLevelConstraints(); + for (int i = 0; i < this.params.length; i++) { + int alen = this.params[i].getArity(); + this.minMaxLevel[i] = new int[alen]; + for (int j = 0; j < alen; j++) { + Object alevel = alcSet.get(new ParamAndPosition(this.params[i], j)); + if (alevel == null) { + this.minMaxLevel[i][j] = MinLevel; + } + else { + this.minMaxLevel[i][j] = ((Integer)alevel).intValue(); + } + } + } + + this.opLevelCond = new boolean[this.params.length][this.params.length][]; + HashSet alpSet = this.body.getArgLevelParams(); + for (int i = 0; i < this.params.length; i++) { + for (int j = 0; j < this.params.length; j++) { + this.opLevelCond[i][j] = new boolean[this.params[i].getArity()]; + for (int k = 0; k < this.params[i].getArity(); k++) { + ArgLevelParam alp = new ArgLevelParam(this.params[i], k, this.params[j]); + this.opLevelCond[i][j][k] = alpSet.contains(alp); + } + } + } + + this.levelParams.addAll(this.body.getLevelParams()); + this.allParams.addAll(this.body.getAllParams()); + this.nonLeibnizParams.addAll(this.body.getNonLeibnizParams()); + for (int i = 0; i < this.params.length; i++) { + this.levelParams.remove(this.params[i]); + this.allParams.remove(this.params[i]); + if (this.nonLeibnizParams.contains(this.params[i])) { + /******************************************************************* + * The i-th argument is non-Leibniz if this.params[i] is in the * + * body's nonLeibnizParams hashset (and hence now in this node's * + * nonLeibnizParams hashset. * + *******************************************************************/ + this.nonLeibnizParams.remove(this.params[i]) ; + this.isLeibnizArg[i] = false ; + this.isLeibniz = false ; + } ; + } + + this.levelConstraints = (SetOfLevelConstraints)lcSet.clone(); + for (int i = 0; i < this.params.length; i++) { + this.levelConstraints.remove(this.params[i]); + } + + this.argLevelConstraints = (SetOfArgLevelConstraints)alcSet.clone(); + for (int i = 0; i < this.params.length; i++) { + int alen = this.params[i].getArity(); + for (int j = 0; j < alen; j++) { + this.argLevelConstraints.remove(new ParamAndPosition(this.params[i], j)); + } + } + + Iterator iter = alpSet.iterator(); + while (iter.hasNext()) { + ArgLevelParam alp = (ArgLevelParam)iter.next(); + if (!alp.op.occur(this.params) || + !alp.param.occur(this.params)) { + this.argLevelParams.add(alp); + } + } + + return levelCorrect ; + } + + /*************************************************************************** + * The following Asserts can be removed after debugging. * + ***************************************************************************/ + public final int getMaxLevel(int i) { + if (this.levelChecked == 0) + {throw new WrongInvocationException("getMaxLevel called before levelCheck");}; + int idx = (this.getArity() == -1) ? 0 : i; + return this.maxLevels[idx]; + } + + public final int getWeight(int i) { + if (this.levelChecked == 0) + {throw new WrongInvocationException("getWeight called before levelCheck");}; + int idx = (this.getArity() == -1) ? 0 : i; + return this.weights[idx]; + } + + public final int getMinMaxLevel(int i, int j) { + if (this.levelChecked == 0) + {throw new WrongInvocationException("getMinMaxLevel called before levelCheck");}; + if (this.minMaxLevel == null) { + return ConstantLevel; + } + return this.minMaxLevel[i][j]; + } + + public final boolean getOpLevelCond(int i, int j, int k) { + if (this.levelChecked == 0) + {throw new WrongInvocationException("getOpLevelCond called before levelCheck");}; + if (this.opLevelCond == null) { + return false; + } + return this.opLevelCond[i][j][k]; + } + + /** + * toString, levelDataToString and walkGraph methods to implement + * ExploreNode interface + */ +// public final String levelDataToString() { +// return this.body.levelDataToString(); +// } + + + + /** + * The body is the node's only child. + */ + public SemanticNode[] getChildren() { + return new SemanticNode[] {this.body}; + } + + public final void walkGraph(Hashtable semNodesTable) { + Integer uid = new Integer(myUID); + if (semNodesTable.get(uid) != null) return; + semNodesTable.put(new Integer(myUID), this); + if(this.body != null) {this.body.walkGraph(semNodesTable) ;} ; + } + + public final String toString(int depth) { + if (depth <= 0) return ""; + String ret = + "\n*ThmOrAssumpDefNode: " + this.getName().toString() + + " " + super.toString(depth) + + " arity: " + this.arity + + " module: " + (originallyDefinedInModule != null + ? originallyDefinedInModule.getName().toString() + : "<null>" ) ; + if (instantiatedFrom != null) {ret += " instantiatedFrom: " + + instantiatedFrom.getName() ; } ; + if (params != null) { + String tempString = "\nFormal params: " + params.length; + for (int i = 0; i < params.length; i++) { + tempString += Strings.indent(2, ((params[i] != null) + ? params[i].toString(depth-1) + : "\nnull")); + } ; + ret += Strings.indent(2,tempString); + } ; + if (body != null) { + ret += Strings.indent(2, + "\nisTheorem(): " + theorem + + "\nBody:" + + Strings.indent(2, this.body.toString(depth-1)) + + "\nsuffices: " + this.isSuffices()); + } // if + /*********************************************************************** + * The following is the same for all classes that implement the * + * OpDefOrLabelNode interface. * + ***********************************************************************/ + if (labels != null) { + ret += "\n Labels: " ; + Enumeration list = labels.keys() ; + while (list.hasMoreElements()) { + ret += ((UniqueString) list.nextElement()).toString() + " " ; + } ; + } + else {ret += "\n Labels: null";}; + + return ret ; + } + + /** + * most of the information in this class is a duplication of the information + * in the TheoremNode. + * + * We care to export only the name of the theorem (CHECK what happens when instantiated). + */ + protected String getNodeRef() { + if (theorem) { + assert(thmOrAssump instanceof TheoremNode); + return "TheoremNodeRef"; + } + else { + assert(thmOrAssump instanceof AssumeNode); + return "AssumeNodeRef"; + } + } + + /* appending the name is handled in Theorem.export to prevent cyclic dependencies, this is only left for documentation + public Element export(Document doc, tla2sany.xml.SymbolContext context) { + Element e = getSymbolElement(doc, context); + Node n = e.appendChild(appendText(doc, "uniquename",name.toString())); + e.appendChild(n); + return e; + }*/ + + protected Element getSymbolElement(Document doc, tla2sany.xml.SymbolContext context) { + // since this element doesnt seem to contain any additional information + // over theorems or assumptions, we just refer to them + //actually it does: the name is not known in a theorem + /*TODO: for now we just return an invalid element if thmOrAssump is null. if there are some valid calls with null after + bug-fixing, change the Dummy solution */ + if (thmOrAssump != null) return thmOrAssump.getLevelElement(doc,context); + if (body != null) return body.getLevelElement(doc, context); + + return doc.createElement("DummyThmOrAssumpDefNode"); //if the body element is null, export something invalid + } +} diff --git a/tlatools/src/tla2sany/semantic/UseOrHideNode.java b/tlatools/src/tla2sany/semantic/UseOrHideNode.java index 7ed500c0b87ab41a9b85b2866ab65808e094ae02..2c5198c6000a90aa24634b6be4c14e1552a6141b 100644 --- a/tlatools/src/tla2sany/semantic/UseOrHideNode.java +++ b/tlatools/src/tla2sany/semantic/UseOrHideNode.java @@ -1,183 +1,183 @@ -// Copyright (c) 2007 Microsoft Corporation. All rights reserved. -// last modified on Fri 3 July 2009 at 12:41:45 PST by lamport -package tla2sany.semantic; - -import java.util.Hashtable; - -import tla2sany.st.TreeNode; -import tla2sany.utilities.Strings; -import util.UniqueString; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -/*************************************************************************** -* This class represents a USE or HIDE statement. It is of kind * -* UseKind or HideKind. * -***************************************************************************/ -public class UseOrHideNode extends LevelNode { - - /************************************************************************* - * The fields. * - * * - * A use or hide has the syntax USE/HIDE [facts] [DEF[S] defs]. The * - * following two fields are the semantic nodes for the facts and defs. * - *************************************************************************/ - public LevelNode[] facts = null ; - /*********************************************************************** - * For each i, facts[i] will be either an ExprNode, a ModuleNode, or * - * an OpDefNode of type ModuleInstanceKind (with no parameters). A * - * proof management tool will probably put restrictions on the class * - * of expressions that can be used as facts. * - * * - * 4 Mar 2009: implemented a restriction that arbitrary expressions * - * can't be used as facts. The only allowable expressions are the * - * names of theorems, assumptions, and steps. * - ***********************************************************************/ - public SymbolNode[] defs = null ; - /*********************************************************************** - * For each i, defs[i] should be a UserDefinedOpDefKind or * - * ModuleInstanceKind OpDefNode or a ThmOrAssumpDefNode * - ***********************************************************************/ - - public boolean isOnly ; - /*********************************************************************** - * True iff this node was formed from an "ONLY" step. This is * - * possible only if the node is of kind UseKind or if it was * - * temporarily constructed for making a LeafProofNode for a "BY ONLY" * - * proof. However, the "ONLY BY" construct might be disabled. * - ***********************************************************************/ - - /** - * If the UseOrHideNode is a proof step, this is the step number. It - * is made a UniqueString for consistency; there's no need to make - * comparison efficient. - * Added by LL on 6 June 2010. - */ - private UniqueString stepName = null; - - public void setStepName(UniqueString stepName) - { - this.stepName = stepName; - } - - /** - * @return the stepName - */ - public UniqueString getStepName() - { - return stepName; - } - /************************************************************************* - * The constructor. * - *************************************************************************/ - public UseOrHideNode(int kind, TreeNode stn, LevelNode[] theFacts, - SymbolNode[] theDefs, boolean only) { - super(kind, stn) ; - this.facts = theFacts ; - this.defs = theDefs ; - this.isOnly = only ; - } ; - - /************************************************************************* - * The following method was added 4 Mar 2009 to check the restriction * - * that only the names of facts (and of modules) can be used as facts in * - * a USE or HIDE. * - * * - * It was modified on 1 Jul 2009 to allow the use of expressions as * - * facts in a USE. * - *************************************************************************/ - public void factCheck() { - if (this.facts == null || this.getKind() == UseKind) { return; }; - for (int i = 0; i < this.facts.length; i++) { - if ( (this.facts[i].getKind() == OpApplKind) - && (((OpApplNode) this.facts[i]).operator.getKind() - != ThmOrAssumpDefKind)) { - errors.addError( - this.facts[i].stn.getLocation(), - "The only expression allowed as a fact in a HIDE " + - "is \nthe name of a theorem, assumption, or step."); - } ; - } // for - } - - public boolean levelCheck(int iter) { - /*********************************************************************** - * Level checking is performed by level-checking the facts. Since the * - * defs should be defined operators, they have already been level * - * checked. * - ***********************************************************************/ - if (this.levelChecked >= iter) return this.levelCorrect; - return this.levelCheckSubnodes(iter, facts) ; - } - - public void walkGraph(Hashtable semNodesTable) { - Integer uid = new Integer(myUID); - if (semNodesTable.get(uid) != null) return; - semNodesTable.put(new Integer(myUID), this); - for (int i = 0; i < facts.length; i++) { - facts[i].walkGraph(semNodesTable); - } ; - /*********************************************************************** - * Note: there's no need to walk the defs array because all the nodes * - * on it are walked from the nodes under which they appear. * - ***********************************************************************/ - } - - /* - * The children are the facts. - * @see tla2sany.semantic.SemanticNode#getChildren() - */ - public SemanticNode[] getChildren() { - if (this.facts == null || this.facts.length == 0) { - return null; - } - SemanticNode[] res = new SemanticNode[this.facts.length]; - for (int i = 0; i < facts.length; i++) { - res[i] = facts[i]; - } - return res; - } - - public String toString(int depth) { - if (depth <= 0) return ""; - String ret = "\n*UseOrHideNode:\n" - + super.toString(depth) - + Strings.indent(2, "\nisOnly: " + this.isOnly) - + Strings.indent(2, "\nfacts:") ; - for (int i = 0 ; i < this.facts.length; i++) { - ret += Strings.indent(4, this.facts[i].toString(1)) ; - } ; - ret += Strings.indent(2, "\ndefs:") ; - for (int i = 0 ; i < this.defs.length; i++) { - ret += Strings.indent(4, this.defs[i].toString(1)) ; - } ; - return ret; - } - - protected Element getLevelElement(Document doc, tla2sany.xml.SymbolContext context) { - //SemanticNode.SymbolContext context = new SemanticNode.SymbolContext(context2); - Element e = doc.createElement("UseOrHideNode"); - - Element factse = doc.createElement("facts"); - Element definitions = doc.createElement("defs"); - - for (int i=0; i<facts.length; i++) factse.appendChild(facts[i].export(doc,context)); - for (int i=0; i<defs.length; i++) definitions.appendChild(defs[i].export(doc,context)); - - e.appendChild(factse); - e.appendChild(definitions); - if(isOnly) e.appendChild(doc.createElement("only")); - if(getKind() == HideKind) e.appendChild(doc.createElement("hide")); - - -/* if (stepName != null) - e.setAttribute("step_name", stepName.toString()); -*/ - - // at the end, we append the context of the symbols used in this node - //e.appendChild(context.getContextElement(doc)); - - return e; - } -} +// Copyright (c) 2007 Microsoft Corporation. All rights reserved. +// last modified on Fri 3 July 2009 at 12:41:45 PST by lamport +package tla2sany.semantic; + +import java.util.Hashtable; + +import tla2sany.st.TreeNode; +import tla2sany.utilities.Strings; +import util.UniqueString; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +/*************************************************************************** +* This class represents a USE or HIDE statement. It is of kind * +* UseKind or HideKind. * +***************************************************************************/ +public class UseOrHideNode extends LevelNode { + + /************************************************************************* + * The fields. * + * * + * A use or hide has the syntax USE/HIDE [facts] [DEF[S] defs]. The * + * following two fields are the semantic nodes for the facts and defs. * + *************************************************************************/ + public LevelNode[] facts = null ; + /*********************************************************************** + * For each i, facts[i] will be either an ExprNode, a ModuleNode, or * + * an OpDefNode of type ModuleInstanceKind (with no parameters). A * + * proof management tool will probably put restrictions on the class * + * of expressions that can be used as facts. * + * * + * 4 Mar 2009: implemented a restriction that arbitrary expressions * + * can't be used as facts. The only allowable expressions are the * + * names of theorems, assumptions, and steps. * + ***********************************************************************/ + public SymbolNode[] defs = null ; + /*********************************************************************** + * For each i, defs[i] should be a UserDefinedOpDefKind or * + * ModuleInstanceKind OpDefNode or a ThmOrAssumpDefNode * + ***********************************************************************/ + + public boolean isOnly ; + /*********************************************************************** + * True iff this node was formed from an "ONLY" step. This is * + * possible only if the node is of kind UseKind or if it was * + * temporarily constructed for making a LeafProofNode for a "BY ONLY" * + * proof. However, the "ONLY BY" construct might be disabled. * + ***********************************************************************/ + + /** + * If the UseOrHideNode is a proof step, this is the step number. It + * is made a UniqueString for consistency; there's no need to make + * comparison efficient. + * Added by LL on 6 June 2010. + */ + private UniqueString stepName = null; + + public void setStepName(UniqueString stepName) + { + this.stepName = stepName; + } + + /** + * @return the stepName + */ + public UniqueString getStepName() + { + return stepName; + } + /************************************************************************* + * The constructor. * + *************************************************************************/ + public UseOrHideNode(int kind, TreeNode stn, LevelNode[] theFacts, + SymbolNode[] theDefs, boolean only) { + super(kind, stn) ; + this.facts = theFacts ; + this.defs = theDefs ; + this.isOnly = only ; + } ; + + /************************************************************************* + * The following method was added 4 Mar 2009 to check the restriction * + * that only the names of facts (and of modules) can be used as facts in * + * a USE or HIDE. * + * * + * It was modified on 1 Jul 2009 to allow the use of expressions as * + * facts in a USE. * + *************************************************************************/ + public void factCheck() { + if (this.facts == null || this.getKind() == UseKind) { return; }; + for (int i = 0; i < this.facts.length; i++) { + if ( (this.facts[i].getKind() == OpApplKind) + && (((OpApplNode) this.facts[i]).operator.getKind() + != ThmOrAssumpDefKind)) { + errors.addError( + this.facts[i].stn.getLocation(), + "The only expression allowed as a fact in a HIDE " + + "is \nthe name of a theorem, assumption, or step."); + } ; + } // for + } + + public boolean levelCheck(int iter) { + /*********************************************************************** + * Level checking is performed by level-checking the facts. Since the * + * defs should be defined operators, they have already been level * + * checked. * + ***********************************************************************/ + if (this.levelChecked >= iter) return this.levelCorrect; + return this.levelCheckSubnodes(iter, facts) ; + } + + public void walkGraph(Hashtable semNodesTable) { + Integer uid = new Integer(myUID); + if (semNodesTable.get(uid) != null) return; + semNodesTable.put(new Integer(myUID), this); + for (int i = 0; i < facts.length; i++) { + facts[i].walkGraph(semNodesTable); + } ; + /*********************************************************************** + * Note: there's no need to walk the defs array because all the nodes * + * on it are walked from the nodes under which they appear. * + ***********************************************************************/ + } + + /* + * The children are the facts. + * @see tla2sany.semantic.SemanticNode#getChildren() + */ + public SemanticNode[] getChildren() { + if (this.facts == null || this.facts.length == 0) { + return null; + } + SemanticNode[] res = new SemanticNode[this.facts.length]; + for (int i = 0; i < facts.length; i++) { + res[i] = facts[i]; + } + return res; + } + + public String toString(int depth) { + if (depth <= 0) return ""; + String ret = "\n*UseOrHideNode:\n" + + super.toString(depth) + + Strings.indent(2, "\nisOnly: " + this.isOnly) + + Strings.indent(2, "\nfacts:") ; + for (int i = 0 ; i < this.facts.length; i++) { + ret += Strings.indent(4, this.facts[i].toString(1)) ; + } ; + ret += Strings.indent(2, "\ndefs:") ; + for (int i = 0 ; i < this.defs.length; i++) { + ret += Strings.indent(4, this.defs[i].toString(1)) ; + } ; + return ret; + } + + protected Element getLevelElement(Document doc, tla2sany.xml.SymbolContext context) { + //SemanticNode.SymbolContext context = new SemanticNode.SymbolContext(context2); + Element e = doc.createElement("UseOrHideNode"); + + Element factse = doc.createElement("facts"); + Element definitions = doc.createElement("defs"); + + for (int i=0; i<facts.length; i++) factse.appendChild(facts[i].export(doc,context)); + for (int i=0; i<defs.length; i++) definitions.appendChild(defs[i].export(doc,context)); + + e.appendChild(factse); + e.appendChild(definitions); + if(isOnly) e.appendChild(doc.createElement("only")); + if(getKind() == HideKind) e.appendChild(doc.createElement("hide")); + + +/* if (stepName != null) + e.setAttribute("step_name", stepName.toString()); +*/ + + // at the end, we append the context of the symbols used in this node + //e.appendChild(context.getContextElement(doc)); + + return e; + } +} diff --git a/tlatools/src/tla2sany/xml/SymbolContext.java b/tlatools/src/tla2sany/xml/SymbolContext.java index ff58215c3d02003c932639f38717d7a4784dea53..7af4047bac18a73858cd025d78b9698a4a937afc 100644 --- a/tlatools/src/tla2sany/xml/SymbolContext.java +++ b/tlatools/src/tla2sany/xml/SymbolContext.java @@ -21,7 +21,7 @@ public class SymbolContext { public static final int OTHER_BUG = 0; // some semantic objects are represented using null. this flags array - // is used to tell nodes tio expect them so xml exporting will be done properly + // is used to tell nodes to expect them so xml exporting will be done properly private boolean[] flagArray; public SymbolContext() { diff --git a/tlatools/src/tla2sany/xml/XMLExporter.java b/tlatools/src/tla2sany/xml/XMLExporter.java index 65b0bc6da0a8792dc918b85aa064a1ab23670412..300ad98b2ed26f0ec2c4466ab77033932247334a 100644 --- a/tlatools/src/tla2sany/xml/XMLExporter.java +++ b/tlatools/src/tla2sany/xml/XMLExporter.java @@ -86,25 +86,28 @@ public class XMLExporter { boolean offline_mode = false; int lastarg = -1; // lastarg will be incremented, initialize at -1 - for (int i = 0; i<args.length-1; i++) { - if ("-o".equals(args[i])) { - offline_mode = true; - lastarg = i; - } else if ("-I".equals(args[i])) { - i++; - if (i > args.length-2) throw new IllegalArgumentException("the -I flag must be followed by a directory and at least one .tla file"); - pathsLs.addLast(args[i]); - lastarg = i; - } + for (int i = 0; i < args.length - 1; i++) { + if ("-o".equals(args[i])) { + offline_mode = true; + lastarg = i; + } else if ("-I".equals(args[i])) { + i++; + if (i > args.length - 2) + throw new IllegalArgumentException("the -I flag must be followed by a directory and at least one .tla file"); + pathsLs.addLast(args[i]); + lastarg = i; + } } lastarg++; String[] paths = new String[pathsLs.size()]; - for (int i=0; i<paths.length; i++) paths[i] = (String)pathsLs.get(i); + for (int i = 0; i < paths.length; i++) paths[i] = (String) pathsLs.get(i); + + if (args.length - lastarg != 1) + throw new IllegalArgumentException("Only one TLA file to check allowed!"); - String[] tlas = new String[args.length - lastarg]; - for (int i=0; i<args.length-lastarg; i++) tlas[i] = args[lastarg++]; + String tla_name = args[lastarg++]; FilenameToStream fts = new SimpleFilenameToStream(paths); @@ -112,53 +115,39 @@ public class XMLExporter { PrintStream out = System.out; System.setOut(new PrintStream(new ByteArrayOutputStream())); - SpecObj[] specs = new SpecObj[tlas.length]; - for (int i=0; i<tlas.length; i++) specs[i] = new SpecObj(tlas[i], fts); - - // For each file named on the command line (i.e. in the tlas - // array) (re)initialize the entire system and process that file - // as the root of a new specification. - for (int i = 0; i < tlas.length; i++) { - // continue the loop where the last one left off - // Print documentation line on System.out - ToolIO.out.println("\n****** SANY2 " + SANY.version + "\n") ; - - // Get next file name from command line; then parse, - // semantically analyze, and level check the spec started in - // file Filename leaving the result (normally) in Specification - // spec. - // check if file exists - if (FileUtil.createNamedInputStream(tlas[i], specs[i].getResolver()) != null) - { - try { - SANY.frontEndMain(specs[i], tlas[i], System.err); - if (specs[i].getExternalModuleTable() == null) - throw new XMLExportingException("spec " + specs[i].getName() + " is malformed - does not have an external module table", null); - if (specs[i].getExternalModuleTable().getRootModule() == null) - throw new XMLExportingException("spec " + specs[i].getName() + " is malformed - does not have a root module", null); - } - catch (FrontEndException fe) { - // For debugging - fe.printStackTrace(); - ToolIO.out.println(fe); - return; - } - } else - { - ToolIO.out.println("Cannot find the specified file " + tlas[i] + "."); + SpecObj spec = new SpecObj(tla_name, fts); + + // Print documentation line on System.out + ToolIO.out.println("\n****** SANY2 " + SANY.version + "\n"); + + // Get next file name from command line; then parse, + // semantically analyze, and level check the spec started in + // file Filename leaving the result (normally) in Specification + // spec. + // check if file exists + //ToolIO.out.println("Processing: "+tlas[i]+"\n"+(tlas[i] == null)); + if (FileUtil.createNamedInputStream(tla_name, spec.getResolver()) != null) { + try { + SANY.frontEndMain(spec, tla_name, System.err); + if (spec.getExternalModuleTable() == null) + throw new XMLExportingException("spec " + spec.getName() + " is malformed - does not have an external module table", null); + if (spec.getExternalModuleTable().getRootModule() == null) + throw new XMLExportingException("spec " + spec.getName() + " is malformed - does not have a root module", null); + } catch (FrontEndException fe) { + // For debugging + fe.printStackTrace(); + ToolIO.out.println(fe); + return; } + } else { + ToolIO.out.println("Cannot find the specified file " + tla_name + "."); } + try { DocumentBuilderFactory docFactory = - DocumentBuilderFactory.newInstance(); - /* validation is being done later - docFactory.setNamespaceAware(true); - docFactory.setValidating(true); - docFactory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA); - docFactory.setAttribute(JAXP_SCHEMA_SOURCE, TLA_SCHEMA); - */ + DocumentBuilderFactory.newInstance(); // write XML DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); @@ -167,31 +156,43 @@ public class XMLExporter { Document doc = docBuilder.newDocument(); Element rootElement = doc.createElement("modules"); doc.appendChild(rootElement); + // Create symbol context. It will be filled by all symbol references during module export. SymbolContext context = new SymbolContext(); - for (int i=0; i<specs.length; i++) { - Element e = specs[i].getExternalModuleTable().getRootModule().exportDefinition(doc,context); - rootElement.appendChild(e); + + //Export all the external modules + ExternalModuleTable table = spec.getExternalModuleTable(); + //Element e = table.getRootModule().exportDefinition(doc,context); + //rootElement.appendChild(e); + ModuleNode[] externalModules = table.getModuleNodes(); + for (int j = 0; j < externalModules.length; j++) { + Element ext_e = externalModules[j].exportDefinition(doc, context); + rootElement.appendChild(ext_e); } - // at the beginning, we append the context of the symbols used in this node + + // Insert the symbol table into the beginning of the XML DOM rootElement.insertBefore(context.getContextElement(doc), rootElement.getFirstChild()); + //Insert name of root module + insertRootName(doc, rootElement, spec); + + //Create XML file TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); // validate the file, do not fail if there is a URL connection error - if (! offline_mode) { //skip validation in offline mode - try { - SchemaFactory factory = SchemaFactory.newInstance(W3C_XML_SCHEMA); - Schema schema = factory.newSchema(new URL(TLA_SCHEMA)); - // create a Validator instance, which can be used to validate an instance document - Validator validator = schema.newValidator(); - //validate the DOM tree - validator.validate(source); - } catch (java.io.IOException ioe) { - // do nothing if there is no internet connection - // but fail for other errors - } + if (!offline_mode) { //skip validation in offline mode + try { + SchemaFactory factory = SchemaFactory.newInstance(W3C_XML_SCHEMA); + Schema schema = factory.newSchema(new URL(TLA_SCHEMA)); + // create a Validator instance, which can be used to validate an instance document + Validator validator = schema.newValidator(); + //validate the DOM tree + validator.validate(source); + } catch (java.io.IOException ioe) { + // do nothing if there is no internet connection + // but fail for other errors + } /*catch (org.xml.sax.SAXParseException spe) { // do nothing if there is no internet connection // but fail for other errors @@ -200,8 +201,7 @@ public class XMLExporter { StreamResult result = new StreamResult(out); transformer.transform(source, result); - } - catch (ParserConfigurationException pce) { + } catch (ParserConfigurationException pce) { throw new XMLExportingException("failed to write XML", pce); } catch (TransformerException tfe) { throw new XMLExportingException("failed to write XML", tfe); @@ -209,4 +209,10 @@ public class XMLExporter { throw new XMLExportingException("failed to validate XML", se); } } + + static void insertRootName(Document doc, Element rootElement, SpecObj spec) { + Element el = doc.createElement("RootModule"); + el.appendChild(doc.createTextNode(spec.getName())); + rootElement.insertBefore(el, rootElement.getFirstChild()); + } } diff --git a/tlatools/src/tla2sany/xml/sany.xsd b/tlatools/src/tla2sany/xml/sany.xsd index d12701d1cb919105976f322f18d4cdb3df46ac94..4a8137793d8ea262dcf2e54181a9eb8bd94c6513 100644 --- a/tlatools/src/tla2sany/xml/sany.xsd +++ b/tlatools/src/tla2sany/xml/sany.xsd @@ -10,7 +10,8 @@ <xs:element name="modules"> <xs:complexType> <xs:sequence> - <xs:element ref="context"/> + <xs:element name="RootModule" type="xs:string"/> + <xs:element ref="context"/> <xs:sequence maxOccurs="unbounded"> <xs:element ref="ModuleNode"/> </xs:sequence> @@ -35,6 +36,7 @@ <xs:group ref="OpDefNode"/> <xs:element ref="TheoremNode"/> <xs:element ref="AssumeNode"/> + <xs:element ref="APSubstInNode"/> </xs:choice> </xs:sequence> </xs:complexType> @@ -304,6 +306,7 @@ <xs:complexType> <xs:sequence> <xs:group ref="node"/> + <xs:element minOccurs="0" ref="uniquename"/> <xs:choice> <xs:group ref="ExprNode"/> <xs:element ref="AssumeProveNode"/> diff --git a/tlatools/src/tla2tex/README b/tlatools/src/tla2tex/README index d71e841d9028a3d1bc96ec18a96f3f5c92c6ea99..dec1fad9fc82fd6ffaf5b9c65d5e9b64306ac6c4 100644 --- a/tlatools/src/tla2tex/README +++ b/tlatools/src/tla2tex/README @@ -1,114 +1,121 @@ -FILES ------ -These are the source files for the TLATeX program. The main program -is in TLA.java. In addition to the .java and .class files, there are: - -tlatex.sty : A style file used by the LaTeX output. - -help.txt : A file with the help message. - -info.txt : A file with a reasonably complete description of TLATeX. - -words.all : - A list of common English words. It was obtained by taking the - lower-case words from a Linux list, and adding the following, - which were inexplicably missing. - - a may I TLA miscellany - -old : a directory of old versions. - -POSSIBLE ENHANCEMENTS ---------------------- -1. When formatting an individual comment, TLATeX keeps track of - which identifiers appear in the comment as TLA tokens. It - turns ambiguous instances of those identifiers into TLA tokens - only for identifiers that are not words. Possibly do it - even if they are words--or perhaps have a sublist of common - words and do it only for uncommon words. - -2. Introduce a mechanism for turning operators into TeX macros--for - example, so Integral(a+b, c, d) gets typeset as - - \int^{a+b}_{c} d - - This is nontrivial because it requires finding the arguments, - which in turn requires counting parentheses and looking for commas - and right-parens. A simpler possibility is just replacing - certain identifiers by symbols--e.g., alpha -> \alpha. - - The specification of such replacements would be in the prolog or - epilog, so we'd have to introduce some notation for identifying - pro/epilog lines as TLATeX commands. (This notation should generalize - to arbitrary tools.) - - - -BUGS ----- -Here are the known bugs in TLATeX: - -1. If a ' in a comment is immediately followed by a character, as in - - `token'. - - then TLATeX inserts a spurious space before the ".". Search - for "LEFT_SQUOTE:" in TokenizeComment.java to see how to fix this. - But... a similar problem occurs with `^ ... ^' text, since the `^ - and ^' effectively act as spaces for determining whether to add space - between adjacent tokens. - - The same problem also occurs with a `~ ... ~' term, but in that case, - there may be no solution because the entire term has to be disappeared. - - Some uniform approach to handling this is called for. It seems like - the best approach is to try to increase the size of an immediately - following token by a ` or `^, and of an immediately preceding token - by the ' or ^'. This requires adding an explicit width field to - a CToken object, or something equivalent. - -2. The record component foo.WF_foo will be printed as - - foo.WF - foo - - Fixing this unlikely problem requires fixing the lexing algorithm - in TokenizeSpec.java. - -3. The input - - LET x... - IN x... - -produces - - LET x... - IN x... - -It looks like the two spaces after the "IN" produce the extra space. -The input - - LET x... - IN x... - -produces the correct output. - ----------- - - -Revision History -^^^^^^^^^^^^^^^^ -Version 0.95 of 11 November 2001 - - Modified FindAlignments to do InfixArg alignment only if the - symbol to the left is an infix operator. - - Modified LaTeXOutput.InnerWriteLaTeXFile to end a multiline - comment with a comment line that is below-aligned with a - non-comment line. (Previously, that case had been considered - an error.) - - Fixed the problem of TLATeX hanging if latex or dvips produced - a lot of output by: - * Adding classes ExecuteCommand and GobbleOutput - * Modifying TLA.MakePSFile and LaTeXOutput.RunLatex to call - ExecuteCommand. - -Last modified on Wed 8 February 2012 at 13:56:11 PST by lamport +FILES +----- +These are the source files for the TLATeX program. The main program +is in TLA.java. In addition to the .java and .class files, there are: + +tlatex.sty : A style file used by the LaTeX output. + +help.txt : A file with the help message. + +info.txt : A file with a reasonably complete description of TLATeX. + +words.all : + A list of common English words. It was obtained by taking the + lower-case words from a Linux list, and adding the following, + which were inexplicably missing. + + a may I TLA miscellany + +old : a directory of old versions. + +POSSIBLE ENHANCEMENTS +--------------------- +1. When formatting an individual comment, TLATeX keeps track of + which identifiers appear in the comment as TLA tokens. It + turns ambiguous instances of those identifiers into TLA tokens + only for identifiers that are not words. Possibly do it + even if they are words--or perhaps have a sublist of common + words and do it only for uncommon words. + +2. Introduce a mechanism for turning operators into TeX macros--for + example, so Integral(a+b, c, d) gets typeset as + + \int^{a+b}_{c} d + + This is nontrivial because it requires finding the arguments, + which in turn requires counting parentheses and looking for commas + and right-parens. A simpler possibility is just replacing + certain identifiers by symbols--e.g., alpha -> \alpha. + + The specification of such replacements would be in the prolog or + epilog, so we'd have to introduce some notation for identifying + pro/epilog lines as TLATeX commands. (This notation should generalize + to arbitrary tools.) + + + +BUGS +---- +Here are the known bugs in TLATeX: + +1. If a ' in a comment is immediately followed by a character, as in + + `token'. + + then TLATeX inserts a spurious space before the ".". Search + for "LEFT_SQUOTE:" in TokenizeComment.java to see how to fix this. + But... a similar problem occurs with `^ ... ^' text, since the `^ + and ^' effectively act as spaces for determining whether to add space + between adjacent tokens. + + The same problem also occurs with a `~ ... ~' term, but in that case, + there may be no solution because the entire term has to be disappeared. + + Some uniform approach to handling this is called for. It seems like + the best approach is to try to increase the size of an immediately + following token by a ` or `^, and of an immediately preceding token + by the ' or ^'. This requires adding an explicit width field to + a CToken object, or something equivalent. + +2. The record component foo.WF_foo will be printed as + + foo.WF + foo + + Fixing this unlikely problem requires fixing the lexing algorithm + in TokenizeSpec.java. + +3. The input + + LET x... + IN x... + +produces + + LET x... + IN x... + +It looks like the two spaces after the "IN" produce the extra space. +The input + + LET x... + IN x... + +produces the correct output. + + +4. It looks like something goes wrong with the formatting of tokens + that occur at the beginning of a line of a multiline comment. For + example, something like Brxwee that would normally be italicized + if it occured in the middle of text is not italicized if it's + at the beginning of the comment line (in the .tla file). + +---------- + + +Revision History +^^^^^^^^^^^^^^^^ +Version 0.95 of 11 November 2001 + - Modified FindAlignments to do InfixArg alignment only if the + symbol to the left is an infix operator. + - Modified LaTeXOutput.InnerWriteLaTeXFile to end a multiline + comment with a comment line that is below-aligned with a + non-comment line. (Previously, that case had been considered + an error.) + - Fixed the problem of TLATeX hanging if latex or dvips produced + a lot of output by: + * Adding classes ExecuteCommand and GobbleOutput + * Modifying TLA.MakePSFile and LaTeXOutput.RunLatex to call + ExecuteCommand. + +Last modified on Wed 8 February 2012 at 13:56:11 PST by lamport diff --git a/tlatools/src/tlc2/TLC.java b/tlatools/src/tlc2/TLC.java index 90ed293db48622d72d2622728bab7adac14a055b..5366a3de3bbb220f93a48b179aaf350f87a73e1f 100644 --- a/tlatools/src/tlc2/TLC.java +++ b/tlatools/src/tlc2/TLC.java @@ -68,6 +68,17 @@ public class TLC private String mainFile; private String configFile; private String dumpFile; + /** + * If true, the dumpFile will be written in dot format to be processed by + * GraphViz. + * <p> + * Contrary to plain -dump, -dot will also write out transitions from state + * s to s' if s' is already known. Thus, the resulting graph shows all + * successors of s instead of just s's unexplored ones. + * <p> + * Off/False by default. + */ + private boolean asDot; private String fromChkpt; private int fpIndex; @@ -105,6 +116,7 @@ public class TLC mainFile = null; configFile = null; dumpFile = null; + asDot = false; fromChkpt = null; resolver = null; @@ -136,7 +148,7 @@ public class TLC * o -recover path: recover from the checkpoint at path * Defaults to scratch run if not specified * o -bound: The upper limit for sets effectively limiting the number of init states - * (@see http://bugzilla.tlaplus.net/show_bug.cgi?id=264) + * (@see Bug #264 in general/bugzilla/index.html) * Defaults to 1000000 if not specified * o -metadir path: store metadata in the directory at path * Defaults to specdir/states if not specified @@ -146,7 +158,8 @@ public class TLC * Defaults to 1 * o -dfid num: use depth-first iterative deepening with initial depth num * o -cleanup: clean up the states directory - * o -dump file: dump all the states into file + * o -dump [dot] file: dump all the states into file. If "dot" as sub-parameter + * is given, the output will be in dot notation. * o -difftrace: when printing trace, show only * the differences between successive states * Defaults to printing full state descriptions if not specified @@ -185,12 +198,15 @@ public class TLC // handle parameters if (tlc.handleParameters(args)) { - final MailSender ms = new MailSender(tlc.mainFile); + final MailSender ms = new MailSender(); if (MODEL_PART_OF_JAR) { tlc.setResolver(new InJarFilenameToStream(ModelInJar.PATH)); } else { tlc.setResolver(new SimpleFilenameToStream()); } + ms.setModelName(tlc.getModelName()); + ms.setSpecName(tlc.getSpecName()); + // call the actual processing method tlc.process(); @@ -298,14 +314,24 @@ public class TLC } } else if (args[index].equals("-dump")) { + String suffix = ".dump"; + index++; + if (index < args.length && args[index].equals("dot")) + { + asDot = true; + suffix = ".dot"; + index++; + } if (index < args.length) { dumpFile = args[index]; + // Require a $suffix file extension unless already given. It + // is not clear why this is enforced. int len = dumpFile.length(); - if (!(dumpFile.startsWith(".dump", len - 5))) + if (!(dumpFile.startsWith(suffix, len - suffix.length()))) { - dumpFile = dumpFile + ".dump"; + dumpFile = dumpFile + suffix; } index++; } else @@ -682,15 +708,15 @@ public class TLC if (TLCGlobals.debug) { - StringBuffer buffer = new StringBuffer("TLC argumens:"); - for (int i=0; i < args.length; i++) - { - buffer.append(args[i]); - if (i < args.length - 1) - { - buffer.append(" "); - } - } + StringBuffer buffer = new StringBuffer("TLC arguments:"); + for (int i=0; i < args.length; i++) + { + buffer.append(args[i]); + if (i < args.length - 1) + { + buffer.append(" "); + } + } buffer.append("\n"); DebugPrinter.print(buffer.toString()); } @@ -699,7 +725,7 @@ public class TLC printWelcome(); return true; - } + } /** * The processing method @@ -755,16 +781,17 @@ public class TLC } else { // model checking - MP.printMessage(EC.TLC_MODE_MC); + MP.printMessage(EC.TLC_MODE_MC, new String[] { String.valueOf(TLCGlobals.getNumWorkers()), + TLCGlobals.getNumWorkers() == 1 ? "" : "s" }); AbstractChecker mc = null; if (TLCGlobals.DFIDMax == -1) { - mc = new ModelChecker(mainFile, configFile, dumpFile, deadlock, fromChkpt, resolver, specObj, fpSetConfiguration); - modelCheckerMXWrapper = new ModelCheckerMXWrapper((ModelChecker) mc); + mc = new ModelChecker(mainFile, configFile, dumpFile, asDot, deadlock, fromChkpt, resolver, specObj, fpSetConfiguration); + modelCheckerMXWrapper = new ModelCheckerMXWrapper((ModelChecker) mc, this); } else { - mc = new DFIDModelChecker(mainFile, configFile, dumpFile, deadlock, fromChkpt, true, resolver, specObj); + mc = new DFIDModelChecker(mainFile, configFile, dumpFile, asDot, deadlock, fromChkpt, true, resolver, specObj); } TLCGlobals.mainChecker = mc; // The following statement moved to Spec.processSpec by LL on 10 March 2011 @@ -901,7 +928,11 @@ public class TLC if (!this.welcomePrinted) { this.welcomePrinted = true; - MP.printMessage(EC.TLC_VERSION, TLCGlobals.versionOfTLC); + if (TLCGlobals.getRevision() == null) { + MP.printMessage(EC.TLC_VERSION, TLCGlobals.versionOfTLC); + } else { + MP.printMessage(EC.TLC_VERSION, TLCGlobals.versionOfTLC + " (rev: " + TLCGlobals.getRevision() + ")"); + } } } @@ -917,4 +948,12 @@ public class TLC FPSetConfiguration getFPSetConfiguration() { return fpSetConfiguration; } + + public String getModelName() { + return System.getProperty(MailSender.MODEL_NAME, this.mainFile); + } + + public String getSpecName() { + return System.getProperty(MailSender.SPEC_NAME, this.mainFile); + } } diff --git a/tlatools/src/tlc2/TLCGlobals.java b/tlatools/src/tlc2/TLCGlobals.java index ac15100471250b56aad267da9108a5b1ed62cb20..ac7fefb907e26338eaf8ee5266b7eb58c74005c8 100644 --- a/tlatools/src/tlc2/TLCGlobals.java +++ b/tlatools/src/tlc2/TLCGlobals.java @@ -2,6 +2,11 @@ // Portions Copyright (c) 2003 Microsoft Corporation. All rights reserved. package tlc2; +import java.net.URL; +import java.util.Enumeration; +import java.util.jar.Attributes; +import java.util.jar.Manifest; + import tla2sany.semantic.FrontEnd; import tlc2.tool.AbstractChecker; import tlc2.tool.Simulator; @@ -17,8 +22,8 @@ public class TLCGlobals { // The current version of TLC - public static String versionOfTLC = "Version 2.08 of 21 December 2015"; - + public static String versionOfTLC = "Version 2.09 of 10 March 2017"; + // The bound for set enumeration, used for pretty printing public static int enumBound = 2000; @@ -160,4 +165,23 @@ public class TLCGlobals } return true; } + + public static String getRevision() { + try { + final Enumeration<URL> resources = TLCGlobals.class.getClassLoader().getResources("META-INF/MANIFEST.MF"); + while (resources.hasMoreElements()) { + final Manifest manifest = new Manifest(resources.nextElement().openStream()); + final Attributes attributes = manifest.getMainAttributes(); + if("TLA+ Tools".equals(attributes.getValue("Implementation-Title"))) { + if(attributes.getValue("X-Git-ShortRevision") != null) { + return attributes.getValue("X-Git-ShortRevision"); + } else { + return null; + } + } + } + } catch (Exception ignore) { + } + return null; + } } diff --git a/tlatools/src/tlc2/module/AnySet.java b/tlatools/src/tlc2/module/AnySet.java index a9d789f483058861a06b8c07cab01cd43cf5ddb2..a666e8a2b7639df2e340f8e51c480adcfb6997c4 100644 --- a/tlatools/src/tlc2/module/AnySet.java +++ b/tlatools/src/tlc2/module/AnySet.java @@ -13,6 +13,7 @@ import tlc2.value.Value; public class AnySet extends UserObj { + public static final long serialVersionUID = 20160822L; private static Value AnySet = new UserValue(new AnySet()); diff --git a/tlatools/src/tlc2/module/Bags.java b/tlatools/src/tlc2/module/Bags.java index 73973d05082404ea78e151b1f8386664827d4a71..bdf1fdb08bb0b67ded3acf448b0361a726c6f296 100644 --- a/tlatools/src/tlc2/module/Bags.java +++ b/tlatools/src/tlc2/module/Bags.java @@ -21,6 +21,7 @@ import tlc2.value.ValueVec; public class Bags implements ValueConstants { + public static final long serialVersionUID = 20160822L; static { diff --git a/tlatools/src/tlc2/module/BuiltInModuleHelper.java b/tlatools/src/tlc2/module/BuiltInModuleHelper.java new file mode 100644 index 0000000000000000000000000000000000000000..ac0d789c7762064354e84942af9ceb9266312806 --- /dev/null +++ b/tlatools/src/tlc2/module/BuiltInModuleHelper.java @@ -0,0 +1,76 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package tlc2.module; + +import java.lang.reflect.Field; + +public class BuiltInModuleHelper { + + private BuiltInModuleHelper() { + // no instantiation + } + + public static boolean isBuiltInModule(Class<?> clazz) { + try { + // Compare serialVersionUID because a user is allowed to override a + // built-in module. Thus, the name alone does not uniquely identify + // a built-in class. + final Field field = clazz.getField("serialVersionUID"); + if (field != null) { + final long value = field.getLong(null); + if (clazz == AnySet.class && value == AnySet.serialVersionUID) { + return true; + } else if (clazz == Bags.class && value == Bags.serialVersionUID) { + return true; + } else if (clazz == FiniteSets.class && value == FiniteSets.serialVersionUID) { + return true; + } else if (clazz == Integers.class && value == Integers.serialVersionUID) { + return true; + } else if (clazz == Naturals.class && value == Naturals.serialVersionUID) { + return true; + } else if (clazz == Sequences.class && value == Sequences.serialVersionUID) { + return true; + } else if (clazz == Strings.class && value == Strings.serialVersionUID) { + return true; + } else if (clazz == TLC.class && value == TLC.serialVersionUID) { + return true; + } else if (clazz == TransitiveClosure.class && value == TransitiveClosure.serialVersionUID) { + return true; + } + } + } catch (SecurityException e) { + return false; + } catch (NoSuchFieldException e) { + return false; + } catch (IllegalArgumentException e) { + return false; + } catch (IllegalAccessException e) { + return false; + } + return false; + } +} diff --git a/tlatools/src/tlc2/module/FiniteSets.java b/tlatools/src/tlc2/module/FiniteSets.java index 751b9c0566a33f194a582c84ef427d0cac3cde03..bf6fbf5ecaf71054a6128cb4206993daeeacfe74 100644 --- a/tlatools/src/tlc2/module/FiniteSets.java +++ b/tlatools/src/tlc2/module/FiniteSets.java @@ -15,6 +15,7 @@ import tlc2.value.ValueConstants; public class FiniteSets implements ValueConstants { + public static final long serialVersionUID = 20160822L; public static BoolValue IsFiniteSet(Value val) { diff --git a/tlatools/src/tlc2/module/Integers.java b/tlatools/src/tlc2/module/Integers.java index 0ecd844f8db3fc0b9e54905ce87bb08298f7d08a..4bf47492a1a66a7d8d461a8928aadad44b267fbb 100644 --- a/tlatools/src/tlc2/module/Integers.java +++ b/tlatools/src/tlc2/module/Integers.java @@ -19,6 +19,7 @@ import tlc2.value.ValueConstants; public class Integers extends UserObj implements ValueConstants { + public static final long serialVersionUID = 20160822L; static { diff --git a/tlatools/src/tlc2/module/Naturals.java b/tlatools/src/tlc2/module/Naturals.java index a1771f38b3a4ebc82f49c5b2520e74a9a000d132..14a912c800a06970e62c37c2fde2266be5a2f9ab 100644 --- a/tlatools/src/tlc2/module/Naturals.java +++ b/tlatools/src/tlc2/module/Naturals.java @@ -19,7 +19,8 @@ import tlc2.value.ValueConstants; public class Naturals extends UserObj implements ValueConstants { - + public static final long serialVersionUID = 20160822L; + static { TLARegistry.put("Plus", "+"); diff --git a/tlatools/src/tlc2/module/Sequences.java b/tlatools/src/tlc2/module/Sequences.java index ecd4b58c68191cb7726b3c4fbe720d22dcfac7e4..8f6d4c1ec3aafcb8d62932d8176a571df1f8a66a 100644 --- a/tlatools/src/tlc2/module/Sequences.java +++ b/tlatools/src/tlc2/module/Sequences.java @@ -27,6 +27,8 @@ import util.UniqueString; public class Sequences extends UserObj implements ValueConstants { + public static final long serialVersionUID = 20160822L; + private Value range; private int size; diff --git a/tlatools/src/tlc2/module/Strings.java b/tlatools/src/tlc2/module/Strings.java index f9fb934198201afa670c3d3aca861ce65d1a0617..6eb17b95a79026b41ad0be8f400debe9e83dea8c 100644 --- a/tlatools/src/tlc2/module/Strings.java +++ b/tlatools/src/tlc2/module/Strings.java @@ -15,6 +15,7 @@ import tlc2.value.Value; public class Strings extends UserObj { + public static final long serialVersionUID = 20160822L; private static Value SetString = new UserValue(new Strings()); diff --git a/tlatools/src/tlc2/module/TLC.java b/tlatools/src/tlc2/module/TLC.java index f955410ac13e18d349c6ee313591dc711d7a56d4..797c5edf4b8ddcbbad78b15dc74eb7efaa1c5b34 100644 --- a/tlatools/src/tlc2/module/TLC.java +++ b/tlatools/src/tlc2/module/TLC.java @@ -36,6 +36,7 @@ import util.ToolIO; public class TLC implements ValueConstants { + public static final long serialVersionUID = 20160822L; private static RandomGenerator rng; public static BufferedWriter OUTPUT; @@ -190,6 +191,10 @@ public class TLC implements ValueConstants return new FcnRcdValue(dom, vals, true); } + /** + * f @@ g == [x \in (DOMAIN f) \cup (DOMAIN g) |-> + * IF x \in DOMAIN f THEN f[x] ELSE g[x]] + */ public static Value CombineFcn(Value f1, Value f2) { FcnRcdValue fcn1 = FcnRcdValue.convert(f1); @@ -247,7 +252,7 @@ public class TLC implements ValueConstants if (!found) { dom.addElement(val); - vals.addElement(vals2[i]); + vals.addElement(vals2[i - intv2.low]); } } } else diff --git a/tlatools/src/tlc2/module/TransitiveClosure.java b/tlatools/src/tlc2/module/TransitiveClosure.java index cd10f0cf0f99a36b6022931ff39b7f3d91cb0749..f6d5b134d804857e041c5a00381a56539cc1d6fe 100644 --- a/tlatools/src/tlc2/module/TransitiveClosure.java +++ b/tlatools/src/tlc2/module/TransitiveClosure.java @@ -20,6 +20,7 @@ import tlc2.value.ValueVec; public class TransitiveClosure implements ValueConstants { + public static final long serialVersionUID = 20160822L; /* Implement the Warshall algorithm for transitive closure. */ public static Value Warshall(Value rel) diff --git a/tlatools/src/tlc2/output/EC.java b/tlatools/src/tlc2/output/EC.java index e33dfde840ffd1938f76c71e70d035a6223fd0d1..4d72b1b668913b246f3e226535f74889300eec70 100644 --- a/tlatools/src/tlc2/output/EC.java +++ b/tlatools/src/tlc2/output/EC.java @@ -106,6 +106,7 @@ public interface EC public static final int TLC_VALUE_ASSERT_FAILED = 2132; public static final int TLC_MODULE_VALUE_JAVA_METHOD_OVERRIDE = 2154; + public static final int TLC_MODULE_VALUE_JAVA_METHOD_OVERRIDE_LOADED = 2168; public static final int TLC_FP_NOT_IN_SET = 2133; public static final int TLC_FP_VALUE_ALREADY_ON_DISK = 2166; diff --git a/tlatools/src/tlc2/output/MP.java b/tlatools/src/tlc2/output/MP.java index 6a536599934979710f5d0caa343c0a596b9347a1..53fcde9518d41df722230dbf94147897825707b9 100644 --- a/tlatools/src/tlc2/output/MP.java +++ b/tlatools/src/tlc2/output/MP.java @@ -620,6 +620,9 @@ public class MP b.append("Attempted to apply the operator overridden by the Java method" + "\n%1%,\nbut it produced the following error:\n%2%"); break; + case EC.TLC_MODULE_VALUE_JAVA_METHOD_OVERRIDE_LOADED: + b.append("Loading %1% operator override from %2% with signature: %3%."); + break; case EC.TLC_FEATURE_UNSUPPORTED: b.append("%1%"); break; @@ -745,7 +748,7 @@ public class MP b.append("Finished in %1% at (").append(SDF.format(new Date())).append(")"); break; case EC.TLC_MODE_MC: - b.append("Running in Model-Checking mode."); + b.append("Running in Model-Checking mode with %1% worker%2%."); break; case EC.TLC_MODE_SIMU: b.append("Running Random Simulation with seed %1%."); diff --git a/tlatools/src/tlc2/tool/AbstractChecker.java b/tlatools/src/tlc2/tool/AbstractChecker.java index e3b086e564fb498870adc134be7708f240aa910d..a2bf27cfa0e99645b7084f2de566319ef775af3b 100644 --- a/tlatools/src/tlc2/tool/AbstractChecker.java +++ b/tlatools/src/tlc2/tool/AbstractChecker.java @@ -2,7 +2,6 @@ package tlc2.tool; import java.io.IOException; import java.util.Hashtable; -import java.util.concurrent.atomic.AtomicLong; import tla2sany.modanalyzer.SpecObj; import tla2sany.semantic.SemanticNode; @@ -16,7 +15,9 @@ import tlc2.tool.liveness.ILiveCheck; import tlc2.tool.liveness.LiveCheck; import tlc2.tool.liveness.Liveness; import tlc2.tool.liveness.NoOpLiveCheck; -import tlc2.util.IdThread; +import tlc2.util.DotStateWriter; +import tlc2.util.IStateWriter; +import tlc2.util.NoopStateWriter; import tlc2.util.ObjLongTable; import tlc2.util.StateWriter; import tlc2.util.statistics.BucketStatistics; @@ -30,7 +31,6 @@ import util.FilenameToStream; /** * The abstract checker * @author Simon Zambrovski - * @version $Id$ */ public abstract class AbstractChecker implements Cancelable { @@ -45,8 +45,6 @@ public abstract class AbstractChecker implements Cancelable protected static final boolean LIVENESS_STATS = Boolean.getBoolean(Liveness.class.getPackage().getName() + ".statistics"); - // SZ Mar 9, 2009: static modifier removed - protected AtomicLong numOfGenStates; protected TLCState predErrState; protected TLCState errState; protected boolean done; @@ -61,9 +59,9 @@ public abstract class AbstractChecker implements Cancelable public Action[] impliedActions; public Action[] impliedInits; public Action[] actions; - protected StateWriter allStateWriter; + protected final IStateWriter allStateWriter; protected boolean cancellationFlag; - private IdThread[] workers; + protected IWorker[] workers; protected final ILiveCheck liveCheck; protected final ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>() { @@ -85,7 +83,7 @@ public abstract class AbstractChecker implements Cancelable * @param resolver * @param spec - pre-built specification object (e.G. from calling SANY from the tool previously) */ - public AbstractChecker(String specFile, String configFile, String dumpFile, boolean deadlock, String fromChkpt, + public AbstractChecker(String specFile, String configFile, String dumpFile, final boolean asDot, boolean deadlock, String fromChkpt, boolean preprocess, FilenameToStream resolver, SpecObj spec) throws EvalException, IOException { this.cancellationFlag = false; @@ -106,7 +104,6 @@ public abstract class AbstractChecker implements Cancelable // moved to file utilities this.metadir = FileUtil.makeMetaDir(specDir, fromChkpt); - this.numOfGenStates = new AtomicLong(0); this.errState = null; this.predErrState = null; this.done = false; @@ -117,7 +114,20 @@ public abstract class AbstractChecker implements Cancelable // Initialize dumpFile: if (dumpFile != null) { - this.allStateWriter = new StateWriter(dumpFile); + if (dumpFile.startsWith("${metadir}")) { + // prefix dumpfile with the known value of this.metadir. There + // is no way to determine the actual value of this.metadir + // before TLC startup and thus it's impossible to make the + // dumpfile end up in the metadir if desired. + dumpFile = dumpFile.replace("${metadir}", this.metadir); + } + if (asDot) { + this.allStateWriter = new DotStateWriter(dumpFile); + } else { + this.allStateWriter = new StateWriter(dumpFile); + } + } else { + this.allStateWriter = new NoopStateWriter(); } this.impliedInits = this.tool.getImpliedInits(); // implied-inits to be checked @@ -136,7 +146,7 @@ public abstract class AbstractChecker implements Cancelable if (LIVENESS_TESTING_IMPLEMENTATION) { this.liveCheck = new AddAndCheckLiveCheck(this.tool, this.actions, this.metadir, stats); } else { - this.liveCheck = new LiveCheck(this.tool, this.actions, this.metadir, stats); + this.liveCheck = new LiveCheck(this.tool, this.actions, this.metadir, stats, dumpFile); } report("liveness checking initialized"); } else { @@ -149,11 +159,6 @@ public abstract class AbstractChecker implements Cancelable this.done = true; } - protected final void incNumOfGenStates(int n) - { - this.numOfGenStates.getAndAdd(n); - } - /** * Set the error state. * <strong>Note:</note> this method must be protected by lock @@ -342,7 +347,7 @@ public abstract class AbstractChecker implements Cancelable * @param checkIndex the check level (depth or level) * @return the array of initialized worker threads */ - protected abstract IdThread[] startWorkers(AbstractChecker checker, int checkIndex); + protected abstract IWorker[] startWorkers(AbstractChecker checker, int checkIndex); /** * Hook to run some work before entering the worker loop diff --git a/tlatools/src/tlc2/tool/CheckImpl.java b/tlatools/src/tlc2/tool/CheckImpl.java index 49337bf10cbd27d2a52b855318e547e420b9b961..38752e42b5f58bb86711ee85ebf6fb11cb47af4b 100644 --- a/tlatools/src/tlc2/tool/CheckImpl.java +++ b/tlatools/src/tlc2/tool/CheckImpl.java @@ -34,7 +34,7 @@ public abstract class CheckImpl extends ModelChecker { int depth, String fromChkpt, final FPSetConfiguration fpSetConfig) throws IOException { // SZ Feb 20, 2009: patched due to changes to ModelCheker - super(specFile, configFile, null, deadlock, fromChkpt, null, null, fpSetConfig); // no name resolver and no specobj + super(specFile, configFile, null, false, deadlock, fromChkpt, null, null, fpSetConfig); // no name resolver and no specobj this.depth = depth; this.curState = null; this.coverSet = FPSetFactory.getFPSet(); diff --git a/tlatools/src/tlc2/tool/DFIDModelChecker.java b/tlatools/src/tlc2/tool/DFIDModelChecker.java index 6c0c9109a91d02cd2aadad14166dd287439bc232..89d34ff9b5f57af7df1b259c416f7b8442566f6f 100644 --- a/tlatools/src/tlc2/tool/DFIDModelChecker.java +++ b/tlatools/src/tlc2/tool/DFIDModelChecker.java @@ -13,6 +13,7 @@ import tlc2.output.MP; import tlc2.tool.fp.dfid.FPIntSet; import tlc2.tool.fp.dfid.MemFPIntSet; import tlc2.tool.liveness.LiveException; +import tlc2.util.IStateWriter; import tlc2.util.IdThread; import tlc2.util.LongVec; import tlc2.util.ObjLongTable; @@ -36,17 +37,17 @@ public class DFIDModelChecker extends AbstractChecker public TLCState[] theInitStates; // the set of initial states public long[] theInitFPs; // ... and their fps public FPIntSet theFPSet; // the set of reachable states (SZ: note the type) - protected DFIDWorker[] workers; // the workers + private final AtomicLong numOfGenStates; /** * Constructor for running DFID * @param resolver */ - public DFIDModelChecker(String specFile, String configFile, String dumpFile, boolean deadlock, String fromChkpt, + public DFIDModelChecker(String specFile, String configFile, String dumpFile, boolean asDot, boolean deadlock, String fromChkpt, boolean preprocess, FilenameToStream resolver, SpecObj specObj) throws EvalException, IOException { // call the abstract constructor - super(specFile, configFile, dumpFile, deadlock, fromChkpt, preprocess, resolver, specObj); + super(specFile, configFile, dumpFile, asDot, deadlock, fromChkpt, preprocess, resolver, specObj); this.theInitStates = null; this.theInitFPs = null; @@ -55,6 +56,7 @@ public class DFIDModelChecker extends AbstractChecker // Initialize all the workers: this.workers = new DFIDWorker[TLCGlobals.getNumWorkers()]; + this.numOfGenStates = new AtomicLong(0); } /** @@ -85,7 +87,7 @@ public class DFIDModelChecker extends AbstractChecker this.tool.setCallStack(); try { - this.numOfGenStates = new AtomicLong(0); + this.numOfGenStates.set(0); this.doInit(true); } catch (Throwable e1) { @@ -173,7 +175,7 @@ public class DFIDModelChecker extends AbstractChecker // Check if we should stop at this level: for (int i = 0; i < this.workers.length; i++) { - if (this.workers[i].isTerminated()) + if (((DFIDWorker) this.workers[i]).isTerminated()) { terminated = true; break; @@ -182,7 +184,7 @@ public class DFIDModelChecker extends AbstractChecker boolean moreLevel = false; for (int i = 0; i < this.workers.length; i++) { - if (this.workers[i].hasMoreLevel()) + if (((DFIDWorker) this.workers[i]).hasMoreLevel()) { moreLevel = true; break; @@ -267,10 +269,7 @@ public class DFIDModelChecker extends AbstractChecker this.theInitFPs[idx++] = fp; // Write out the state if asked - if (this.allStateWriter != null) - { - this.allStateWriter.writeState(curState); - } + this.allStateWriter.writeState(curState); // build behavior graph for liveness checking if (this.checkLiveness) @@ -358,7 +357,7 @@ public class DFIDModelChecker extends AbstractChecker { StateVec nextStates = this.tool.getNextStates(this.actions[i], curState); int sz = nextStates.size(); - this.incNumOfGenStates(sz); + this.numOfGenStates.getAndAdd(sz); deadLocked = deadLocked && (sz == 0); for (int j = 0; j < sz; j++) @@ -390,10 +389,7 @@ public class DFIDModelChecker extends AbstractChecker allSuccNonLeaf = allSuccNonLeaf && !FPIntSet.isLeaf(status); // Write out the state when new and asked: - if (status == FPIntSet.NEW && this.allStateWriter != null) - { - this.allStateWriter.writeState(succState); - } + this.allStateWriter.writeState(curState, succState, status == FPIntSet.NEW); // Remember succState if it has not been completed at this level: if (!FPIntSet.isCompleted(status)) @@ -527,9 +523,10 @@ public class DFIDModelChecker extends AbstractChecker // Finally, add curState into the behavior graph for liveness checking: if (this.checkLiveness && isLeaf) { + final long curStateFP = curState.fingerPrint(); // Add a stuttering step for curState: - long curStateFP = curState.fingerPrint(); liveNextStates.put(curStateFP, curState); + this.allStateWriter.writeState(curState, curState, true, IStateWriter.Visualization.STUTTERING); // Add curState to the behavior graph: liveCheck.addNextState(curState, curStateFP, liveNextStates); @@ -584,7 +581,7 @@ public class DFIDModelChecker extends AbstractChecker private final void printTrace(int errorCode, String[] parameters, TLCState s1, TLCState s2) { - this.workers[IdThread.GetId()].printTrace(errorCode, parameters, s1, s2); + ((DFIDWorker) this.workers[IdThread.GetId()]).printTrace(errorCode, parameters, s1, s2); } /** @@ -612,7 +609,7 @@ public class DFIDModelChecker extends AbstractChecker { for (int i = 0; i < this.workers.length; i++) { - this.workers[i].setStop(code); + ((DFIDWorker) this.workers[i]).setStop(code); } } @@ -683,8 +680,7 @@ public class DFIDModelChecker extends AbstractChecker this.theFPSet.close(); if (this.checkLiveness) liveCheck.close(); - if (this.allStateWriter != null) - this.allStateWriter.close(); + this.allStateWriter.close(); // SZ Feb 23, 2009: // FileUtil.deleteDir(new File(this.metadir), success); FileUtil.deleteDir(this.metadir, success); @@ -721,7 +717,7 @@ public class DFIDModelChecker extends AbstractChecker /** * Create workers */ - protected IdThread[] startWorkers(AbstractChecker checker, int checkIndex) + protected IWorker[] startWorkers(AbstractChecker checker, int checkIndex) { for (int i = 0; i < this.workers.length; i++) { diff --git a/tlatools/src/tlc2/tool/DFIDWorker.java b/tlatools/src/tlc2/tool/DFIDWorker.java index 0af5b2babad23565111a8a2d56434c209fb5b565..bf2b06412942d1438fe32bdb4e33e6b5c17198cf 100644 --- a/tlatools/src/tlc2/tool/DFIDWorker.java +++ b/tlatools/src/tlc2/tool/DFIDWorker.java @@ -136,6 +136,9 @@ public class DFIDWorker extends IdThread implements IWorker { { StatePrinter.printState(this.stateStack[idx], ++idx); } + // the prefix printed by the while loop should end at s1. + assert s1.equals(this.stateStack[idx]); + StatePrinter.printState(s1, ++idx); if (s2 != null) { StatePrinter.printState(s2, idx+1); diff --git a/tlatools/src/tlc2/tool/IWorker.java b/tlatools/src/tlc2/tool/IWorker.java index f6dd6acd96aa52fddee93fff2ab9257885060697..b93bf7e5fdd17895ccb07dc4f826e5652a0ffd3f 100644 --- a/tlatools/src/tlc2/tool/IWorker.java +++ b/tlatools/src/tlc2/tool/IWorker.java @@ -1,11 +1,11 @@ package tlc2.tool; import tlc2.util.ObjLongTable; +import tlc2.value.Value; /** * A common interface for workers * @author Simon Zambrovski - * @version $Id$ */ public interface IWorker { @@ -14,4 +14,16 @@ public interface IWorker * used in the {@link AbstractChecker#reportCoverage(IWorker[])} */ public ObjLongTable getCounts(); + + // see Thread + + public void start(); + + public void join() throws InterruptedException; + + // see IdThread + + public Value getLocalValue(int idx); + + public void setLocalValue(int idx, Value val); } diff --git a/tlatools/src/tlc2/tool/ModelChecker.java b/tlatools/src/tlc2/tool/ModelChecker.java index 4d2d52f34f6ee5cb0ebbc4c7272c9f167da30561..e0b990f7bbbb5e963a3c6c92b3563fe61bc33671 100644 --- a/tlatools/src/tlc2/tool/ModelChecker.java +++ b/tlatools/src/tlc2/tool/ModelChecker.java @@ -6,7 +6,6 @@ package tlc2.tool; import java.io.IOException; -import java.util.concurrent.atomic.AtomicLong; import tla2sany.modanalyzer.SpecObj; import tla2sany.semantic.ExprNode; @@ -20,7 +19,7 @@ import tlc2.tool.fp.FPSetFactory; import tlc2.tool.liveness.LiveCheck; import tlc2.tool.queue.DiskStateQueue; import tlc2.tool.queue.IStateQueue; -import tlc2.util.IdThread; +import tlc2.util.IStateWriter; import tlc2.util.ObjLongTable; import tlc2.util.SetOfStates; import tlc2.util.statistics.BucketStatistics; @@ -43,12 +42,12 @@ public class ModelChecker extends AbstractChecker /** * If the state/ dir should be cleaned up after a successful model run */ - private static final boolean VETO_CLEANUP = Boolean.getBoolean(ModelChecker.class.getName() + ".vetoCleanup"); + public static final boolean VETO_CLEANUP = Boolean.getBoolean(ModelChecker.class.getName() + ".vetoCleanup"); + private long numberOfInitialStates; public FPSet theFPSet; // the set of reachable states (SZ: note the type) public IStateQueue theStateQueue; // the state queue public TLCTrace trace; // the trace file - protected Worker[] workers; // the workers // used to calculate the spm metric public long distinctStatesPerMinute, statesPerMinute = 0L; protected long oldNumOfGenStates, oldFPSetSize = 0L; @@ -73,11 +72,11 @@ public class ModelChecker extends AbstractChecker * @param specObj external SpecObj added to enable to work on existing specification * Modified on 6 Apr 2010 by Yuan Yu to add fpMemSize parameter. */ - public ModelChecker(String specFile, String configFile, String dumpFile, boolean deadlock, String fromChkpt, + public ModelChecker(String specFile, String configFile, String dumpFile, final boolean asDot, boolean deadlock, String fromChkpt, FilenameToStream resolver, SpecObj specObj, final FPSetConfiguration fpSetConfig) throws EvalException, IOException { // call the abstract constructor - super(specFile, configFile, dumpFile, deadlock, fromChkpt, true, resolver, specObj); + super(specFile, configFile, dumpFile, asDot, deadlock, fromChkpt, true, resolver, specObj); // SZ Feb 20, 2009: this is a selected alternative this.theStateQueue = new DiskStateQueue(this.metadir); @@ -162,7 +161,7 @@ public class ModelChecker extends AbstractChecker this.tool.setCallStack(); try { - this.numOfGenStates = new AtomicLong(0); + numberOfInitialStates = 0; // SZ Feb 23, 2009: ignore cancel on error reporting this.doInit(true); } catch (Throwable e1) @@ -176,13 +175,14 @@ public class ModelChecker extends AbstractChecker return; } - final String plural = (this.numOfGenStates.get() == 1) ? "" : "s"; - if (this.numOfGenStates.get() == this.theFPSet.size()) + long statesGenerated = getStatesGenerated(); + final String plural = (statesGenerated == 1) ? "" : "s"; + if (statesGenerated == this.theFPSet.size()) { - MP.printMessage(EC.TLC_INIT_GENERATED1, new String[] { String.valueOf(this.numOfGenStates), plural }); + MP.printMessage(EC.TLC_INIT_GENERATED1, new String[] { String.valueOf(statesGenerated), plural }); } else { - MP.printMessage(EC.TLC_INIT_GENERATED2, new String[] { String.valueOf(this.numOfGenStates), plural, + MP.printMessage(EC.TLC_INIT_GENERATED2, new String[] { String.valueOf(statesGenerated), plural, String.valueOf(this.theFPSet.size()) }); } } @@ -192,7 +192,7 @@ public class ModelChecker extends AbstractChecker if (this.actions.length == 0) { if (this.theStateQueue.isEmpty()) { - reportSuccess(this.theFPSet, this.numOfGenStates.get()); + reportSuccess(this.theFPSet, getStatesGenerated()); this.printSummary(true, startTime); } else { MP.printError(EC.TLC_STATES_AND_NO_NEXT_ACTION); @@ -222,7 +222,7 @@ public class ModelChecker extends AbstractChecker // and thus give the user some clues at what stage safety // checking is. MP.printMessage(EC.TLC_PROGRESS_STATS, new String[] { String.valueOf(this.trace.getLevelForReporting()), - String.valueOf(this.numOfGenStates), String.valueOf(theFPSet.size()), + String.valueOf(getStatesGenerated()), String.valueOf(theFPSet.size()), String.valueOf(this.theStateQueue.size()) }); report("checking liveness"); @@ -237,14 +237,14 @@ public class ModelChecker extends AbstractChecker // We get here because the checking has been completed. success = true; - reportSuccess(this.theFPSet, this.numOfGenStates.get()); + reportSuccess(this.theFPSet, getStatesGenerated()); } else if (this.keepCallStack) { // Replay the error with the error stack recorded: this.tool.setCallStack(); try { - this.doNext(this.predErrState, new ObjLongTable(10)); + this.doNext(this.predErrState, new ObjLongTable(10), new Worker(4223, this)); } catch (Throwable e) { // Assert.printStack(e); @@ -356,7 +356,7 @@ public class ModelChecker extends AbstractChecker * * This method is called from the workers on every step */ - public final boolean doNext(TLCState curState, ObjLongTable counts) throws Throwable + public final boolean doNext(TLCState curState, ObjLongTable counts, final Worker worker) throws Throwable { // SZ Feb 23, 2009: cancel the calculation if (this.cancellationFlag) @@ -397,7 +397,7 @@ public class ModelChecker extends AbstractChecker // removed, the functor pattern could be applied to doNext too. StateVec nextStates = this.tool.getNextStates(this.actions[i], curState); int sz = nextStates.size(); - this.incNumOfGenStates(sz); + worker.incrementStatesGenerated(sz); deadLocked = deadLocked && (sz == 0); SUCCESSORS: for (int j = 0; j < sz; j++) @@ -412,11 +412,7 @@ public class ModelChecker extends AbstractChecker MP.printError(EC.TLC_STATE_NOT_COMPLETELY_SPECIFIED_NEXT); this.trace.printTrace(curState, succState); this.theStateQueue.finishAll(); - - synchronized (this) - { - this.notify(); - } + this.notify(); } return true; } @@ -432,13 +428,10 @@ public class ModelChecker extends AbstractChecker { long fp = succState.fingerPrint(); seen = this.theFPSet.put(fp); + // Write out succState when needed: + this.allStateWriter.writeState(curState, succState, !seen); if (!seen) { - // Write out succState when needed: - if (this.allStateWriter != null) - { - this.allStateWriter.writeState(succState); - } // Write succState to trace only if it satisfies the // model constraints. Do not enqueue it yet, but wait // for implied actions and invariants to be checked. @@ -622,10 +615,13 @@ public class ModelChecker extends AbstractChecker // Finally, add curState into the behavior graph for liveness checking: if (this.checkLiveness) { + final long curStateFP = curState.fingerPrint(); + // Add the stuttering step: - long curStateFP = curState.fingerPrint(); liveNextStates.put(curStateFP, curState); - liveCheck.addNextState(curState, curStateFP, liveNextStates); + this.allStateWriter.writeState(curState, curState, true, IStateWriter.Visualization.STUTTERING); + + liveCheck.addNextState(curState, curStateFP, liveNextStates); // Poor man's version of a controller. If necessary, try e.g. // PID controller instead. @@ -789,12 +785,25 @@ public class ModelChecker extends AbstractChecker this.theFPSet.recover(); if (this.checkLiveness) { + // Liveness checking requires the initial states to be + // available as part of behaviors. Initial states are not part + // of the checkpoint, but we can easily recreate them. + // See bug #22 "Recovering from a checkpoint silently breaks + // liveness checking" at + // https://github.com/tlaplus/tlaplus/issues/22 + this.tool.getInitStates(new IStateFunctor() { + public Object addElement(TLCState state) { + liveCheck.addInitState(state, state.fingerPrint()); + return true; + } + }); liveCheck.recover(); } MP.printMessage(EC.TLC_CHECKPOINT_RECOVER_END, new String[] { String.valueOf(this.theFPSet.size()), String.valueOf(this.theStateQueue.size()) }); recovered = true; - this.numOfGenStates.set(this.theFPSet.size()); + // Not all states are true initial states, but who cares at this point? + numberOfInitialStates = this.theFPSet.size(); } return recovered; } @@ -803,14 +812,14 @@ public class ModelChecker extends AbstractChecker { this.theFPSet.close(); this.trace.close(); - if (this.checkLiveness) - liveCheck.close(); - if (this.allStateWriter != null) - this.allStateWriter.close(); - if (!VETO_CLEANUP) { - FileUtil.deleteDir(this.metadir, success); - } - } + if (this.checkLiveness) { + liveCheck.close(); + } + this.allStateWriter.close(); + if (!VETO_CLEANUP) { + FileUtil.deleteDir(this.metadir, success); + } + } public final void printSummary(boolean success, final long startTime) throws IOException { @@ -826,7 +835,7 @@ public class ModelChecker extends AbstractChecker printProgresStats(startTime); } - MP.printMessage(EC.TLC_STATS, new String[] { String.valueOf(this.numOfGenStates), + MP.printMessage(EC.TLC_STATS, new String[] { String.valueOf(getStatesGenerated()), String.valueOf(this.theFPSet.size()), String.valueOf(this.theStateQueue.size()) }); if (success) { @@ -847,14 +856,14 @@ public class ModelChecker extends AbstractChecker oldFPSetSize = 0; factor = (System.currentTimeMillis() - startTime) / 60000d; } - long l = numOfGenStates.get(); + final long l = getStatesGenerated(); statesPerMinute = (long) ((l - oldNumOfGenStates) / factor); oldNumOfGenStates = l; distinctStatesPerMinute = (long) ((fpSetSize - oldFPSetSize) / factor); oldFPSetSize = fpSetSize; MP.printMessage(EC.TLC_PROGRESS_STATS, new String[] { String.valueOf(this.trace.getLevelForReporting()), - String.valueOf(this.numOfGenStates), String.valueOf(fpSetSize), + String.valueOf(l), String.valueOf(fpSetSize), String.valueOf(this.theStateQueue.size()), String.valueOf(statesPerMinute), String.valueOf(distinctStatesPerMinute) }); } @@ -1058,7 +1067,7 @@ public class ModelChecker extends AbstractChecker /** * Spawn the worker threads */ - protected IdThread[] startWorkers(AbstractChecker checker, int checkIndex) + protected IWorker[] startWorkers(AbstractChecker checker, int checkIndex) { for (int i = 0; i < this.workers.length; i++) { @@ -1132,7 +1141,11 @@ public class ModelChecker extends AbstractChecker } public long getStatesGenerated() { - return numOfGenStates.get(); + long sum = numberOfInitialStates; + for (final IWorker worker : workers) { + sum += ((Worker) worker).getStatesGenerated(); + } + return sum; } /** @@ -1158,7 +1171,7 @@ public class ModelChecker extends AbstractChecker * @see tlc2.tool.IStateFunctor#addElement(tlc2.tool.TLCState) */ public Object addElement(final TLCState curState) { - incNumOfGenStates(1); + numberOfInitialStates++; // getInitStates() does not support aborting init state generation // once a violation has been found (that is why the return values of @@ -1182,9 +1195,7 @@ public class ModelChecker extends AbstractChecker long fp = curState.fingerPrint(); seen = theFPSet.put(fp); if (!seen) { - if (allStateWriter != null) { - allStateWriter.writeState(curState); - } + allStateWriter.writeState(curState); curState.uid = trace.writeState(fp); theStateQueue.enqueue(curState); diff --git a/tlatools/src/tlc2/tool/Spec.java b/tlatools/src/tlc2/tool/Spec.java index ab5c1f9a6f6f9572b3acce050e98ab85850ed466..b56452b5a3c5834219ba046ba63b2296c2e33953 100644 --- a/tlatools/src/tlc2/tool/Spec.java +++ b/tlatools/src/tlc2/tool/Spec.java @@ -8,6 +8,7 @@ package tlc2.tool; import java.io.Serializable; import java.lang.reflect.Method; import java.lang.reflect.Modifier; +import java.net.URL; import java.util.Enumeration; import java.util.HashSet; import java.util.Hashtable; @@ -17,6 +18,7 @@ import java.util.Set; import tla2sany.drivers.FrontEndException; import tla2sany.drivers.SANY; import tla2sany.modanalyzer.SpecObj; +import tla2sany.semantic.APSubstInNode; import tla2sany.semantic.AssumeNode; import tla2sany.semantic.DecimalNode; import tla2sany.semantic.ExprNode; @@ -36,11 +38,11 @@ import tla2sany.semantic.SemanticNode; import tla2sany.semantic.StringNode; import tla2sany.semantic.Subst; import tla2sany.semantic.SubstInNode; -import tla2sany.semantic.APSubstInNode; import tla2sany.semantic.SymbolNode; import tla2sany.semantic.TheoremNode; import tla2sany.semantic.ThmOrAssumpDefNode; import tlc2.TLCGlobals; +import tlc2.module.BuiltInModuleHelper; import tlc2.output.EC; import tlc2.output.MP; import tlc2.util.Context; @@ -94,10 +96,10 @@ public class Spec implements ValueConstants, ToolGlobals, Serializable protected String[] impliedActNames; // ... and their names protected ExprNode[] modelConstraints; // Model constraints protected ExprNode[] actionConstraints; // Action constraints - protected ExprNode[] assumptions; // Assumptions + protected ExprNode[] assumptions; // Assumpt ions protected boolean[] assumptionIsAxiom; // assumptionIsAxiom[i] is true iff assumptions[i] // is an AXIOM. Added 26 May 2010 by LL - private FilenameToStream resolver; // takes car of path to stream resoltion + private final FilenameToStream resolver; // takes care of path to stream resolution public Spec(String specDir, String file, FilenameToStream resolver) { @@ -109,7 +111,7 @@ public class Spec implements ValueConstants, ToolGlobals, Serializable this.moduleTbl = null; this.variablesNodes = null; this.defns = new Defns(); - this.tlaClass = new TLAClass("tlc2.module"); + this.tlaClass = new TLAClass("tlc2.module", resolver); this.initPredVec = new Vect(5); this.nextPred = null; this.temporals = null; @@ -362,6 +364,11 @@ public class Spec implements ValueConstants, ToolGlobals, Serializable boolean isConstant = (acnt == 0) && Modifier.isFinal(mdf); Value val = isConstant ? mv.apply(EmptyArgs, EvalControl.Clear) : mv; javaDefs.put(uname, val); + + if (!BuiltInModuleHelper.isBuiltInModule(userModule)) { + final URL resource = userModule.getResource(userModule.getSimpleName() + ".class"); + MP.printMessage(EC.TLC_MODULE_VALUE_JAVA_METHOD_OVERRIDE_LOADED, new String[] {uname.toString(), resource.toExternalForm(), mv.toString()}); + } } } // Adds/overrides new definitions: diff --git a/tlatools/src/tlc2/tool/TLAClass.java b/tlatools/src/tlc2/tool/TLAClass.java index 3f20e5eb442495857c407725493a94d4469fb74d..a5b2403d0654ec8ac3690126223dc7517c3b29c7 100644 --- a/tlatools/src/tlc2/tool/TLAClass.java +++ b/tlatools/src/tlc2/tool/TLAClass.java @@ -5,8 +5,13 @@ package tlc2.tool; +import java.io.File; +import java.net.URL; +import java.net.URLClassLoader; + import tlc2.output.EC; import util.Assert; +import util.FilenameToStream; /** * @@ -16,11 +21,13 @@ import util.Assert; public class TLAClass { /* Load a class from a file. */ - private String pkg; + private final String pkg; + private final FilenameToStream resolver; - public TLAClass(String pkg) + public TLAClass(String pkg, FilenameToStream resolver) { - if (pkg.length() != 0 && pkg.charAt(pkg.length() - 1) != '.') + this.resolver = resolver; + if (pkg.length() != 0 && pkg.charAt(pkg.length() - 1) != '.') { this.pkg = pkg + '.'; } else @@ -29,20 +36,47 @@ public class TLAClass } } - /** - * This method attempts to load the java class with the given name. - **/ + /** + * This method attempts to load the java class with the given name. + * + * Loading classes is done in three steps: + * + * <ul> + * <li>1) TLC's {@link FilenameToStream} resolver is used to locate a class + * file in the resolver's lookup path. Check {@link FilenameToStream}'s + * documentation on the lookup order. If a class file with name "name.class" + * can be found, it is loaded.</li> + * <li>2) With the unqualified name, we try to lookup the class in the + * regular VM's CLASSPATH.</li> + * <li>3) As a last resort, we try to load a class fully qualified with the + * package name given in {@link TLAClass#pkg}.</li> + * </ul> + * <p> + * If no class could be loaded, <code>null</code> is returned. + **/ public synchronized Class loadClass(String name) { Class cl = null; try { - try - { - cl = Class.forName(name); - } catch (Exception e) - { /*SKIP*/ - } + try { + final File module = resolver.resolve(name + ".class", false); + if (module != null && module.getAbsoluteFile() != null) { + final URL url = module.getAbsoluteFile().getParentFile().toURI().toURL(); + cl = new URLClassLoader(new URL[] {url}).loadClass(name); + } + } catch (Exception ignored1) { + /*SKIP*/ + } finally { + if (cl == null) { + try + { + cl = Class.forName(name); + } catch (Exception e) + { /*SKIP*/ + } + } + } if (cl == null) { try @@ -59,14 +93,15 @@ public class TLAClass } return cl; } - - public static void main(String argv[]) - { - TLAClass tc = new TLAClass("tlc2.module"); - Class c = tc.loadClass("Strings"); // must set CLASSPATH correctly - System.err.println("c = " + c); - // Class c1 = tc.loadClass("Class"); - // System.err.println("c1 = " + c1); - } - + +// +// public static void main(String argv[]) +// { +// TLAClass tc = new TLAClass("tlc2.module"); +// Class c = tc.loadClass("Strings"); // must set CLASSPATH correctly +// System.err.println("c = " + c); +// // Class c1 = tc.loadClass("Class"); +// // System.err.println("c1 = " + c1); +// } +// } diff --git a/tlatools/src/tlc2/tool/TLCStateMut.java b/tlatools/src/tlc2/tool/TLCStateMut.java index a6705ec418ace02a9eaed62b54aaf30a96b90cbb..ba6d9f7ba4a336b8f5a0b84341988bc0804860d6 100644 --- a/tlatools/src/tlc2/tool/TLCStateMut.java +++ b/tlatools/src/tlc2/tool/TLCStateMut.java @@ -156,17 +156,33 @@ public final class TLCStateMut extends TLCState implements Cloneable, Serializab Value[] minVals = this.values; if (perms != null) { Value[] vals = new Value[sz]; - // Find the "smallest" state under the symmetry permutations: - for (int i = 0; i < perms.length; i++) { + // Find the "smallest" state under the symmetry permutations. + // The following for loop converges to the smallest state under + // symmetry by looping over all permutations applying each. If the + // outcome turns out to be smaller than the current smallest, it + // replaces it. Once all permutations (perms) have been seen, we + // know we have found the smallest state. + NEXT_PERM: for (int i = 0; i < perms.length; i++) { int cmp = 0; // For each value in values succinctly permute the current value - // and compare it to minVals. + // and compare it to its corresponding minValue in minVals. for (int j = 0; j < sz; j++) { vals[j] = this.values[j].permute(perms[i]); if (cmp == 0) { - // Compare the permuted values to the minVals unless an - // earlier compare has found a different already. + // Only compare unless an earlier compare has found a + // difference already (if a difference has been found + // earlier, still permute the remaining values of the + // state to fully permute all state values). cmp = vals[j].compareTo(minVals[j]); + if (cmp > 0) { + // When cmp evaluates to >0, all subsequent + // applications of perms[i] for the remaining values + // won't make the resulting vals[] smaller than + // minVals. Thus, exit preemptively from the loop + // over vals. This works because perms is the cross + // product of all symmetry sets. + continue NEXT_PERM; + } } } // cmp < 0 means the current state is part of a symmetry diff --git a/tlatools/src/tlc2/tool/TLCStateMutSource.java b/tlatools/src/tlc2/tool/TLCStateMutSource.java index 295fcd2e492f86d8688e244775699f73aa259d5e..e7bb54f62dfb608aa5f38ddd3155066440617eea 100644 --- a/tlatools/src/tlc2/tool/TLCStateMutSource.java +++ b/tlatools/src/tlc2/tool/TLCStateMutSource.java @@ -171,6 +171,9 @@ implements Cloneable, Serializable { * Since the values in this state can be shared by multiple threads * via the state queue. They have to be normalized before adding to * the state queue. We do that here. + * + * @see TLCStateMut#fingerPrint() for a commented version of this + * implementation. */ public final long fingerPrint() { int sz = this.values.length; diff --git a/tlatools/src/tlc2/tool/Tool.java b/tlatools/src/tlc2/tool/Tool.java index 8c7992bf4ba8884acb688d8ce89e230591788dfb..bb928bd53e6048cead230b69212cbb24357b8a78 100644 --- a/tlatools/src/tlc2/tool/Tool.java +++ b/tlatools/src/tlc2/tool/Tool.java @@ -1913,12 +1913,7 @@ public class Tool Assert.fail("Attempted to evaluate an expression of form S \\subseteq T," + " but S was not enumerable.\n" + expr); } - ValueEnumeration Enum = ((Enumerable)arg1).elements(); - Value elem; - while ((elem = Enum.nextElement()) != null) { - if (!arg2.member(elem)) return ValFalse; - } - return ValTrue; + return ((Enumerable) arg1).isSubsetEq(arg2); } case OPCODE_in: { diff --git a/tlatools/src/tlc2/tool/Worker.java b/tlatools/src/tlc2/tool/Worker.java index f365a11ab576c7184850efdf9bb9743aa9fbb8de..0772c38f14695702bd80769a04c0e11a19807c1c 100644 --- a/tlatools/src/tlc2/tool/Worker.java +++ b/tlatools/src/tlc2/tool/Worker.java @@ -21,6 +21,7 @@ public class Worker extends IdThread implements IWorker { private ModelChecker tlc; private IStateQueue squeue; private ObjLongTable astCounts; + private long statesGenerated; // SZ Feb 20, 2009: changed due to super type introduction public Worker(int id, AbstractChecker tlc) { @@ -53,7 +54,7 @@ public class Worker extends IdThread implements IWorker { this.squeue.finishAll(); return; } - if (this.tlc.doNext(curState, this.astCounts)) + if (this.tlc.doNext(curState, this.astCounts, this)) return; } } catch (Throwable e) { @@ -70,4 +71,12 @@ public class Worker extends IdThread implements IWorker { return; } } + + void incrementStatesGenerated(long l) { + this.statesGenerated += l; + } + + long getStatesGenerated() { + return this.statesGenerated; + } } diff --git a/tlatools/src/tlc2/tool/distributed/DistApp.java b/tlatools/src/tlc2/tool/distributed/DistApp.java index da2df940491f058d6df1803f87466c8574c95b1e..2f02277a4f47f4c4d5f78443b23307e2870e5bd5 100644 --- a/tlatools/src/tlc2/tool/distributed/DistApp.java +++ b/tlatools/src/tlc2/tool/distributed/DistApp.java @@ -7,6 +7,7 @@ package tlc2.tool.distributed; import java.rmi.RemoteException; +import tlc2.tool.IStateFunctor; import tlc2.tool.TLCState; import tlc2.tool.TLCStateInfo; import tlc2.tool.TraceApp; @@ -14,7 +15,6 @@ import tlc2.tool.WorkerException; /** * @author Simon Zambrovski - * @version $Id$ */ public abstract class DistApp implements TraceApp { @@ -35,7 +35,7 @@ public abstract class DistApp implements TraceApp { // Returns a list of initial states. // TLCServer - public abstract TLCState[] getInitStates() throws WorkerException; + public abstract void getInitStates(IStateFunctor functor); // Returns a list of successor states of the state s. / // TLCServer diff --git a/tlatools/src/tlc2/tool/distributed/TLCApp.java b/tlatools/src/tlc2/tool/distributed/TLCApp.java index 84c45fad11a51057e1ce1c46cf0397e32de8411c..3f26330fa31a71fabd3713eac3793604461fbc9e 100644 --- a/tlatools/src/tlc2/tool/distributed/TLCApp.java +++ b/tlatools/src/tlc2/tool/distributed/TLCApp.java @@ -2,16 +2,21 @@ // Portions Copyright (c) 2003 Microsoft Corporation. All rights reserved. // Last modified on Mon 30 Apr 2007 at 15:29:57 PST by lamport // modified on Fri Jul 27 10:47:59 PDT 2001 by yuanyu - package tlc2.tool.distributed; import java.io.File; import java.io.IOException; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; import model.InJarFilenameToStream; import model.ModelInJar; +import tla2sany.modanalyzer.ParseUnit; +import tla2sany.modanalyzer.SpecObj; import tlc2.TLCGlobals; import tlc2.tool.Action; +import tlc2.tool.IStateFunctor; import tlc2.tool.StateVec; import tlc2.tool.TLCState; import tlc2.tool.TLCStateInfo; @@ -26,12 +31,10 @@ import util.FilenameToStream; import util.ToolIO; import util.UniqueString; -/** - * @version $Id$ - */ public class TLCApp extends DistApp { private String config; + private final SpecObj specObj; /* Constructors */ public TLCApp(String specFile, String configFile, boolean deadlock, @@ -67,12 +70,17 @@ public class TLCApp extends DistApp { // TODO NameResolver this.tool = new Tool(specDir, specFile, configFile, fts); // SZ Feb 24, 2009: setup the user directory - ToolIO.setUserDir(specDir); + if (ToolIO.getUserDir() == null) { + // First one to set specDir wins. This should only ever be the case + // With DistributedTLCTestCase which runs TLCServer and TLCWorker in + // a single VM. + ToolIO.setUserDir(specDir); + } this.checkDeadlock = deadlock.booleanValue(); this.preprocess = preprocess.booleanValue(); // SZ Feb 20, 2009: added null reference to SpecObj - this.tool.init(this.preprocess, null); + specObj = this.tool.init(this.preprocess, null); this.impliedInits = this.tool.getImpliedInits(); this.invariants = this.tool.getInvariants(); this.impliedActions = this.tool.getImpliedActions(); @@ -139,23 +147,25 @@ public class TLCApp extends DistApp { public final boolean canRecover() { return this.fromChkpt != null; } + + public List<File> getModuleFiles() { + final List<File> result = new ArrayList<File>(); + + final Enumeration<ParseUnit> parseUnitContext = this.specObj.parseUnitContext.elements(); + final FilenameToStream resolver = new InJarFilenameToStream(ModelInJar.PATH); + while (parseUnitContext.hasMoreElements()) { + ParseUnit pu = (ParseUnit) parseUnitContext.nextElement(); + File resolve = resolver.resolve(pu.getFileName(), false); + result.add(resolve); + } + return result; + } /* (non-Javadoc) - * @see tlc2.tool.distributed.DistApp#getInitStates() + * @see tlc2.tool.distributed.DistApp#getInitStates(tlc2.tool.IStateFunctor) */ - public final TLCState[] getInitStates() throws WorkerException { - StateVec theInitStates = this.tool.getInitStates(); - TLCState[] res = new TLCState[theInitStates.size()]; - for (int i = 0; i < theInitStates.size(); i++) { - TLCState curState = theInitStates.elementAt(i); - if (!this.tool.isGoodState(curState)) { - String msg = "Error: Initial state is not completely specified by the" - + " initial predicate."; - throw new WorkerException(msg, curState, null, false); - } - res[i] = (TLCState) curState; - } - return res; + public final void getInitStates(IStateFunctor functor) { + this.tool.getInitStates(functor); } /* (non-Javadoc) @@ -183,6 +193,10 @@ public class TLCApp extends DistApp { + " the next-state action."; throw new WorkerException(msg, curState, succState, false); } + // isInModel, isInAction and invariant and implied action checks are + // carried out later in TLCWorker#getNextStates(..) and below in + // checkState(State, State) when it is know that the states are new + // (after the call to the fingerprint set). res[i] = succState; } return res; @@ -509,6 +523,7 @@ public class TLCApp extends DistApp { // indicator to check the in-jar model/ folder for a spec. // If a spec is found, use it instead. if (ModelInJar.hasModel()) { + ModelInJar.loadProperties(); // Reads result.mail.address and so on. TLCGlobals.tool = true; // always run in Tool mode (to parse output by Toolbox later) TLCGlobals.chkptDuration = 0; // never use checkpoints with distributed TLC (highly inefficient) FP64.Init(fpIndex); diff --git a/tlatools/src/tlc2/tool/distributed/TLCServer.java b/tlatools/src/tlc2/tool/distributed/TLCServer.java index 95e65ac587eb597b2d2cf735885861a80774d975..8c6070978fc97bca8d23e9c52592139a879fa336 100644 --- a/tlatools/src/tlc2/tool/distributed/TLCServer.java +++ b/tlatools/src/tlc2/tool/distributed/TLCServer.java @@ -10,31 +10,36 @@ import java.io.FileInputStream; import java.io.IOException; import java.net.InetAddress; import java.net.URI; +import java.rmi.AccessException; +import java.rmi.ConnectException; import java.rmi.NoSuchObjectException; import java.rmi.NotBoundException; import java.rmi.RemoteException; +import java.rmi.ServerException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; +import java.util.ArrayList; import java.util.ConcurrentModificationException; +import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; -import java.util.SortedSet; -import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicLong; +import model.InJarFilenameToStream; +import model.ModelInJar; +import tlc2.TLC; import tlc2.TLCGlobals; import tlc2.output.EC; import tlc2.output.MP; import tlc2.tool.EvalException; +import tlc2.tool.IStateFunctor; import tlc2.tool.ModelChecker; import tlc2.tool.TLCState; import tlc2.tool.TLCTrace; -import tlc2.tool.WorkerException; import tlc2.tool.distributed.fp.FPSetManager; import tlc2.tool.distributed.fp.FPSetRMI; import tlc2.tool.distributed.fp.IFPSetManager; @@ -51,13 +56,21 @@ import tlc2.util.FP64; import util.Assert; import util.FileUtil; import util.MailSender; -import util.SimpleFilenameToStream; import util.UniqueString; @SuppressWarnings("serial") public class TLCServer extends UnicastRemoteObject implements TLCServerRMI, InternRMI { + /** + * Name by which {@link FPSetRMI} lookup the {@link TLCServer} (master). + */ + public static final String SERVER_NAME = "TLCServer"; + /** + * Name by which {@link TLCWorker} lookup the {@link TLCServer} (master). + */ + public static final String SERVER_WORKER_NAME = SERVER_NAME + "WORKER"; + /** * Prefix master and worker heavy workload threads with this prefix and an incrementing counter to * make the threads identifiable in jmx2munin statistics, which uses simple string matching. @@ -275,7 +288,7 @@ public class TLCServer extends UnicastRemoteObject implements TLCServerRMI, * leaving the TimerTask running. This occurs by design if the TimerTask * has already been marked for execution) * - * @see https://bugzilla.tlaplus.net/show_bug.cgi?id=216 + * @see Bug #216 in general/bugzilla/index.html */ if (worker != null) { MP.printMessage(EC.TLC_DISTRIBUTED_WORKER_DEREGISTERED, thread.getUri().toString()); @@ -361,40 +374,17 @@ public class TLCServer extends UnicastRemoteObject implements TLCServerRMI, } /** - * @throws Exception + * @throws Throwable */ - private final Set<Long> doInit() throws Exception { - final SortedSet<Long> set = new TreeSet<Long>(); - TLCState curState = null; - try { - TLCState[] initStates = work.getInitStates(); - for (int i = 0; i < initStates.length; i++) { - curState = initStates[i]; - boolean inConstraints = work.isInModel(curState); - boolean seen = false; - if (inConstraints) { - long fp = curState.fingerPrint(); - seen = !set.add(fp); - if (!seen) { - initStates[i].uid = trace.writeState(fp); - stateQueue.enqueue(initStates[i]); - } - } - if (!inConstraints || !seen) { - work.checkState(null, curState); - } - } - } catch (Exception e) { - this.errState = curState; - this.keepCallStack = true; - if (e instanceof WorkerException) { - this.errState = ((WorkerException) e).state2; - this.keepCallStack = ((WorkerException) e).keepCallStack; - } - this.done = true; - throw e; + private final void doInit() throws Throwable { + final DoInitFunctor functor = new DoInitFunctor(); + work.getInitStates(functor); + + // Iff one of the init states' checks violates any properties, the + // functor will record it. + if (functor.e != null) { + throw functor.e; } - return set; } /** @@ -416,6 +406,8 @@ public class TLCServer extends UnicastRemoteObject implements TLCServerRMI, * @throws NotBoundException */ protected void modelCheck() throws IOException, InterruptedException, NotBoundException { + final long startTime = System.currentTimeMillis(); + /* * Before we initialize the server, we check if recovery is requested */ @@ -428,18 +420,27 @@ public class TLCServer extends UnicastRemoteObject implements TLCServerRMI, String.valueOf(stateQueue.size())}); recovered = true; } + + // Create the central naming authority that is used by _all_ nodes + String hostname = InetAddress.getLocalHost().getHostName(); + Registry rg = LocateRegistry.createRegistry(Port); + rg.rebind(SERVER_NAME, this); + + // First register TLCSERVER with RMI and only then wait for all FPSets + // to become registered. This only waits if we use distributed + // fingerprint set (FPSet) servers which have to partition the + // distributed hash table (fingerprint space) prior to starting model + // checking. + waitForFPSetManager(); /* * Start initializing the server by calculating the init state(s) */ - - //TODO if init states is huge, this might go OOM - Set<Long> initFPs = new TreeSet<Long>(); if (!recovered) { // Initialize with the initial states: try { MP.printMessage(EC.TLC_COMPUTING_INIT); - initFPs = doInit(); + doInit(); MP.printMessage(EC.TLC_INIT_GENERATED1, new String[] { String.valueOf(stateQueue.size()), "(s)" }); } catch (Throwable e) { @@ -456,52 +457,51 @@ public class TLCServer extends UnicastRemoteObject implements TLCServerRMI, MP.printError(EC.TLC_FEATURE_UNSUPPORTED, "TLCSet & TLCGet operators not supported by distributed TLC."); } else { - // LL modified error message on 7 April 2012 - MP.printError(EC.GENERAL, "initializing the server", e); // LL changed call 7 April 2012 - if (errState != null) { - MP.printMessage(EC.TLC_INITIAL_STATE, "While working on the initial state: " + errState); + String msg = e.getMessage(); + if (msg == null) { + msg = e.toString(); + } + if (!this.hasNoErrors()) { + MP.printError(EC.TLC_INITIAL_STATE, new String[] { msg, this.errState.toString() }); + } else { + MP.printError(EC.GENERAL, msg); } // We redo the work on the error state, recording the call // stack. work.setCallStack(); try { - initFPs = doInit(); + doInit(); } catch (Throwable e1) { - MP.printError(EC.GENERAL, "evaluating the nested" // LL changed call 7 April 2012 - + "\nexpressions at the following positions:\n" - + work.printCallStack(), e); + // Assert.printStack(e); + MP.printError(EC.TLC_NESTED_EXPRESSION, work.printCallStack()); } } } } if (done) { + printSummary(1, 0, stateQueue.size(), fpSetManager.size(), false); + MP.printMessage(EC.TLC_FINISHED, + TLC.convertRuntimeToHumanReadable(System.currentTimeMillis() - startTime)); + es.shutdown(); // clean up before exit: close(false); return; } - - // Create the central naming authority that is used by _all_ nodes - String hostname = InetAddress.getLocalHost().getHostName(); - Registry rg = LocateRegistry.createRegistry(Port); - rg.rebind("TLCServer", this); - MP.printMessage(EC.TLC_DISTRIBUTED_SERVER_RUNNING, hostname); - - // First register TLCSERVER with RMI and only then wait for all FPSets - // to become registered. This only waits if we use distributed - // fingerprint set (FPSet) servers which have to partition the - // distributed hash table (fingerprint space) prior to starting model - // checking. - waitForFPSetManager(); - - // Add the init state(s) to the local FPSet or distributed servers - for (Long fp : initFPs) { - fpSetManager.put(fp); - } + // Init states have been computed successfully which marks the point in + // time where workers can start generating and exploring next states. + rg.rebind(SERVER_WORKER_NAME, this); + /* * This marks the end of the master and FPSet server initialization. * Model checking can start now. + * Print the startup message now, because the Toolbox is supposed to + * show that it's waiting for workers to connect. If the messaage + * gets printed earlier, it's replaced by EC.TLC_INIT_GENERATED1 + * right away and the user can consequently miss that TLCServer is + * running. */ + MP.printMessage(EC.TLC_DISTRIBUTED_SERVER_RUNNING, hostname); // Model checking results to be collected after model checking has finished long oldNumOfGenStates = 0; @@ -575,6 +575,14 @@ public class TLCServer extends UnicastRemoteObject implements TLCServerRMI, } catch (NoSuchObjectException e) { // worker might have been lost in the meantime MP.printWarning(EC.GENERAL, "Ignoring attempt to exit dead worker"); + } catch (ConnectException e) { + // worker might have been lost in the meantime + MP.printWarning(EC.GENERAL, "Ignoring attempt to exit dead worker"); + } catch (ServerException e) { + // worker might have been lost in the meantime + MP.printWarning(EC.GENERAL, "Ignoring attempt to exit dead worker"); + } finally { + threadsToWorkers.remove(thread); } } @@ -604,14 +612,16 @@ public class TLCServer extends UnicastRemoteObject implements TLCServerRMI, // Finally print the results printSummary(level, statesGenerated, statesLeftInQueue, finalNumberOfDistinctStates, hasNoErrors()); - MP.printMessage(EC.TLC_FINISHED); + MP.printMessage(EC.TLC_FINISHED, + TLC.convertRuntimeToHumanReadable(System.currentTimeMillis() - startTime)); MP.flush(); // Close trace and (distributed) _FPSet_ servers! close(hasNoErrors()); // dispose RMI leftovers - rg.unbind("TLCServer"); + rg.unbind(SERVER_WORKER_NAME); + rg.unbind(SERVER_NAME); UnicastRemoteObject.unexportObject(this, false); } @@ -679,15 +689,23 @@ public class TLCServer extends UnicastRemoteObject implements TLCServerRMI, } } - public static void main(String argv[]) { - MP.printMessage(EC.GENERAL, "TLC Server " + TLCGlobals.versionOfTLC); + public static void main(String[] argv) { + // Print version before MailSender has been created. Oh well, it misses + // the version output. + MP.printMessage(EC.TLC_VERSION, "TLC Server " + TLCGlobals.versionOfTLC); TLCStandardMBean tlcServerMXWrapper = TLCStandardMBean.getNullTLCStandardMBean(); MailSender mail = null; TLCServer server = null; + TLCApp app = null; try { TLCGlobals.setNumWorkers(0); - final TLCApp app = TLCApp.create(argv); - mail = new MailSender(app.getFileName()); + // Create MS before TLCApp to capture the parsing output. + mail = new MailSender(); + + app = TLCApp.create(argv); + mail.setModelName(System.getProperty(MailSender.MODEL_NAME, app.getFileName())); + mail.setSpecName(System.getProperty(MailSender.SPEC_NAME, app.getFileName())); + if (expectedFPSetCount > 0) { server = new DistributedFPSetTLCServer(app, expectedFPSetCount); } else { @@ -716,10 +734,17 @@ public class TLCServer extends UnicastRemoteObject implements TLCServerRMI, } } } finally { + if (!server.es.isShutdown()) { + server.es.shutdownNow(); + } tlcServerMXWrapper.unregister(); // When creation of TLCApp fails, we get here as well. if (mail != null) { - boolean send = mail.send(); + List<File> files = new ArrayList<File>(); + if (app != null) { + files = app.getModuleFiles(); + } + boolean send = mail.send(files); // In case sending the mail has failed we treat this as an error. // This is needed when TLC runs on another host and email is // the only means for the user to get access to the model checking @@ -729,6 +754,7 @@ public class TLCServer extends UnicastRemoteObject implements TLCServerRMI, // finished. If we were to shutdown the node even when sending out // the email has failed, the result would be lost. if (!send) { + MP.printMessage(EC.GENERAL, "Sending result mail failed."); System.exit(1); } } @@ -783,7 +809,7 @@ public class TLCServer extends UnicastRemoteObject implements TLCServerRMI, String name = new File(file).getName(); // Resolve all - File f = new SimpleFilenameToStream().resolve(name); + File f = new InJarFilenameToStream(ModelInJar.PATH).resolve(name); return read(f); } @@ -823,6 +849,41 @@ public class TLCServer extends UnicastRemoteObject implements TLCServerRMI, return buffer; } + private class DoInitFunctor implements IStateFunctor { + + private Throwable e; + + /* (non-Javadoc) + * @see tlc2.tool.IStateFunctor#addElement(tlc2.tool.TLCState) + */ + public Object addElement(final TLCState curState) { + if (e != null) { + return curState; + } + + try { + final boolean inConstraints = work.isInModel(curState); + boolean seen = false; + if (inConstraints) { + long fp = curState.fingerPrint(); + seen = fpSetManager.put(fp); + if (!seen) { + curState.uid = trace.writeState(fp); + stateQueue.enqueue(curState); + } + } + if (!inConstraints || !seen) { + work.checkState(null, curState); + } + } catch (Exception e) { + if (setErrState(curState, true)) { + this.e = e; + } + } + + return curState; + } + } /** * Tries to exit all connected workers @@ -839,6 +900,24 @@ public class TLCServer extends UnicastRemoteObject implements TLCServerRMI, * @see java.lang.Runnable#run() */ public void run() { + if (server.threadsToWorkers.isEmpty()) { + // Nothing to be done here. + return; + } + + try { + // No need to attempt to exit workers if the server itself + // isn't registered any longer. It won't be able to connect to + // workers anyway. + LocateRegistry.getRegistry(Port).lookup(SERVER_NAME); + } catch (AccessException e1) { + return; + } catch (RemoteException e1) { + return; + } catch (NotBoundException e1) { + return; + } + for (TLCWorkerRMI worker : server.threadsToWorkers.values()) { try { worker.exit(); diff --git a/tlatools/src/tlc2/tool/distributed/TLCServerThread.java b/tlatools/src/tlc2/tool/distributed/TLCServerThread.java index fa66f1b53e44cfa5decaf5d2f5cdc8a9bbeab0f7..226ab2592043a4240949b3987562ed59fe4bc4ac 100644 --- a/tlatools/src/tlc2/tool/distributed/TLCServerThread.java +++ b/tlatools/src/tlc2/tool/distributed/TLCServerThread.java @@ -255,13 +255,14 @@ public class TLCServerThread extends IdThread { state2 = ((WorkerException) e).state2; } if (this.tlcServer.setErrState(state1, true)) { - MP.printError(EC.GENERAL, e); if (state1 != null) { try { this.tlcServer.trace.printTrace(state1, state2); } catch (Exception e1) { MP.printError(EC.GENERAL, e1); } + } else { + MP.printError(EC.GENERAL, e); } stateQueue.finishAll(); synchronized (this.tlcServer) { @@ -318,9 +319,9 @@ public class TLCServerThread extends IdThread { keepAliveTimer.cancel(); // This call has to be idempotent, otherwise we see bugs as in - // https://bugzilla.tlaplus.net/show_bug.cgi?id=234 + // Bug #234 in general/bugzilla/index.html // - // Prevent second invocation of worker de-registration which stamps from + // Prevent second invocation of worker de-registration which stems from // a race condition between the TimerTask (that periodically checks // server aliveness) and the exception handling that kicks in when the // run() method catches an RMI exception. diff --git a/tlatools/src/tlc2/tool/distributed/TLCWorker.java b/tlatools/src/tlc2/tool/distributed/TLCWorker.java index 14d486ffd417a279f279da0bf9d770467c05d3ea..43c17683c2a2e662c2d54ac93d9189c33d455578 100644 --- a/tlatools/src/tlc2/tool/distributed/TLCWorker.java +++ b/tlatools/src/tlc2/tool/distributed/TLCWorker.java @@ -14,6 +14,7 @@ import java.net.UnknownHostException; import java.rmi.ConnectException; import java.rmi.Naming; import java.rmi.NoSuchObjectException; +import java.rmi.NotBoundException; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.util.Date; @@ -305,8 +306,8 @@ public class TLCWorker extends UnicastRemoteObject implements TLCWorkerRMI { cdl = new CountDownLatch(numCores); try { - String url = "//" + serverName + ":" + TLCServer.Port - + "/TLCServer"; + final String url = "//" + serverName + ":" + TLCServer.Port + + "/" + TLCServer.SERVER_WORKER_NAME; // try to repeatedly connect to the server until it becomes available int i = 1; @@ -331,7 +332,30 @@ public class TLCWorker extends UnicastRemoteObject implements TLCWorkerRMI { // how to handle throw e; } + } catch (NotBoundException e) { + // Registry is available but no object by "TLCServer". This + // happens when TLCServer makes it registry available but + // has't registered itself yet. + long sleep = (long) Math.sqrt(i); + ToolIO.out.println("Server " + serverName + " reachable but not ready yet, sleeping " + sleep + + "s for server to come online..."); + Thread.sleep(sleep * 1000); + i *= 2; } + // It is vital to *not* catch NoRouteToHostException or + // UnknownHostException. TLCWorker is supposed to terminate when + // either of the two is thrown. The rational is that the while + // loop could be going while TLCServer is busy generating a huge + // set of init states. Close to completion, it finds a violating + // state and terminates. In case of cloud distributed TLC + // (see CloudDistributedTLCJob), the host/vm running the master + // immediately shuts down. That is when the NoRouteToHostException + // will make sure that the set of TLCWorkers will terminate the VM + // and shutdown the vm too. There is obviously the chance that + // another vm gets the IP of the former master assigned and boots + // up during a sleep period above. Even though I do not know what + // holding period IP address have across the various cloud providers, + // I find this rather unlikely. } long irredPoly = server.getIrredPolyForFP(); diff --git a/tlatools/src/tlc2/tool/distributed/fp/DistributedFPSet.java b/tlatools/src/tlc2/tool/distributed/fp/DistributedFPSet.java index 9017beb6e4ed1f6058deb58c4803838a6346c8d5..4653408b73fa68e3cec3f86a4c1542017fac7774 100644 --- a/tlatools/src/tlc2/tool/distributed/fp/DistributedFPSet.java +++ b/tlatools/src/tlc2/tool/distributed/fp/DistributedFPSet.java @@ -115,9 +115,11 @@ public class DistributedFPSet { private static TLCServerRMI lookupTLCServer(final String serverName) throws MalformedURLException, RemoteException, NotBoundException, InterruptedException { String url = "//" + serverName + ":" + TLCServer.Port - + "/TLCServer"; + + "/" + TLCServer.SERVER_NAME; - // try to repeatedly connect to the server until it becomes available + // try to repeatedly connect to the server until it becomes available. + // see similar while loop in + // tlc2.tool.distributed.TLCWorker.main(String[]) for more comments. int i = 1; while(true) { try { @@ -138,6 +140,15 @@ public class DistributedFPSet { // how to handle throw e; } + } catch (NotBoundException e) { + // Registry is available but no object by "TLCServer". This + // happens when TLCServer makes it registry available but + // has't registered itself yet. + long sleep = (long) Math.sqrt(i); + ToolIO.out.println("Server " + serverName + " reachable but not ready yet, sleeping " + sleep + + "s for server to come online..."); + Thread.sleep(sleep * 1000); + i *= 2; } } } diff --git a/tlatools/src/tlc2/tool/distributed/fp/DynamicFPSetManager.java b/tlatools/src/tlc2/tool/distributed/fp/DynamicFPSetManager.java index e37d6334a5c2aa7d5c88f9ef3d7fba8ea2c25ad0..af1f3d10a398a7b798bc1ebe95f33c39fa5fe2a0 100644 --- a/tlatools/src/tlc2/tool/distributed/fp/DynamicFPSetManager.java +++ b/tlatools/src/tlc2/tool/distributed/fp/DynamicFPSetManager.java @@ -21,6 +21,12 @@ public class DynamicFPSetManager extends FPSetManager implements Serializable { public DynamicFPSetManager(int expectedNumOfServers) throws RemoteException { super(); + // If expectedNumOfServers is no power of two, a subset of FPSet + // servers will act as passive backups. Each time a FPSet from + // the active set is lost, all workers switch over to the next + // available passive one on a list. The list has to be known + // prior to when the workers start (it's possible to send out + // list updates, but it hasn't been implemented). this.expectedNumOfServers = expectedNumOfServers; // Guard against invalid values @@ -36,7 +42,7 @@ public class DynamicFPSetManager extends FPSetManager implements Serializable { } // Zero upper bits of mask which won't be used when addressing the - // fingerprint servers anyway. + // fingerprint servers anyway. See IFPSetManager#getFPSetIndex. this.mask = (1L << log) - 1L; } diff --git a/tlatools/src/tlc2/tool/distributed/fp/FPSetManager.java b/tlatools/src/tlc2/tool/distributed/fp/FPSetManager.java index 28537d9d0db2386a5f9a91e692032d7478a20eb7..aef350cd022e840fd7728225a8017035e9d0d154 100644 --- a/tlatools/src/tlc2/tool/distributed/fp/FPSetManager.java +++ b/tlatools/src/tlc2/tool/distributed/fp/FPSetManager.java @@ -29,6 +29,7 @@ import java.util.logging.Logger; import tlc2.output.EC; import tlc2.tool.distributed.fp.callable.BitVectorWrapper; import tlc2.tool.distributed.fp.callable.CheckFPsCallable; +import tlc2.tool.distributed.fp.callable.CheckInvariantCallable; import tlc2.tool.distributed.fp.callable.ContainsBlockCallable; import tlc2.tool.distributed.fp.callable.PutBlockCallable; import tlc2.util.BitVector; @@ -206,16 +207,11 @@ public abstract class FPSetManager implements IFPSetManager { return hostname; } - protected int getIndex(long fp) { - long l = fp & mask; - return (int) (l % this.fpSets.size()); - } - /* (non-Javadoc) * @see tlc2.tool.distributed.IFPSetManager#put(long) */ public boolean put(long fp) { - int fpIdx = getIndex(fp); + int fpIdx = getFPSetIndex(fp); while (true) { try { return this.fpSets.get(fpIdx).put(fp); @@ -236,7 +232,7 @@ public abstract class FPSetManager implements IFPSetManager { * @see tlc2.tool.distributed.IFPSetManager#contains(long) */ public boolean contains(long fp) { - int fpIdx = getIndex(fp); + int fpIdx = getFPSetIndex(fp); while (true) { try { return this.fpSets.get(fpIdx).contains(fp); @@ -458,6 +454,43 @@ public abstract class FPSetManager implements IFPSetManager { } } + /* (non-Javadoc) + * @see tlc2.tool.distributed.fp.IFPSetManager#checkInvariant() + */ + public boolean checkInvariant() { + final int len = this.fpSets.size(); + // Instantiation of a thread pool here is fine, as long as checkFPs is only called seldomly. + final ExecutorService executorService = Executors.newFixedThreadPool(len); + try { + // Start checkFP on all FPSets concurrently + // (checkFPs scans the full set sequentially!) + final CompletionService<Boolean> ecs = new ExecutorCompletionService<Boolean>(executorService); + for (int i = 0; i < len; i++) { + ecs.submit(new CheckInvariantCallable(fpSets.get(i).getFpset())); + } + // Return minimum value + for (int i = 0; i < len; i++) { + try { + if(!ecs.take().get()) { + return false; + } + } catch (InterruptedException e) { + // not expected to happen, could return an approximation + // if happens (but fail fast for the moment). + e.printStackTrace(); + } catch (ExecutionException e) { + // not expected to happen, could return an approximation + // if happens (but fail fast for the moment). + e.printStackTrace(); + } + } + return true; + } finally { + // Always shutdown the executor service + executorService.shutdown(); + } + } + /* (non-Javadoc) * @see tlc2.tool.distributed.IFPSetManager#size() */ diff --git a/tlatools/src/tlc2/tool/distributed/fp/FPSetRMI.java b/tlatools/src/tlc2/tool/distributed/fp/FPSetRMI.java index bd9ef02490b1b389567f95c4714750c76c8d1b66..4d74ad1a38f4fa63e28c24d0a8f0a6f8bdd707d7 100644 --- a/tlatools/src/tlc2/tool/distributed/fp/FPSetRMI.java +++ b/tlatools/src/tlc2/tool/distributed/fp/FPSetRMI.java @@ -33,7 +33,12 @@ public interface FPSetRMI extends Remote { * collision. */ double checkFPs() throws IOException; - + + /** + * @see FPSet#checkInvariant() + */ + boolean checkInvariant() throws IOException; + /** * Disposes this {@link FPSet}. It cannot be used afterwards anymore. * diff --git a/tlatools/src/tlc2/tool/distributed/fp/IFPSetManager.java b/tlatools/src/tlc2/tool/distributed/fp/IFPSetManager.java index 480f8cf24a44bc5b5e33a60d5de23907d3b52825..c179b1d54eeb67a4d07f74f9676f2596ddc9a84c 100644 --- a/tlatools/src/tlc2/tool/distributed/fp/IFPSetManager.java +++ b/tlatools/src/tlc2/tool/distributed/fp/IFPSetManager.java @@ -6,6 +6,9 @@ import java.io.Serializable; import java.util.concurrent.ExecutorService; import tlc2.tool.distributed.fp.FPSetManager.FPSets; +import tlc2.tool.fp.FPSet; +import tlc2.tool.fp.FPSetConfiguration; +import tlc2.tool.fp.MSBDiskFPSet; import tlc2.util.BitVector; import tlc2.util.LongVec; @@ -19,6 +22,11 @@ public interface IFPSetManager extends Serializable { */ double checkFPs(); + /** + * @see FPSetRMI#checkInvariant() + */ + boolean checkInvariant(); + /** */ void checkpoint(String fname) throws InterruptedException, IOException; @@ -62,13 +70,27 @@ public interface IFPSetManager extends Serializable { BitVector[] containsBlock(LongVec[] fps, ExecutorService executorService); /** - * The index address of the {@link FPSetRMI} corresponding with the given + * The index of the {@link FPSetRMI} corresponding with the given * fingerprint in this {@link IFPSetManager}. It is used by worker nodes to * pre-sort the fingerprints in {@link LongVec} according to the index of - * the {@link FPSetRMI} responsible for the partition of the fingerprint - * space. - */ - int getFPSetIndex(long fp); + * the {@link FPSetRMI} responsible for the subset of the fingerprint space. + * + * @param fp + * The fingerprint for which the index should be calculated. + * @return The index of the {@link FPSet} that is assigned this subset of + * the fingerprint space. + * <p> + * Assignment is based on the least significant bits. This selection + * of fingerprint bits is important. Selecting the most significant + * bits of a fingerprint to assign an {@link FPSet} would violate + * the invariant of MSB-based {@link FPSet}s such as + * {@link MSBDiskFPSet}. They assume that the + * {@link FPSetConfiguration#getFpBits()} are fixed. FPSetManager + * may dynamically reassign additional subsets of the fingerprint + * space to an existing {@link FPSet}, when the previously assigned + * {@link FPSet} is lost due to a network or hardware failure. + */ + int getFPSetIndex(final long fp); /** * @see FPSetRMI#getStatesSeen() diff --git a/tlatools/src/tlc2/tool/distributed/fp/NonDistributedFPSetManager.java b/tlatools/src/tlc2/tool/distributed/fp/NonDistributedFPSetManager.java index 51f205333f53a1a7fca2354b296b763c16fd9bde..87ea734a4f081ad5b07766b39a80d4844e0f910f 100644 --- a/tlatools/src/tlc2/tool/distributed/fp/NonDistributedFPSetManager.java +++ b/tlatools/src/tlc2/tool/distributed/fp/NonDistributedFPSetManager.java @@ -147,6 +147,19 @@ public class NonDistributedFPSetManager implements IFPSetManager { } } + /* (non-Javadoc) + * @see tlc2.tool.distributed.fp.IFPSetManager#checkInvariant() + */ + public boolean checkInvariant() { + try { + return this.fpSet.checkInvariant(); + } catch (IOException e) { + // not expected to happen + MP.printError(EC.GENERAL, e); + return false; + } + } + /* (non-Javadoc) * @see tlc2.tool.distributed.fp.FPSetManager#size() */ diff --git a/tlatools/src/tlc2/tool/distributed/fp/callable/CheckInvariantCallable.java b/tlatools/src/tlc2/tool/distributed/fp/callable/CheckInvariantCallable.java new file mode 100644 index 0000000000000000000000000000000000000000..d1f7282b0151ea328115bc3c33bb32d76894acbe --- /dev/null +++ b/tlatools/src/tlc2/tool/distributed/fp/callable/CheckInvariantCallable.java @@ -0,0 +1,32 @@ +// Copyright (c) 2016 Markus Alexander Kuppe. All rights reserved. +package tlc2.tool.distributed.fp.callable; + +import java.io.IOException; +import java.util.concurrent.Callable; + +import tlc2.output.EC; +import tlc2.output.MP; +import tlc2.tool.distributed.fp.FPSetRMI; + +public class CheckInvariantCallable implements Callable<Boolean> { + private final FPSetRMI fpSetRMI; + + public CheckInvariantCallable(FPSetRMI fpSetRMI) { + this.fpSetRMI = fpSetRMI; + } + + /* (non-Javadoc) + * @see java.util.concurrent.Callable#call() + */ + public Boolean call() throws Exception { + try { + return fpSetRMI.checkInvariant(); + } catch (IOException e) { + // not expected to happen. + MP.printError(EC.GENERAL, e); + // return max value to indicate to caller that the result is + // incorrect. + return false; + } + } +} \ No newline at end of file diff --git a/tlatools/src/tlc2/tool/distributed/management/TLCServerMXWrapper.java b/tlatools/src/tlc2/tool/distributed/management/TLCServerMXWrapper.java index 728d9ab09fe81bef047478815f2bddcea81cdc27..2a9e52c6826fc75eea3735d2f3a5a140c025959e 100644 --- a/tlatools/src/tlc2/tool/distributed/management/TLCServerMXWrapper.java +++ b/tlatools/src/tlc2/tool/distributed/management/TLCServerMXWrapper.java @@ -3,10 +3,12 @@ package tlc2.tool.distributed.management; import java.io.IOException; +import java.rmi.RemoteException; import javax.management.NotCompliantMBeanException; import tlc2.TLCGlobals; +import tlc2.tool.TLCState; import tlc2.tool.distributed.TLCServer; import tlc2.tool.distributed.fp.IFPSetManager; import tlc2.tool.management.TLCStandardMBean; @@ -120,4 +122,43 @@ public class TLCServerMXWrapper extends TLCStandardMBean implements TLCStatistic public void liveCheck() { // Distributed TLC does not support liveness checking } + + /* (non-Javadoc) + * @see tlc2.tool.distributed.management.TLCStatisticsMXBean#getCurrentState() + */ + public String getCurrentState() { + final TLCState state = tlcServer.stateQueue.sPeek(); + if (state != null) { + return state.toString(); + } + return "N/A"; + } + + /* (non-Javadoc) + * @see tlc2.tool.distributed.management.TLCStatisticsMXBean#getSpecName() + */ + public String getSpecName() { + if (tlcServer.isRunning()) { + try { + return tlcServer.getSpecFileName(); + } catch (RemoteException e) { + e.printStackTrace(); + } + } + return "N/A"; + } + + /* (non-Javadoc) + * @see tlc2.tool.distributed.management.TLCStatisticsMXBean#getModelName() + */ + public String getModelName() { + if (tlcServer.isRunning()) { + try { + return tlcServer.getConfigFileName(); + } catch (RemoteException e) { + e.printStackTrace(); + } + } + return "N/A"; + } } diff --git a/tlatools/src/tlc2/tool/distributed/management/TLCStatisticsMXBean.java b/tlatools/src/tlc2/tool/distributed/management/TLCStatisticsMXBean.java index 9619c4a7d3f46b57948175933d7f4b9429882505..4fa25190e1ba21d9fa96eb69fd990372ed93afcf 100644 --- a/tlatools/src/tlc2/tool/distributed/management/TLCStatisticsMXBean.java +++ b/tlatools/src/tlc2/tool/distributed/management/TLCStatisticsMXBean.java @@ -2,15 +2,24 @@ package tlc2.tool.distributed.management; +import tlc2.tool.ModelChecker; +import tlc2.tool.TLCState; + /** * @author Markus Alexander Kuppe */ -/** - * @author markus - * - */ public interface TLCStatisticsMXBean { + /** + * @return The version of TLC. + */ + String getVersion(); + + /** + * @return The code revision corresponding to this version of TLC. + */ + String getRevision(); + /** * @return The amount of states generated (non-distinct). * {@link TLCStatisticsMXBean#getStatesGenerated()} >= @@ -67,4 +76,20 @@ public interface TLCStatisticsMXBean { * Force new progress interval to check liveness */ void liveCheck(); + + /** + * The string representation of a {@link TLCState} the {@link ModelChecker} + * has recently checked. + */ + String getCurrentState(); + + /** + * @return The name of the spec currently being checked by TLC. + */ + String getSpecName(); + + /** + * @return The name of the model curreclty being checked by TLC. + */ + String getModelName(); } diff --git a/tlatools/src/tlc2/tool/fp/DiskFPSet.java b/tlatools/src/tlc2/tool/fp/DiskFPSet.java index 01e28591a9db9dce0904452a6597aded04c3f9c0..ae82abc57857825c5e235a3eb810962b0b9018fc 100644 --- a/tlatools/src/tlc2/tool/fp/DiskFPSet.java +++ b/tlatools/src/tlc2/tool/fp/DiskFPSet.java @@ -9,7 +9,6 @@ import java.io.IOException; import java.io.RandomAccessFile; import java.net.InetAddress; import java.rmi.RemoteException; -import java.util.Arrays; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.Lock; @@ -18,6 +17,7 @@ import java.util.logging.Logger; import javax.management.NotCompliantMBeanException; +import tlc2.TLCGlobals; import tlc2.output.EC; import tlc2.output.MP; import tlc2.tool.TLCTrace; @@ -85,7 +85,7 @@ public abstract class DiskFPSet extends FPSet implements FPSetStatistic { * striped lock {@link DiskFPSet#rwLock} itself, which reduces the memory * available to the hash set. */ - protected static final int LogLockCnt = Integer.getInteger(DiskFPSet.class.getName() + ".logLockCnt", 10); + protected static final int LogLockCnt = Integer.getInteger(DiskFPSet.class.getName() + ".logLockCnt", (31 - Integer.numberOfLeadingZeros(TLCGlobals.getNumWorkers()) + 8)); /** * protects n memory buckets */ @@ -161,7 +161,7 @@ public abstract class DiskFPSet extends FPSet implements FPSetStatistic { static final int InitialBucketCapacity = (1 << LogMaxLoad); /* Number of fingerprints per braf buffer. */ - public static final int NumEntriesPerPage = 8192 / LongSize; + public static final int NumEntriesPerPage = 8192 / (int) LongSize; /** * This is (assumed to be) the auxiliary storage for a fingerprint that need @@ -201,7 +201,16 @@ public abstract class DiskFPSet extends FPSet implements FPSetStatistic { */ protected DiskFPSet(final FPSetConfiguration fpSetConfig) throws RemoteException { super(fpSetConfig); - this.lockCnt = 1 << LogLockCnt; //TODO come up with a more dynamic value for stripes that takes tblCapacity into account + // Ideally we use one lock per bucket because even with relatively high + // lock counts, we fall victim to the birthday paradox. However, locks + // ain't cheap, which is why we have to find the sweet spot. We + // determined the constant 8 empirically on Intel Xeon CPU E5-2670 v2 @ + // 2.50GHz. This is based on the number of cores only. We ignore their + // speed. MultiThreadedMSBDiskFPSet is the most suitable performance + // test available for the job. It just inserts long values into the + // set. int is obviously going to be too small once 2^23 cores become + // commonplace. + this.lockCnt = 1 << LogLockCnt; this.rwLock = Striped.readWriteLock(lockCnt); this.maxTblCnt = fpSetConfig.getMemoryInFingerprintCnt(); @@ -422,7 +431,7 @@ public abstract class DiskFPSet extends FPSet implements FPSetStatistic { long l = System.currentTimeMillis() - timestamp; flushTime += l; - LOGGER.log(Level.FINE, "Flushed disk {0} {1}. tine, in {2} sec", new Object[] { + LOGGER.log(Level.FINE, "Flushed disk {0} {1}. time, in {2} sec", new Object[] { ((DiskFPSetMXWrapper) diskFPSetMXWrapper).getObjectName(), getGrowDiskMark(), l}); } w.unlock(); @@ -731,6 +740,7 @@ public abstract class DiskFPSet extends FPSet implements FPSetStatistic { * @see tlc2.tool.fp.FPSet#exit(boolean) */ public void exit(boolean cleanup) throws IOException { + super.exit(cleanup); if (cleanup) { // Delete the metadata directory: FileUtil.deleteDir(this.metadir, true); @@ -867,79 +877,58 @@ public abstract class DiskFPSet extends FPSet implements FPSetStatistic { // the fingerprints from the TLCTrace file. Not from its own .fp file. } - private long[] recoveryBuff = null; - private int recoveryIdx = -1; - - /* (non-Javadoc) - * @see tlc2.tool.fp.FPSet#prepareRecovery() - */ - public final void prepareRecovery() throws IOException { - // First close all "this.braf" and "this.brafPool" objects on currName: - for (int i = 0; i < this.braf.length; i++) { - this.braf[i].close(); - } - for (int i = 0; i < this.brafPool.length; i++) { - this.brafPool[i].close(); - } - - recoveryBuff = new long[1 << 21]; - recoveryIdx = 0; - } - /* (non-Javadoc) * @see tlc2.tool.fp.FPSet#recoverFP(long) */ public final void recoverFP(long fp) throws IOException { - recoveryBuff[recoveryIdx++] = (fp & 0x7FFFFFFFFFFFFFFFL); - if (recoveryIdx == recoveryBuff.length) { - Arrays.sort(recoveryBuff, 0, recoveryIdx); - flusher.mergeNewEntries(recoveryBuff, recoveryIdx); - recoveryIdx = 0; - } - } - - /* (non-Javadoc) - * @see tlc2.tool.fp.FPSet#completeRecovery() - */ - public final void completeRecovery() throws IOException { - Arrays.sort(recoveryBuff, 0, recoveryIdx); - flusher.mergeNewEntries(recoveryBuff, recoveryIdx); - recoveryBuff = null; - recoveryIdx = -1; - - // Reopen a BufferedRAF for each thread - for (int i = 0; i < this.braf.length; i++) { - this.braf[i] = new BufferedRandomAccessFile(this.fpFilename, - "r"); - } - for (int i = 0; i < this.brafPool.length; i++) { - this.brafPool[i] = new BufferedRandomAccessFile( - this.fpFilename, "r"); + // This implementation used to group n fingerprints into a sorted + // in-memory page. Pages were subsequently merged on-disk directly, + // creating the on-disk storage file for DiskFPSets. + // + // The new algorithm simply "replays" the fingerprints found in the + // trace file. It's biggest disadvantage is a performance penalty it + // pays because it doesn't group fingerprints. On the other hand, it has + // advantages over the old algorithm: + // + // - Simplified logic/code + // - No need for a long[] recovery buffer + // - TLC runs with a warm in-memory fingerprint cache + // - With large amounts of available fingerprint set memory, the .fp + // file might actually never be written. This means that the FPSet never + // has to go to disk during contains/put which yields a better overall + // runtime performance. + // + // TODO Use original on-disk merge if it is known that the fingerprints + // won't fit into memory anyway. + + // The code below is put(long) stripped from synchronization and + // statistics code to speed up recovery. Thus, recovery relys on + // exclusive access to the fingerprint set, which it has during + // recovery. + long fp0 = fp & 0x7FFFFFFFFFFFFFFFL; + boolean unique = !this.memInsert(fp0); + Assert.check(unique, EC.SYSTEM_CHECKPOINT_RECOVERY_CORRUPT); + if (needsDiskFlush()) { + this.flusher.flushTable(); } - this.poolIndex = 0; } - /* (non-Javadoc) * @see tlc2.tool.fp.FPSet#recover() */ public final void recover() throws IOException { - this.prepareRecovery(); - long recoverPtr = TLCTrace.getRecoverPtr(); - @SuppressWarnings("resource") - RandomAccessFile braf = new BufferedRandomAccessFile( + final RandomAccessFile braf = new BufferedRandomAccessFile( TLCTrace.getFilename(), "r"); while (braf.getFilePointer() < recoverPtr) { // drop readLongNat if (braf.readInt() < 0) braf.readInt(); - + long fp = braf.readLong(); this.recoverFP(fp); } - - this.completeRecovery(); + braf.close(); } private String getChkptName(String fname, String name) { @@ -1108,6 +1097,13 @@ public abstract class DiskFPSet extends FPSet implements FPSetStatistic { forceFlush = true; } + /** + * @return The (static) number of locks used to guard the set. + */ + public int getLockCnt() { + return this.rwLock.size(); + } + /** * @return The technical maximum of readers/writers this {@link DiskFPSet} * can handle. It doesn't show the actual numbers of active clients. @@ -1118,23 +1114,6 @@ public abstract class DiskFPSet extends FPSet implements FPSetStatistic { return this.braf.length + this.brafPool.length; } - /** - * @return The amount of elements in the {@link DiskFPSet#collisionBucket} - * if the {@link DiskFPSet} has a collisionBucket. -1L otherwise. - */ - public long getCollisionBucketCnt() { - return -1L; - } - - /** - * @return The proportional size of the collision bucket compared to the - * size of the set or <code>-1d</code> if implementation does not - * use a collision bucket. Domain is [0, 1]. - */ - public double getCollisionRatio() { - return -1d; - } - /** * The load factor is a measure of how full the (primary) in-memory hash * table is. @@ -1245,12 +1224,11 @@ public abstract class DiskFPSet extends FPSet implements FPSetStatistic { // provide a way to re-use an existing RandomAccessFile object on // a different file, this implementation must close all existing // files and re-allocate new BufferedRandomAccessFile objects. - - // close existing files (except brafPool[0]) for (int i = 0; i < braf.length; i++) { - braf[i].close(); + // Seek readers to zero position. + braf[i].seek(0L); } - for (int i = 1; i < brafPool.length; i++) { + for (int i = 0; i < brafPool.length; i++) { brafPool[i].close(); } @@ -1258,53 +1236,34 @@ public abstract class DiskFPSet extends FPSet implements FPSetStatistic { File tmpFile = new File(tmpFilename); tmpFile.delete(); RandomAccessFile tmpRAF = new BufferedRandomAccessFile(tmpFile, "rw"); - RandomAccessFile raf = brafPool[0]; - raf.seek(0); // merge - mergeNewEntries(raf, tmpRAF); - + mergeNewEntries(braf, tmpRAF); + // clean up - raf.close(); + for (int i = 0; i < braf.length; i++) { + // close existing files (except brafPool[0]) + braf[i].close(); + } tmpRAF.close(); - String realName = fpFilename; - File currFile = new File(realName); - currFile.delete(); - boolean status = tmpFile.renameTo(currFile); - Assert.check(status, EC.SYSTEM_UNABLE_NOT_RENAME_FILE); + try { + FileUtil.replaceFile(tmpFilename, fpFilename); + } catch (IOException e) { + Assert.fail(EC.SYSTEM_UNABLE_NOT_RENAME_FILE); + } // reopen a BufferedRAF for each thread for (int i = 0; i < braf.length; i++) { // Better way would be to provide method BRAF.open - braf[i] = new BufferedRandomAccessFile(realName, "r"); + braf[i] = new BufferedRandomAccessFile(fpFilename, "r"); } for (int i = 0; i < brafPool.length; i++) { // Better way would be to provide method BRAF.open - brafPool[i] = new BufferedRandomAccessFile(realName, "r"); + brafPool[i] = new BufferedRandomAccessFile(fpFilename, "r"); } poolIndex = 0; } - - public final void mergeNewEntries(long[] buff, int buffLen) - throws IOException { - // create temporary file - File tmpFile = new File(tmpFilename); - tmpFile.delete(); - RandomAccessFile tmpRAF = new BufferedRandomAccessFile(tmpFile, "rw"); - File currFile = new File(fpFilename); - RandomAccessFile currRAF = new BufferedRandomAccessFile(currFile, "r"); - - // merge - this.mergeNewEntries(currRAF, tmpRAF); - - // clean up - currRAF.close(); - tmpRAF.close(); - currFile.delete(); - boolean status = tmpFile.renameTo(currFile); - Assert.check(status, EC.SYSTEM_UNABLE_NOT_RENAME_FILE); - } - protected abstract void mergeNewEntries(RandomAccessFile inRAF, RandomAccessFile outRAF) throws IOException; + protected abstract void mergeNewEntries(RandomAccessFile[] inRAFs, RandomAccessFile outRAF) throws IOException; } } diff --git a/tlatools/src/tlc2/tool/fp/FPSet.java b/tlatools/src/tlc2/tool/fp/FPSet.java index 126d46e2a791076171c1f0ee8555eeee682a2a25..f3e74ec57c3082f9e82f9562c77a244ca60d38a9 100644 --- a/tlatools/src/tlc2/tool/fp/FPSet.java +++ b/tlatools/src/tlc2/tool/fp/FPSet.java @@ -10,6 +10,7 @@ import java.rmi.NoSuchObjectException; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; +import tlc2.tool.distributed.fp.DistributedFPSet; import tlc2.tool.distributed.fp.FPSetRMI; import tlc2.util.BitVector; import tlc2.util.LongVec; @@ -26,7 +27,7 @@ public abstract class FPSet extends UnicastRemoteObject implements FPSetRMI /** * Size of a Java long in bytes */ - protected static final int LongSize = 8; + protected static final long LongSize = 8; /** * Counts the amount of states passed to the containsBlock method @@ -81,7 +82,16 @@ public abstract class FPSet extends UnicastRemoteObject implements FPSetRMI /* (non-Javadoc) * @see tlc2.tool.distributed.fp.FPSetRMI#exit(boolean) */ - public abstract void exit(boolean cleanup) throws IOException; + public void exit(boolean cleanup) throws IOException { + // If DistributedFPSet is running, signal termination and wake it up. + // This is necessary when a SecurityManager intercepts System.exit(int) + // calls which has the side effect that DistributedFPSet's reporting + // loop does not terminate and keeps going forever. + DistributedFPSet.shutdown(); + synchronized (this) { + this.notify(); + } + } /* (non-Javadoc) * @see tlc2.tool.distributed.fp.FPSetRMI#checkFPs() @@ -105,10 +115,6 @@ public abstract class FPSet extends UnicastRemoteObject implements FPSetRMI public abstract void recoverFP(long fp) throws IOException; - public abstract void prepareRecovery() throws IOException; - - public abstract void completeRecovery() throws IOException; - /* The set of checkpoint methods for remote checkpointing. */ /* (non-Javadoc) * @see tlc2.tool.distributed.fp.FPSetRMI#beginChkpt(java.lang.String) diff --git a/tlatools/src/tlc2/tool/fp/FPSetConfiguration.java b/tlatools/src/tlc2/tool/fp/FPSetConfiguration.java index a79e8152b97aae155f952b28eba31f54b4022fd7..47473d729533406cf09b211f7b1ff73d387cc0ae 100644 --- a/tlatools/src/tlc2/tool/fp/FPSetConfiguration.java +++ b/tlatools/src/tlc2/tool/fp/FPSetConfiguration.java @@ -4,13 +4,18 @@ package tlc2.tool.fp; import java.io.Serializable; import tlc2.output.EC; +import tlc2.tool.distributed.fp.FPSetManager.FPSets; import util.Assert; import util.TLCRuntime; @SuppressWarnings("serial") public class FPSetConfiguration implements Serializable { - protected int fpBits = 0; + /** + * N most significant bits used as address bits by a MultiFPSet. + */ + protected int fpBits = 1; + protected long memoryInBytes = -1L; protected double ratio; protected String implementation; @@ -21,22 +26,45 @@ public class FPSetConfiguration implements Serializable { } public FPSetConfiguration(Double aRatio) { - this.ratio = aRatio; // Read the implementation class from the System properties instead of // the cmd line. Right now I'm reluctant to expose the impl class as a // cmd line parameter and carry it forth forever. - this.implementation = System.getProperty(FPSetFactory.IMPL_PROPERTY, - FPSetFactory.getImplementationDefault()); + this(aRatio, System.getProperty(FPSetFactory.IMPL_PROPERTY, + FPSetFactory.getImplementationDefault())); + } + + public FPSetConfiguration(Double aRatio, String implementation) { + this.ratio = aRatio; + this.implementation = implementation; } public boolean allowsNesting() { return getFpBits() > 0; } + /** + * @return The number of most significant bits that must not be used by an + * FPSet to calculate its index on. The bits are used by a + * {@link MultiFPSet} to address individual {@link FPSets}. + * Consequently, for an individual {@link FPSet} these bits are + * fixed (always either zero or one for all fingerprints that the + * {@link FPSet} sees). + */ public int getFpBits() { + if (fpBits == 0 && FPSetFactory.isDiskFPSet(implementation)) { + // DiskFPSets always require two instances. A single DiskFPSet + // essentially only uses 63. fingerprint bits and thus increases the + // likelihood of hash collisions. + fpBits = 1; + } return fpBits; } + public void setFpBits(int fpBits) { + Assert.check(FPSet.isValid(fpBits), EC.GENERAL); + this.fpBits = fpBits; + } + public long getMemoryInBytes() { final TLCRuntime instance = TLCRuntime.getInstance(); @@ -73,10 +101,6 @@ public class FPSetConfiguration implements Serializable { return 1 << getFpBits(); } - public int getPrefixBits() { - return getFpBits(); - } - public void setRatio(double aRatio) { // Allowing aRatio to be 0.0 makes little sense semantically, but we // accept it anyway and let TLCRuntime deal with it. @@ -84,11 +108,6 @@ public class FPSetConfiguration implements Serializable { this.ratio = aRatio; } - public void setFpBits(int fpBits) { - Assert.check(FPSet.isValid(fpBits), EC.GENERAL); - this.fpBits = fpBits; - } - public double getRatio() { return ratio; } diff --git a/tlatools/src/tlc2/tool/fp/FPSetFactory.java b/tlatools/src/tlc2/tool/fp/FPSetFactory.java index b1e64c2aa384fb0a86baba0eeab5bf099b3fed26..08a4f0bcdb99f3f3660b034bd85c8bb3749622ee 100644 --- a/tlatools/src/tlc2/tool/fp/FPSetFactory.java +++ b/tlatools/src/tlc2/tool/fp/FPSetFactory.java @@ -25,6 +25,7 @@ public abstract class FPSetFactory { static boolean allocatesOnHeap(final String clazz) { try { final ClassLoader classLoader = FPSet.class.getClassLoader(); + @SuppressWarnings("unchecked") Class<? extends FPSet> cls = (Class<? extends FPSet>) classLoader .loadClass(clazz); return allocatesOnHeap(cls); @@ -32,6 +33,22 @@ public abstract class FPSetFactory { return false; } } + + private static boolean isDiskFPSet(Class<? extends FPSet> cls) { + return DiskFPSet.class.isAssignableFrom(cls); + } + + static boolean isDiskFPSet(final String clazz) { + try { + final ClassLoader classLoader = FPSet.class.getClassLoader(); + @SuppressWarnings("unchecked") + Class<? extends FPSet> cls = (Class<? extends FPSet>) classLoader + .loadClass(clazz); + return isDiskFPSet(cls); + } catch (ClassNotFoundException e) { + return false; + } + } /** * @see getFPSet @@ -55,20 +72,10 @@ public abstract class FPSetFactory { // fpBits > 0 indicates that the consumer requires a MultiFPSet if (fpSetConfig.allowsNesting()) { - // A MultiFPSet comes in two flavors: - // a) For FPSets that sort on LSB - // b) For FPSets that use the MSB to sort the internal hash map - if (msbBasedFPSet(implClassname)) { - // Pass physical memory instead of logical FP count to adhere to - // the general FPSet ctor contract. - // @see http://bugzilla.tlaplus.net/show_bug.cgi?id=290 - return new MSBMultiFPSet(fpSetConfig); - } else { - // Pass physical memory instead of logical FP count to adhere to - // the general FPSet ctor contract. - // @see http://bugzilla.tlaplus.net/show_bug.cgi?id=290 - return new MultiFPSet(fpSetConfig); - } + // Pass physical memory instead of logical FP count to adhere to + // the general FPSet ctor contract. + // @see http://bugzilla.tlaplus.net/show_bug.cgi?id=290 + return new MultiFPSet(fpSetConfig); } else { if (implClassname != null) { return loadImplementation(implClassname, fpSetConfig); @@ -163,18 +170,4 @@ public abstract class FPSetFactory { MP.printWarning(EC.GENERAL, "unsuccessfully trying to load custom FPSet class: " + clazz, exp); return null; } - - /** - * @param userFpsetImplClassname - * @return true iff the given class uses the MSB to pre-sort its fingerprints - */ - private static boolean msbBasedFPSet(String userFpsetImplClassname) { - if (!allocatesOnHeap(userFpsetImplClassname)) { - return true; - } - if (userFpsetImplClassname.equals(MSBDiskFPSet.class.getName())) { - return true; - } - return false; - } } diff --git a/tlatools/src/tlc2/tool/fp/FPSetStatistic.java b/tlatools/src/tlc2/tool/fp/FPSetStatistic.java index bec95090adc5a9348f2f646c9900bec161cdd8e9..bbc287ea385116a5d1954a14221c8f4e838dffb0 100644 --- a/tlatools/src/tlc2/tool/fp/FPSetStatistic.java +++ b/tlatools/src/tlc2/tool/fp/FPSetStatistic.java @@ -97,19 +97,14 @@ public interface FPSetStatistic { public long getFlushTime(); /** - * @see DiskFPSet#getReaderWriterCnt() + * @return DiskFPSet#getLockCnt() */ - public int getReaderWriterCnt(); + public int getLockCnt(); /** - * @return DiskFPSet#getCollisionBucketCnt() - */ - public long getCollisionBucketCnt(); - - /** - * @return DiskFPSet#getCollisionRatio() + * @see DiskFPSet#getReaderWriterCnt() */ - public double getCollisionRatio(); + public int getReaderWriterCnt(); /** * @return DiskFPSet#getLoadFactor(); diff --git a/tlatools/src/tlc2/tool/fp/FPSetsIdxCalculationBits.jpg b/tlatools/src/tlc2/tool/fp/FPSetsIdxCalculationBits.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75cb4cdd306cbfc59de294824ffc45ef611dfe36 Binary files /dev/null and b/tlatools/src/tlc2/tool/fp/FPSetsIdxCalculationBits.jpg differ diff --git a/tlatools/src/tlc2/tool/fp/HeapBasedDiskFPSet.java b/tlatools/src/tlc2/tool/fp/HeapBasedDiskFPSet.java index 45e8a195c85ccdf8085fec90c8fc04bd26e4ed12..f96b9c16f0745a6ce7911f09faf4323943feaa9c 100644 --- a/tlatools/src/tlc2/tool/fp/HeapBasedDiskFPSet.java +++ b/tlatools/src/tlc2/tool/fp/HeapBasedDiskFPSet.java @@ -19,7 +19,7 @@ public abstract class HeapBasedDiskFPSet extends DiskFPSet { protected long mask; /** - * The calculated capacity of tbl + * The calculated capacity of tbl. Will always be a power of two. */ protected final int capacity; @@ -53,18 +53,23 @@ public abstract class HeapBasedDiskFPSet extends DiskFPSet { // guard against underflow // LL modified error message on 7 April 2012 Assert.check(logMaxMemCnt - LogMaxLoad >= 0, "Underflow when computing HeapBasedDiskFPSet"); - this.capacity = 1 << (logMaxMemCnt - LogMaxLoad); - // instead of changing maxTblCnd to long and pay an extra price when - // comparing int and long every time put(long) is called, we set it to - // Integer.MAX_VALUE instead. capacity can never grow bigger - // (unless java starts supporting 64bit array sizes) - // + // Guard against a capacity overflow with large amounts (e.g. ~1TB) of + // dedicated memory. If cap overflows, the VMs maximum allowed array + // size is used. + final int cap = 1 << (logMaxMemCnt - LogMaxLoad); + if (cap < 0) { + // You wonder why 8 and not 42? Ask the VM gods! + this.capacity = Integer.MAX_VALUE - 8; + } else { + this.capacity = cap; + } + // maxTblCnt mathematically has to be an upper limit for the in-memory storage // so that a disk flush occurs before an _evenly_ distributed fp distribution fills up // the collision buckets to a size that exceeds the VM limit (unevenly distributed // fp distributions can still cause a OutOfMemoryError which this guard). - this.maxTblCnt = (logMaxMemCnt >= 31) ? Integer.MAX_VALUE : (1 << logMaxMemCnt); // maxTblCnt := 2^logMaxMemCnt + this.maxTblCnt = (1L << logMaxMemCnt); // maxTblCnt := 2^logMaxMemCnt Assert.check(maxTblCnt <= fpSetConfig.getMemoryInFingerprintCnt(), "Exceeded upper memory storage limit"); diff --git a/tlatools/src/tlc2/tool/fp/LSBDiskFPSet.java b/tlatools/src/tlc2/tool/fp/LSBDiskFPSet.java index cc84b78fa149cdeee2dfbcd3bc27a3288526aabb..a0a4871050f967fa058c1f1483e4f8cc859448b1 100644 --- a/tlatools/src/tlc2/tool/fp/LSBDiskFPSet.java +++ b/tlatools/src/tlc2/tool/fp/LSBDiskFPSet.java @@ -76,7 +76,7 @@ public class LSBDiskFPSet extends HeapBasedDiskFPSet { * @see tlc2.tool.fp.DiskFPSet.Flusher#mergeNewEntries(java.io.RandomAccessFile, java.io.RandomAccessFile) */ @Override - protected void mergeNewEntries(RandomAccessFile inRAF, RandomAccessFile outRAF) throws IOException { + protected void mergeNewEntries(RandomAccessFile[] inRAFs, RandomAccessFile outRAF) throws IOException { final int buffLen = buff.length; // Precompute the maximum value of the new file @@ -97,7 +97,7 @@ public class LSBDiskFPSet extends HeapBasedDiskFPSet { boolean eof = false; if (fileCnt > 0) { try { - value = inRAF.readLong(); + value = inRAFs[0].readLong(); } catch (EOFException e) { eof = true; } @@ -110,7 +110,7 @@ public class LSBDiskFPSet extends HeapBasedDiskFPSet { if (value < buff[i]) { writeFP(outRAF, value); try { - value = inRAF.readLong(); + value = inRAFs[0].readLong(); } catch (EOFException e) { eof = true; } @@ -133,7 +133,7 @@ public class LSBDiskFPSet extends HeapBasedDiskFPSet { do { writeFP(outRAF, value); try { - value = inRAF.readLong(); + value = inRAFs[0].readLong(); } catch (EOFException e) { eof = true; } diff --git a/tlatools/src/tlc2/tool/fp/LongArray.java b/tlatools/src/tlc2/tool/fp/LongArray.java new file mode 100644 index 0000000000000000000000000000000000000000..c90ba08d523e544110f5b70e217c5e90c43b947b --- /dev/null +++ b/tlatools/src/tlc2/tool/fp/LongArray.java @@ -0,0 +1,217 @@ +// Copyright (c) 2016 Markus Alexander Kuppe. All rights reserved. +package tlc2.tool.fp; + +import java.io.IOException; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; + +import sun.misc.Unsafe; +import tlc2.output.EC; +import util.Assert; + +/** + * This implementation uses sun.misc.Unsafe instead of a wrapping + * java.nio.ByteBuffer due to the fact that the former's allocateMemory + * takes a long argument, while the latter is restricted to + * Integer.MAX_VALUE as its capacity.<br> + * In 2012 this poses a too hard limit on the usable memory, hence we trade + * generality for performance. + */ +@SuppressWarnings("restriction") +public final class LongArray { + + private final Unsafe unsafe; + + /** + * The base address of this direct memory allocated with Unsafe. + */ + private final long baseAddress; + + /** + * Maximum number of elements that can be contained in this array. + */ + private final long length; + + /** + * CHOOSE logAddressSize \in 1..(Long.SIZE / 8): 2^logAddressSize = (Long.SIZE / 8) + */ + private static final int logAddressSize = 3; + + LongArray(final long positions) { + this.length = positions; + this.unsafe = getUnsafe(); + + // LongArray is only implemented for 64bit architectures. A 32bit + // implementation might be possible. However, implementing CAS (see + // trySet) seems impossible when values have to be split in two + // parts (low/hi) on a 32 bit architecture. + // addressSize(): Report the size in bytes of a native pointer, as + // stored via #putAddress . This value will be either 4 or 8. We + // expect 8 (Long.SIZE / 8) which is the size of a TLC fingerprint + // (see FP64). + Assert.check(this.unsafe.addressSize() == (Long.SIZE / 8), EC.GENERAL); + baseAddress = this.unsafe.allocateMemory(positions << logAddressSize); + } + + /** + * @return An Unsafe object or a {@link RuntimeException} wrapping any {@link Exception}. + */ + private static sun.misc.Unsafe getUnsafe() { + // More Details can be found at: http://www.mydailyjava.blogspot.no/2013/12/sunmiscunsafe.html + try { + // Use reflection API to unhide Unsafe + final Field f = sun.misc.Unsafe.class.getDeclaredField("theUnsafe"); + f.setAccessible(true); + return (sun.misc.Unsafe) f.get(null); + } catch (Exception e) { + throw new RuntimeException( + "Trying to use Sun VM specific sun.misc.Unsafe implementation but no Sun based VM detected.", + e); + } + } + + /** + * Initializes the memory by overriding each byte with zero starting at + * <code>baseAddress</code> and ending when all positions have been written. + * <p> + * To speed up the initialization, <code>numThreads</code> allows to set a + * thread count with which zeroing is done in parallel. + * + * @param numThreads + * Number of threads used to zero memory + * @throws IOException + */ + public final void zeroMemory(final int numThreads) + throws IOException { + + final long segmentSize = (long) Math.floor(length / numThreads); + + final ExecutorService es = Executors.newFixedThreadPool(numThreads); + try { + final Collection<Callable<Boolean>> tasks = new ArrayList<Callable<Boolean>>(numThreads); + for (int i = 0; i < numThreads; i++) { + final int offset = i; + tasks.add(new Callable<Boolean>() { + + public Boolean call() throws Exception { + // Null memory (done in parallel on segments). + // This is essential as allocateMemory returns + // uninitialized memory and + // memInsert/memLockup utilize 0L as a mark for an + // unused fingerprint position. + // Otherwise memory garbage wouldn't be distinguishable + // from a true fp. + final long lowerBound = segmentSize * offset; + // The last threads zeros up to the end. + final long upperBound = offset == numThreads - 1 ? length : (1 + offset) * segmentSize; + for (long pos = lowerBound; pos < upperBound; pos++) { + set(pos, 0L); + } + return true; + } + }); + } + final List<Future<Boolean>> invokeAll = es.invokeAll(tasks); + Assert.check(!invokeAll.isEmpty(), EC.GENERAL); + } catch (InterruptedException e) { + // not expected to happen + e.printStackTrace(); + } finally { + es.shutdown(); + } + } + + /** + * Converts from logical positions to + * physical memory addresses. + * + * @param logical position (zero indexed) + * @return The physical address of the fp slot + */ + private final long log2phy(long logicalAddress) { + return baseAddress + (logicalAddress << logAddressSize); + } + + private final void rangeCheck(final long position) { + assert position >= 0 && position < this.length; + } + + /** + * CAS (compare and swap) variant of {@link LongArray#set(long, long)}. + * + * @param position + * @param expected + * @param value + * @return true iff successful + * @throws IndexOutOfBoundsException + */ + public final boolean trySet(final long position, final long expected, final long value) { + rangeCheck(position); + return this.unsafe.compareAndSwapLong(null, log2phy(position), expected, value); + } + + /** + * Inserts the specified element at the specified position in this + * array. Overwrites any previous occupant of the specified position. + * + * @param position position at which the specified element is to be inserted + * @param value element to be inserted + * @throws IndexOutOfBoundsException + */ + public final void set(final long position, final long value) { + rangeCheck(position); + this.unsafe.putAddress(log2phy(position), value); + } + + /** + * Returns the element at the specified position in this array. + * + * @param position position of the element to return + * @return the element at the specified position in this array + * @throws IndexOutOfBoundsException + */ + public final long get(final long position) { + rangeCheck(position); + return this.unsafe.getAddress(log2phy(position)); + } + + /** + * Returns the number of elements in this array. + * + * @return the number of elements in this array + */ + public final long size() { + return length; + } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + public String toString() { + long iMax = length - 1; + if (iMax == -1L) { + return "[]"; + } + + final StringBuilder b = new StringBuilder(); + b.append('['); + for (long i = 0; ; i++) { + final long lng = get(i); + if (lng == 0L) { + b.append("e"); + } else { + b.append(lng); + } + if (i == iMax) { + return b.append(']').toString(); + } + b.append(", "); + } + } +} diff --git a/tlatools/src/tlc2/tool/fp/MSBDiskFPSet.java b/tlatools/src/tlc2/tool/fp/MSBDiskFPSet.java index 45da4a4f1ccb1951a593ed949d3f63026ee93ad5..3640ad35dbcd2548dbdc8c239a9635d2cd09ef49 100644 --- a/tlatools/src/tlc2/tool/fp/MSBDiskFPSet.java +++ b/tlatools/src/tlc2/tool/fp/MSBDiskFPSet.java @@ -37,7 +37,8 @@ public class MSBDiskFPSet extends HeapBasedDiskFPSet { // index. However, we cannot use the 32st bit, because it is used to // indicate if a fp has been flushed to disk. Hence we use the first n // bits starting from the second most significant bit. - this.moveBy = (31 - fpSetConfig.getPrefixBits()) - (logMaxMemCnt - LogMaxLoad); + Assert.check(fpSetConfig.getFpBits() > 0, EC.GENERAL); + this.moveBy = (32 - fpSetConfig.getFpBits()) - (logMaxMemCnt - LogMaxLoad); this.mask = (capacity - 1) << moveBy; this.flusher = new MSBFlusher(); @@ -61,6 +62,9 @@ public class MSBDiskFPSet extends HeapBasedDiskFPSet { protected long index(long fp, long aMask) { // calculate hash value (just n most significant bits of fp) which is // used as an index address + // 1) Right shift by 32 bits and cast to int (upper 32 bits are zeroed) + // 2) Zero the lower n bits according to mask + // 3) Right shift by moveBy (the bits which have previously been zeroed because of mask. return ((int) (fp >>> 32) & aMask) >> moveBy; } @@ -96,7 +100,7 @@ public class MSBDiskFPSet extends HeapBasedDiskFPSet { /* (non-Javadoc) * @see tlc2.tool.fp.DiskFPSet#mergeNewEntries(long[], int, java.io.RandomAccessFile, java.io.RandomAccessFile) */ - protected void mergeNewEntries(RandomAccessFile inRAF, RandomAccessFile outRAF) throws IOException { + protected void mergeNewEntries(RandomAccessFile[] inRAFs, RandomAccessFile outRAF) throws IOException { final long buffLen = tblCnt.get(); final TLCIterator itr = new TLCIterator(tbl); @@ -121,7 +125,7 @@ public class MSBDiskFPSet extends HeapBasedDiskFPSet { boolean eof = false; if (fileCnt > 0) { try { - value = inRAF.readLong(); + value = inRAFs[0].readLong(); } catch (EOFException e) { eof = true; } @@ -136,7 +140,7 @@ public class MSBDiskFPSet extends HeapBasedDiskFPSet { if ((value < fp || eol) && !eof) { writeFP(outRAF, value); try { - value = inRAF.readLong(); + value = inRAFs[0].readLong(); } catch (EOFException e) { eof = true; } diff --git a/tlatools/src/tlc2/tool/fp/MSBMultiFPSet.java b/tlatools/src/tlc2/tool/fp/MSBMultiFPSet.java deleted file mode 100644 index f95177f2ca8f1210aab75f7b78fc1a10276ee558..0000000000000000000000000000000000000000 --- a/tlatools/src/tlc2/tool/fp/MSBMultiFPSet.java +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2012 Markus Alexander Kuppe. All rights reserved. -package tlc2.tool.fp; - -import java.rmi.RemoteException; - -@SuppressWarnings("serial") -public class MSBMultiFPSet extends MultiFPSet { - - private final int moveBy; - - public MSBMultiFPSet(final FPSetConfiguration fpSetConfiguration) throws RemoteException { - super(fpSetConfiguration); - - this.moveBy = 63 - fpSetConfiguration.getFpBits(); - } - - /* (non-Javadoc) - * @see tlc2.tool.fp.MultiFPSet#getNestedFPSets(int, long, int) - */ - protected FPSet[] getNestedFPSets(final FPSetConfiguration fpSetConfiguration) throws RemoteException { - int len = fpSetConfiguration.getMultiFPSetCnt(); - final FPSet[] s = new FPSet[len]; - for (int i = 0; i < len; i++) { - s[i] = FPSetFactory.getFPSet(new MultiFPSetConfiguration(fpSetConfiguration)); - } - return s; - } - - /* (non-Javadoc) - * @see tlc2.tool.fp.MultiFPSet#getFPSet(long) - */ - protected FPSet getFPSet(long fp) { - long fp0 = fp & 0x7FFFFFFFFFFFFFFFL; // really zero msb? - // determine corresponding fpset based on the msb bits - final int idx = (int) (fp0 >> moveBy); - return this.sets[idx]; - } -} diff --git a/tlatools/src/tlc2/tool/fp/MemFPSet.java b/tlatools/src/tlc2/tool/fp/MemFPSet.java index 4bae4b362032a16646cbf9ff50216488e440cf97..d3772a9eb10c38ed46962929d7c5386b66f3f75c 100644 --- a/tlatools/src/tlc2/tool/fp/MemFPSet.java +++ b/tlatools/src/tlc2/tool/fp/MemFPSet.java @@ -202,6 +202,7 @@ public class MemFPSet extends FPSet { } public final void exit(boolean cleanup) throws IOException { + super.exit(cleanup); if (cleanup) { // Delete the metadata directory: File file = new File(this.metadir); @@ -290,14 +291,10 @@ public class MemFPSet extends FPSet { this.recover(this.filename); } - public final void prepareRecovery() throws IOException { /*SKIP*/ } - public final void recoverFP(long fp) throws IOException { Assert.check(!this.put(fp), EC.TLC_FP_NOT_IN_SET); } - public final void completeRecovery() throws IOException { /*SKIP*/ } - final private String chkptName(String fname, String ext) { return this.metadir + FileUtil.separator + fname + ".fp." + ext; } diff --git a/tlatools/src/tlc2/tool/fp/MemFPSet1.java b/tlatools/src/tlc2/tool/fp/MemFPSet1.java index 858a142be6fa90335e6f4a1a3528057be1567cc0..f434cf4773410dac5595542a1ae5a553e0350aca 100644 --- a/tlatools/src/tlc2/tool/fp/MemFPSet1.java +++ b/tlatools/src/tlc2/tool/fp/MemFPSet1.java @@ -51,6 +51,7 @@ public final class MemFPSet1 extends FPSet { } public final void exit(boolean cleanup) throws IOException { + super.exit(cleanup); if (cleanup) { // Delete the metadata directory: File file = new File(this.metadir); @@ -99,14 +100,10 @@ public final class MemFPSet1 extends FPSet { this.recover(this.filename); } - public final void prepareRecovery() throws IOException { /*SKIP*/ } - public final void recoverFP(long fp) throws IOException { Assert.check(!this.set.put(fp), EC.TLC_FP_NOT_IN_SET); } - public final void completeRecovery() throws IOException { /*SKIP*/ } - private final String chkptName(String fname, String ext) { return this.metadir + FileUtil.separator + fname + ".fp." + ext; } diff --git a/tlatools/src/tlc2/tool/fp/MemFPSet2.java b/tlatools/src/tlc2/tool/fp/MemFPSet2.java index 4e97b12e8890a171ac2c1c89e13c0fe632a81e09..e9bd74a8cdcb8ec9c89076138a0d94afb8c2ed1b 100644 --- a/tlatools/src/tlc2/tool/fp/MemFPSet2.java +++ b/tlatools/src/tlc2/tool/fp/MemFPSet2.java @@ -130,6 +130,7 @@ public final class MemFPSet2 extends FPSet { } public final void exit(boolean cleanup) throws IOException { + super.exit(cleanup); if (cleanup) { // Delete the metadata directory: FileUtil.deleteDir(this.metadir, true); @@ -250,14 +251,10 @@ public final class MemFPSet2 extends FPSet { this.recover(this.filename); } - public final void prepareRecovery() throws IOException { /*SKIP*/ } - public final void recoverFP(long fp) throws IOException { Assert.check(!this.put(fp), EC.TLC_FP_NOT_IN_SET); } - public final void completeRecovery() throws IOException { /*SKIP*/ } - final private String chkptName(String fname, String ext) { return this.metadir + FileUtil.separator + fname + ".fp." + ext; } diff --git a/tlatools/src/tlc2/tool/fp/MultiFPSet.java b/tlatools/src/tlc2/tool/fp/MultiFPSet.java index d3e12673796e773d4741b13215861211808cbda3..9160d0b57067753f5072c5e4723208e1c1787e5a 100644 --- a/tlatools/src/tlc2/tool/fp/MultiFPSet.java +++ b/tlatools/src/tlc2/tool/fp/MultiFPSet.java @@ -153,10 +153,23 @@ public class MultiFPSet extends FPSet { return res; } + /* (non-Javadoc) + * @see tlc2.tool.fp.FPSet#checkInvariant() + */ + public boolean checkInvariant() throws IOException { + for (int i = 0; i < this.sets.length; i++) { + if (!this.sets[i].checkInvariant()) { + return false; + } + } + return true; + } + /* (non-Javadoc) * @see tlc2.tool.fp.FPSet#exit(boolean) */ public final void exit(boolean cleanup) throws IOException { + super.exit(cleanup); for (int i = 0; i < this.sets.length; i++) { this.sets[i].exit(cleanup); } @@ -184,10 +197,6 @@ public class MultiFPSet extends FPSet { * @see tlc2.tool.fp.FPSet#recover() */ public final void recover() throws IOException { - for (int i = 0; i < this.sets.length; i++) { - this.sets[i].prepareRecovery(); - } - long recoverPtr = TLCTrace.getRecoverPtr(); BufferedRandomAccessFile braf = new BufferedRandomAccessFile(TLCTrace.getFilename(), "r"); while (braf.getFilePointer() < recoverPtr) { @@ -196,19 +205,6 @@ public class MultiFPSet extends FPSet { getFPSet(fp).recoverFP(fp); } braf.close(); - - for (int i = 0; i < this.sets.length; i++) { - this.sets[i].completeRecovery(); - } - } - - /* (non-Javadoc) - * - * NOOP! - * - * @see tlc2.tool.fp.FPSet#prepareRecovery() - */ - public final void prepareRecovery() throws IOException { /* SKIP */ } /* (non-Javadoc) @@ -218,15 +214,6 @@ public class MultiFPSet extends FPSet { Assert.check(!this.put(fp), EC.TLC_FP_NOT_IN_SET); } - /* (non-Javadoc) - * - * NOOP! - * - * @see tlc2.tool.fp.FPSet#completeRecovery() - */ - public final void completeRecovery() throws IOException { /* SKIP */ - } - /* (non-Javadoc) * @see tlc2.tool.fp.FPSet#beginChkpt(java.lang.String) */ diff --git a/tlatools/src/tlc2/tool/fp/MultiFPSetConfiguration.java b/tlatools/src/tlc2/tool/fp/MultiFPSetConfiguration.java index 8d26cd5c1d4ec2552855f9389739b47cedc702a5..7969b2de35c1f5fe938d69e792a6341c59e1ca79 100644 --- a/tlatools/src/tlc2/tool/fp/MultiFPSetConfiguration.java +++ b/tlatools/src/tlc2/tool/fp/MultiFPSetConfiguration.java @@ -11,7 +11,7 @@ class MultiFPSetConfiguration extends FPSetConfiguration { // Set wrapper to values of config to be wrapped this.fpBits = fpSetConfig.getFpBits(); this.ratio = fpSetConfig.getRatio(); - + this.implementation = fpSetConfig.getImplementation(); // Sanity check configuration right away if (getMemoryInFingerprintCnt() <= 0) { throw new IllegalArgumentException( diff --git a/tlatools/src/tlc2/tool/fp/OffHeapDiskFPSet.java b/tlatools/src/tlc2/tool/fp/OffHeapDiskFPSet.java index d3322f5332e07e3ed97c8098f76d0e77e0906f40..fb0e1979c0cbdae93b3a10000989230db60f47a6 100644 --- a/tlatools/src/tlc2/tool/fp/OffHeapDiskFPSet.java +++ b/tlatools/src/tlc2/tool/fp/OffHeapDiskFPSet.java @@ -12,37 +12,18 @@ import java.util.TreeSet; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; -import sun.misc.Unsafe; import tlc2.output.EC; import tlc2.output.MP; import util.Assert; -@SuppressWarnings({ "serial", "restriction" }) -public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { +@SuppressWarnings({ "serial" }) +public final class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { protected static final double COLLISION_BUCKET_RATIO = .025d; protected final int bucketCapacity; - /** - * This implementation uses sun.misc.Unsafe instead of a wrapping - * java.nio.ByteBuffer due to the fact that the former's allocateMemory - * takes a long argument, while the latter is restricted to - * Integer.MAX_VALUE as its capacity.<br> - * In 2012 this poses a too hard limit on the usable memory, hence we trade - * generality for performance. - */ - private final Unsafe u; - - /** - * The base address allocated for fingerprints - */ - private final long baseAddress; - - /** - * Address size (either 4 or 8 bytes) depending on current architecture - */ - private final int logAddressSize; + private final LongArray array; /** * A bucket containing collision elements which is used as a fall-back if a @@ -59,7 +40,7 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { * obsolete halving the memory footprint. * </p> */ - protected CollisionBucket collisionBucket; + protected final CollisionBucket collisionBucket; /** * The indexer maps a fingerprint to a in-memory bucket and the associated lock @@ -74,35 +55,14 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { final long memoryInFingerprintCnt = fpSetConfig.getMemoryInFingerprintCnt(); // Determine base address which varies depending on machine architecture. - u = OffHeapDiskFPSetHelper.getUnsafe(); - int addressSize = u.addressSize(); - int cnt = -1; - while (addressSize > 0) { - cnt++; - addressSize = addressSize >>> 1; // == (n/2) - } - logAddressSize = cnt; - - // Allocate non-heap memory for maxInMemoryCapacity fingerprints - long bytes = memoryInFingerprintCnt << logAddressSize; - - baseAddress = u.allocateMemory(bytes); + this.array = new LongArray(memoryInFingerprintCnt); + this.bucketCapacity = InitialBucketCapacity; final int csCapacity = (int) (maxTblCnt * COLLISION_BUCKET_RATIO); this.collisionBucket = new TreeSetCollisionBucket(csCapacity); this.flusher = new OffHeapMSBFlusher(); - // Move n as many times to the right to calculate moveBy. moveBy is the - // number of bits the (fp & mask) has to be right shifted to make the - // logical bucket index. - long n = (Long.MAX_VALUE >>> fpSetConfig.getPrefixBits()) - (memoryInFingerprintCnt - 1); - int moveBy = 0; - while (n >= memoryInFingerprintCnt) { - moveBy++; - n = n >>> 1; // == (n/2) - } - // Calculate Hamming weight of maxTblCnt final int bitCount = Long.bitCount(memoryInFingerprintCnt); @@ -116,28 +76,10 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { // increased linear search. But linear search on maximally 31 elements // still outperforms disk I/0. if (bitCount == 1) { - bucketCapacity = InitialBucketCapacity; - this.indexer = new BitshiftingIndexer(moveBy, fpSetConfig.getPrefixBits()); + this.indexer = new BitshiftingIndexer(bucketCapacity, memoryInFingerprintCnt, fpSetConfig.getFpBits()); } else { - // Round maxInMemoryCapacity to next lower 2^n power - cnt = -1; - while (bytes > 0) { - cnt++; - bytes = bytes >>> 1; - } - - // Extra memory that cannot be addressed by BitshiftingIndexer - final long extraMem = (memoryInFingerprintCnt * LongSize) - (long) Math.pow(2, cnt); - - // Divide extra memory across addressable buckets - int x = (int) (extraMem / ((n + 1) / InitialBucketCapacity)); - bucketCapacity = InitialBucketCapacity + (x / LongSize) ; - // Twice InitialBucketCapacity would mean we could have used one - // more bit for addressing. - Assert.check(bucketCapacity < (2 * InitialBucketCapacity), EC.GENERAL); - // non 2^n buckets cannot use a bit shifting indexer - this.indexer = new Indexer(moveBy, fpSetConfig.getPrefixBits()); + this.indexer = new Indexer(bucketCapacity, memoryInFingerprintCnt, fpSetConfig.getFpBits()); } } @@ -148,7 +90,7 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { throws IOException { super.init(numThreads, aMetadir, filename); - OffHeapDiskFPSetHelper.zeroMemory(u, baseAddress, numThreads, fpSetConfig.getMemoryInFingerprintCnt()); + array.zeroMemory(numThreads); } /* (non-Javadoc) @@ -158,14 +100,13 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { long size = 44; // approx size of this DiskFPSet object size += maxTblCnt * (long) LongSize; size += getIndexCapacity() * 4; - size += getCollisionBucketCnt() * (long) LongSize; // ignoring the internal TreeSet overhead here return size; } /* (non-Javadoc) * @see tlc2.tool.fp.DiskFPSet#needsDiskFlush() */ - protected boolean needsDiskFlush() { + protected final boolean needsDiskFlush() { // Only flush due to collision ratio when primary hash table is at least // 25% full. Otherwise a second flush potentially immediately follows a // first one, when both values for tblCnt and collision size can be small. @@ -182,7 +123,7 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { * from growing past it. * @return true iff the current hash table load exceeds the given limit */ - private boolean loadFactorExceeds(final double limit) { + private final boolean loadFactorExceeds(final double limit) { // Base this one the primary hash table only and exclude the // collision bucket final double d = (this.tblCnt.doubleValue() - collisionBucket.size()) / (double) this.maxTblCnt; @@ -194,7 +135,7 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { * @return The proportional size of the collision bucket compared to the * size of the set. */ - private boolean collisionRatioExceeds(final double limit) { + private final boolean collisionRatioExceeds(final double limit) { // Do not use the thread safe getCollisionRatio here to avoid // unnecessary locking. put() calls us holding a memory write locking // which also blocks writers to collisionBucket. @@ -209,21 +150,21 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { * @see tlc2.tool.fp.DiskFPSet#getLockIndex(long) */ @Override - protected int getLockIndex(long fp) { + protected final int getLockIndex(long fp) { return this.indexer.getLockIndex(fp); } /* (non-Javadoc) * @see tlc2.tool.fp.DiskFPSet#memLookup(long) */ - boolean memLookup(long fp) { + final boolean memLookup(long fp) { final long position = indexer.getLogicalPosition(fp); // Linearly search the logical bucket; 0L is an invalid fp and marks the // end of the allocated bucket long l = -1L; for (int i = 0; i < bucketCapacity && l != 0L; i++) { - l = u.getAddress(log2phy(position, i)); + l = array.get(position + i); // zero the long msb (which is 1 if fp has been flushed to disk) if (fp == (l & 0x7FFFFFFFFFFFFFFFL)) { return true; @@ -238,7 +179,7 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { * @param fp * @return true iff fp is in the collision bucket */ - protected boolean csLookup(long fp) { + protected final boolean csLookup(long fp) { try { csRWLock.readLock().lock(); return collisionBucket.contains(fp); @@ -250,13 +191,13 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { /* (non-Javadoc) * @see tlc2.tool.fp.DiskFPSet#memInsert(long) */ - boolean memInsert(long fp) { + final boolean memInsert(long fp) { final long position = indexer.getLogicalPosition(fp); long l = -1; long freePosition = -1L; for (int i = 0; i < bucketCapacity && l != 0L; i++) { - l = u.getAddress(log2phy(position, i)); + l = array.get(position + i); // zero the long msb (which is 1 if fp has been flushed to disk) if (fp == (l & 0x7FFFFFFFFFFFFFFFL)) { return true; @@ -265,22 +206,22 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { tblLoad++; } // empty or disk written slot found, simply insert at _current_ position - u.putAddress(log2phy(position, i), fp); + this.array.set(position + i, fp); this.tblCnt.getAndIncrement(); return false; } else if (l < 0L && freePosition == -1) { // record free (disk written fp) slot - freePosition = log2phy(position, i); + freePosition = position + i; } } - // index slot overflow, thus add to collisionBucket of write to free - // position. if (freePosition > -1 && !csLookup(fp)) { - u.putAddress(freePosition, fp); + // Write to free slot + this.array.set(freePosition, fp); this.tblCnt.getAndIncrement(); return false; } else { + // Index slot (bucket) overflow, thus add to collisionBucket boolean success = csInsert(fp); if (success) { this.tblCnt.getAndIncrement(); @@ -294,7 +235,7 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { * @param fp * @return true iff fp has been added to the collision bucket */ - protected boolean csInsert(long fp) { + protected final boolean csInsert(long fp) { try { csRWLock.writeLock().lock(); return collisionBucket.add(fp); @@ -303,29 +244,6 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { } } - /** - * Converts from logical bucket index numbers and in-bucket position to a - * physical memory address. - * - * @param bucketNumber - * @param inBucketPosition - * @return The physical address of the fp slot - */ - private long log2phy(long bucketNumber, long inBucketPosition) { - return log2phy(bucketNumber + inBucketPosition); - } - - /** - * Converts from logical addresses to - * physical memory addresses. - * - * @param logicalAddress - * @return The physical address of the fp slot - */ - private long log2phy(long logicalAddress) { - return baseAddress + (logicalAddress << logAddressSize); - } - /* (non-Javadoc) * @see tlc2.tool.fp.DiskFPSet#getTblCapacity() */ @@ -333,26 +251,9 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { return maxTblCnt; } - /* (non-Javadoc) - * @see tlc2.tool.fp.DiskFPSet#getCollisionBucketCnt() - */ - public long getCollisionBucketCnt() { - try { - this.csRWLock.readLock().lock(); - return collisionBucket.size(); - } finally { - this.csRWLock.readLock().unlock(); - } - } - - /* (non-Javadoc) - * @see tlc2.tool.fp.DiskFPSet#getCollisionRatio() - */ - public double getCollisionRatio() { - return (double) getCollisionBucketCnt() / tblCnt.doubleValue(); - } - - public class Indexer { + public static class Indexer { + protected final int bcktCapacity; + protected final long prefixMask; /** * Number of bits to right shift bits during index calculation @@ -365,22 +266,36 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { */ protected final int lockMoveBy; - public Indexer(final int moveBy, int prefixBits) { - // same for lockCnt - this.prefixMask = 0x7FFFFFFFFFFFFFFFL >>> prefixBits; + public Indexer(final int bucketCapacity, final long positions, int prefixBits) { + this.bcktCapacity = bucketCapacity; + this.prefixMask = 0xFFFFFFFFFFFFFFFFL >>> prefixBits; + + // Move n as many times to the right to calculate moveBy. moveBy is the + // number of bits the (fp & mask) has to be right shifted to make the + // logical bucket index. + long n = (0xFFFFFFFFFFFFFFFFL >>> prefixBits) - (positions - 1); + int moveBy = 0; + while (n >= positions) { + moveBy++; + n = n >>> 1; // == (n/2) + } this.moveBy = moveBy; - this.lockMoveBy = 63 - prefixBits - LogLockCnt; + + // ...same for lock index. + n = (0xFFFFFFFFFFFFFFFFL >>> prefixBits) - ((1 << LogLockCnt) - 1); + moveBy = 0; + while (n >= 1 << LogLockCnt) { + moveBy++; + n = n >>> 1; // == (n/2) + } + this.lockMoveBy = moveBy; } /* (non-Javadoc) * @see tlc2.tool.fp.DiskFPSet#getLockIndex(long) */ protected int getLockIndex(long fp) { - // calculate hash value (just n most significant bits of fp) which is - // used as an index address - final long idx = (fp & prefixMask) >> lockMoveBy; - Assert.check(0 <= idx && idx < lockCnt, EC.GENERAL); - return (int) idx; + return (int) ((fp & prefixMask) >> lockMoveBy); } /** @@ -391,12 +306,11 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { // push MSBs for moveBy positions to the right and align with a bucket address long position = (fp & prefixMask) >> moveBy; position = floorToBucket(position); - Assert.check(0 <= position && position < maxTblCnt, EC.GENERAL); return position; } public long getNextBucketBasePosition(long logicalPosition) { - return floorToBucket(logicalPosition + bucketCapacity); + return floorToBucket(logicalPosition + bcktCapacity); } /** @@ -407,8 +321,8 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { * @return */ private long floorToBucket(long logicalPosition) { - long d = (long) Math.floor(logicalPosition / bucketCapacity); - return bucketCapacity * d; + long d = (long) Math.floor(logicalPosition / bcktCapacity); + return bcktCapacity * d; } /** @@ -416,7 +330,7 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { * @return true iff logicalPosition is a multiple of bucketCapacity */ public boolean isBucketBasePosition(long logicalPosition) { - return logicalPosition % bucketCapacity == 0; + return logicalPosition % bcktCapacity == 0; } } @@ -426,16 +340,16 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { * executed on every {@link FPSet#put(long)} or {@link FPSet#contains(long)} * , it is worthwhile to minimize is execution overhead. */ - public class BitshiftingIndexer extends Indexer { + public static class BitshiftingIndexer extends Indexer { /** * Mask used to round of to a bucket address which is a power of 2. */ protected final long bucketBaseIdx; - public BitshiftingIndexer(final int moveBy, final int prefixBits) throws RemoteException { - super(moveBy, prefixBits); - this.bucketBaseIdx = 0x7FFFFFFFFFFFFFFFL - (bucketCapacity - 1); + public BitshiftingIndexer(final int bucketCapacity, final long memoryInFingerprintCnt, final int prefixBits) throws RemoteException { + super(bucketCapacity, memoryInFingerprintCnt, prefixBits); + this.bucketBaseIdx = 0xFFFFFFFFFFFFFFFFL - (bcktCapacity - 1); } /* (non-Javadoc) @@ -444,9 +358,7 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { @Override protected long getLogicalPosition(final long fp) { // push MSBs for moveBy positions to the right and align with a bucket address - long position = ((fp & prefixMask) >> moveBy) & bucketBaseIdx; - //Assert.check(0 <= position && position < maxTblCnt, EC.GENERAL); - return position; + return ((fp & prefixMask) >> moveBy) & bucketBaseIdx; } /* (non-Javadoc) @@ -454,7 +366,7 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { */ @Override public long getNextBucketBasePosition(long logicalPosition) { - return (logicalPosition + bucketCapacity) & bucketBaseIdx; + return (logicalPosition + bcktCapacity) & bucketBaseIdx; } /* (non-Javadoc) @@ -462,7 +374,7 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { */ @Override public boolean isBucketBasePosition(long logicalPosition) { - return (logicalPosition & (InitialBucketCapacity - 1)) == 0; + return (logicalPosition & (bcktCapacity - 1)) == 0; } } @@ -483,9 +395,9 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { * @see tlc2.tool.fp.MSBDiskFPSet#mergeNewEntries(java.io.RandomAccessFile, java.io.RandomAccessFile) */ @Override - protected void mergeNewEntries(RandomAccessFile inRAF, RandomAccessFile outRAF) throws IOException { + protected void mergeNewEntries(RandomAccessFile[] inRAFs, RandomAccessFile outRAF) throws IOException { final long buffLen = tblCnt.get(); - ByteBufferIterator itr = new ByteBufferIterator(u, baseAddress, collisionBucket, buffLen); + ByteBufferIterator itr = new ByteBufferIterator(array, collisionBucket, buffLen); // Precompute the maximum value of the new file long maxVal = itr.getLast(); @@ -504,7 +416,7 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { boolean eof = false; if (fileCnt > 0) { try { - value = inRAF.readLong(); + value = inRAFs[0].readLong(); } catch (EOFException e) { eof = true; } @@ -519,7 +431,7 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { if ((value < fp || eol) && !eof) { writeFP(outRAF, value); try { - value = inRAF.readLong(); + value = inRAFs[0].readLong(); } catch (EOFException e) { eof = true; } @@ -585,10 +497,10 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { private long readElements = 0L; private long cache = -1L; - private final Unsafe unsafe; + private final LongArray array; - public ByteBufferIterator(Unsafe u, long baseAddress, CollisionBucket collisionBucket, long expectedElements) { - this.unsafe = u; + public ByteBufferIterator(LongArray helper, CollisionBucket collisionBucket, long expectedElements) { + this.array = helper; this.logicalPosition = 0L; this.totalElements = expectedElements; @@ -644,20 +556,20 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { private long getNextFromBuffer() { sortNextBucket(); - long l = unsafe.getAddress(log2phy(logicalPosition)); + long l = array.get(logicalPosition); if (l > 0L) { - unsafe.putAddress(log2phy(logicalPosition++), l | 0x8000000000000000L); + array.set(logicalPosition++, l | 0x8000000000000000L); return l; } - while ((l = unsafe.getAddress(log2phy(logicalPosition))) <= 0L && logicalPosition < maxTblCnt) { + while ((l = array.get(logicalPosition)) <= 0L && logicalPosition < maxTblCnt) { // increment position to next bucket logicalPosition = indexer.getNextBucketBasePosition(logicalPosition); sortNextBucket(); } if (l > 0L) { - unsafe.putAddress(log2phy(logicalPosition++), l | 0x8000000000000000L); + array.set(logicalPosition++, l | 0x8000000000000000L); return l; } throw new NoSuchElementException(); @@ -670,7 +582,7 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { long[] longBuffer = new long[bucketCapacity]; int i = 0; for (; i < bucketCapacity; i++) { - long l = unsafe.getAddress(log2phy(logicalPosition + i)); + long l = array.get(logicalPosition + i); if (l <= 0L) { break; } else { @@ -680,7 +592,7 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { if (i > 0) { Arrays.sort(longBuffer, 0, i); for (int j = 0; j < i; j++) { - unsafe.putAddress(log2phy(logicalPosition, j), + array.set(logicalPosition + j, longBuffer[j]); } } @@ -715,7 +627,7 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { // this could be achieved recursively, but this can cause a // stack overflow). long l = 1L; - while ((l = unsafe.getAddress(log2phy(logicalPosition-- + bucketCapacity - 1))) <= 0L) { + while ((l = array.get(logicalPosition-- + bucketCapacity - 1)) <= 0L) { sortNextBucket(); } @@ -735,14 +647,6 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { } throw new NoSuchElementException(); } - - // prevent synthetic methods - private long log2phy(long logicalAddress) { - return OffHeapDiskFPSet.this.log2phy(logicalAddress); - } - private long log2phy(long bucketAddress, long inBucketAddress) { - return OffHeapDiskFPSet.this.log2phy(bucketAddress, inBucketAddress); - } } public interface CollisionBucket { @@ -843,49 +747,4 @@ public class OffHeapDiskFPSet extends DiskFPSet implements FPSetStatistic { return set.size(); } } - - public class PrettyPrinter { - /** - * Print the current in-memory hash table to System.out with increments - */ - public void printDistribution(final int increments) { - final int mask = increments - 1; - int cnt = 0; - int min = Integer.MAX_VALUE; - int max = 0; - for (long i = maxTblCnt - 1; i >= 0; i--) { - if ((i & mask) == 0) { - if (cnt > max) { - max = cnt; - } - if (cnt < min) { - min = cnt; - } - System.out.println(i + " " + cnt); - cnt = 0; - } - if (u.getAddress(log2phy(i)) > 0L) { - cnt++; - } - } - System.out.println("max: " + max + " min: " + min + " avg:" + (tblLoad / tblCnt.doubleValue())); - } - - public void printBuckets() { - printBuckets(0, maxTblCnt); - } - - /** - * @param from inclusive lower bound - * @param to exclusive upper bound - */ - public void printBuckets(int from, long to) { - for (long i = from; i < maxTblCnt && i < to; i++) { - if (i % bucketCapacity == 0) { - System.out.println("Bucket idx: " + i); - } - System.out.println(u.getAddress(log2phy(i))); - } - } - } } diff --git a/tlatools/src/tlc2/tool/fp/OffHeapDiskFPSetHelper.java b/tlatools/src/tlc2/tool/fp/OffHeapDiskFPSetHelper.java deleted file mode 100644 index 9a71228dac904480f07b887080d785082d1ec8e1..0000000000000000000000000000000000000000 --- a/tlatools/src/tlc2/tool/fp/OffHeapDiskFPSetHelper.java +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (c) 2012 Markus Alexander Kuppe. All rights reserved. -package tlc2.tool.fp; - -import java.io.IOException; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; - -import tlc2.output.EC; -import util.Assert; - -import sun.misc.Unsafe; - -@SuppressWarnings("restriction") -public final class OffHeapDiskFPSetHelper { - - private OffHeapDiskFPSetHelper() { - // no instantiation! - } - - /** - * @return An Unsafe object or a {@link RuntimeException} wrapping any {@link Exception}. - */ - public static sun.misc.Unsafe getUnsafe() { - // More Details can be found at: http://www.mydailyjava.blogspot.no/2013/12/sunmiscunsafe.html - try { - // Use reflection API to unhide Unsafe - final Field f = sun.misc.Unsafe.class.getDeclaredField("theUnsafe"); - f.setAccessible(true); - return (sun.misc.Unsafe) f.get(null); - } catch (Exception e) { - throw new RuntimeException( - "Trying to use Sun VM specific sun.misc.Unsafe implementation but no Sun based VM detected.", - e); - } - } - - /** - * Initializes the memory by overriding each byte with zero starting at - * <code>baseAddress</code> and ending when <code>fingerprintCount</code> - * bytes have been written. - * <p> - * To speed up the initialization, <code>numThreads</code> allows to set a - * thread count with which zeroing is then done in parallel. - * - * @param u - * @param baseAddress Base address of the (previously) allocated memory - * @param numThreads Number of threads used to zero memory - * @param fingerprintCount Number of fingerprint for which the memory should be initialized - * @throws IOException - */ - public static void zeroMemory(final Unsafe u, final long baseAddress, int numThreads, final long fingerprintCount) - throws IOException { - - final int addressSize = u.addressSize(); - final long segmentSize = fingerprintCount / numThreads; - - final ExecutorService es = Executors.newFixedThreadPool(numThreads); - try { - final Collection<Callable<Boolean>> tasks = new ArrayList<Callable<Boolean>>(numThreads); - for (int i = 0; i < numThreads; i++) { - final int offset = i; - tasks.add(new Callable<Boolean>() { - - public Boolean call() throws Exception { - // Null memory (done in parallel on segments). - // This is essential as allocateMemory returns - // uninitialized memory and - // memInsert/memLockup utilize 0L as a mark for an - // unused fingerprint slot. - // Otherwise memory garbage wouldn't be distinguishable - // from a true fp. - final long lowerBound = segmentSize * offset; - final long upperBound = (1 + offset) * segmentSize; - for (long i = lowerBound; i < upperBound; i++) { - final long address = baseAddress + (i * addressSize); - u.putAddress(address, 0L); - } - return true; - } - }); - } - final List<Future<Boolean>> invokeAll = es.invokeAll(tasks); - Assert.check(!invokeAll.isEmpty(), EC.GENERAL); - } catch (InterruptedException e) { - // not expected to happen - e.printStackTrace(); - } finally { - es.shutdown(); - } - } -} diff --git a/tlatools/src/tlc2/tool/fp/management/DiskFPSetMXBean.java b/tlatools/src/tlc2/tool/fp/management/DiskFPSetMXBean.java index 6ca77dfc1cfce40e641db52692cd7bb50893ccd9..573c2674c74a782205844bf14f8e3ea132e68540 100644 --- a/tlatools/src/tlc2/tool/fp/management/DiskFPSetMXBean.java +++ b/tlatools/src/tlc2/tool/fp/management/DiskFPSetMXBean.java @@ -8,6 +8,16 @@ import tlc2.tool.fp.FPSet; public interface DiskFPSetMXBean { + /** + * @return The version of TLC. + */ + String getVersion(); + + /** + * @return The code revision corresponding to this version of TLC. + */ + String getRevision(); + /** * @see DiskFPSet#getDiskHitCnt() */ @@ -90,19 +100,14 @@ public interface DiskFPSetMXBean { long getFlushTime(); /** - * @see DiskFPSet#getReaderWriterCnt() + * @see DiskFPSet#getLockCnt() */ - int getReaderWriterCnt(); - - /** - * @see DiskFPSet#getCollisionBucketCnt() - */ - long getCollisionBucketCnt(); + int getLockCnt(); /** - * @see DiskFPSet#getCollisionRatio() + * @see DiskFPSet#getReaderWriterCnt() */ - double getCollisionRatio(); + int getReaderWriterCnt(); /** * @see DiskFPSet#getLoadFactor() diff --git a/tlatools/src/tlc2/tool/fp/management/DiskFPSetMXWrapper.java b/tlatools/src/tlc2/tool/fp/management/DiskFPSetMXWrapper.java index 74d097f8b843f17229672f6ef8cd2bf250457dcc..6da1f5e7c868ba587576bdb0a5df74c19690d217 100644 --- a/tlatools/src/tlc2/tool/fp/management/DiskFPSetMXWrapper.java +++ b/tlatools/src/tlc2/tool/fp/management/DiskFPSetMXWrapper.java @@ -21,8 +21,11 @@ public class DiskFPSetMXWrapper extends TLCStandardMBean implements DiskFPSetMXB super(DiskFPSetMXBean.class); fpset = diskFPSet; + // Append ",name=COUNT" suffix to objectname to expose all DiskFPSet instances + // as children of type DiskFPSet. However, jfr2jmx does not support it, nor does + // jmx2munin used by cloud based distributed TLC. objectName = "DiskFPSet" + COUNT++; - registerMBean("tlc2.tool.fp:type=" + objectName); + registerMBean("tlc2.tool.fp:type=" + objectName/* + ",name=" + COUNT++*/); } public String getObjectName() { @@ -164,20 +167,6 @@ public class DiskFPSetMXWrapper extends TLCStandardMBean implements DiskFPSetMXB return fpset.getReaderWriterCnt(); } - /* (non-Javadoc) - * @see tlc2.tool.fp.management.DiskFPSetMXBean#getCollisionBucketCnt() - */ - public long getCollisionBucketCnt() { - return fpset.getCollisionBucketCnt(); - } - - /* (non-Javadoc) - * @see tlc2.tool.fp.management.DiskFPSetMXBean#getCollisionRatio() - */ - public double getCollisionRatio() { - return fpset.getCollisionRatio(); - } - /* (non-Javadoc) * @see tlc2.tool.fp.management.DiskFPSetMXBean#getLoadFactor() */ @@ -198,4 +187,11 @@ public class DiskFPSetMXWrapper extends TLCStandardMBean implements DiskFPSetMXB public boolean checkInvariant() throws IOException { return fpset.checkInvariant(); } + + /* (non-Javadoc) + * @see tlc2.tool.fp.management.DiskFPSetMXBean#getLockCnt() + */ + public int getLockCnt() { + return fpset.getLockCnt(); + } } diff --git a/tlatools/src/tlc2/tool/liveness/DotLivenessStateWriter.java b/tlatools/src/tlc2/tool/liveness/DotLivenessStateWriter.java new file mode 100644 index 0000000000000000000000000000000000000000..6df00fedd47fba71260f70041a8d7f1d7b0db0f9 --- /dev/null +++ b/tlatools/src/tlc2/tool/liveness/DotLivenessStateWriter.java @@ -0,0 +1,124 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.liveness; + +import java.io.IOException; + +import tlc2.tool.TLCState; +import tlc2.util.BitVector; +import tlc2.util.DotStateWriter; + +public class DotLivenessStateWriter extends DotStateWriter implements ILivenessStateWriter { + + public DotLivenessStateWriter(String fname) throws IOException { + super(fname.replace(".dot", "_liveness.dot"), ""); + } + + /* (non-Javadoc) + * @see tlc2.tool.liveness.ILivenessStateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.liveness.TBGraphNode) + */ + public void writeState(TLCState state, TBGraphNode tableauNode) { + + // Marker the state as an initial state by using a filled style. + this.writer.append("\""); + this.writer.append(Long.toString(state.fingerPrint())); + this.writer.append("."); + this.writer.append(Integer.toString(tableauNode.getIndex())); + this.writer.append("\""); + this.writer.append(" [style = filled]"); + this.writer.append(" [label=\""); + this.writer.append(states2dot(state)); + this.writer.append("\n#" + Long.toString(state.fingerPrint()) + "." + + tableauNode.getIndex() + "#"); + this.writer.append("\"]"); + this.writer.append("\n"); + } + + /* (non-Javadoc) + * @see tlc2.tool.liveness.ILivenessStateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.liveness.TBGraphNode, tlc2.tool.TLCState, tlc2.tool.liveness.TBGraphNode, boolean) + */ + public void writeState(TLCState state, TBGraphNode tableauNode, TLCState successor, + TBGraphNode tableauNodeSuccessor, BitVector actionChecks, int from, int length, boolean successorStateIsNew) { + writeState(state, tableauNode, successor, tableauNodeSuccessor, actionChecks, from, length, successorStateIsNew, Visualization.DEFAULT); + } + + /* (non-Javadoc) + * @see tlc2.tool.liveness.ILivenessStateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.liveness.TBGraphNode, tlc2.tool.TLCState, tlc2.tool.liveness.TBGraphNode, boolean, tlc2.util.IStateWriter.Visualization) + */ + public void writeState(TLCState state, TBGraphNode tableauNode, TLCState successor, + TBGraphNode tableauNodeSuccessor, BitVector actionChecks, int from, int length, boolean successorStateIsNew, Visualization visualization) { + + final String successorsFP = Long.toString(successor.fingerPrint()); + + // Write the transition + this.writer.append("\""); + this.writer.append(Long.toString(state.fingerPrint())); + this.writer.append("."); + this.writer.append(Integer.toString(tableauNode.getIndex())); + this.writer.append("\""); + this.writer.append(" -> "); + this.writer.append("\""); + this.writer.append(successorsFP); + this.writer.append("."); + this.writer.append(Integer.toString(tableauNodeSuccessor.getIndex())); + this.writer.append("\""); + if (visualization == Visualization.STUTTERING) { + this.writer.append(" [style=\"dashed\"]"); + } + if (visualization == Visualization.DOTTED) { + this.writer.append(" [style=\"dotted\"]"); + } + if (length > 0) { + this.writer.append(" [label=\"" + actionChecks.toString(from, length, 't', 'f') + "\"]"); + } + this.writer.append(";\n"); + + // If the successor is new, print the state's label. Labels are printed + // when writeState sees the successor. It does not print the label for + // the current state. If it would print the label for the current state, + // the init state labels would be printed twice. + if (successorStateIsNew) { + // Write the successor's label + this.writer.append("\""); + this.writer.append(successorsFP); + this.writer.append("."); + this.writer.append(Integer.toString(tableauNodeSuccessor.getIndex())); + this.writer.append("\""); + this.writer.append(" [label=\""); + this.writer.append(states2dot(successor)); + this.writer.append( + "\n#" + Long.toString(successor.fingerPrint()) + "." + + tableauNodeSuccessor.getIndex() + "#"); + this.writer.append("\"]"); + this.writer.append(";\n"); + } + } + + protected static String tableauNode2dot(final TBGraphNode tableauNode) { + // Replace "\" with "\\" and """ with "\"". + return tableauNode.toString().replace("\\", "\\\\").replace("\"", "\\\"").trim(); + } +} diff --git a/tlatools/src/tlc2/tool/liveness/GraphNode.java b/tlatools/src/tlc2/tool/liveness/GraphNode.java index 03b668546b328d44402c4fc40d0a299256b78303..77134867d4d661aeaa71a5a8710b794382efb19f 100644 --- a/tlatools/src/tlc2/tool/liveness/GraphNode.java +++ b/tlatools/src/tlc2/tool/liveness/GraphNode.java @@ -275,9 +275,19 @@ public class GraphNode extends AbstractGraphNode { } public Set<Transition> getTransition() { + return getTransition(0, 0); + } + + public Set<Transition> getTransition(final int slen, final int alen) { final Set<Transition> transitions = new HashSet<Transition>(); for (int i = 0; i < succSize(); i++) { - transitions.add(new Transition(getStateFP(i), getTidx(i), new BitVector(0))); + final BitVector bv = new BitVector(alen); + for (int j = 0; j < alen; j++) { + if (getCheckAction(slen, alen, i, j)) { + bv.set(j); + } + } + transitions.add(new Transition(getStateFP(i), getTidx(i), bv)); } return transitions; } @@ -328,6 +338,18 @@ public class GraphNode extends AbstractGraphNode { return false; return true; } + + public BitVector getChecks() { + return bv; + } + + public long getFP() { + return fp; + } + + public int getTidx() { + return tidx; + } } /* Return the tableau graph node used by this. */ @@ -369,9 +391,25 @@ public class GraphNode extends AbstractGraphNode { } public final String toString() { + // A GraphNode does not know the action length. This is kept elsewhere in the code. + return toString(0).replace("[] ", ""); + } + + public final String toString(final int alen) { StringBuffer buf = new StringBuffer(); buf.append("<" + this.stateFP + "," + this.tindex + "> --> "); for (int i = 0; i < succSize(); i++) { + // action checks + buf.append("["); + for (int j = 0; j < alen; j++) { + if (getCheckAction(0, 2, i, j)) { + buf.append("t"); + } else { + buf.append("f"); + } + } + buf.append("] "); + // fingerprint/tableau id buf.append("<" + getStateFP(i) + "," + getTidx(i) + ">"); buf.append(", "); } @@ -379,34 +417,49 @@ public class GraphNode extends AbstractGraphNode { } public String toDotViz(final boolean isInitState, final boolean hasTableau, final int slen, final int alen) { - // The node's id including its tidx if any + return toDotViz(isInitState, hasTableau, slen, alen, null); + } + + public String toDotViz(final boolean isInitState, final boolean hasTableau, final int slen, final int alen, TableauNodePtrTable filter) { + // The node's id including its tidx if any. It uses the complete + // fingerprint. String id = Long.toString(this.stateFP); - if (id.length() >=6) { - id = id.substring(0, 6); - } if (hasTableau) { id += "." + this.tindex; } - - // marker if it is an init state + + // Nodes label and a marker if it is an init state. The label is + // shortened to 8 chars max to avoid screen clutter. It's possible + // that the resulting graph will have multiple nodes with an identical + // label iff the first 6 (+2) chars of their fingerprint match. However + // the graph will still contain all nodes regardless of the label + // collision due to id. + final String label = Long.toString(this.stateFP).substring(0, 6) + (hasTableau ? "." + this.tindex : ""); final StringBuffer buf = new StringBuffer(); if (isInitState) { - buf.append("\"" + id + "\" [style = filled]\n"); // node's label + buf.append("\"" + id + "\" [style = filled][label = \"" + label + "\"]\n"); // node's label + } else { + buf.append("\"" + id + "\" [label = \"" + label + "\"]\n"); } // Each outgoing transition for (int i = 0; i < succSize(); i++) { - String fp = Long.toString(getStateFP(i)); - if (fp.length() >= 6) { - fp = fp.substring(0, 6); + final long stateFP = getStateFP(i); + final int tidx = getTidx(i); + + // If a filter is given, check if this node is in filter + if (filter != null && filter.get(stateFP, tidx) == -1) { + continue; } + + String fp = Long.toString(stateFP); // if (fp == this.stateFP) { // // skip self loops if edge count to large for dotViz to handle. // continue; // } + buf.append("\"" + id + "\" -> "); if (hasTableau) { - final int tidx = getTidx(i); buf.append(("\"" + fp) + "." + tidx + "\""); } else { //Omit tableau index when it's -1 (indicating no tableau) diff --git a/tlatools/src/tlc2/tool/liveness/ILiveChecker.java b/tlatools/src/tlc2/tool/liveness/ILiveChecker.java index 44d685656caa5ab7122452f130476de5ccc17d59..7d4d0311c9978a62608a40f8677fbd9198721ee1 100644 --- a/tlatools/src/tlc2/tool/liveness/ILiveChecker.java +++ b/tlatools/src/tlc2/tool/liveness/ILiveChecker.java @@ -51,4 +51,6 @@ public interface ILiveChecker { OrderOfSolution getSolution(); + void close() throws IOException; + } \ No newline at end of file diff --git a/tlatools/src/tlc2/tool/liveness/ILivenessStateWriter.java b/tlatools/src/tlc2/tool/liveness/ILivenessStateWriter.java new file mode 100644 index 0000000000000000000000000000000000000000..ee3ea670da4b674559f6fd077dc659b2a8546fe3 --- /dev/null +++ b/tlatools/src/tlc2/tool/liveness/ILivenessStateWriter.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.liveness; + +import tlc2.tool.TLCState; +import tlc2.util.BitVector; +import tlc2.util.IStateWriter; + +public interface ILivenessStateWriter extends IStateWriter { + void writeState(TLCState state, TBGraphNode tableauNode); + + void writeState(TLCState state, TBGraphNode tableauNode, TLCState successor, TBGraphNode tableauNodeSuccessor, BitVector actionChecks, int from, int length, boolean successorStateIsNew); + + void writeState(TLCState state, TBGraphNode tableauNode, TLCState successor, TBGraphNode tableauNodeSuccessor, BitVector actionChecks, int from, int length, boolean successorStateIsNew, Visualization visulation); +} diff --git a/tlatools/src/tlc2/tool/liveness/LiveCheck.java b/tlatools/src/tlc2/tool/liveness/LiveCheck.java index c5f2e36fdb1486efd248f854668e20847436bed2..85589a55002ba896882785602af197b2aa35e195 100644 --- a/tlatools/src/tlc2/tool/liveness/LiveCheck.java +++ b/tlatools/src/tlc2/tool/liveness/LiveCheck.java @@ -16,12 +16,14 @@ import tlc2.output.EC; import tlc2.output.MP; import tlc2.tool.Action; import tlc2.tool.IStateFunctor; +import tlc2.tool.ModelChecker; import tlc2.tool.StateVec; import tlc2.tool.TLCState; import tlc2.tool.Tool; import tlc2.util.BitVector; import tlc2.util.FP64; import tlc2.util.SetOfStates; +import tlc2.util.IStateWriter.Visualization; import tlc2.util.statistics.DummyBucketStatistics; import tlc2.util.statistics.IBucketStatistics; import util.Assert; @@ -36,10 +38,14 @@ public class LiveCheck implements ILiveCheck { private final ILiveChecker[] checker; public LiveCheck(Tool tool, Action[] acts, String mdir, IBucketStatistics bucketStatistics) throws IOException { - this(tool, acts, Liveness.processLiveness(tool), mdir, bucketStatistics); + this(tool, acts, Liveness.processLiveness(tool), mdir, bucketStatistics, null); + } + + public LiveCheck(Tool tool, Action[] acts, String mdir, IBucketStatistics bucketStatistics, String dumpFile) throws IOException { + this(tool, acts, Liveness.processLiveness(tool), mdir, bucketStatistics, dumpFile); } - public LiveCheck(Tool tool, Action[] acts, OrderOfSolution[] solutions, String mdir, IBucketStatistics bucketStatistics) throws IOException { + public LiveCheck(Tool tool, Action[] acts, OrderOfSolution[] solutions, String mdir, IBucketStatistics bucketStatistics, String dumpFile) throws IOException { myTool = tool; actions = acts; metadir = mdir; @@ -47,9 +53,9 @@ public class LiveCheck implements ILiveCheck { checker = new ILiveChecker[solutions.length]; for (int soln = 0; soln < solutions.length; soln++) { if (!solutions[soln].hasTableau()) { - checker[soln] = new LiveChecker(solutions[soln], soln, bucketStatistics); + checker[soln] = new LiveChecker(solutions[soln], soln, bucketStatistics, dumpFile == null ? new NoopLivenessStateWriter() : new DotLivenessStateWriter(dumpFile)); } else { - checker[soln] = new TableauLiveChecker(solutions[soln], soln, bucketStatistics); + checker[soln] = new TableauLiveChecker(solutions[soln], soln, bucketStatistics, dumpFile == null ? new NoopLivenessStateWriter() : new DotLivenessStateWriter(dumpFile)); } } } @@ -145,6 +151,11 @@ public class LiveCheck implements ILiveCheck { if (forceCheck) { return check0(false); } + if (Boolean.getBoolean(Liveness.class.getName() + ".finalCheckOnly")) { + // The user requested to only check liveness once, on the complete + // state graph. + return true; + } for (int i = 0; i < checker.length; i++) { // see note in doLiveCheck() above! final AbstractDiskGraph diskGraph = checker[i].getDiskGraph(); @@ -319,7 +330,7 @@ public class LiveCheck implements ILiveCheck { */ public void close() throws IOException { for (int i = 0; i < checker.length; i++) { - checker[i].getDiskGraph().close(); + checker[i].close(); } } @@ -384,11 +395,14 @@ public class LiveCheck implements ILiveCheck { } static abstract class AbstractLiveChecker implements ILiveChecker { - + + protected final ILivenessStateWriter writer; + protected final OrderOfSolution oos; - public AbstractLiveChecker(OrderOfSolution oos) { + public AbstractLiveChecker(OrderOfSolution oos, ILivenessStateWriter writer) { this.oos = oos; + this.writer = writer; } /* (non-Javadoc) @@ -397,15 +411,25 @@ public class LiveCheck implements ILiveCheck { public OrderOfSolution getSolution() { return oos; } + + /* (non-Javadoc) + * @see tlc2.tool.liveness.ILiveChecker#close() + */ + public void close() throws IOException { + if (!ModelChecker.VETO_CLEANUP) { + this.getDiskGraph().close(); + } + this.writer.close(); + } } private class LiveChecker extends AbstractLiveChecker { private final DiskGraph dgraph; - public LiveChecker(OrderOfSolution oos, int soln, IBucketStatistics bucketStatistics) + public LiveChecker(OrderOfSolution oos, int soln, IBucketStatistics bucketStatistics, ILivenessStateWriter writer) throws IOException { - super(oos); + super(oos, writer); this.dgraph = new DiskGraph(metadir, soln, bucketStatistics); } @@ -414,6 +438,7 @@ public class LiveCheck implements ILiveCheck { */ public void addInitState(TLCState state, long stateFP) { dgraph.addInitNode(stateFP, -1); + writer.writeState(state); } /* (non-Javadoc) @@ -430,7 +455,8 @@ public class LiveCheck implements ILiveCheck { final int s = node0.succSize(); node0.setCheckState(checkStateResults); for (int sidx = 0; sidx < succCnt; sidx++) { - final long successor = nextStates.next().fingerPrint(); + final TLCState successorState = nextStates.next(); + final long successor = successorState.fingerPrint(); // Only add the transition if: // a) The successor itself has not been written to disk // TODO Why is an existing successor ignored? @@ -456,6 +482,7 @@ public class LiveCheck implements ILiveCheck { } else { cnt++; } + writer.writeState(s0, successorState, checkActionResults, sidx * alen, alen, ptr1 == -1); } nextStates.resetNext(); // In simulation mode (see Simulator), it's possible that this @@ -463,11 +490,13 @@ public class LiveCheck implements ILiveCheck { // but with changing successors caused by the random successor // selection. If the successor is truly new (it has not been // added before), the GraphNode instance has to be updated - // (creating a new record on disk). However, when the the - // successor parameter happens to pass known successors, there - // is no point in adding the GraphNode again. It is assumed that - // it wouldn't invalidate the result, but it wastes disk space. - if (s < node0.succSize()) { + // (creating a new record on disk). However, when the successor + // parameter happens to pass known successors only, there is no + // point in adding the GraphNode again. It would just waste disk + // space. + // The amount of successors is either 0 (no new successor has + // been added) or used to be less than it is now. + if ((s == 0 && s == node0.succSize()) || s < node0.succSize()) { node0.realign(); // see node0.addTransition() hint // Add a node for the current state. It gets added *after* // all transitions have been added because addNode @@ -492,9 +521,9 @@ public class LiveCheck implements ILiveCheck { private final TableauDiskGraph dgraph; - public TableauLiveChecker(OrderOfSolution oos, int soln, IBucketStatistics statistics) + public TableauLiveChecker(OrderOfSolution oos, int soln, IBucketStatistics statistics, ILivenessStateWriter writer) throws IOException { - super(oos); + super(oos, writer); this.dgraph = new TableauDiskGraph(metadir, soln, statistics); } @@ -510,6 +539,7 @@ public class LiveCheck implements ILiveCheck { if (tnode.isConsistent(state, myTool)) { dgraph.addInitNode(stateFP, tnode.getIndex()); dgraph.recordNode(stateFP, tnode.getIndex()); + writer.writeState(state, tnode); } } } @@ -592,6 +622,7 @@ public class LiveCheck implements ILiveCheck { && (ptr1 == -1 || !node0.transExists(successor, tnode1.getIndex()))) { node0.addTransition(successor, tnode1.getIndex(), checkStateResults.length, alen, checkActionResults, sidx * alen, allocationHint - cnt); + writer.writeState(s0, tnode0, s1, tnode1, checkActionResults, sidx * alen, alen, true); // Record that we have seen <fp1, // tnode1>. If fp1 is done, we have // to compute the next states for <fp1, @@ -610,7 +641,7 @@ public class LiveCheck implements ILiveCheck { } nextStates.resetNext(); // See same case in LiveChecker#addNextState - if (s < node0.succSize()) { + if ((s == 0 && s == node0.succSize()) || s < node0.succSize()) { node0.realign(); // see node0.addTransition() hint dgraph.addNode(node0); } else { @@ -686,6 +717,7 @@ public class LiveCheck implements ILiveCheck { final int total = actions.length * nextCnt * tnode.nextSize(); if (tnode1.isConsistent(s1, myTool) && (ptr1 == -1 || !node.transExists(fp1, tidx1))) { node.addTransition(fp1, tidx1, slen, alen, checkActionRes, 0, (total - cnt)); + writer.writeState(s, tnode, s1, tnode1, checkActionRes, 0, alen, false, Visualization.DOTTED); // Record that we have seen <fp1, tnode1>. If // fp1 is done, we have to compute the next // states for <fp1, tnode1>. diff --git a/tlatools/src/tlc2/tool/liveness/LiveWorker.java b/tlatools/src/tlc2/tool/liveness/LiveWorker.java index 5284677491dc41daeb20d73825ec05f16410253b..59e65365db6265224fc3d18e094b38d0d3063d46 100644 --- a/tlatools/src/tlc2/tool/liveness/LiveWorker.java +++ b/tlatools/src/tlc2/tool/liveness/LiveWorker.java @@ -671,16 +671,22 @@ public class LiveWorker extends IdThread { // or promiseRes booleans is false. for (int i = 0; i < aeslen; i++) { if (!AEStateRes[i]) { +// writeDotViz(state, tidx, com, new java.io.File(liveCheck.getMetaDir() + java.io.File.separator +// + "pValidSCC" + System.currentTimeMillis() + ".dot")); return true; } } for (int i = 0; i < aealen; i++) { if (!AEActionRes[i]) { +// writeDotViz(state, tidx, com, new java.io.File(liveCheck.getMetaDir() + java.io.File.separator +// + "pValidSCC" + System.currentTimeMillis() + ".dot")); return true; } } for (int i = 0; i < plen; i++) { if (!promiseRes[i]) { +// writeDotViz(state, tidx, com, new java.io.File(liveCheck.getMetaDir() + java.io.File.separator +// + "pValidSCC" + System.currentTimeMillis() + ".dot")); return true; } } @@ -748,7 +754,8 @@ public class LiveWorker extends IdThread { * @throws InterruptedException */ private void printTrace(final long state, final int tidx, final TableauNodePtrTable nodeTbl) throws IOException, InterruptedException, ExecutionException { -// System.out.println(toDotViz(state, tidx, nodeTbl)); +// writeDotViz(state, tidx, nodeTbl, new java.io.File(liveCheck.getMetaDir() + java.io.File.separator +// + "pSatisfiableSCC_" + System.currentTimeMillis() + ".dot")); MP.printError(EC.TLC_TEMPORAL_PROPERTY_VIOLATED); MP.printError(EC.TLC_COUNTER_EXAMPLE); @@ -1199,7 +1206,7 @@ public class LiveWorker extends IdThread { final GraphNode curNode = this.dg.getNode(state1, tidx1, loc1); sb.append(curNode.toDotViz((state1 == state && tidx1 == tidx), true, oos.getCheckState().length, - oos.getCheckAction().length)); + oos.getCheckAction().length, tnpt)); } } @@ -1207,6 +1214,35 @@ public class LiveWorker extends IdThread { return sb.toString(); } + /** + * Write the output of {@link LiveWorker#toDotViz(long, int, TableauNodePtrTable)} to the given file. + * @param state + * @param tidx + * @param tnpt + * @param file + */ + public void writeDotViz(final long state, final int tidx, final TableauNodePtrTable tnpt, final java.io.File file) { + // Ignore trivial SCCs consisting of a single node. + if (tnpt.size() <= 1) { + return; + } + + try { + final java.io.BufferedWriter bwr = new java.io.BufferedWriter(new java.io.FileWriter(file)); + + // write contents of StringBuffer to a file + bwr.write(toDotViz(state, tidx, tnpt)); + + // flush the stream + bwr.flush(); + + // close the stream + bwr.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + /* * The detailed formatter below can be activated in Eclipse's variable view * by choosing "New detailed formatter" from the MemIntQueue context menu. diff --git a/tlatools/src/tlc2/tool/liveness/Liveness.java b/tlatools/src/tlc2/tool/liveness/Liveness.java index 9c79bdaeef682a48b801be59166a3b9b02172b10..7594bf13633a191cfd6ff35cf46699896b6fde4d 100644 --- a/tlatools/src/tlc2/tool/liveness/Liveness.java +++ b/tlatools/src/tlc2/tool/liveness/Liveness.java @@ -152,6 +152,7 @@ public class Liveness implements ToolGlobals, ASTConstants { } return astToLive(tool, expr, con, level); } catch (Exception e) { + // Catching Exception here seem dangerous // Assert.printStack(e); int level = Spec.getLevel(expr, con); if (level > 2) { @@ -178,6 +179,7 @@ public class Liveness implements ToolGlobals, ASTConstants { } return astToLive(tool, expr, con, level); } catch (Exception e) { + // Catching Exception here seem dangerous // Assert.printStack(e); int level = Spec.getLevel(expr, con); if (level > 2) { @@ -230,6 +232,7 @@ public class Liveness implements ToolGlobals, ASTConstants { } } } catch (Exception e) { /* SKIP */ + // Swallowing Exception here seem dangerous } int level = expr.getLevel(); if (level > 2) { @@ -292,8 +295,9 @@ public class Liveness implements ToolGlobals, ASTConstants { } case OPCODE_leadto: { // F ~> G equals [](F => <>G), however TLC does not have an - // implementation for logical implication. Thus, the rule of material - // implication is used to transform it into a disjunct. + // implementation for logical implication. Thus, the rule of + // material implication ("->") is used to transform it into a + // disjunct. LiveExprNode lnLeft = astToLive(tool, (ExprNode) args[0], con); LiveExprNode lnRight = astToLive(tool, (ExprNode) args[1], con); // expand a ~> b into [](-a \/ <>b) @@ -326,150 +330,6 @@ public class Liveness implements ToolGlobals, ASTConstants { } } - /** - * Given a starting TBGraphNode, constructTableau constructs the tableau for - * it. Read MP for details. It returns a list of all the nodes in the - * tableau graph. - */ - private static TBGraph constructTableau(LiveExprNode tf, int idx) { - TBGraph allnodes = new TBGraph(tf); - TBPar initTerms = new TBPar(1); - initTerms.addElement(tf); - TBParVec pars = particleClosure(initTerms); - - for (int i = 0; i < pars.size(); i++) { - TBGraphNode gn = new TBGraphNode(pars.parAt(i)); - allnodes.addElement(gn); - } - allnodes.setInitCnt(allnodes.size()); - // We now repeatedly compute the outlinks of each node: - for (int i = 0; i < allnodes.size(); i++) { - TBGraphNode gnSrc = (TBGraphNode) allnodes.elementAt(i); - TBPar imps = gnSrc.getPar().impliedSuccessors(); - TBParVec succs = particleClosure(imps); - for (int j = 0; j < succs.size(); j++) { - TBPar par = succs.parAt(j); - TBGraphNode gnDst = findOrCreateNode(allnodes, par); - gnSrc.nexts.addElement(gnDst); - } - } - // Assign each node in the tableau an index. - for (int i = 0; i < allnodes.size(); i++) { - allnodes.getNode(i).setIndex(idx++); - } - return allnodes; - } - - /** - * The method findOrCreateNode, given a list of particles, either finds the - * particle in that list, or creates a new one and puts it in the list. If - * it does create a node, then it also sticks that node into allnodes. - */ - private static TBGraphNode findOrCreateNode(Vect allnodes, TBPar par) { - for (int i = 0; i < allnodes.size(); i++) { - TBGraphNode gn = (TBGraphNode) allnodes.elementAt(i); - if (par.equals(gn.getPar())) { - return gn; - } - } - TBGraphNode gn = new TBGraphNode(par); - allnodes.addElement(gn); - return gn; - } - - /** - * The method particleClosure, given a list of terms (initially just a - * single term), returns a list of all particles containing those terms. - * It's a recursive tree search. - */ - private static TBParVec particleClosure(TBPar terms) { - TBPar positive_closure = terms.positiveClosure(); - Vect alphas = positive_closure.alphaTriples(); - Vect betas = positive_closure.betaTriples(); - return particleClosure(terms, alphas, betas); - } - - private static TBParVec particleClosure(TBPar terms, Vect alphas, Vect betas) { - // if terms is not locally consistent, then terminate. - if (!terms.isLocallyConsistent()) { - return new TBParVec(0); - } - // if terms is not alpha-closed, then close it. - // first, try alpha expansion - TBPar terms1 = terms; - for (int i = 0; i < terms1.size(); i++) { - LiveExprNode ln = terms1.exprAt(i); - LiveExprNode k1 = null, k2 = null; - if (ln instanceof LNAll) { - k1 = ((LNAll) ln).getBody(); - k2 = new LNNext(ln); - } else if (ln instanceof LNConj) { - k1 = ((LNConj) ln).getBody(0); - k2 = ((LNConj) ln).getBody(1); - } - if (k1 != null) { - if (terms1.member(k1)) { - if (!terms1.member(k2)) { - terms1 = terms1.append(k2); - } - } else if (terms1.member(k2)) { - terms1 = terms1.append(k1); - } else { - terms1 = terms1.append(k1, k2); - } - } - } - // second, try alpha^-1 expansion - boolean done; - do { - done = true; - for (int i = 0; i < alphas.size(); i++) { - TBTriple alpha = (TBTriple) alphas.elementAt(i); - if (terms1.member(alpha.getB()) && terms1.member(alpha.getC()) && !terms1.member(alpha.getA())) { - terms1.addElement(alpha.getA()); - done = false; - } - } - } while (!done); - // finally, recurse only when locally consistent - if ((terms1.size() > terms.size()) && (!terms1.isLocallyConsistent())) { - return new TBParVec(0); - } - return particleClosureBeta(terms1, alphas, betas); - } - - private static TBParVec particleClosureBeta(TBPar terms, Vect alphas, Vect betas) { - // try a beta expansion - for (int i = 0; i < terms.size(); i++) { - LiveExprNode ln = terms.exprAt(i); - LiveExprNode k1 = null, k2 = null; - if (ln instanceof LNEven) { - k1 = ((LNEven) ln).getBody(); - k2 = new LNNext(ln); - } else if (ln instanceof LNDisj) { - k1 = ((LNDisj) ln).getBody(0); - k2 = ((LNDisj) ln).getBody(1); - } - if ((k1 != null) && !terms.member(k1) && !terms.member(k2)) { - TBParVec ps1 = particleClosure(terms.append(k1), alphas, betas); - TBParVec ps2 = particleClosure(terms.append(k2), alphas, betas); - return ps1.union(ps2); - } - } - // try a beta^-1 expansion - for (int i = 0; i < betas.size(); i++) { - TBTriple beta = (TBTriple) betas.elementAt(i); - if ((terms.member(beta.getB()) || terms.member(beta.getC())) && !terms.member(beta.getA())) { - return particleClosure(terms.append(beta.getA()), alphas, betas); - } - } - // if there are not any more expansions to do, return the terms - // we've got as the only particle in a list of particles. - TBParVec res = new TBParVec(1); - res.addElement(terms); - return res; - } - /** * Parse the temporals and impliedTemporals given in the config file. It * returns null if there is nothing to check. @@ -512,13 +372,41 @@ public class Liveness implements ToolGlobals, ASTConstants { * manner in which things should ultimately be checked. This method returns * a handle, which can subsequently be passed to the other liveness things. * - * Theory: we're looking for counterexamples to: spec /\ livespec => []inv - * /\ livecheck i.e. (spec /\ livespec /\ <>-inv) \/ (spec /\ livespec /\ - * -livecheck) The first half of this disjunction (inv) is already checked - * by the model checker on the fly. We're converting the second half into - * normal form. We actually omit spec in what we produce. It will be left - * implicit. So, the only job is to turn livespec /\ -livecheck: live1 /\ - * live2 ... /\ (-check1 \/ -check2 ...) into normal form. + * Theory: we're looking for counterexamples to: + * + * <pre> + * spec /\ livespec => []inv /\ livecheck + * </pre> + * + * i.e. + * + * <pre> + * \/ (spec /\ livespec /\ <>-inv) + * \/ (spec /\ livespec /\ -livecheck) + * </pre> + * + * <p> + * The first half of this disjunction (inv) is already checked by the model + * checker on the fly (@see + * {@link ModelChecker#doNext(TLCState, tlc2.util.ObjLongTable)}). + * <p> + * We're converting the second half into <i>normal form</i>. We actually + * omit spec in what we produce. It will be left implicit. So, the only job + * is to turn: + * + * <pre> + * livespec /\ -livecheck + * </pre> + * + * into: + * + * <pre> + * live1 /\ live2 ... /\ (-check1 \/ -check2 ...) + * </pre> + * + * into <i>normal form</i>. livespec corresponds to the spec's + * <i>fairness</i> formulae where check1, check2, ... are the actual + * <i>liveness properties</i> to be checked. */ public static OrderOfSolution[] processLiveness(Tool tool) { LiveExprNode lexpr = parseLiveness(tool); @@ -609,7 +497,7 @@ public class Liveness implements ToolGlobals, ASTConstants { final LiveExprNode tf1 = tf.makeBinary(); final TBPar promises = new TBPar(10); tf1.extractPromises(promises); - oss[i] = new OrderOfSolution(constructTableau(tf1, 0), new LNEven[promises.size()], tool); + oss[i] = new OrderOfSolution(new TBGraph(tf1), new LNEven[promises.size()], tool); for (int j = 0; j < promises.size(); j++) { oss[i].getPromises()[j] = (LNEven) promises.exprAt(j); } @@ -680,7 +568,14 @@ public class Liveness implements ToolGlobals, ASTConstants { * tests. This method classifies an expression into <>[]act, []<>act, * []<>state, temporal formulas (without actions), or erroneous things. */ + // TODO Explore the idea to syntactically rewrite an LNActions A into a + // ordinary predicate and the next state operator ()A in the tableau. private static void classifyExpr(LiveExprNode ln, OSExprPem pem) { + // TLC is clever enough to optimize the case where some temporal formula + // can be handled WITHOUT a tableau. In this case, the state graph IS + // the behavior graph and thus the overall verification time is reduced. + // Additionally, the tableau generation does not support formulas + // containing (nested) LNActions. if (ln instanceof LNEven) { LiveExprNode ln1 = ((LNEven) ln).getBody(); if (ln1 instanceof LNAll) { @@ -708,6 +603,9 @@ public class Liveness implements ToolGlobals, ASTConstants { if (ln.containAction()) { Assert.fail(EC.TLC_LIVE_WRONG_FORMULA_FORMAT); } + // If we get here (because of a temporal formula), at tableau is + // consequently going to be created. This part corresponds to the + // ideas in the MP book. pem.tfs.addElement(ln); } diff --git a/tlatools/src/tlc2/tool/liveness/NodePtrTable.java b/tlatools/src/tlc2/tool/liveness/NodePtrTable.java index 52b811424bd844ef54c4d17c3b7fe29e8fb4f401..09f2222abc69beeabcac5ece093efd6615f81f01 100644 --- a/tlatools/src/tlc2/tool/liveness/NodePtrTable.java +++ b/tlatools/src/tlc2/tool/liveness/NodePtrTable.java @@ -4,6 +4,9 @@ package tlc2.tool.liveness; +import tlc2.output.EC; +import tlc2.output.MP; + /** * @see TableauNodePtrTable */ @@ -108,21 +111,45 @@ public class NodePtrTable { /* Double the table when the table is full by the threshhold. */ private final void grow() { - this.length = 2 * this.length + 1; - this.thresh = (int) (this.length * 0.75); - this.count = 0; - long[] oldKeys = this.keys; - long[] oldElems = this.elems; - this.keys = new long[this.length]; - this.elems = new long[this.length]; - for (int i = 0; i < this.length; i++) { - this.elems[i] = -1; - } - for (int i = 0; i < oldElems.length; i++) { - long elem = oldElems[i]; - if (elem != -1) { - this.put(oldKeys[i], elem); + // TODO This grows unbound up to an OOM exception or fails to increase + // the array when length reaches Integer.MAX_VALUE. + // In case of Integer.MAX_VALUE, all subsequent put(long,long) + // invocations will fail to put the new key causing TLC to live-lock. + // This can possibly be replaced with a variant of DiskFPSet. + try { + final int newLength = 2 * this.length + 1; + final long[] oldKeys = this.keys; + final long[] oldElems = this.elems; + this.keys = new long[newLength]; + this.elems = new long[newLength]; + for (int i = 0; i < newLength; i++) { + this.elems[i] = -1; + } + this.count = 0; + for (int i = 0; i < oldElems.length; i++) { + final long elem = oldElems[i]; + if (elem != -1) { + int loc = ((int) oldKeys[i] & 0x7FFFFFFF) % newLength; + while (true) { + if (this.elems[loc] == -1) { + this.keys[loc] = oldKeys[i]; + this.elems[loc] = elem; + this.count++; + break; + } + if (this.keys[loc] == oldKeys[i]) { + this.elems[loc] = elem; + break; + } + loc = (loc + 1) % newLength; + } + } } + this.length = newLength; + this.thresh = (int) (newLength * 0.75); + } catch (Throwable t) { + System.gc(); + MP.printError(EC.SYSTEM_OUT_OF_MEMORY, t); } } diff --git a/tlatools/src/tlc2/tool/liveness/NoopLivenessStateWriter.java b/tlatools/src/tlc2/tool/liveness/NoopLivenessStateWriter.java new file mode 100644 index 0000000000000000000000000000000000000000..efe82e89af8e9ee099f1517f02cd617ecf066f30 --- /dev/null +++ b/tlatools/src/tlc2/tool/liveness/NoopLivenessStateWriter.java @@ -0,0 +1,98 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.liveness; + +import tlc2.tool.TLCState; +import tlc2.util.BitVector; + +public class NoopLivenessStateWriter implements ILivenessStateWriter { + + /* (non-Javadoc) + * @see tlc2.util.StateWriter#writeState(tlc2.tool.TLCState) + */ + public final void writeState(final TLCState state) { + // noop + } + + /* (non-Javadoc) + * @see tlc2.util.StateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.TLCState, boolean) + */ + public final void writeState(final TLCState state, final TLCState successor, final boolean successorStateIsNew) { + // noop + } + + /* (non-Javadoc) + * @see tlc2.util.IStateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.TLCState, boolean, tlc2.util.IStateWriter.Visualization) + */ + public void writeState(TLCState state, TLCState successor, boolean successorStateIsNew, Visualization visualization) { + // noop + } + + /* (non-Javadoc) + * @see tlc2.util.IStateWriter#close() + */ + public final void close() { + // noop + } + + /* (non-Javadoc) + * @see tlc2.tool.liveness.ILivenessStateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.liveness.TBGraphNode) + */ + public final void writeState(TLCState state, TBGraphNode tableauNode) { + // noop + } + + /* (non-Javadoc) + * @see tlc2.tool.liveness.ILivenessStateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.liveness.TBGraphNode, tlc2.tool.TLCState, tlc2.tool.liveness.TBGraphNode, tlc2.util.BitVector, int, int, boolean) + */ + public final void writeState(TLCState state, TBGraphNode tableauNode, TLCState successor, + TBGraphNode tableauNodeSuccessor, BitVector actionChecks, int from, int to, boolean successorStateIsNew) { + // noop + } + + /* (non-Javadoc) + * @see tlc2.tool.liveness.ILivenessStateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.liveness.TBGraphNode, tlc2.tool.TLCState, tlc2.tool.liveness.TBGraphNode, tlc2.util.BitVector, int, int, boolean, tlc2.util.IStateWriter.Visualization) + */ + public final void writeState(TLCState state, TBGraphNode tableauNode, TLCState successor, + TBGraphNode tableauNodeSuccessor, BitVector actionChecks, int from, int to, boolean successorStateIsNew, Visualization visulation) { + // noop + } + + /* (non-Javadoc) + * @see tlc2.util.IStateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.TLCState, tlc2.util.BitVector, int, int, boolean) + */ + public void writeState(TLCState state, TLCState successor, BitVector actionChecks, int from, int to, boolean successorStateIsNew) { + // noop + } + + /* (non-Javadoc) + * @see tlc2.util.IStateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.TLCState, tlc2.util.BitVector, int, int, boolean, tlc2.util.IStateWriter.Visualization) + */ + public void writeState(TLCState state, TLCState successor, BitVector actionChecks, int from, int to, boolean successorStateIsNew, + Visualization visulation) { + // noop + } +} diff --git a/tlatools/src/tlc2/tool/liveness/TBGraph.java b/tlatools/src/tlc2/tool/liveness/TBGraph.java index b95d84852cdb7851b0f552d3932120364231cd94..f40011d6073768cf40aa189ecf0bd2ff9d7bdd8a 100644 --- a/tlatools/src/tlc2/tool/liveness/TBGraph.java +++ b/tlatools/src/tlc2/tool/liveness/TBGraph.java @@ -15,9 +15,61 @@ public class TBGraph extends Vect { public final LiveExprNode tf; private int initCnt; - public TBGraph(LiveExprNode tf) { + public TBGraph() { + this.tf = null; + this.initCnt = 0; + } + + /** + * Given a starting TBGraphNode, constructTableau constructs the tableau for + * it. Read MP for details. It returns a list of all the nodes in the + * tableau graph. + */ + public TBGraph(final LiveExprNode tf) { this.tf = tf; this.initCnt = 0; + + final TBPar initTerms = new TBPar(1); + initTerms.addElement(tf); + final TBParVec pars = initTerms.particleClosure(); + + for (int i = 0; i < pars.size(); i++) { + final TBGraphNode gn = new TBGraphNode(pars.parAt(i)); + this.addElement(gn); + } + this.setInitCnt(this.size()); + // We now repeatedly compute the outlinks of each node: + for (int i = 0; i < this.size(); i++) { + final TBGraphNode gnSrc = (TBGraphNode) this.elementAt(i); + final TBPar imps = gnSrc.getPar().impliedSuccessors(); + final TBParVec succs = imps.particleClosure(); + for (int j = 0; j < succs.size(); j++) { + final TBPar par = succs.parAt(j); + final TBGraphNode gnDst = findOrCreateNode(par); + gnSrc.nexts.addElement(gnDst); + } + } + // Assign each node in the tableau an index. + for (int i = 0; i < this.size(); i++) { + this.getNode(i).setIndex(i); + } + } + + /** + * The method findOrCreateNode, given a list of particles, either finds the + * particle in that list, or creates a new one and puts it in the list. If + * it does create a node, then it also sticks that node into allnodes. + */ + private TBGraphNode findOrCreateNode(final TBPar par) { + for (int i = 0; i < this.size(); i++) { + final TBGraphNode gn = (TBGraphNode) this.elementAt(i); + if (par.equals(gn.getPar())) { + return gn; + } + } + final TBGraphNode gn = new TBGraphNode(par); + this.addElement(gn); + return gn; } public TBGraphNode getNode(int idx) { diff --git a/tlatools/src/tlc2/tool/liveness/TBPar.java b/tlatools/src/tlc2/tool/liveness/TBPar.java index 7a886d6342b87815f4fefaf71964f4637d59fb30..851263bd1aa81aea801e11db18a48b7141400e6d 100644 --- a/tlatools/src/tlc2/tool/liveness/TBPar.java +++ b/tlatools/src/tlc2/tool/liveness/TBPar.java @@ -102,6 +102,105 @@ public class TBPar extends Vect { return res; } + /** + * The method particleClosure, given a list of terms (initially just a + * single term), returns a list of all particles containing those terms. + * It's a recursive tree search. + */ + public TBParVec particleClosure() { + TBPar positive_closure = this.positiveClosure(); + Vect alphas = positive_closure.alphaTriples(); + Vect betas = positive_closure.betaTriples(); + return particleClosure(this, alphas, betas); + } + + private TBParVec particleClosure(TBPar terms, Vect alphas, Vect betas) { + // if terms is not locally consistent, then terminate. + if (!terms.isLocallyConsistent()) { + return new TBParVec(0); + } + // if terms is not alpha-closed, then close it. + // first, try alpha expansion. See MP page 403 + // figure 5.1. for alpha expansion rules. + TBPar terms1 = terms; + for (int i = 0; i < terms1.size(); i++) { + LiveExprNode ln = terms1.exprAt(i); + LiveExprNode kappa1 = null, kappa2 = null; + if (ln instanceof LNAll) { + // Alpha-Expansion: []p expands to p, ()[]p + kappa1 = ((LNAll) ln).getBody(); + kappa2 = new LNNext(ln); + } else if (ln instanceof LNConj) { + // Alpha-Expansion: p /\ q expands to p, q + kappa1 = ((LNConj) ln).getBody(0); + kappa2 = ((LNConj) ln).getBody(1); + } + if (kappa1 != null) { + if (terms1.member(kappa1)) { + if (!terms1.member(kappa2)) { + terms1 = terms1.append(kappa2); + } + } else if (terms1.member(kappa2)) { + terms1 = terms1.append(kappa1); + } else { + terms1 = terms1.append(kappa1, kappa2); + } + } + } + // second, try alpha^-1 expansion + boolean done; + do { + done = true; + for (int i = 0; i < alphas.size(); i++) { + TBTriple alpha = (TBTriple) alphas.elementAt(i); + if (terms1.member(alpha.getB()) && terms1.member(alpha.getC()) && !terms1.member(alpha.getA())) { + terms1.addElement(alpha.getA()); + done = false; + } + } + } while (!done); + // finally, recurse only when locally consistent + if ((terms1.size() > terms.size()) && (!terms1.isLocallyConsistent())) { + return new TBParVec(0); + } + return particleClosureBeta(terms1, alphas, betas); + } + + private TBParVec particleClosureBeta(TBPar terms, Vect alphas, Vect betas) { + // try a beta expansion. See MP page 403 + // figure 5.1. for beta expansion rules. + for (int i = 0; i < terms.size(); i++) { + LiveExprNode ln = terms.exprAt(i); + LiveExprNode kappa1 = null, kappa2 = null; + if (ln instanceof LNEven) { + // Beta-Expansion: <>p expands to p, ()<>p + kappa1 = ((LNEven) ln).getBody(); + kappa2 = new LNNext(ln); + } else if (ln instanceof LNDisj) { + // Beta-Expansion: p \/ expands to p, q + kappa1 = ((LNDisj) ln).getBody(0); + kappa2 = ((LNDisj) ln).getBody(1); + } + if ((kappa1 != null) && !terms.member(kappa1) && !terms.member(kappa2)) { + TBParVec ps1 = particleClosure(terms.append(kappa1), alphas, betas); + TBParVec ps2 = particleClosure(terms.append(kappa2), alphas, betas); + return ps1.union(ps2); + } + } + // try a beta^-1 expansion + for (int i = 0; i < betas.size(); i++) { + TBTriple beta = (TBTriple) betas.elementAt(i); + if ((terms.member(beta.getB()) || terms.member(beta.getC())) && !terms.member(beta.getA())) { + return particleClosure(terms.append(beta.getA()), alphas, betas); + } + } + // if there are not any more expansions to do, return the terms + // we've got as the only particle in a list of particles. + TBParVec res = new TBParVec(1); + res.addElement(terms); + return res; + } + /** * The methods alphaTriples and betaTriples, given a positive closure, * figure out the alpha and beta triples. The way the algorithm works, by @@ -234,7 +333,7 @@ public class TBPar extends Vect { * This methods returns true iff this particle (TBPar) fulfills the given * promise. * <p> - * A particle A is said to fulfill formula φ which promises r if either: + * A particle/atom A is said to fulfill formula φ which promises r if either: * <ul> * <li>φ \notin A</li> * <li>r \in A</li> diff --git a/tlatools/src/tlc2/tool/management/ModelCheckerMXWrapper.java b/tlatools/src/tlc2/tool/management/ModelCheckerMXWrapper.java index 2c5ffea763739e7903dccbf843e85ae7cf47cdd7..cffe22ffe0bec357992921affef228777a027711 100644 --- a/tlatools/src/tlc2/tool/management/ModelCheckerMXWrapper.java +++ b/tlatools/src/tlc2/tool/management/ModelCheckerMXWrapper.java @@ -6,8 +6,10 @@ import java.io.IOException; import javax.management.NotCompliantMBeanException; +import tlc2.TLC; import tlc2.TLCGlobals; import tlc2.tool.ModelChecker; +import tlc2.tool.TLCState; import tlc2.tool.distributed.management.TLCStatisticsMXBean; import tlc2.tool.fp.DiskFPSet; @@ -17,11 +19,13 @@ import tlc2.tool.fp.DiskFPSet; public class ModelCheckerMXWrapper extends TLCStandardMBean implements TLCStatisticsMXBean { private final ModelChecker modelChecker; + private final TLC tlc; - public ModelCheckerMXWrapper(final ModelChecker aModelChecker) + public ModelCheckerMXWrapper(final ModelChecker aModelChecker, final TLC tlc) throws NotCompliantMBeanException { super(TLCStatisticsMXBean.class); this.modelChecker = aModelChecker; + this.tlc = tlc; // register all TLCStatisticsMXBeans under the same name registerMBean("tlc2.tool:type=ModelChecker"); } @@ -116,4 +120,29 @@ public class ModelCheckerMXWrapper extends TLCStandardMBean implements TLCStatis public void liveCheck() { modelChecker.forceLiveCheck(); } + + /* (non-Javadoc) + * @see tlc2.tool.distributed.management.TLCStatisticsMXBean#getCurrentState() + */ + public String getCurrentState() { + final TLCState state = modelChecker.theStateQueue.sPeek(); + if (state != null) { + return state.toString(); + } + return "N/A"; + } + + /* (non-Javadoc) + * @see tlc2.tool.distributed.management.TLCStatisticsMXBean#getSpecName() + */ + public String getSpecName() { + return tlc.getSpecName(); + } + + /* (non-Javadoc) + * @see tlc2.tool.distributed.management.TLCStatisticsMXBean#getModelName() + */ + public String getModelName() { + return tlc.getModelName(); + } } diff --git a/tlatools/src/tlc2/tool/management/TLCStandardMBean.java b/tlatools/src/tlc2/tool/management/TLCStandardMBean.java index 52973c84717de1ca64d2600068978d96767d210b..9c3ab9e8f3ae812ba50ba53403282f9a9c984de6 100644 --- a/tlatools/src/tlc2/tool/management/TLCStandardMBean.java +++ b/tlatools/src/tlc2/tool/management/TLCStandardMBean.java @@ -14,6 +14,8 @@ import javax.management.NotCompliantMBeanException; import javax.management.ObjectName; import javax.management.StandardMBean; +import tlc2.TLCGlobals; + /** * @author Markus Alexander Kuppe */ @@ -26,6 +28,17 @@ public abstract class TLCStandardMBean extends StandardMBean { super(mbeanInterface); } + public String getVersion() { + return TLCGlobals.versionOfTLC; + } + + public String getRevision() { + if (TLCGlobals.getRevision() == null) { + return "N/A"; + } + return TLCGlobals.getRevision(); + } + /** * Registers a new MBean with the platform's MBean server after which this MBean will be visible in JMX. * @@ -66,7 +79,9 @@ public abstract class TLCStandardMBean extends StandardMBean { public boolean unregister() { final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); try { - mbs.unregisterMBean(mxbeanName); + if (mbs.isRegistered(mxbeanName)) { + mbs.unregisterMBean(mxbeanName); + } } catch (MBeanRegistrationException e) { e.printStackTrace(); return false; diff --git a/tlatools/src/tlc2/tool/queue/DiskStateQueue.java b/tlatools/src/tlc2/tool/queue/DiskStateQueue.java index d2ca4cbd138a351f15fbb833566c935216d8ba47..fcac709f612ab887bbb3fc586673a4fa38b4c505 100644 --- a/tlatools/src/tlc2/tool/queue/DiskStateQueue.java +++ b/tlatools/src/tlc2/tool/queue/DiskStateQueue.java @@ -42,7 +42,7 @@ public class DiskStateQueue extends StateQueue { protected StatePoolReader reader; protected StatePoolWriter writer; /** - * The SPC takes care or deleting swap files on the lower end of the range + * The SPC takes care of deleting swap files on the lower end of the range * (loPool, hiPool). It terminates, when the first checkpoint is written at * which point checkpointing itself takes care of removing obsolete swap * files. @@ -97,6 +97,16 @@ public class DiskStateQueue extends StateQueue { } return this.deqBuf[this.deqIndex++]; } + + /* (non-Javadoc) + * @see tlc2.tool.queue.StateQueue#peekInner() + */ + TLCState peekInner() { + if (this.deqIndex == this.deqBuf.length) { + this.fillDeqBuffer(); + } + return this.deqBuf[this.deqIndex]; + } private final void fillDeqBuffer() { try { diff --git a/tlatools/src/tlc2/tool/queue/IStateQueue.java b/tlatools/src/tlc2/tool/queue/IStateQueue.java index 88f979698e43c0031c538270a088f7bdc3fcd564..7935de87d6e2e83c0820eaab6bfae47349fa0d25 100644 --- a/tlatools/src/tlc2/tool/queue/IStateQueue.java +++ b/tlatools/src/tlc2/tool/queue/IStateQueue.java @@ -24,6 +24,12 @@ public interface IStateQueue { /* Return the first element in the queue. Wait if empty. */ public abstract TLCState sDequeue(); + + /** + * Returns the first element in the queue. Wait if empty. Does not remove the + * element. Can be null and blocks other consumers (sEnqueue and sDequeue). + */ + public abstract TLCState sPeek(); /** * Return (up to) the first count elements in the queue. Wait if empty. @@ -62,7 +68,7 @@ public interface IStateQueue { * free when workers behave correctly except for the single case when a * remote worker dies unexpectedly. * - * @see http://bugzilla.tlaplus.net/show_bug.cgi?id=175 + * @see Bug #175 in general/bugzilla/index.html */ public abstract void resumeAllStuck(); diff --git a/tlatools/src/tlc2/tool/queue/MemStateQueue.java b/tlatools/src/tlc2/tool/queue/MemStateQueue.java index 505fca96e2a56f36e7bde0cb0ab63d8d0fa03e21..938288bcac6f647970d6d7fcc25bb656b7a68ce2 100644 --- a/tlatools/src/tlc2/tool/queue/MemStateQueue.java +++ b/tlatools/src/tlc2/tool/queue/MemStateQueue.java @@ -60,6 +60,13 @@ public final class MemStateQueue extends StateQueue { this.start = (this.start + 1) % this.states.length; return res; } + + /* (non-Javadoc) + * @see tlc2.tool.queue.StateQueue#peekInner() + */ + final TLCState peekInner() { + return this.states[this.start]; + } // Checkpoint. public final void beginChkpt() throws IOException { @@ -95,5 +102,4 @@ public final class MemStateQueue extends StateQueue { } vis.close(); } - } diff --git a/tlatools/src/tlc2/tool/queue/StateQueue.java b/tlatools/src/tlc2/tool/queue/StateQueue.java index 0d151ecadd933e9a1733edabc6912a773a1762fe..f498c4c7479a8893c8f11a24681f650603c22656 100644 --- a/tlatools/src/tlc2/tool/queue/StateQueue.java +++ b/tlatools/src/tlc2/tool/queue/StateQueue.java @@ -85,6 +85,13 @@ public abstract class StateQueue implements IStateQueue { } } + public final synchronized TLCState sPeek() { + if (this.isAvail()) { + return this.peekInner(); + } + return null; + } + /* Return the first element in the queue. Wait if empty. */ /* (non-Javadoc) * @see tlc2.tool.queue.IStateQueue#sDequeue() @@ -327,6 +334,9 @@ public abstract class StateQueue implements IStateQueue { /* This method must be implemented in the subclass. */ abstract TLCState dequeueInner(); + /* This method must be implemented in the subclass. */ + abstract TLCState peekInner(); + /* Checkpoint. */ /* (non-Javadoc) * @see tlc2.tool.queue.IStateQueue#beginChkpt() diff --git a/tlatools/src/tlc2/util/BitVector.java b/tlatools/src/tlc2/util/BitVector.java index 2f03bc2e0b4d76b7cab91770baf90a637d77c51c..d4230a8494259dbc8f3ce2e3bbd0f2bfa75b07d0 100644 --- a/tlatools/src/tlc2/util/BitVector.java +++ b/tlatools/src/tlc2/util/BitVector.java @@ -128,6 +128,40 @@ public class BitVector implements Serializable { } } + /** + * Returns this {@link BitVector} is a bit string with the MSB to the left + * and the LSB to the right. + * + * @see java.lang.Object#toString() + */ + public String toString() { + final StringBuffer buf = new StringBuffer(this.word.length * 64); + for (int i = this.word.length * 64; i >= 0; i--) { + if (get(i)) { + buf.append("1"); + } else { + buf.append("0"); + } + } + buf.append("]"); + return buf.toString().replaceAll("^0*","["); // Replace leading zeros with "[" + } + public String toString(int start, int length) { + return toString(start, length, '1', '0'); + } + + public String toString(int start, int length, char one, char zero) { + final StringBuffer buf = new StringBuffer(length); + for (int i = 0; i < length; i++) { + if (get(start + i)) { + buf.append(one); + } else { + buf.append(zero); + } + } + return "[" + buf.reverse().toString() + "]"; + } + /** * @return The number of bits set true */ @@ -250,5 +284,4 @@ public class BitVector implements Serializable { return -1; } } - } diff --git a/tlatools/src/tlc2/util/BufferedRandomAccessFile.java b/tlatools/src/tlc2/util/BufferedRandomAccessFile.java index f9ad6dcba94de5c04f906c81cf07221ba89e1c4e..7187bd7c67fbb4bd66328a1d7484d8b10e31c91f 100644 --- a/tlatools/src/tlc2/util/BufferedRandomAccessFile.java +++ b/tlatools/src/tlc2/util/BufferedRandomAccessFile.java @@ -282,9 +282,13 @@ public final class BufferedRandomAccessFile extends java.io.RandomAccessFile { if (this.curr == this.hi) return -1; } // Assert.check(this.curr < this.hi); - byte res = this.buff[(int)(this.curr - this.lo)]; - this.curr++; - return ((int)res) & 0xFF; // convert byte -> int + try { + byte res = this.buff[(int)(this.curr - this.lo)]; + this.curr++; + return ((int)res) & 0xFF; // convert byte -> int + } catch (ArrayIndexOutOfBoundsException e) { + throw new IOException("Read past end of file (increase with setLength)?", e); + } } /* overrides RandomAccessFile.read(byte[]) */ @@ -351,9 +355,13 @@ public final class BufferedRandomAccessFile extends java.io.RandomAccessFile { } } // Assert.check(this.curr < this.hi); - this.buff[(int)(this.curr - this.lo)] = (byte)b; - this.curr++; - this.dirty = true; + try { + this.buff[(int)(this.curr - this.lo)] = (byte)b; + this.curr++; + this.dirty = true; + } catch (ArrayIndexOutOfBoundsException e) { + throw new IOException("Wrote past end of file (increase with setLength)?", e); + } } /* overrides RandomAccessFile.write(byte[]) */ @@ -449,6 +457,7 @@ public final class BufferedRandomAccessFile extends java.io.RandomAccessFile { System.err.println("len = " + braf.length() + ", pos = " + braf.getFilePointer()); braf.writeLong(x); braf.writeLong(x); braf.writeLong(x); System.err.println("len = " + braf.length() + ", pos = " + braf.getFilePointer()); + braf.close(); } } diff --git a/tlatools/src/tlc2/util/DotStateWriter.java b/tlatools/src/tlc2/util/DotStateWriter.java new file mode 100644 index 0000000000000000000000000000000000000000..beb9c42226e980bebb8c0cf3437d4ea1535ad71c --- /dev/null +++ b/tlatools/src/tlc2/util/DotStateWriter.java @@ -0,0 +1,130 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package tlc2.util; + +import java.io.IOException; + +import tlc2.tool.TLCState; + +/** + * Writes the given state in dot notation. + * + * @see https://en.wikipedia.org/wiki/DOT_(graph_description_language) + */ +public class DotStateWriter extends StateWriter { + + public DotStateWriter(final String fname) throws IOException { + this(fname, "strict "); + } + + public DotStateWriter(final String fname, final String strict) throws IOException { + super(fname); + this.writer.append(strict + "digraph DiskGraph {\n"); // strict removes redundant edges + this.writer.append("rankdir=LR;\n"); // Left to right rather than top to bottom + this.writer.flush(); + } + + /* (non-Javadoc) + * @see tlc2.util.StateWriter#writeState(tlc2.tool.TLCState) + */ + public synchronized void writeState(final TLCState state) { + // Marker the state as an initial state by using a filled style. + this.writer.append(Long.toString(state.fingerPrint())); + this.writer.append(" [style = filled]"); + this.writer.append(" [label=\""); + this.writer.append(states2dot(state)); + this.writer.append("\"]"); + this.writer.append("\n"); + } + + /* (non-Javadoc) + * @see tlc2.util.StateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.TLCState, boolean) + */ + public synchronized void writeState(TLCState state, TLCState successor, boolean successorStateIsNew) { + writeState(state, successor, successorStateIsNew, Visualization.DEFAULT); + } + + /* (non-Javadoc) + * @see tlc2.util.StateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.TLCState, boolean, tlc2.util.IStateWriter.Visualization) + */ + public synchronized void writeState(TLCState state, TLCState successor, boolean successorStateIsNew, Visualization visualization) { + writeState(state, successor, null, 0, 0, successorStateIsNew, visualization); + } + + /* (non-Javadoc) + * @see tlc2.util.StateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.TLCState, tlc2.util.BitVector, int, int, boolean) + */ + public synchronized void writeState(TLCState state, TLCState successor, BitVector actionChecks, int from, int length, boolean successorStateIsNew) { + writeState(state, successor, actionChecks, from, length, successorStateIsNew, Visualization.DEFAULT); + } + + /* (non-Javadoc) + * @see tlc2.util.StateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.TLCState, java.lang.String, boolean, tlc2.util.IStateWriter.Visualization) + */ + public synchronized void writeState(TLCState state, TLCState successor, BitVector actionChecks, int from, int length, boolean successorStateIsNew, + Visualization visualization) { + final String successorsFP = Long.toString(successor.fingerPrint()); + + // Write the transition + this.writer.append(Long.toString(state.fingerPrint())); + this.writer.append(" -> "); + this.writer.append(successorsFP); + if (visualization == Visualization.STUTTERING) { + this.writer.append(" [style=\"dashed\"]"); + } + if (length > 0) { // omit if no actions + this.writer.append(" [label=\"" + actionChecks.toString(from, length, 't', 'f') + "\"]"); + } + this.writer.append(";\n"); + + // If the successor is new, print the state's label. Labels are printed + // when writeState sees the successor. It does not print the label for + // the current state. If it would print the label for the current state, + // the init state labels would be printed twice. + if (successorStateIsNew) { + // Write the successor's label + this.writer.append(successorsFP); + this.writer.append(" [label=\""); + this.writer.append(states2dot(successor)); + this.writer.append("\"]"); + this.writer.append(";\n"); + } + } + + protected static String states2dot(final TLCState state) { + // Replace "\" with "\\" and """ with "\"". + return state.toString().replace("\\", "\\\\").replace("\"", "\\\"").trim(); + } + + /* (non-Javadoc) + * @see tlc2.util.IStateWriter#close() + */ + public void close() { + this.writer.append("}"); + super.close(); + } +} diff --git a/tlatools/src/tlc2/util/IStateWriter.java b/tlatools/src/tlc2/util/IStateWriter.java new file mode 100644 index 0000000000000000000000000000000000000000..1fa797c02a1ad451ae29139d13171b3daa8a6b61 --- /dev/null +++ b/tlatools/src/tlc2/util/IStateWriter.java @@ -0,0 +1,59 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.util; + +import tlc2.tool.TLCState; + +public interface IStateWriter { + + public enum Visualization { + /** + * If successor and the current state are identical and the transition + * is due to stuttering. + */ + STUTTERING, + /** + * No extra visualization hint is given. + */ + DEFAULT, + /** + * A dotted line. + */ + DOTTED; + } + + void writeState(TLCState state); + + void writeState(TLCState state, TLCState successor, boolean successorStateIsNew); + + void writeState(TLCState state, TLCState successor, boolean successorStateIsNew, Visualization visulation); + + void writeState(TLCState state, TLCState successor, BitVector actionChecks, int from, int length, boolean successorStateIsNew); + + void writeState(TLCState state, TLCState successor, BitVector actionChecks, int from, int length, boolean successorStateIsNew, Visualization visulation); + + void close(); +} \ No newline at end of file diff --git a/tlatools/src/tlc2/util/NoopStateWriter.java b/tlatools/src/tlc2/util/NoopStateWriter.java new file mode 100644 index 0000000000000000000000000000000000000000..bfda81a176326100258f886598aef8a32b254817 --- /dev/null +++ b/tlatools/src/tlc2/util/NoopStateWriter.java @@ -0,0 +1,74 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.util; + +import tlc2.tool.TLCState; + +public final class NoopStateWriter implements IStateWriter { + + /* (non-Javadoc) + * @see tlc2.util.StateWriter#writeState(tlc2.tool.TLCState) + */ + public final void writeState(final TLCState state) { + // noop + } + + /* (non-Javadoc) + * @see tlc2.util.StateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.TLCState, boolean) + */ + public final void writeState(final TLCState state, final TLCState successor, final boolean successorStateIsNew) { + // noop + } + + /* (non-Javadoc) + * @see tlc2.util.IStateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.TLCState, boolean, tlc2.util.IStateWriter.Visualization) + */ + public void writeState(TLCState state, TLCState successor, boolean successorStateIsNew, Visualization visualization) { + // noop + } + + /* (non-Javadoc) + * @see tlc2.util.IStateWriter#close() + */ + public final void close() { + // noop + } + + /* (non-Javadoc) + * @see tlc2.util.IStateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.TLCState, tlc2.util.BitVector, int, int, boolean) + */ + public void writeState(TLCState state, TLCState successor, BitVector actionChecks, int from, int to, boolean successorStateIsNew) { + // noop + } + + /* (non-Javadoc) + * @see tlc2.util.IStateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.TLCState, tlc2.util.BitVector, int, int, boolean, tlc2.util.IStateWriter.Visualization) + */ + public void writeState(TLCState state, TLCState successor, BitVector actionChecks, int from, int to, boolean successorStateIsNew, + Visualization visulation) { + // noop + } +} diff --git a/tlatools/src/tlc2/util/StateWriter.java b/tlatools/src/tlc2/util/StateWriter.java index a0021b4f82a1ddd62ff118ef2d7cb098d7652f79..b9233d10d0f92ecfcaa4a4162f87bacb066e5277 100644 --- a/tlatools/src/tlc2/util/StateWriter.java +++ b/tlatools/src/tlc2/util/StateWriter.java @@ -9,12 +9,11 @@ import util.FileUtil; /** * State writer * @author Simon Zambrovski - * @version $Id$ */ -public class StateWriter +public class StateWriter implements IStateWriter { - private PrintWriter writer; - private int stateNum; + protected final PrintWriter writer; + protected int stateNum; public StateWriter(String fname) throws IOException { @@ -23,6 +22,9 @@ public class StateWriter this.stateNum = 1; } + /* (non-Javadoc) + * @see tlc2.util.IStateWriter#writeState(tlc2.tool.TLCState) + */ public synchronized void writeState(TLCState state) { this.writer.println("State " + this.stateNum + ":"); @@ -30,8 +32,49 @@ public class StateWriter this.stateNum++; } - public final void close() + /* (non-Javadoc) + * @see tlc2.util.IStateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.TLCState, boolean) + */ + public synchronized void writeState(final TLCState state, final TLCState successor, final boolean successorStateIsNew) + { + if (successorStateIsNew) { + this.writeState(state); + } + } + + /* (non-Javadoc) + * @see tlc2.util.IStateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.TLCState, boolean, tlc2.util.IStateWriter.Visualization) + */ + public void writeState(TLCState state, TLCState successor, final boolean successorStateIsNew, final Visualization visualization) { + if (successorStateIsNew) { + this.writeState(state); + } + } + + /* (non-Javadoc) + * @see tlc2.util.IStateWriter#close() + */ + public void close() { this.writer.close(); } + + /* (non-Javadoc) + * @see tlc2.util.IStateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.TLCState, tlc2.util.BitVector, int, int, boolean) + */ + public void writeState(TLCState state, TLCState successor, BitVector actionChecks, int from, int to, boolean successorStateIsNew) { + if (successorStateIsNew) { + this.writeState(state); + } + } + + /* (non-Javadoc) + * @see tlc2.util.IStateWriter#writeState(tlc2.tool.TLCState, tlc2.tool.TLCState, tlc2.util.BitVector, int, int, boolean, tlc2.util.IStateWriter.Visualization) + */ + public void writeState(TLCState state, TLCState successor, BitVector actionChecks, int from, int to, boolean successorStateIsNew, + Visualization visulation) { + if (successorStateIsNew) { + this.writeState(state); + } + } } diff --git a/tlatools/src/tlc2/util/Striped.java b/tlatools/src/tlc2/util/Striped.java index 7f6ddbdb648b2ebd4a8ef1086156e540b5127216..ba46ff1d6451009d8aaa5e6dad981ce0582a04e3 100644 --- a/tlatools/src/tlc2/util/Striped.java +++ b/tlatools/src/tlc2/util/Striped.java @@ -4,7 +4,7 @@ package tlc2.util; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; -public class Striped { +public final class Striped { public static Striped readWriteLock(final int lockCnt) { return new Striped(lockCnt); @@ -19,21 +19,21 @@ public class Striped { } } - public ReadWriteLock getAt(int lockIndex) { + public final ReadWriteLock getAt(int lockIndex) { return this.locks[lockIndex]; } - public int size() { + public final int size() { return locks.length; } - public void releaseAllLocks() { + public final void releaseAllLocks() { for (int i = size() - 1; i >= 0; i--) { this.locks[i].writeLock().unlock(); } } - public void acquireAllLocks() { + public final void acquireAllLocks() { //TODO find way to do this more efficiently for (int i = 0; i < size(); i++) { this.locks[i].writeLock().lock(); diff --git a/tlatools/src/tlc2/util/statistics/BucketStatistics.java b/tlatools/src/tlc2/util/statistics/BucketStatistics.java index f74fe27f021af9589c850b2fc0aa9c3a41af26c0..0b7ebc76dcef85be2bad5ee284015f26284a1a72 100644 --- a/tlatools/src/tlc2/util/statistics/BucketStatistics.java +++ b/tlatools/src/tlc2/util/statistics/BucketStatistics.java @@ -162,22 +162,22 @@ public class BucketStatistics implements IBucketStatistics { */ public String toString() { final StringBuffer buf = new StringBuffer(); - buf.append("============================\n"); - buf.append("=" + title + "=\n"); - buf.append("============================\n"); - buf.append(String.format("Observations: %d\n", observations.get())); - buf.append(String.format("Min: %d\n", getMin())); - buf.append(String.format("Max: %d\n", getMax())); - buf.append(String.format("Mean: %.2f\n", getMean())); - buf.append(String.format("Median: %d\n", getMedian())); - buf.append(String.format("Standard deviation: %.2f\n", getStdDev())); - buf.append(String.format("75%%: %.2f\n", getPercentile(0.75d))); - buf.append(String.format("95%%: %.2f\n", getPercentile(0.95d))); - buf.append(String.format("98%%: %.2f\n", getPercentile(0.98d))); - buf.append(String.format("99%%: %.2f\n", getPercentile(0.99d))); - buf.append(String.format("99.9%%: %.2f\n", getPercentile(0.999d))); - buf.append("numEdges/occurrences (log scale)\n"); - buf.append("--------------------------------\n"); + buf.append("============================%n"); + buf.append("=" + title + "=%n"); + buf.append("============================%n"); + buf.append(String.format("Observations: %d%n", observations.get())); + buf.append(String.format("Min: %d%n", getMin())); + buf.append(String.format("Max: %d%n", getMax())); + buf.append(String.format("Mean: %.2f%n", getMean())); + buf.append(String.format("Median: %d%n", getMedian())); + buf.append(String.format("Standard deviation: %.2f%n", getStdDev())); + buf.append(String.format("75%%: %.2f%n", getPercentile(0.75d))); + buf.append(String.format("95%%: %.2f%n", getPercentile(0.95d))); + buf.append(String.format("98%%: %.2f%n", getPercentile(0.98d))); + buf.append(String.format("99%%: %.2f%n", getPercentile(0.99d))); + buf.append(String.format("99.9%%: %.2f%n", getPercentile(0.999d))); + buf.append("numEdges/occurrences (log scale)%n"); + buf.append("--------------------------------%n"); final Iterator<Entry<Integer, AtomicLong>> iterator = buckets.entrySet().iterator(); while(iterator.hasNext()) { Entry<Integer, AtomicLong> next = iterator.next(); @@ -190,7 +190,7 @@ public class BucketStatistics implements IBucketStatistics { for (int j = 0; j < Math.log(amount); j++) { buf.append("#"); } - buf.append("\n"); + buf.append("%n"); } buf.append("============================"); return buf.toString(); diff --git a/tlatools/src/tlc2/value/Enumerable.java b/tlatools/src/tlc2/value/Enumerable.java index 810f4173b50f7fd813dcd2709cff877f4d0cdcee..6187ac4373983fd5f5e350cc4001024debd69dff 100644 --- a/tlatools/src/tlc2/value/Enumerable.java +++ b/tlatools/src/tlc2/value/Enumerable.java @@ -10,6 +10,7 @@ public interface Enumerable { public int size(); public boolean member(Value elem); public ValueEnumeration elements(); + public Value isSubsetEq(Value other); } diff --git a/tlatools/src/tlc2/value/EnumerableValue.java b/tlatools/src/tlc2/value/EnumerableValue.java new file mode 100644 index 0000000000000000000000000000000000000000..d90733d822a025fc3c1f6abb50cf22827a58c696 --- /dev/null +++ b/tlatools/src/tlc2/value/EnumerableValue.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2017 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.value; + +public abstract class EnumerableValue extends Value implements Enumerable, ValueConstants { + + public Value isSubsetEq(Value other) { + final ValueEnumeration Enum = this.elements(); + Value elem; + while ((elem = Enum.nextElement()) != null) { + if (!other.member(elem)) { + return ValFalse; + } + } + return ValTrue; + } +} diff --git a/tlatools/src/tlc2/value/IntervalValue.java b/tlatools/src/tlc2/value/IntervalValue.java index cece9ce89a480202614391f410cc730e9fb1d6da..5229578ba25ce79d3c5254cf2574045039b8b775 100644 --- a/tlatools/src/tlc2/value/IntervalValue.java +++ b/tlatools/src/tlc2/value/IntervalValue.java @@ -8,7 +8,7 @@ package tlc2.value; import tlc2.util.FP64; import util.Assert; -public class IntervalValue extends Value +public class IntervalValue extends EnumerableValue implements Enumerable, Reducible { public int low, high; // the integer interval [low, high] @@ -56,6 +56,16 @@ implements Enumerable, Reducible { return false; } + public Value isSubsetEq(Value other) { + if (other instanceof IntervalValue) { + final IntervalValue iv = (IntervalValue) other; + if (iv.low <= low && iv.high >= high) { + return ValTrue; + } + } + return super.isSubsetEq(other); + } + public final boolean isFinite() { return true; } public final int size() { diff --git a/tlatools/src/tlc2/value/SetCapValue.java b/tlatools/src/tlc2/value/SetCapValue.java index aa6a1411ba164cf8276e99341a6c19ce5dda58a5..5d37c7b163b18d5a0914ece8ea749cb31ec0a7ce 100644 --- a/tlatools/src/tlc2/value/SetCapValue.java +++ b/tlatools/src/tlc2/value/SetCapValue.java @@ -7,7 +7,7 @@ package tlc2.value; import util.Assert; -public class SetCapValue extends Value implements Enumerable { +public class SetCapValue extends EnumerableValue implements Enumerable { public Value set1; public Value set2; protected SetEnumValue capSet; diff --git a/tlatools/src/tlc2/value/SetCupValue.java b/tlatools/src/tlc2/value/SetCupValue.java index 5ae729e2943d1d8fe4cf8219e517b77ac4c57072..640996544a4a5fcf293a84baec681af8362bcca5 100644 --- a/tlatools/src/tlc2/value/SetCupValue.java +++ b/tlatools/src/tlc2/value/SetCupValue.java @@ -7,7 +7,7 @@ package tlc2.value; import util.Assert; -public class SetCupValue extends Value implements Enumerable { +public class SetCupValue extends EnumerableValue implements Enumerable { public Value set1; public Value set2; protected SetEnumValue cupSet; diff --git a/tlatools/src/tlc2/value/SetDiffValue.java b/tlatools/src/tlc2/value/SetDiffValue.java index d14230d38d11ec5a9afca099b80e720f6e29699d..9bc78405a302ac80e8ada4b2a70266da4e6d68ea 100644 --- a/tlatools/src/tlc2/value/SetDiffValue.java +++ b/tlatools/src/tlc2/value/SetDiffValue.java @@ -7,7 +7,7 @@ package tlc2.value; import util.Assert; -public class SetDiffValue extends Value implements Enumerable { +public class SetDiffValue extends EnumerableValue implements Enumerable { public Value set1; public Value set2; protected SetEnumValue diffSet; diff --git a/tlatools/src/tlc2/value/SetEnumValue.java b/tlatools/src/tlc2/value/SetEnumValue.java index 85eecb938558efe9f2aff11998ca339bd9e4d72d..bb1794f65ab0f2d8fb57cc0d76ed5c1e24e35b04 100644 --- a/tlatools/src/tlc2/value/SetEnumValue.java +++ b/tlatools/src/tlc2/value/SetEnumValue.java @@ -8,7 +8,7 @@ package tlc2.value; import tlc2.util.FP64; import util.Assert; -public class SetEnumValue extends Value +public class SetEnumValue extends EnumerableValue implements Enumerable, Reducible { public ValueVec elems; // the elements of the set private boolean isNorm; // normalized? diff --git a/tlatools/src/tlc2/value/SetOfFcnsValue.java b/tlatools/src/tlc2/value/SetOfFcnsValue.java index 751a59f16aa7a957cf1bca8c3b8212eaad424494..026ff814c06b5fbf26c5085cd337dd500008bfcc 100644 --- a/tlatools/src/tlc2/value/SetOfFcnsValue.java +++ b/tlatools/src/tlc2/value/SetOfFcnsValue.java @@ -8,7 +8,7 @@ package tlc2.value; import tlc2.TLCGlobals; import util.Assert; -public class SetOfFcnsValue extends Value implements Enumerable { +public class SetOfFcnsValue extends EnumerableValue implements Enumerable { public Value domain; /* Function domain */ public Value range; /* Function range */ protected SetEnumValue fcnSet; diff --git a/tlatools/src/tlc2/value/SetOfRcdsValue.java b/tlatools/src/tlc2/value/SetOfRcdsValue.java index eddd82c9491bf3b3c0183a55a0feb29ea7725b9a..987d0df792f80f0d3cf42261a874b5a943073744 100644 --- a/tlatools/src/tlc2/value/SetOfRcdsValue.java +++ b/tlatools/src/tlc2/value/SetOfRcdsValue.java @@ -10,7 +10,7 @@ import tlc2.output.EC; import util.Assert; import util.UniqueString; -public class SetOfRcdsValue extends Value implements Enumerable { +public class SetOfRcdsValue extends EnumerableValue implements Enumerable { public UniqueString[] names; // The names of the fields. public Value[] values; // The values of the fields. protected SetEnumValue rcdSet; diff --git a/tlatools/src/tlc2/value/SetOfTuplesValue.java b/tlatools/src/tlc2/value/SetOfTuplesValue.java index 3fa97011418a4ad2a7d5d1f72d63b1dfac3f0a7f..88ba04dced8b9da21c508b2eb3369873f38ddac8 100644 --- a/tlatools/src/tlc2/value/SetOfTuplesValue.java +++ b/tlatools/src/tlc2/value/SetOfTuplesValue.java @@ -8,7 +8,7 @@ package tlc2.value; import tlc2.TLCGlobals; import util.Assert; -public class SetOfTuplesValue extends Value implements Enumerable { +public class SetOfTuplesValue extends EnumerableValue implements Enumerable { public Value[] sets; protected SetEnumValue tupleSet; diff --git a/tlatools/src/tlc2/value/SetPredValue.java b/tlatools/src/tlc2/value/SetPredValue.java index 3b1915c0ea302ca0a73edb772e11b7e571756905..93ed6b378fbd27dd2a72c9f443bef7166797ad4b 100644 --- a/tlatools/src/tlc2/value/SetPredValue.java +++ b/tlatools/src/tlc2/value/SetPredValue.java @@ -17,7 +17,7 @@ import tlc2.tool.Tool; import tlc2.util.Context; import util.Assert; -public class SetPredValue extends Value implements Enumerable { +public class SetPredValue extends EnumerableValue implements Enumerable { public Object vars; // FormalParamNode or FormalParamNode[] /*********************************************************************** * Was OpDeclNode or OpDeclNode[]. * diff --git a/tlatools/src/tlc2/value/SubsetValue.java b/tlatools/src/tlc2/value/SubsetValue.java index be76f6626238423862fca1e2f2bbd9ff1d56024f..7f36d6803422dfc43b18a9c7ed08e5de2f66728e 100644 --- a/tlatools/src/tlc2/value/SubsetValue.java +++ b/tlatools/src/tlc2/value/SubsetValue.java @@ -10,7 +10,7 @@ import java.util.BitSet; import tlc2.output.EC; import util.Assert; -public class SubsetValue extends Value implements Enumerable { +public class SubsetValue extends EnumerableValue implements Enumerable { public Value set; // SUBSET set protected SetEnumValue pset; @@ -53,6 +53,16 @@ public class SubsetValue extends Value implements Enumerable { return true; } + public Value isSubsetEq(Value other) { + // Reduce (SUBSET A \subseteq SUBSET B) to (A \subseteq B) to avoid + // exponential blowup inherent in generating the power set. + if (other instanceof SubsetValue && this.set instanceof EnumerableValue) { + final SubsetValue sv = (SubsetValue) other; + return ((EnumerableValue) this.set).isSubsetEq(sv.set); + } + return super.isSubsetEq(other); + } + public final boolean isFinite() { return this.set.isFinite(); } public final Value takeExcept(ValueExcept ex) { diff --git a/tlatools/src/tlc2/value/UnionValue.java b/tlatools/src/tlc2/value/UnionValue.java index 32e58d10ff5bf2a60845f61c017891ab11f7de91..3473991521c08fd6bda434e863700f8ca9a73176 100644 --- a/tlatools/src/tlc2/value/UnionValue.java +++ b/tlatools/src/tlc2/value/UnionValue.java @@ -7,7 +7,7 @@ package tlc2.value; import util.Assert; -public class UnionValue extends Value implements Enumerable { +public class UnionValue extends EnumerableValue implements Enumerable { public Value set; protected SetEnumValue realSet; diff --git a/tlatools/src/util/FileUtil.java b/tlatools/src/util/FileUtil.java index d5c18f4a6c6891078faa8abf8c354265c594a280..a4669b154a528fafa9ecdbb9d84b7fc9e8eeb3f5 100644 --- a/tlatools/src/util/FileUtil.java +++ b/tlatools/src/util/FileUtil.java @@ -16,6 +16,8 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.math.BigInteger; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; import java.text.SimpleDateFormat; import java.util.Date; import java.util.zip.GZIPInputStream; @@ -195,6 +197,15 @@ public class FileUtil fos.close(); } + /** + * Atomically replaced the file targetName with the file sourceName. + * @param sourceName + * @param targetName + * @throws IOException + */ + public static void replaceFile(String sourceName, String targetName) throws IOException { + Files.move(new File(sourceName).toPath(), new File(targetName).toPath(), StandardCopyOption.REPLACE_EXISTING); + } /** * The MetaDir is fromChkpt if it is not null. Otherwise, create a @@ -216,7 +227,12 @@ public class FileUtil metadir = specDir + TLCGlobals.metaRoot + FileUtil.separator; } - SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd-HH-mm-ss"); + SimpleDateFormat sdf; + if (Boolean.getBoolean(FileUtil.class.getName() + ".milliseconds")) { + sdf = new SimpleDateFormat("yy-MM-dd-HH-mm-ss.SSS"); + } else { + sdf = new SimpleDateFormat("yy-MM-dd-HH-mm-ss"); + } metadir += sdf.format(new Date()); File filedir = new File(metadir); diff --git a/tlatools/src/util/MailSender.java b/tlatools/src/util/MailSender.java index a9e8a0d09063d8fd7c1fa92afbd1c7e41d6b6033..7c96294ade8226c058833e567d3b841a9ab7ae04 100644 --- a/tlatools/src/util/MailSender.java +++ b/tlatools/src/util/MailSender.java @@ -10,6 +10,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Properties; +import java.util.Scanner; import javax.activation.DataHandler; import javax.activation.FileDataSource; @@ -28,9 +29,16 @@ import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.InitialDirContext; +import model.ModelInJar; +import tlc2.output.MP; + // Requires Java >=6 due to javax.activation only part starting with 6 public class MailSender { + public static final String MODEL_NAME = "modelName"; + public static final String SPEC_NAME = "specName"; + public static final String MAIL_ADDRESS = "result.mail.address"; + /** * @param from "Foo bar <foo@bar.com>" * @param to An email address _with_ domain part (foo@bar.com) @@ -39,7 +47,7 @@ public class MailSender { * @param messages */ private static boolean send(final String from, final String to, - final String domain, final String subject, final File[] files) { + final String domain, final String subject, final String body, final File[] files) { final Properties properties = System.getProperties(); //properties.put("mail.debug", "true"); @@ -61,6 +69,14 @@ public class MailSender { MimeBodyPart messageBodyPart = new MimeBodyPart(); final Multipart multipart = new MimeMultipart(); + + // The main body part. Having a main body appears to have a very + // positive effect on the spam score compared to emails with + // just attachments. It is also visually more appealing to e.g. + // Outlook users who otherwise see an empty mail. + messageBodyPart = new MimeBodyPart(); + messageBodyPart.setContent(body, "text/plain"); + multipart.addBodyPart(messageBodyPart); // attach file(s) for (File file : files) { @@ -100,16 +116,16 @@ public class MailSender { // RFC 974 if (attr == null) { list.add(new MXRecord(0, aDomain)); - } - - // split pref from hostname - for (int i = 0; i < attr.size(); i++) { - Object object = attr.get(i); - if (object != null && object instanceof String) { - String[] split = ((String) object).split("\\s+"); - if (split != null && split.length == 2) { - Integer weight = Integer.parseInt(split[0]); - list.add(new MXRecord(weight, split[1])); + } else { + // split pref from hostname + for (int i = 0; i < attr.size(); i++) { + Object object = attr.get(i); + if (object != null && object instanceof String) { + String[] split = ((String) object).split("\\s+"); + if (split != null && split.length == 2) { + Integer weight = Integer.parseInt(split[0]); + list.add(new MXRecord(weight, split[1])); + } } } } @@ -137,15 +153,16 @@ public class MailSender { // if null, no Mail is going to be send private final String mailto; - private String mainFile; + private String modelName = "unknown model"; + private String specName = "unknown spec"; private File err; private File out; private String from; private String domain; - public MailSender(String aMainFile) throws FileNotFoundException, UnknownHostException - { - mailto = System.getProperty("result.mail.address"); + public MailSender() throws FileNotFoundException, UnknownHostException { + ModelInJar.loadProperties(); // Reads result.mail.address and so on. + mailto = System.getProperty(MAIL_ADDRESS); if (mailto != null) { domain = mailto.split("@")[1]; @@ -153,8 +170,6 @@ public class MailSender { + System.getProperty("user.name") + "@" + InetAddress.getLocalHost().getHostName() + ">"; - mainFile = aMainFile; - // Record/Log output to later send it by email final String tmpdir = System.getProperty("java.io.tmpdir"); out = new File(tmpdir + File.separator + "MC.out"); @@ -164,26 +179,61 @@ public class MailSender { } } + public MailSender(String mainFile) throws FileNotFoundException, UnknownHostException { + this(); + setModelName(mainFile); + } + + public void setModelName(String modelName) { + this.modelName = modelName; + } + + public void setSpecName(String specName) { + this.specName = specName; + } + public boolean send() { return send(new ArrayList<File>()); } public boolean send(List<File> files) { if (mailto != null) { + files.add(0, out); // Only add the err file if there is actually content - files.add(out); if (err.length() != 0L) { - files.add(err); + files.add(0, err); } // Try sending the mail with the model checking result to the receiver - return send(from, mailto, domain, "Model Checking result for " + mainFile, - files.toArray(new File[files.size()])); + return send(from, mailto, domain, "Model Checking result for " + modelName + " with spec " + specName, + extractBody(out), files.toArray(new File[files.size()])); } else { // ignore, just signal everything is fine return true; } } + /** + * @return The human readable lines in the log file. + */ + private String extractBody(File out) { + StringBuffer result = new StringBuffer(); + try { + final Scanner scanner = new Scanner(out); + while (scanner.hasNext()) { + final String line = scanner.nextLine(); + if (line != null && !line.startsWith(MP.DELIM)) { + result.append(line); + result.append("\n"); + } + } + scanner.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + result.append("Failed to find file " + out.getAbsolutePath()); + } + return result.toString(); + } + /** * A LogPrintStream writes the logging statements to a file _and_ to * System.out. @@ -193,14 +243,6 @@ public class MailSender { public LogPrintStream(File file) throws FileNotFoundException { super(new FileOutputStream(file)); } - - /* (non-Javadoc) - * @see java.io.PrintStream#print(java.lang.String) - */ - public void print(String str) { - System.out.print(str); - super.print(str); - } /* (non-Javadoc) * @see java.io.PrintStream#println(java.lang.String) diff --git a/tlatools/src/util/TLCRuntime.java b/tlatools/src/util/TLCRuntime.java index 64ceb5765f6feb8bfed7c0ea4233da98ce00b55d..a4ecdfb0ab381ba331f9b246f9e0fdb149bfca87 100644 --- a/tlatools/src/util/TLCRuntime.java +++ b/tlatools/src/util/TLCRuntime.java @@ -32,7 +32,7 @@ public class TLCRuntime { } private long physicalSystemMemory = -1; - + /** * @return the total amount of memory, measured in bytes. */ diff --git a/tlatools/src/util/ToolIO.java b/tlatools/src/util/ToolIO.java index 02378d628d149a42e43f2ee472edb89268b4e7f1..21ab9397b2a172689fe5c2993e9e84194ae3a4c3 100644 --- a/tlatools/src/util/ToolIO.java +++ b/tlatools/src/util/ToolIO.java @@ -76,7 +76,7 @@ public class ToolIO * Care must be taken with out and err not being synchronized. Concurrent * writes will cause interleaved output. * - * @see https://bugzilla.tlaplus.net/show_bug.cgi?id=221 + * @see Bug #221 in general/bugzilla/index.html */ public static PrintStream err = System.err; diff --git a/tlatools/test-concurrent/tlc2/tool/fp/MultiThreadedFPSetTest.java b/tlatools/test-concurrent/tlc2/tool/fp/MultiThreadedFPSetTest.java index e26c1af0252d4b336ac70de86d062efa8cbff65b..9db569ecbc9507f39d0e2561503dfe352b0ba773 100644 --- a/tlatools/test-concurrent/tlc2/tool/fp/MultiThreadedFPSetTest.java +++ b/tlatools/test-concurrent/tlc2/tool/fp/MultiThreadedFPSetTest.java @@ -8,17 +8,25 @@ import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.Date; +import java.util.Timer; +import java.util.TimerTask; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.CyclicBarrier; + +import org.junit.Assume; import org.junit.Before; import org.junit.Test; + +import tlc2.TLCGlobals; import tlc2.tool.fp.generator.BatchedFingerPrintGenerator; import tlc2.tool.fp.generator.FingerPrintGenerator; import tlc2.tool.fp.generator.LongVecFingerPrintGenerator; +import tlc2.tool.fp.generator.PartitionedFingerPrintGenerator; public abstract class MultiThreadedFPSetTest extends AbstractFPSetTest { private static final int NUM_THREADS = Integer.getInteger(MultiThreadedFPSetTest.class.getName() + ".numThreads", - 2); + Runtime.getRuntime().availableProcessors()); private static final long INSERTIONS = Long.getLong(MultiThreadedFPSetTest.class.getName() + ".insertions", Integer.MAX_VALUE + 2L); @@ -26,7 +34,7 @@ public abstract class MultiThreadedFPSetTest extends AbstractFPSetTest { * @see junit.framework.TestCase#setUp() */ @Before - public void setUp() throws Exception { + public void printStats() throws Exception { System.out.println("Insertions: " + df.format(INSERTIONS) + " (approx: " + df.format(INSERTIONS * FPSet.LongSize >> 20) + " GiB)"); System.out.println("Thread count: " + NUM_THREADS); @@ -59,6 +67,17 @@ public abstract class MultiThreadedFPSetTest extends AbstractFPSetTest { doTest(FingerPrintGenerator.class); } + /** + * Test filling a {@link FPSet} with multiple threads. Each thread accesses + * a disjunct partition of the key space and fills it up linearly. This + * prevents hash collisions as well as lock contention. Essentially, this is + * the best case scenario. It ignores INSERTIONS for now. + */ + @Test + public void testMaxFPSetSizePartitioned() throws IOException, InterruptedException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { + doTest(PartitionedFingerPrintGenerator.class); + } + /** * @param fpgClass * @throws IOException @@ -70,37 +89,76 @@ public abstract class MultiThreadedFPSetTest extends AbstractFPSetTest { * @throws IllegalArgumentException * @throws InvocationTargetException */ - private void doTest(Class<? extends FingerPrintGenerator> fpgClass) throws IOException, InterruptedException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { + protected FPSet doTest(Class<? extends FingerPrintGenerator> fpgClass) throws IOException, InterruptedException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { + // Skip the test if the property + // -Dtlc2.tool.fp.MultiThreadedFPSetTest.excludes contains the simple + // name of the test. I.e. + // ...excludes=_BatchedFingerPrintGenerator_LongVecFingerPrintGenerator_PartitionedFingerPrintGenerator + // to skip all but FingerPrintGenerator test. Note that the name has to + // be prefixed with "_" to make it possible to skip + // "FingerPrintGenerator" itself. + Assume.assumeFalse(System.getProperty(MultiThreadedFPSetTest.class.getName() + ".excludes", "") + .contains("_" + fpgClass.getSimpleName())); + + TLCGlobals.setNumWorkers(NUM_THREADS); final FPSet fpSet = getFPSetInitialized(NUM_THREADS); final CountDownLatch latch = new CountDownLatch(NUM_THREADS); - final Constructor<?> constructor = fpgClass - .getConstructor(new Class[] { MultiThreadedFPSetTest.class, int.class, FPSet.class, CountDownLatch.class, long.class, long.class }); + final Constructor<?> constructor = fpgClass.getConstructor(new Class[] { MultiThreadedFPSetTest.class, + int.class, int.class, FPSet.class, CountDownLatch.class, long.class, long.class, CyclicBarrier.class }); + + // Take timestamp after instantiating FPSet to not measure zero'ing/initializing FPSet. + previousTimestamp = startTimestamp = System.currentTimeMillis(); + + final Timer timer = new Timer(); + final CyclicBarrier barrier = new CyclicBarrier(NUM_THREADS, new Runnable() { + public void run() { + // Start a periodic task to report progress. Do not do it as part of the + // FPGs below. It can drastically slow down an FPG selected to be the + // reporter. + final TimerTask reporter = new TimerTask() { + public void run() { + printInsertionSpeed(fpSet); + } + }; + // Take timestamp after instantiating FPSet to not measure zero'ing/initializing FPSet. + previousTimestamp = startTimestamp = System.currentTimeMillis(); + timer.scheduleAtFixedRate(reporter, 1L, 60 * 1000); + } + }); long seed = RNG_SEED; final FingerPrintGenerator[] fpgs = new FingerPrintGenerator[NUM_THREADS]; for (int i = 0; i < fpgs.length; i++) { fpgs[i] = (FingerPrintGenerator) constructor.newInstance( - this, i, fpSet, latch, seed++, INSERTIONS); + this, i, fpgs.length, fpSet, latch, seed++, INSERTIONS, barrier); Thread thread = new Thread(fpgs[i], "Producer#" + i); thread.start(); } // wait for runnables/fpg to tear down the latch latch.await(); - endTimeStamp = new Date(); + // Cancel reporting task. + timer.cancel(); + long overallPuts = 0L; + long overallCollisions = 0L; // print stats for (int i = 0; i < fpgs.length; i++) { final FingerPrintGenerator fpg = fpgs[i]; long puts = fpg.getPuts(); - System.out.println("Producer: " + fpg.getId() + " puts: " + puts); - System.out.println("puts/collisions: " + (double) (puts / fpg.getCollisions())); + long collisions = fpg.getCollisions(); + System.out.println(String.format("Producer: %s, puts: %s, puts/collisions: %s", fpg.getId(), puts, + (collisions == 0 ? "none" : (double) (puts / collisions)))); overallPuts += puts; + overallCollisions += collisions; } + System.out.println(String.format("Total puts: %s, total collisions: %s, total load factor: %s, duration: %s ms.", overallPuts, + overallCollisions, df.format(((FPSetStatistic) fpSet).getLoadFactor()), endTimeStamp.getTime() - startTimestamp)); + printInsertionSpeed(fpSet, startTimestamp, endTimeStamp.getTime()); // Do not compare fpSet.size() to insertions as several FPGs might race // with the FPG that inserts the INSERTIONS element. Hence we count the @@ -115,5 +173,7 @@ public abstract class MultiThreadedFPSetTest extends AbstractFPSetTest { // Check a DiskFPSet's invariant that after flush all fingerprints in // the file are a) monotonically increasing and b) there are no duplicates. assertTrue(fpSet.checkInvariant()); + + return fpSet; } } diff --git a/tlatools/test-concurrent/tlc2/tool/fp/MultiThreadedLSBDiskFPSetTest.java b/tlatools/test-concurrent/tlc2/tool/fp/MultiThreadedLSBDiskFPSetTest.java new file mode 100644 index 0000000000000000000000000000000000000000..3b806e2fe6afd0b241621ffc54732c001c64cbef --- /dev/null +++ b/tlatools/test-concurrent/tlc2/tool/fp/MultiThreadedLSBDiskFPSetTest.java @@ -0,0 +1,16 @@ +// Copyright (c) 2016 Markus Alexander Kuppe. All rights reserved. +package tlc2.tool.fp; + +import java.io.IOException; + +public class MultiThreadedLSBDiskFPSetTest extends MultiThreadedFPSetTest { + + /* (non-Javadoc) + * @see tlc2.tool.fp.AbstractFPSetTest#getFPSet(long) + */ + @Override + protected FPSet getFPSet(final FPSetConfiguration fpSetConfig) throws IOException { + fpSetConfig.setRatio(1.0d); // Tests can consume all of the available VM memory + return new LSBDiskFPSet(fpSetConfig); + } +} diff --git a/tlatools/test-concurrent/tlc2/tool/fp/MultiThreadedMSBDiskFPSetTest.java b/tlatools/test-concurrent/tlc2/tool/fp/MultiThreadedMSBDiskFPSetTest.java index 41701ea7e675d71085a55c193e593e18d76916dc..7d34c1eb752338da7a3eb0285b7a95fbecf53373 100644 --- a/tlatools/test-concurrent/tlc2/tool/fp/MultiThreadedMSBDiskFPSetTest.java +++ b/tlatools/test-concurrent/tlc2/tool/fp/MultiThreadedMSBDiskFPSetTest.java @@ -10,6 +10,7 @@ public class MultiThreadedMSBDiskFPSetTest extends MultiThreadedFPSetTest { */ @Override protected FPSet getFPSet(final FPSetConfiguration fpSetConfig) throws IOException { + fpSetConfig.setRatio(1.0d); // Tests can consume all of the available VM memory return new MSBDiskFPSet(fpSetConfig); } } diff --git a/tlatools/test-concurrent/tlc2/tool/fp/MultiThreadedOffHeapDiskFPSetTest.java b/tlatools/test-concurrent/tlc2/tool/fp/MultiThreadedOffHeapDiskFPSetTest.java index 452b01cb093a9552383c3d755e23ce5377dabaf4..a6dc15bdf0b46cac444b26b822073c4b12872872 100644 --- a/tlatools/test-concurrent/tlc2/tool/fp/MultiThreadedOffHeapDiskFPSetTest.java +++ b/tlatools/test-concurrent/tlc2/tool/fp/MultiThreadedOffHeapDiskFPSetTest.java @@ -2,6 +2,11 @@ package tlc2.tool.fp; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; + +import org.junit.Assert; + +import tlc2.tool.fp.generator.PartitionedFingerPrintGenerator; public class MultiThreadedOffHeapDiskFPSetTest extends MultiThreadedFPSetTest { @@ -10,6 +15,17 @@ public class MultiThreadedOffHeapDiskFPSetTest extends MultiThreadedFPSetTest { */ @Override protected FPSet getFPSet(final FPSetConfiguration fpSetConfig) throws IOException { - return new OffHeapDiskFPSet(new FPSetConfiguration(1.0d)); + return new OffHeapDiskFPSet(new FPSetConfiguration(1.0d, OffHeapDiskFPSet.class.getName())); + } + + /* (non-Javadoc) + * @see tlc2.tool.fp.MultiThreadedFPSetTest#testMaxFPSetSizePartitioned() + */ + @Override + public void testMaxFPSetSizePartitioned() + throws IOException, InterruptedException, NoSuchMethodException, SecurityException, InstantiationException, + IllegalAccessException, IllegalArgumentException, InvocationTargetException { + final OffHeapDiskFPSet fpSet = (OffHeapDiskFPSet) doTest(PartitionedFingerPrintGenerator.class); + Assert.assertEquals(0, fpSet.getBucketCapacity()); // bucket capacity is actually reprobe which expected to be zero. } } diff --git a/tlatools/test-concurrent/tlc2/tool/fp/generator/BatchedFingerPrintGenerator.java b/tlatools/test-concurrent/tlc2/tool/fp/generator/BatchedFingerPrintGenerator.java index 8d1385ebc3d6e52ebb643faf977a282ae0d9d4e6..dd2b536878ef475095576f3d2d98b45a7d092ff5 100644 --- a/tlatools/test-concurrent/tlc2/tool/fp/generator/BatchedFingerPrintGenerator.java +++ b/tlatools/test-concurrent/tlc2/tool/fp/generator/BatchedFingerPrintGenerator.java @@ -4,6 +4,7 @@ package tlc2.tool.fp.generator; import java.io.IOException; import java.util.Arrays; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.CyclicBarrier; import org.junit.Assert; @@ -14,17 +15,22 @@ public class BatchedFingerPrintGenerator extends FingerPrintGenerator { private static final int batch = 1024; - public BatchedFingerPrintGenerator(MultiThreadedFPSetTest test, int id, FPSet fpSet, CountDownLatch latch, long seed, long insertions) { - super(test, id, fpSet, latch, seed, insertions); + public BatchedFingerPrintGenerator(MultiThreadedFPSetTest test, int id, int numThreads, FPSet fpSet, CountDownLatch latch, long seed, long insertions, final CyclicBarrier barrier) { + super(test, id, numThreads, fpSet, latch, seed, insertions, barrier); } /* (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { + waitForAllThreadsStarted(); + long predecessors[] = new long[batch]; boolean initialized = false; - while (fpSet.size() < insertions) { + // Reduce number of FPSet#size invocation by counting puts/collisions. + // FPSet#size can cause an FPSet to synchronize all its writers slowing + // down execution. + while (puts + collisions < perThreadInsertions || fpSet.size() < totalInsertions) { try { // Make sure set still contains predecessors if (initialized) { @@ -51,12 +57,6 @@ public class BatchedFingerPrintGenerator extends FingerPrintGenerator { collisions++; } } - - // First producer prints stats - if (id == 0) { - test.printInsertionSpeed(fpSet.size()); - } - } catch (IOException e) { e.printStackTrace(); Assert.fail("Unexpected"); diff --git a/tlatools/test-concurrent/tlc2/tool/fp/generator/FingerPrintGenerator.java b/tlatools/test-concurrent/tlc2/tool/fp/generator/FingerPrintGenerator.java index 46c8208d3bb6325b1efef15c4af545e997141579..09372a227b439d78aa60aa8ca274c5f25fd1710b 100644 --- a/tlatools/test-concurrent/tlc2/tool/fp/generator/FingerPrintGenerator.java +++ b/tlatools/test-concurrent/tlc2/tool/fp/generator/FingerPrintGenerator.java @@ -3,7 +3,9 @@ package tlc2.tool.fp.generator; import java.io.IOException; import java.util.Random; +import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.CyclicBarrier; import org.junit.Assert; @@ -12,30 +14,42 @@ import tlc2.tool.fp.MultiThreadedFPSetTest; public class FingerPrintGenerator implements Runnable { - protected final long insertions; + protected final long totalInsertions; + protected final long perThreadInsertions; protected final Random rnd; protected final FPSet fpSet; protected final CountDownLatch latch; + protected final CyclicBarrier barrier; protected final int id; + protected final int numThreads; protected final MultiThreadedFPSetTest test; protected long puts = 0L; protected long collisions = 0L; - public FingerPrintGenerator(MultiThreadedFPSetTest test, int id, FPSet fpSet, CountDownLatch latch, long seed, long insertions) { + public FingerPrintGenerator(MultiThreadedFPSetTest test, int id, int numThreads, FPSet fpSet, CountDownLatch latch, + long seed, long totalInsertions, final CyclicBarrier barrier) { this.test = test; this.id = id; + this.numThreads = numThreads; this.fpSet = fpSet; this.latch = latch; + this.barrier = barrier; this.rnd = new Random(seed); - this.insertions = insertions; + this.totalInsertions = totalInsertions; + this.perThreadInsertions = (long) Math.floor(totalInsertions / numThreads); } /* (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { + waitForAllThreadsStarted(); + long predecessor = 0L; - while (fpSet.size() < insertions) { + // Reduce number of FPSet#size invocation by counting puts/collisions. + // FPSet#size can cause an FPSet to synchronize all its writers slowing + // down execution. + while (puts + collisions < perThreadInsertions || fpSet.size() < totalInsertions) { try { // make sure set still contains predecessor if (predecessor != 0L) { @@ -50,12 +64,6 @@ public class FingerPrintGenerator implements Runnable { } else { collisions++; } - - // First producer prints stats - if (id == 0) { - test.printInsertionSpeed(fpSet.size()); - } - } catch (IOException e) { e.printStackTrace(); Assert.fail("Unexpected"); @@ -79,6 +87,16 @@ public class FingerPrintGenerator implements Runnable { * @return the collisions */ public long getCollisions() { - return collisions == 0 ? 1 : collisions; + return collisions; + } + + protected void waitForAllThreadsStarted() { + try { + barrier.await(); + } catch (InterruptedException e1) { + e1.printStackTrace(); + } catch (BrokenBarrierException e1) { + e1.printStackTrace(); + } } } \ No newline at end of file diff --git a/tlatools/test-concurrent/tlc2/tool/fp/generator/LongVecFingerPrintGenerator.java b/tlatools/test-concurrent/tlc2/tool/fp/generator/LongVecFingerPrintGenerator.java index 1253fb9dd0d244f58970f0b89d5e6610f6829c3a..fa38a0210b98938152daed9bc799b999c663029c 100644 --- a/tlatools/test-concurrent/tlc2/tool/fp/generator/LongVecFingerPrintGenerator.java +++ b/tlatools/test-concurrent/tlc2/tool/fp/generator/LongVecFingerPrintGenerator.java @@ -4,6 +4,7 @@ package tlc2.tool.fp.generator; import java.io.IOException; import java.util.Arrays; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.CyclicBarrier; import org.junit.Assert; @@ -16,22 +17,27 @@ public class LongVecFingerPrintGenerator extends FingerPrintGenerator { private static final int batch = 1024; - public LongVecFingerPrintGenerator(MultiThreadedFPSetTest test, int id, FPSet fpSet, CountDownLatch latch, long seed, long insertions) { - super(test, id, fpSet, latch, seed, insertions); + public LongVecFingerPrintGenerator(MultiThreadedFPSetTest test, int id, int numThreads, FPSet fpSet, CountDownLatch latch, long seed, long insertions, final CyclicBarrier barrier) { + super(test, id, numThreads, fpSet, latch, seed, insertions, barrier); } /* (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { + waitForAllThreadsStarted(); + TestLongVec predecessors = new TestLongVec(batch); boolean initialized = false; - while (fpSet.size() < insertions) { + // Reduce number of FPSet#size invocation by counting puts/collisions. + // FPSet#size can cause an FPSet to synchronize all its writers slowing + // down execution. + while (puts + collisions < perThreadInsertions || fpSet.size() < totalInsertions) { try { // Make sure set still contains predecessors if (initialized) { final BitVector bitVector = fpSet.containsBlock(predecessors); - Assert.assertTrue(bitVector.trueCnt() == batch); + Assert.assertEquals(batch, batch - bitVector.trueCnt()); } // Fill new fingerprints and sort them @@ -45,12 +51,6 @@ public class LongVecFingerPrintGenerator extends FingerPrintGenerator { final BitVector bitVector = fpSet.putBlock(predecessors); puts += bitVector.trueCnt(); collisions += (batch - bitVector.trueCnt()); - - // First producer prints stats - if (id == 0) { - test.printInsertionSpeed(fpSet.size()); - } - } catch (IOException e) { e.printStackTrace(); Assert.fail("Unexpected"); diff --git a/tlatools/test-concurrent/tlc2/tool/fp/generator/PartitionedFingerPrintGenerator.java b/tlatools/test-concurrent/tlc2/tool/fp/generator/PartitionedFingerPrintGenerator.java new file mode 100644 index 0000000000000000000000000000000000000000..c4deb32cc7aadfb9a23c11f4d78fa0428082b122 --- /dev/null +++ b/tlatools/test-concurrent/tlc2/tool/fp/generator/PartitionedFingerPrintGenerator.java @@ -0,0 +1,87 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package tlc2.tool.fp.generator; + +import java.io.IOException; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.CyclicBarrier; + +import org.junit.Assert; + +import tlc2.tool.fp.FPSet; +import tlc2.tool.fp.MultiThreadedFPSetTest; + +public class PartitionedFingerPrintGenerator extends FingerPrintGenerator { + + private long fp; + + private final long numOfPerThreadBuckets; + private final long increment; + + public PartitionedFingerPrintGenerator(MultiThreadedFPSetTest test, int id, int numThreads, FPSet fpSet, CountDownLatch latch, + long seed, long insertions, final CyclicBarrier barrier) { + super(test, id, numThreads, fpSet, latch, seed, insertions, barrier); + + final long numOfTotalBuckets = fpSet.getConfiguration().getMemoryInFingerprintCnt(); + numOfPerThreadBuckets = numOfTotalBuckets / (1L * numThreads); + + final long perThreadStartBucket = numOfPerThreadBuckets * (1L * id); + increment = (long) Math.ceil((Long.MAX_VALUE - 1L) / (numOfTotalBuckets * 1d)); + fp = increment * perThreadStartBucket; + } + + /* (non-Javadoc) + * @see java.lang.Runnable#run() + */ + public void run() { + waitForAllThreadsStarted(); + + long insertions = 0L; + + while (insertions++ < numOfPerThreadBuckets) { + try { + if (fp != 0L) { + if (fpSet.put(fp) != false) { + Assert.fail("Linear fill-up should not cause a collision"); + } + // In case PartitionedFingerPrintGenerator and + // FingerPrintGenerator are used in performance tests, burn + // the same amount of cycles to obtain the next random like + // FPG does. puts is meaningless in the scope of PFPG + // anyway. It inserts up to a load factor of 1. + //puts += rnd.nextLong(); + puts++; + } + fp += increment; + } catch (IOException e) { + e.printStackTrace(); + Assert.fail("Unexpected"); + } + } + latch.countDown(); + } +} diff --git a/tlatools/test-long/tlc2/tool/fp/FPSetTest.java b/tlatools/test-long/tlc2/tool/fp/FPSetTest.java index 2ab4d40eb5e837d02c0787fefba0461a56bfe30d..5adadc05b830d75818eeb21b1f6229dbae9532b0 100644 --- a/tlatools/test-long/tlc2/tool/fp/FPSetTest.java +++ b/tlatools/test-long/tlc2/tool/fp/FPSetTest.java @@ -57,7 +57,7 @@ public abstract class FPSetTest extends AbstractFPSetTest { long currentSize = fpSet.size(); assertTrue(i == currentSize); - printInsertionSpeed(currentSize); + printInsertionSpeed(fpSet); } // try creating a check point @@ -100,7 +100,7 @@ public abstract class FPSetTest extends AbstractFPSetTest { long currentSize = fpSet.size(); assertTrue(++counter == currentSize); - printInsertionSpeed(currentSize); + printInsertionSpeed(fpSet); } // try creating a check point diff --git a/tlatools/test-long/tlc2/tool/fp/OffHeapDiskFPSetTest.java b/tlatools/test-long/tlc2/tool/fp/OffHeapDiskFPSetTest.java index 8bbba505b34b5ade1838109971638e514a212e8f..6b2b424fc1fcf5a2f98410830a912bcc4c682f31 100644 --- a/tlatools/test-long/tlc2/tool/fp/OffHeapDiskFPSetTest.java +++ b/tlatools/test-long/tlc2/tool/fp/OffHeapDiskFPSetTest.java @@ -67,7 +67,8 @@ public class OffHeapDiskFPSetTest extends FPSetTest { * @see tlc2.tool.fp.AbstractFPSetTest#getFPSet(long) */ @Override - protected FPSet getFPSet(final FPSetConfiguration fpSetConfig) throws IOException { - return new OffHeapDiskFPSet(new FPSetConfiguration(1.0d)); + protected FPSet getFPSet(final FPSetConfiguration ignored) throws IOException { + final FPSetConfiguration config = new FPSetConfiguration(1.0d, OffHeapDiskFPSet.class.getName()); + return new OffHeapDiskFPSet(config); } } diff --git a/tlatools/test-model/CodePlexBug08/checkpoint.zip b/tlatools/test-model/CodePlexBug08/checkpoint.zip new file mode 100644 index 0000000000000000000000000000000000000000..6488c8a654a465c77dce134b81c37e8200eeb107 Binary files /dev/null and b/tlatools/test-model/CodePlexBug08/checkpoint.zip differ diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_3/11-10-28-22-57-47/MC.st b/tlatools/test-model/CodePlexBug21.cfg similarity index 100% rename from examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_3/11-10-28-22-57-47/MC.st rename to tlatools/test-model/CodePlexBug21.cfg diff --git a/tlatools/test-model/CodePlexBug21.tla b/tlatools/test-model/CodePlexBug21.tla new file mode 100644 index 0000000000000000000000000000000000000000..3df19a634c534e57d12049cd9d5429fbb0304df2 --- /dev/null +++ b/tlatools/test-model/CodePlexBug21.tla @@ -0,0 +1,13 @@ +--------------------------- MODULE CodePlexBug21 --------------------------- +EXTENDS Naturals, TLC + +func1 == [x \in 1..3 |-> x] +func2 == <<1,2,3>> + +ASSUME func1 = func2 \* evaluated to TRUE +ASSUME 3 :> 11 @@ func1 = <<1,2,11>> \* evaluated to TRUE + +ASSUME 3 :> 11 @@ func2 = <<1,2,11>> \* erroneously evaluated to FALSE + +ASSUME 4 :> 11 @@ func2 = <<1,2,3,11>> \* throws a TLC error +============================================================================= diff --git a/tlatools/test-model/DepthFirstErrorTrace.cfg b/tlatools/test-model/DepthFirstErrorTrace.cfg new file mode 100644 index 0000000000000000000000000000000000000000..c8cffbe64c3dcc8bce148218f2e7b66a7537f573 --- /dev/null +++ b/tlatools/test-model/DepthFirstErrorTrace.cfg @@ -0,0 +1,4 @@ +SPECIFICATION +Spec +INVARIANT +Inv \ No newline at end of file diff --git a/tlatools/test-model/DepthFirstErrorTrace.tla b/tlatools/test-model/DepthFirstErrorTrace.tla new file mode 100644 index 0000000000000000000000000000000000000000..af057477a9bd4c3362a915f8fe67da96df904752 --- /dev/null +++ b/tlatools/test-model/DepthFirstErrorTrace.tla @@ -0,0 +1,9 @@ +--------------------------- MODULE DepthFirstErrorTrace --------------------------- +EXTENDS Integers + +VARIABLES x + +Spec == (x=0) /\ [][x'=x+1]_<<x>> + +Inv == x < 7 +============================================================================= diff --git a/tlatools/test-model/DepthFirstTerminate.cfg b/tlatools/test-model/DepthFirstTerminate.cfg new file mode 100644 index 0000000000000000000000000000000000000000..bc224b9def594b0819de3f0b45ede63ea8213c7b --- /dev/null +++ b/tlatools/test-model/DepthFirstTerminate.cfg @@ -0,0 +1,2 @@ +SPECIFICATION +Spec diff --git a/tlatools/test-model/DepthFirstTerminate.tla b/tlatools/test-model/DepthFirstTerminate.tla new file mode 100644 index 0000000000000000000000000000000000000000..d7193b8a66cd0df78a0847a70974f22bc664a477 --- /dev/null +++ b/tlatools/test-model/DepthFirstTerminate.tla @@ -0,0 +1,59 @@ +---------------------------- MODULE DepthFirstTerminate ---------------------------- +EXTENDS Integers + +(* + +--algorithm Untitled +{ + variables u = 24 ; v \in 1 .. 50; + { + print <<u, v>>; + while (u # 0) { + if (u < v) { + u := v || v := u + }; + u := u - v ; + }; + print <<"have gcd", v>>; + } +} +*) +\* BEGIN TRANSLATION +VARIABLES u, v, pc + +vars == << u, v, pc >> + +Init == (* Global variables *) + /\ u = 24 + /\ v \in 1 .. 50 + /\ pc = "Lbl_1" + +Lbl_1 == /\ pc = "Lbl_1" + /\ pc' = "Lbl_2" + /\ UNCHANGED << u, v >> + +Lbl_2 == /\ pc = "Lbl_2" + /\ IF u # 0 + THEN /\ IF u < v + THEN /\ /\ u' = v + /\ v' = u + ELSE /\ TRUE + /\ UNCHANGED << u, v >> + /\ pc' = "Lbl_3" + ELSE /\ pc' = "Done" + /\ UNCHANGED << u, v >> + +Lbl_3 == /\ pc = "Lbl_3" + /\ u' = u - v + /\ pc' = "Lbl_2" + /\ v' = v + +Next == Lbl_1 \/ Lbl_2 \/ Lbl_3 + \/ (* Disjunct to prevent deadlock on termination *) + (pc = "Done" /\ UNCHANGED vars) + +Spec == /\ Init /\ [][Next]_vars + +\* END TRANSLATION + +============================================================================= diff --git a/tlatools/test-model/DieHard.cfg b/tlatools/test-model/DieHard.cfg new file mode 100644 index 0000000000000000000000000000000000000000..c8cffbe64c3dcc8bce148218f2e7b66a7537f573 --- /dev/null +++ b/tlatools/test-model/DieHard.cfg @@ -0,0 +1,4 @@ +SPECIFICATION +Spec +INVARIANT +Inv \ No newline at end of file diff --git a/tlatools/test-model/DieHard.tla b/tlatools/test-model/DieHard.tla new file mode 100644 index 0000000000000000000000000000000000000000..e35c24c86f88dcda5eedc753dab7d8915a5dcc7f --- /dev/null +++ b/tlatools/test-model/DieHard.tla @@ -0,0 +1,87 @@ +---------------------------- MODULE DieHard ---------------------------- +EXTENDS TLC, Integers + +Min(m, n) == IF m < n THEN m ELSE n + +NONDET == "nondet" +FILL_BIG == "fill big" +EMPTY_BIG == "empty big" +FILL_SMALL == "fill small" +EMPTY_SMALL == "empty small" +BIG_TO_SMALL == "pour big to small" +SMALL_TO_BIG == "pour small to big" + +(*************************************************************************** +--algorithm DieHardDemo { + variables bigBucket = 0, smallBucket = 0, action = NONDET; + + process (FixWater = 1) + variables water_to_pour = 0; + { + LB1: while (TRUE) + { + either { action := FILL_BIG; bigBucket := 5; } + or { action := EMPTY_BIG; bigBucket := 0; } + or { action := FILL_SMALL; smallBucket := 3; } + or { action := EMPTY_SMALL; smallBucket := 0; } + or { + action := BIG_TO_SMALL; + water_to_pour := Min(3 - smallBucket, bigBucket); + smallBucket := smallBucket + water_to_pour; + bigBucket := bigBucket - water_to_pour; + } + or { + action := SMALL_TO_BIG; + water_to_pour := Min(5 - bigBucket, smallBucket); + smallBucket := smallBucket - water_to_pour; + bigBucket := bigBucket + water_to_pour; + } + } + } +} + +***************************************************************************) +\* BEGIN TRANSLATION +VARIABLES bigBucket, smallBucket, action, water_to_pour + +vars == << bigBucket, smallBucket, action, water_to_pour >> + +ProcSet == {1} + +Init == (* Global variables *) + /\ bigBucket = 0 + /\ smallBucket = 0 + /\ action = NONDET + (* Process FixWater *) + /\ water_to_pour = 0 + +FixWater == \/ /\ action' = FILL_BIG + /\ bigBucket' = 5 + /\ UNCHANGED <<smallBucket, water_to_pour>> + \/ /\ action' = EMPTY_BIG + /\ bigBucket' = 0 + /\ UNCHANGED <<smallBucket, water_to_pour>> + \/ /\ action' = FILL_SMALL + /\ smallBucket' = 3 + /\ UNCHANGED <<bigBucket, water_to_pour>> + \/ /\ action' = EMPTY_SMALL + /\ smallBucket' = 0 + /\ UNCHANGED <<bigBucket, water_to_pour>> + \/ /\ action' = BIG_TO_SMALL + /\ water_to_pour' = Min(3 - smallBucket, bigBucket) + /\ smallBucket' = smallBucket + water_to_pour' + /\ bigBucket' = bigBucket - water_to_pour' + \/ /\ action' = SMALL_TO_BIG + /\ water_to_pour' = Min(5 - bigBucket, smallBucket) + /\ smallBucket' = smallBucket - water_to_pour' + /\ bigBucket' = bigBucket + water_to_pour' + +Next == FixWater + +Spec == Init /\ [][Next]_vars + +Inv == bigBucket # 4 + +\* END TRANSLATION + +============================================================================= diff --git a/tlatools/test-model/EWD840/MC06.cfg b/tlatools/test-model/EWD840/MC06.cfg new file mode 100644 index 0000000000000000000000000000000000000000..ed1d175d3106a5e3cf5d65bf42ace5b386eb145c --- /dev/null +++ b/tlatools/test-model/EWD840/MC06.cfg @@ -0,0 +1,9 @@ +\* CONSTANT definitions +CONSTANT +N <- const_143073460396411000 +\* SPECIFICATION definition +SPECIFICATION +spec_143073460397412000 +\* PROPERTY definition +PROPERTY +prop_143073460398413000 diff --git a/tlatools/test-model/EWD840/MC06.tla b/tlatools/test-model/EWD840/MC06.tla new file mode 100644 index 0000000000000000000000000000000000000000..71a018b16aeb0327558fb1052a57350ed3dff85d --- /dev/null +++ b/tlatools/test-model/EWD840/MC06.tla @@ -0,0 +1,17 @@ +---- MODULE MC06 ---- +EXTENDS EWD840, TLC + +\* CONSTANT definitions @modelParameterConstants:0N +const_143073460396411000 == +7 +---- + +\* SPECIFICATION definition @modelBehaviorSpec:0 +spec_143073460397412000 == +Spec +---- +\* PROPERTY definition @modelCorrectnessProperties:0 +prop_143073460398413000 == +Liveness +---- +============================================================================= diff --git a/tlatools/test-model/EmptySubsetEq.cfg b/tlatools/test-model/EmptySubsetEq.cfg new file mode 100644 index 0000000000000000000000000000000000000000..c8cffbe64c3dcc8bce148218f2e7b66a7537f573 --- /dev/null +++ b/tlatools/test-model/EmptySubsetEq.cfg @@ -0,0 +1,4 @@ +SPECIFICATION +Spec +INVARIANT +Inv \ No newline at end of file diff --git a/tlatools/test-model/EmptySubsetEq.tla b/tlatools/test-model/EmptySubsetEq.tla new file mode 100644 index 0000000000000000000000000000000000000000..d951e633b1d5853aec2aa1a9bb0f9846201fab3f --- /dev/null +++ b/tlatools/test-model/EmptySubsetEq.tla @@ -0,0 +1,13 @@ +--------------------------- MODULE EmptySubsetEq -------------------------- +EXTENDS Integers, FiniteSets + +VARIABLE b + +Init == b = TRUE + +Next == b' = /\ (SUBSET (1..3)) \subseteq (1..4) + +Spec == Init /\ [][Next]_<<b>> + +Inv == b = TRUE +============================================================================= diff --git a/tlatools/test-model/SubsetEq.cfg b/tlatools/test-model/SubsetEq.cfg new file mode 100644 index 0000000000000000000000000000000000000000..c8cffbe64c3dcc8bce148218f2e7b66a7537f573 --- /dev/null +++ b/tlatools/test-model/SubsetEq.cfg @@ -0,0 +1,4 @@ +SPECIFICATION +Spec +INVARIANT +Inv \ No newline at end of file diff --git a/tlatools/test-model/SubsetEq.tla b/tlatools/test-model/SubsetEq.tla new file mode 100644 index 0000000000000000000000000000000000000000..41bed5772bc4e8dec5f9419714d16de591f19882 --- /dev/null +++ b/tlatools/test-model/SubsetEq.tla @@ -0,0 +1,22 @@ +------------------------------ MODULE SubsetEq ------------------------------ +EXTENDS Integers, FiniteSets + +VARIABLE b + +Init == b = TRUE + +Next == b' = /\ (SUBSET (1..23) \subseteq SUBSET (1..42)) + /\ ~(SUBSET (1..42) \subseteq SUBSET (1..23)) + /\ ~(SUBSET (1..42) \subseteq SUBSET (2..42)) + /\ (SUBSET (2..42) \subseteq SUBSET (1..42)) + /\ (SUBSET {1,2,3} \subseteq SUBSET {1,2,3,4}) + /\ (SUBSET {} \subseteq SUBSET {}) + /\ (SUBSET {} \subseteq SUBSET {1}) + /\ ~(SUBSET {1} \subseteq SUBSET {}) + /\ (SUBSET {1} \subseteq SUBSET Int) + /\ (SUBSET {1} \subseteq SUBSET Nat) + +Spec == Init /\ [][Next]_<<b>> + +Inv == b = TRUE +============================================================================= diff --git a/tlatools/test-model/TLCSetInit.cfg b/tlatools/test-model/TLCSetInit.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e5a3896997d57e27da8ca619e152212920e137d1 --- /dev/null +++ b/tlatools/test-model/TLCSetInit.cfg @@ -0,0 +1,4 @@ +INIT +Init +NEXT +Next diff --git a/tlatools/test-model/TLCSetInit.tla b/tlatools/test-model/TLCSetInit.tla new file mode 100644 index 0000000000000000000000000000000000000000..20fd8cd5bb4379ba5960037ea42b0e734d7ebb5f --- /dev/null +++ b/tlatools/test-model/TLCSetInit.tla @@ -0,0 +1,9 @@ +----- MODULE TLCSetInit ----- +EXTENDS Integers, TLC + +VARIABLES x + +Init == x = 1 /\ TLCSet(1,"TLCSet works.") +Next == x < 10 /\ x' = x + 1 /\ PrintT(TLCGet(1)) + +===== \ No newline at end of file diff --git a/tlatools/test-model/UserModuleOverride.cfg b/tlatools/test-model/UserModuleOverride.cfg new file mode 100644 index 0000000000000000000000000000000000000000..20524345c8bb1355485ae7282e49cd9a44301eca --- /dev/null +++ b/tlatools/test-model/UserModuleOverride.cfg @@ -0,0 +1,4 @@ +SPECIFICATION +Spec +PROPERTY +Prop diff --git a/tlatools/test-model/UserModuleOverride.class b/tlatools/test-model/UserModuleOverride.class new file mode 100644 index 0000000000000000000000000000000000000000..dd08da0f10e3f4aaca43e8957876100ac0d1f4bf Binary files /dev/null and b/tlatools/test-model/UserModuleOverride.class differ diff --git a/tlatools/test-model/UserModuleOverride.java b/tlatools/test-model/UserModuleOverride.java new file mode 100644 index 0000000000000000000000000000000000000000..3d10b44e29aaac079fc9c6dfd46546048599cf0b --- /dev/null +++ b/tlatools/test-model/UserModuleOverride.java @@ -0,0 +1,7 @@ +import tlc2.value.BoolValue; +// manually compiled with Java 1.6 +public class UserModuleOverride { + public static BoolValue Get() { + return new BoolValue(true); + } +} diff --git a/tlatools/test-model/UserModuleOverride.tla b/tlatools/test-model/UserModuleOverride.tla new file mode 100644 index 0000000000000000000000000000000000000000..d221d1a25a159a2af349076e206eb6c6e1f4635a --- /dev/null +++ b/tlatools/test-model/UserModuleOverride.tla @@ -0,0 +1,14 @@ +--------------------------- MODULE UserModuleOverride ----------------------- +EXTENDS Naturals +VARIABLES x + +Get == FALSE + +Init == x = Get + +Next == x' = TRUE + +Spec == Init /\ [][Next]_<<x>> + +Prop == [](x = TRUE) +============================================================================= diff --git a/tlatools/test-model/suite/etest1.cfg b/tlatools/test-model/suite/etest1.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b0ee260b28eef2026bbc2f6cb01c89fd3d01d947 --- /dev/null +++ b/tlatools/test-model/suite/etest1.cfg @@ -0,0 +1,8 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/etest1.tla b/tlatools/test-model/suite/etest1.tla new file mode 100644 index 0000000000000000000000000000000000000000..9004a1858d319b2ec4505829f97471d35a64ae01 --- /dev/null +++ b/tlatools/test-model/suite/etest1.tla @@ -0,0 +1,20 @@ +--------------- MODULE etest1 ------------- + +(* Test that TLC complains if an operator is called with too many arguments. *) + +EXTENDS TLC + +VARIABLE x +Type == x \in BOOLEAN +Init == + /\ Print("Should complain that operator Foo is called with too many arguments", TRUE) + /\ x = TRUE + +Next == UNCHANGED x + + +Foo(a) == a + +Inv == Foo(x, x) + +========================================= diff --git a/tlatools/test-model/suite/etest10.cfg b/tlatools/test-model/suite/etest10.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e3e8c3d2505a0163440775d92531a92d4321811c --- /dev/null +++ b/tlatools/test-model/suite/etest10.cfg @@ -0,0 +1,2 @@ +INIT Init +NEXT Next diff --git a/tlatools/test-model/suite/etest10.tla b/tlatools/test-model/suite/etest10.tla new file mode 100644 index 0000000000000000000000000000000000000000..0063d717a09aee8328ea1507c344499339974d35 --- /dev/null +++ b/tlatools/test-model/suite/etest10.tla @@ -0,0 +1,15 @@ +--------------- MODULE etest10 ------------- + +\* Test that TLC doesn't accept x \in Int if x not a number + +EXTENDS TLC, Integers + +VARIABLE x + +Init == /\ x = "a" + /\ Print("Should report error here", TRUE) + /\ Print(x \in Int, TRUE) + +Next == /\ x'=x + /\ Print("Test failed--error not reported", TRUE) +========================================= diff --git a/tlatools/test-model/suite/etest11.cfg b/tlatools/test-model/suite/etest11.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e3e8c3d2505a0163440775d92531a92d4321811c --- /dev/null +++ b/tlatools/test-model/suite/etest11.cfg @@ -0,0 +1,2 @@ +INIT Init +NEXT Next diff --git a/tlatools/test-model/suite/etest11.tla b/tlatools/test-model/suite/etest11.tla new file mode 100644 index 0000000000000000000000000000000000000000..f948b4cc37429f5897bf4142704b2527200bb863 --- /dev/null +++ b/tlatools/test-model/suite/etest11.tla @@ -0,0 +1,15 @@ +--------------- MODULE etest11 ------------- + +\* Test that TLC doesn't accept x \in STRING if x not a string + +EXTENDS TLC + +VARIABLE x + +Init == /\ x = 1 + /\ Print("Should report error here", TRUE) + /\ Print(x \in STRING, TRUE) + +Next == /\ x'=x + /\ Print("Test failed--error not reported", TRUE) +========================================= diff --git a/examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_3/11-10-28-22-57-47/MC_0.fp b/tlatools/test-model/suite/etest12.cfg similarity index 100% rename from examples/CarTalkPuzzle/CarTalkPuzzle.toolbox/Model_3/11-10-28-22-57-47/MC_0.fp rename to tlatools/test-model/suite/etest12.cfg diff --git a/tlatools/test-model/suite/etest12.tla b/tlatools/test-model/suite/etest12.tla new file mode 100644 index 0000000000000000000000000000000000000000..d471244d2690616b9468300c04402d238a99224f --- /dev/null +++ b/tlatools/test-model/suite/etest12.tla @@ -0,0 +1,9 @@ +-------------------------- MODULE etest12 -------------------------------- +EXTENDS Naturals, TLC, FiniteSets +\* Test of error reporting when computing Cardinality of a huge set. + +ASSUME + IF Cardinality ([0..2 -> 1..2000]) = Cardinality ([2..4 -> 1..2000]) + THEN Print("Test 22 OK", TRUE) + ELSE Assert(FALSE, "Test 22 Failed") +========================================================================== \ No newline at end of file diff --git a/tlatools/test-model/suite/etest13.cfg b/tlatools/test-model/suite/etest13.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tlatools/test-model/suite/etest13.tla b/tlatools/test-model/suite/etest13.tla new file mode 100644 index 0000000000000000000000000000000000000000..f4f1c6f9140be499e46d413149a1338ba8d04038 --- /dev/null +++ b/tlatools/test-model/suite/etest13.tla @@ -0,0 +1,9 @@ +-------------------------- MODULE etest13 -------------------------------- +EXTENDS Naturals, TLC, FiniteSets +\* Test of error reporting when computing Cardinality of a huge set. + +ASSUME + IF Cardinality ([0..2 -> 1..2000]) = Cardinality ([2..4 -> 1..2000]) + THEN Print("Test 22 OK", TRUE) + ELSE Assert(FALSE, "Test 22 Failed") +========================================================================== \ No newline at end of file diff --git a/tlatools/test-model/suite/etest14.cfg b/tlatools/test-model/suite/etest14.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tlatools/test-model/suite/etest14.tla b/tlatools/test-model/suite/etest14.tla new file mode 100644 index 0000000000000000000000000000000000000000..97d71ce2b2df70fde6e5b02cbd7d19501d482843 --- /dev/null +++ b/tlatools/test-model/suite/etest14.tla @@ -0,0 +1,6 @@ +---------------------- MODULE etest14 ----------------------------- + +\* Test of CHOOSEing element of empty set. +ASSUME + /\ (CHOOSE y \in {} : TRUE) = (CHOOSE y \in {} : TRUE) +===================================================================== diff --git a/tlatools/test-model/suite/etest15.cfg b/tlatools/test-model/suite/etest15.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tlatools/test-model/suite/etest15.tla b/tlatools/test-model/suite/etest15.tla new file mode 100644 index 0000000000000000000000000000000000000000..8835abc2a3f9fe1d6d9ac186d9f8f5b21a736796 --- /dev/null +++ b/tlatools/test-model/suite/etest15.tla @@ -0,0 +1,10 @@ +---------------------- MODULE etest15 ----------------------------- +\* Test that TLC distinguishes <<x>> from x in function expressions. + +EXTENDS Naturals + +S == {<<y>> : y \in {1, 2, 3, 4}} + +ASSUME [<<y>> \in S |-> y+1][2] = [<<y>> \in S |-> y+1][2] + +===================================================================== diff --git a/tlatools/test-model/suite/etest16.cfg b/tlatools/test-model/suite/etest16.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tlatools/test-model/suite/etest16.tla b/tlatools/test-model/suite/etest16.tla new file mode 100644 index 0000000000000000000000000000000000000000..9e3151531a9290872d53cb4480ebc949919d656d --- /dev/null +++ b/tlatools/test-model/suite/etest16.tla @@ -0,0 +1,11 @@ +--------------- MODULE etest16 ----------- + +\* Test of detecting duplicate record elements + +Foo == [a |-> 1, b |-> 2, a |-> 1] + +Bar == [a : {1}, b : {2}, a : {1}] +============================================================================= + + + diff --git a/tlatools/test-model/suite/etest2.cfg b/tlatools/test-model/suite/etest2.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b0ee260b28eef2026bbc2f6cb01c89fd3d01d947 --- /dev/null +++ b/tlatools/test-model/suite/etest2.cfg @@ -0,0 +1,8 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/etest2.tla b/tlatools/test-model/suite/etest2.tla new file mode 100644 index 0000000000000000000000000000000000000000..3b133bf9277d08b23ca8ca201d014ca207dee145 --- /dev/null +++ b/tlatools/test-model/suite/etest2.tla @@ -0,0 +1,20 @@ +--------------- MODULE etest2 ------------- + +(* Test that TLC complains if a operator is called with too few arguments. *) + +EXTENDS TLC + +VARIABLE x +Type == x \in BOOLEAN +Init == + /\ Print("Should complain that operator Foo is called with too few arguments", TRUE) + /\ x = TRUE + +Next == UNCHANGED x + + +Foo(a, b) == a /\ b + +Inv == Foo(x) + +========================================= diff --git a/tlatools/test-model/suite/etest3.cfg b/tlatools/test-model/suite/etest3.cfg new file mode 100644 index 0000000000000000000000000000000000000000..c73ef51536cac7f74a6e6d78154edf3a7c89d042 --- /dev/null +++ b/tlatools/test-model/suite/etest3.cfg @@ -0,0 +1,9 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + \ No newline at end of file diff --git a/tlatools/test-model/suite/etest3.tla b/tlatools/test-model/suite/etest3.tla new file mode 100644 index 0000000000000000000000000000000000000000..5172acf98e888eee5f38b2b90fcea7151ececdd4 --- /dev/null +++ b/tlatools/test-model/suite/etest3.tla @@ -0,0 +1,22 @@ +--------------- MODULE etest3 ------------- + +(* Testing deadlock and number of states found. *) + +EXTENDS TLC, Naturals, Sequences, FiniteSets + +VARIABLE x, y, z + +Init == /\ Print("This test should deadlock after finding two states", TRUE) + /\ x = {} + /\ y = {} + /\ z = 1 + +Next == /\ x = {} + /\ x' = {1} + /\ y' \in SUBSET x' + /\ z' = z + /\ y' = {} + +Inv == TRUE + +========================================= diff --git a/tlatools/test-model/suite/etest4.cfg b/tlatools/test-model/suite/etest4.cfg new file mode 100644 index 0000000000000000000000000000000000000000..c95fce6e2a4a0a1137f1e83ec8efe3d039acfede --- /dev/null +++ b/tlatools/test-model/suite/etest4.cfg @@ -0,0 +1,11 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + CONSTANT + A = ModelValue + \ No newline at end of file diff --git a/tlatools/test-model/suite/etest4.tla b/tlatools/test-model/suite/etest4.tla new file mode 100644 index 0000000000000000000000000000000000000000..e6b4fbdff6637f772a9dfd18a2295c79e5323e74 --- /dev/null +++ b/tlatools/test-model/suite/etest4.tla @@ -0,0 +1,22 @@ +--------------- MODULE etest4 ------------- + +(* Evaluates m[v] for model-value m. *) + +EXTENDS TLC, Naturals, Sequences, FiniteSets + +VARIABLE x +CONSTANT A + + + +Req == [ mask |-> A ] +Init == /\ x = 1 + /\ Print("Should report error for applying model value to arg", TRUE) + /\ Req.mask[1] = 1 + /\ Print("Should never get this far", TRUE) + +Next == UNCHANGED x + +Inv == TRUE + +========================================= diff --git a/tlatools/test-model/suite/etest5.cfg b/tlatools/test-model/suite/etest5.cfg new file mode 100644 index 0000000000000000000000000000000000000000..c73ef51536cac7f74a6e6d78154edf3a7c89d042 --- /dev/null +++ b/tlatools/test-model/suite/etest5.cfg @@ -0,0 +1,9 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + \ No newline at end of file diff --git a/tlatools/test-model/suite/etest5.tla b/tlatools/test-model/suite/etest5.tla new file mode 100644 index 0000000000000000000000000000000000000000..a3c736d7c1c70ebe9e14583e700c205d931e48b3 --- /dev/null +++ b/tlatools/test-model/suite/etest5.tla @@ -0,0 +1,19 @@ +--------------- MODULE etest5 ------------- + +(* M!Ident for nonexistent module M. *) + +EXTENDS TLC, Naturals + +VARIABLE x + +Init == /\ x = 1 + /\ Print("Should report error for nonexistent module M", TRUE) + +Next == /\ UNCHANGED x + /\ IF M!Init THEN TRUE + ELSE TRUE + /\ Print("Should not get this far", TRUE) + +Inv == TRUE + +========================================= diff --git a/tlatools/test-model/suite/etest6.cfg b/tlatools/test-model/suite/etest6.cfg new file mode 100644 index 0000000000000000000000000000000000000000..0cc6c2124ed19c2b3250dc1dfa1ab569eca3c252 --- /dev/null +++ b/tlatools/test-model/suite/etest6.cfg @@ -0,0 +1,13 @@ + INIT + Init + + NEXT + Next + + CONSTRAINT Constraint + + INVARIANT Inv + + + + \ No newline at end of file diff --git a/tlatools/test-model/suite/etest6.tla b/tlatools/test-model/suite/etest6.tla new file mode 100644 index 0000000000000000000000000000000000000000..73b610103641896adb0d5ef427f26a33cc4b03aa --- /dev/null +++ b/tlatools/test-model/suite/etest6.tla @@ -0,0 +1,25 @@ +--------------- MODULE etest6 ------------- + +(* Defining x' in terms of x' *) + +EXTENDS TLC, Integers, Sequences, FiniteSets + +VARIABLE x + +Init == /\ Print("Should complain about undefined value of x.", TRUE) + /\ x = [i \in {1,2} |-> i] + + +Action(c) == c' = [c EXCEPT ![1] = (c[2])'] + +Next == \/ /\ x[1] = 1 + /\ Action(x) + /\ Print("Should not get this far", TRUE) + + \/ UNCHANGED x + +Inv == TRUE + + +Constraint == TRUE +========================================= diff --git a/tlatools/test-model/suite/etest7.cfg b/tlatools/test-model/suite/etest7.cfg new file mode 100644 index 0000000000000000000000000000000000000000..8f3f0653e8f0d314ebb13afe19cfb1158ca370f1 --- /dev/null +++ b/tlatools/test-model/suite/etest7.cfg @@ -0,0 +1,11 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + CONSTANT + C <- Foo + diff --git a/tlatools/test-model/suite/etest7.tla b/tlatools/test-model/suite/etest7.tla new file mode 100644 index 0000000000000000000000000000000000000000..862ef69ee0d4c48e3772bfb3432ad66eebadd673 --- /dev/null +++ b/tlatools/test-model/suite/etest7.tla @@ -0,0 +1,21 @@ +--------------- MODULE etest7 ------------- + +(* Test replacement of constant with nonconstant operator. *) + +EXTENDS TLC, Naturals, Sequences + +CONSTANT C + +VARIABLE x + +Foo == x + +Next == x' = C + +Init == /\ Print("TLC should complain about replacing the constant C", TRUE) + /\ Print("by the nonconstant Foo", TRUE) + /\ x = 2 + +Inv == x = 2 + +========================================= diff --git a/tlatools/test-model/suite/etest8.cfg b/tlatools/test-model/suite/etest8.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e3e8c3d2505a0163440775d92531a92d4321811c --- /dev/null +++ b/tlatools/test-model/suite/etest8.cfg @@ -0,0 +1,2 @@ +INIT Init +NEXT Next diff --git a/tlatools/test-model/suite/etest8.tla b/tlatools/test-model/suite/etest8.tla new file mode 100644 index 0000000000000000000000000000000000000000..11bbfb68d7a2b4c28e72ca5878954274d9304c39 --- /dev/null +++ b/tlatools/test-model/suite/etest8.tla @@ -0,0 +1,21 @@ +--------------- MODULE etest8 ------------- + +(* Test that simulation mode doesn't check for deadlock. *) + +EXTENDS TLC + + +VARIABLE x + +Init == /\ x \in {"a", "b"} + /\ Print("This spec can deadlock, but shouldn't.", TRUE) + +Next == \/ /\ x = "b" + /\ x' = "c" + \/ /\ x = "c" + /\ x' = "d" + \/ /\ x = "d" + /\ x' = "d" + /\ Assert(FALSE, "Test successfully completed.") + +========================================= diff --git a/tlatools/test-model/suite/etest9.cfg b/tlatools/test-model/suite/etest9.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e3e8c3d2505a0163440775d92531a92d4321811c --- /dev/null +++ b/tlatools/test-model/suite/etest9.cfg @@ -0,0 +1,2 @@ +INIT Init +NEXT Next diff --git a/tlatools/test-model/suite/etest9.tla b/tlatools/test-model/suite/etest9.tla new file mode 100644 index 0000000000000000000000000000000000000000..c860dd62aa9aeda4765ab0c9dbdbe0a4dea38bb8 --- /dev/null +++ b/tlatools/test-model/suite/etest9.tla @@ -0,0 +1,15 @@ +--------------- MODULE etest9 ------------- + +\* Test that TLC doesn't accept x \in Nat if x not a number + +EXTENDS TLC, Naturals + +VARIABLE x + +Init == /\ x = "a" + /\ Print("Should report error here", TRUE) + /\ Print(x \in Nat, TRUE) + +Next == /\ x'=x + /\ Print("Test failed--error not reported", TRUE) +========================================= diff --git a/tlatools/test-model/suite/test.cfg b/tlatools/test-model/suite/test.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tlatools/test-model/suite/test.tla b/tlatools/test-model/suite/test.tla new file mode 100644 index 0000000000000000000000000000000000000000..bd4950a64a48d49da9591248c5f03ad3c26cb57d --- /dev/null +++ b/tlatools/test-model/suite/test.tla @@ -0,0 +1,9 @@ +------------- MODULE Foo -------------- +EXTENDS Naturals + +Foo == \A x \in {1} : lab(x) :: x = 1 + +Bar == Foo!lab(1) + +ASSUME Bar +============================================= diff --git a/tlatools/test-model/suite/test1.cfg b/tlatools/test-model/suite/test1.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b0ee260b28eef2026bbc2f6cb01c89fd3d01d947 --- /dev/null +++ b/tlatools/test-model/suite/test1.cfg @@ -0,0 +1,8 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test1.tla b/tlatools/test-model/suite/test1.tla new file mode 100644 index 0000000000000000000000000000000000000000..9bc722cc36f846eb80debae15b06d5af65d95a44 --- /dev/null +++ b/tlatools/test-model/suite/test1.tla @@ -0,0 +1,77 @@ +--------------- MODULE test1 ------------- + +(* test equality of various representations of sets. *) + +EXTENDS Naturals, TLC + +VARIABLE x + + +Type == x \in {1} +Inv == + /\ IF {1, 2, 3} # {3, 2, 2, 1} + THEN Assert(FALSE, "Failed Test 1") + ELSE Print("Test 1 OK", TRUE) + + /\ IF {1, 2, 3} # {i \in {5, 4, 3, 2, 1} : i < 4} + THEN Assert(FALSE, "Failed Test 2") + ELSE Print("Test 2 OK", TRUE) + + /\ IF {1, 2, 3} # {i-3 : i \in {4, 6, 5, 6, 5, 6}} + THEN Assert(FALSE, "Failed Test 3") + ELSE Print("Test 3 OK", TRUE) + + /\ IF SUBSET {1, 2, 3} # {{}, {1}, {2,1,2}, {3,1}, {2}, {3}, {3,2,3}, {1,2,3}} + THEN Assert(FALSE, "Failed Test 4") + ELSE Print("Test 4 OK", TRUE) + + /\ IF {1,2,3} # UNION (SUBSET {1, 2, 3}) + THEN Assert(FALSE, "Failed Test 5") + ELSE Print("Test 5 OK", TRUE) + + /\ IF {1,2,3} # UNION {{1}, {2}, {3, 2, 1}} + THEN Assert(FALSE, "Failed Test 6") + ELSE Print("Test 6 OK", TRUE) + + /\ IF {1,2,3} # {1} \cup {3, 2} \cup {} + THEN Assert(FALSE, "Failed Test 7") + ELSE Print("Test 7 OK", TRUE) + + /\ IF {1,2,3} # {5, 4, 3, 2, 1} \cap {1, 3, 0, 2} + THEN Assert(FALSE, "Failed Test 8") + ELSE Print("Test 8 OK", TRUE) + + /\ IF {1,2,3} \subseteq {5, 3, 3, 4, 2} + THEN Assert(FALSE, "Failed Test 9") + ELSE Print("Test 9 OK", TRUE) + + /\ IF {1,2,3} # {5, 3, 3, 4, 2,1} \ {4, 5} + THEN Assert(FALSE, "Failed Test 10") + ELSE Print("Test 10 OK", TRUE) + + /\ IF {1,2,3} # 1..3 + THEN Assert(FALSE, "Failed Test 11") + ELSE Print("Test 11 OK", TRUE) + + /\ IF {1,2,3} # DOMAIN <<"a", "b", "c">> + THEN Assert(FALSE, "Failed Test 12") + ELSE Print("Test 12 OK", TRUE) + + /\ IF {1,2,3} # DOMAIN [i \in {3,2,2,1} |-> i+1] + THEN Assert(FALSE, "Failed Test 13") + ELSE Print("Test 13 OK", TRUE) + + /\ IF {"a", "b", "c"} # DOMAIN [a |-> 1, b |-> 2, c |-> 3] + THEN Assert(FALSE, "Failed Test 14") + ELSE Print("Test 14 OK", TRUE) + + /\ IF {} # [{1, 2, 3} -> {}] + THEN Assert(FALSE, "Failed Test 15") + ELSE Print("Test 15 OK", TRUE) + + /\ Print("Test Completed", TRUE) + +Init == x = 1 + +Next == UNCHANGED x +========================================= diff --git a/tlatools/test-model/suite/test10.cfg b/tlatools/test-model/suite/test10.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b0ee260b28eef2026bbc2f6cb01c89fd3d01d947 --- /dev/null +++ b/tlatools/test-model/suite/test10.cfg @@ -0,0 +1,8 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test10.tla b/tlatools/test-model/suite/test10.tla new file mode 100644 index 0000000000000000000000000000000000000000..7e35ec086d4fab2dbef27399250da6487a85467d --- /dev/null +++ b/tlatools/test-model/suite/test10.tla @@ -0,0 +1,160 @@ +--------------- MODULE test10 ------------- + +(* Test of function definition and application *) + +EXTENDS Integers, TLC + +VARIABLE x +Type == x \in BOOLEAN +Init == x = TRUE +Next == UNCHANGED x + +f1[i \in Int] == i+2 +f2[i, j \in Int] == i+j +f3[i, j \in Int, <<k,l>> \in Int \X Int, m \in {5, 7,8}] == + i + 2*j + 3*k + 4*l + 5*m +f4[i, j \in Int] == [a |-> i, b |-> j] + +f5[i, j, k \in Int] == i+j+k + +f6[i, j, k \in Int, <<l, m, n>> \in Int \X Int \X Int, p \in {5,7,8}] == + i + 2*j + 3*k + 4*l + 5*m + 6*n + 7*p + +Inv == + +LET r1 == [a |-> f1, b |-> f2] + g1 == [f4 EXCEPT ![1,2].a = 22, ![1,3].b = 33] + g2 == [[<<i, j>> \in (1..10) \X (1..10) + |-> [a |-> i, b |-> j]] EXCEPT ![1,2].a = 22, ![1,3].b = 33] +IN + /\ IF f1[3] # 5 + THEN Assert(FALSE, "Test 1 Failed") + ELSE Print("Test 1 OK", TRUE) + + /\ IF f2[3,4] # 7 + THEN Assert(FALSE, "Test 2 Failed") + ELSE Print("Test 2 OK", TRUE) + + /\ IF f2[<<3,4>>] # 7 + THEN Assert(FALSE, "Test 3 Failed") + ELSE Print("Test 3 OK", TRUE) + + /\ IF f3[1, 2, <<3, 4>>, 5] # 55 + THEN Assert(FALSE, "Test 4 Failed") + ELSE Print("Test 4 OK", TRUE) + + /\ IF f3[<<1, 2, <<3, 4>>, 5>>] # 55 + THEN Assert(FALSE, "Test 5 Failed") + ELSE Print("Test 5 OK", TRUE) + + + /\ IF [i \in Int |-> i+2][3] # 5 + THEN Assert(FALSE, "Test 6 Failed") + ELSE Print("Test 6 OK", TRUE) + + /\ IF [i, j \in Int |-> i+j][3,4] # 7 + THEN Assert(FALSE, "Test 7 Failed") + ELSE Print("Test 7 OK", TRUE) + + /\ IF [i, j \in Int |-> i+j][<<3,4>>] # 7 + THEN Assert(FALSE, "Test 8 Failed") + ELSE Print("Test 8 OK", TRUE) + + /\ IF [i, j \in Int, <<k,l>> \in Int \X Int, m \in {5,7,8} + |-> i + 2*j + 3*k + 4*l + 5*m][1, 2, <<3, 4>>, 5] # 55 + THEN Assert(FALSE, "Test 9 Failed") + ELSE Print("Test 9 OK", TRUE) + + /\ IF [i, j \in Int, <<k,l>> \in Int \X Int, m \in {5,7,8} + |-> i + 2*j + 3*k + 4*l + 5*m][<<1, 2, <<3, 4>>, 5>>] # 55 + THEN Assert(FALSE, "Test 10 Failed") + ELSE Print("Test 10 OK", TRUE) + + /\ IF [f1 EXCEPT ![3] = [i \in Int |-> @ + i]][3][7] # 12 + THEN Assert(FALSE, "Test 11 Failed") + ELSE Print("Test 11 OK", TRUE) + + /\ IF [f1 EXCEPT ![3] = [i \in Int |-> @ + i], ![3][6] = 44][3][6] # 44 + THEN Assert(FALSE, "Test 12 Failed") + ELSE Print("Test 12 OK", TRUE) + + /\ IF [f1 EXCEPT ![3] = [i \in Int |-> @ + i], ![3][6] = 44][3][7] # 12 + THEN Assert(FALSE, "Test 13 Failed") + ELSE Print("Test 13 OK", TRUE) + + /\ IF f4[3,4].a # 3 + THEN Assert(FALSE, "Test 14 Failed") + ELSE Print("Test 14 OK", TRUE) + + /\ IF [f4 EXCEPT ![3,4].b = 17][3,4].b # 17 + THEN Assert(FALSE, "Test 15 Failed") + ELSE Print("Test 15 OK", TRUE) + + /\ IF [f4 EXCEPT ![3,4].b = 17][3,4].a # 3 + THEN Assert(FALSE, "Test 16 Failed") + ELSE Print("Test 16 OK", TRUE) + + /\ IF [f4 EXCEPT ![3,4].b = 17][2,4].b # 4 + THEN Assert(FALSE, "Test 17 Failed") + ELSE Print("Test 17 OK", TRUE) + + /\ IF [f4 EXCEPT ![3,4].b = 17, ![3,4].a = 18][3,4].b # 17 + THEN Assert(FALSE, "Test 18 Failed") + ELSE Print("Test 18 OK", TRUE) + + /\ IF [f4 EXCEPT ![3,4].b = 17, ![3,4].a = 18][3,4].a # 18 + THEN Assert(FALSE, "Test 19 Failed") + ELSE Print("Test 19 OK", TRUE) + + /\ IF [f4 EXCEPT ![3,4].b = 17, ![3,4].a = 18, ![3,4].b= @+5][3,4].b # 22 + THEN Assert(FALSE, "Test 20 Failed") + ELSE Print("Test 20 OK", TRUE) + + /\ IF [f4 EXCEPT ![3,4].b = 17, ![3,4].a = 18, ![<<3,4>>].b= @+5][3,4].b # 22 + THEN Assert(FALSE, "Test 21 Failed") + ELSE Print("Test 21 OK", TRUE) + + /\ IF g1[1,3].a # 1 \/ g1[1,3].a # 1 + THEN Assert(FALSE, "Test 22 Failed") + ELSE Print("Test 22 OK", TRUE) + + /\ IF g2[1,3].a # 1 \/ g2[1,3].a # 1 + THEN Assert(FALSE, "Test 23 Failed") + ELSE Print("Test 23 OK", TRUE) + + /\ IF g1[1,2].a # 22 \/ g1[1,2].a # 22 + THEN Assert(FALSE, "Test 24 Failed") + ELSE Print("Test 24 OK", TRUE) + + /\ IF g2[1,2].a # 22 \/ g2[1,2].a # 22 + THEN Assert(FALSE, "Test 25 Failed") + ELSE Print("Test 25 OK", TRUE) + + /\ IF f5[3,4,5] # 12 + THEN Assert(FALSE, "Test 26 Failed") + ELSE Print("Test 26 OK", TRUE) + + /\ IF f5[<<3,4,5>>] # 12 + THEN Assert(FALSE, "Test 27 Failed") + ELSE Print("Test 27 OK", TRUE) + + /\ IF f6[1, 2, 3, <<4,5,6>>, 7] # 140 + THEN Assert(FALSE, "Test 28 Failed") + ELSE Print("Test 28 OK", TRUE) + + /\ IF f6[<<1, 2, 3, <<4,5,6>>, 7>>] # 140 + THEN Assert(FALSE, "Test 29 Failed") + ELSE Print("Test 29 OK", TRUE) + + /\ IF [i, j, k \in Int |-> i+j+k][3,4,5] # 12 + THEN Assert(FALSE, "Test 30 Failed") + ELSE Print("Test 30 OK", TRUE) + + /\ IF [i, j, k \in Int |-> i+j+k][<<3,4,5>>] # 12 + THEN Assert(FALSE, "Test 31 Failed") + ELSE Print("Test 31 OK", TRUE) + + + + +========================================= diff --git a/tlatools/test-model/suite/test11.cfg b/tlatools/test-model/suite/test11.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b0ee260b28eef2026bbc2f6cb01c89fd3d01d947 --- /dev/null +++ b/tlatools/test-model/suite/test11.cfg @@ -0,0 +1,8 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test11.tla b/tlatools/test-model/suite/test11.tla new file mode 100644 index 0000000000000000000000000000000000000000..b388dd57d86dc71f7dc5c24b7fd2aeb8f9eb52cd --- /dev/null +++ b/tlatools/test-model/suite/test11.tla @@ -0,0 +1,120 @@ +--------------- MODULE test11 ------------- + +(* Test of DOMAIN and Function Sets *) + +EXTENDS Integers, TLC, FiniteSets + + +VARIABLE x +Type == x \in BOOLEAN +Init == x = TRUE +Next == UNCHANGED x + +f1[i \in Int] == i+3 + +S == [1..4 -> Nat] + +Inv == + /\ IF 5 \notin DOMAIN f1 + THEN Assert(FALSE, "Test 1 Failed") + ELSE Print("Test 1 OK", TRUE) + + /\ IF 5 \notin DOMAIN [i \in Int |-> i+3] + THEN Assert(FALSE, "Test 2 Failed") + ELSE Print("Test 2 OK", TRUE) + + /\ IF {1,2,3} \notin DOMAIN [T \in SUBSET Int |-> T \cup {1}] + THEN Assert(FALSE, "Test 3 Failed") + ELSE Print("Test 3 OK", TRUE) + + /\ IF Cardinality(DOMAIN [i \in {1,3,5} |-> i+7]) # 3 + THEN Assert(FALSE, "Test 4 Failed") + ELSE Print("Test 4 OK", TRUE) + + /\ IF Cardinality(DOMAIN [f \in [{1,3,5} -> {1,2}] |-> f[3]]) # 8 + THEN Assert(FALSE, "Test 5 Failed") + ELSE Print("Test 5 OK", TRUE) + + /\ IF Cardinality(DOMAIN [f \in {g \in [{1,3,5} -> {1,2}] : g[3]=1} + |-> f[3]]) # 4 + THEN Assert(FALSE, "Test 6 Failed") + ELSE Print("Test 6 OK", TRUE) + + /\ IF [i \in {1,3, 5} |-> i-2] \notin + {g \in [{1,3,5} -> -2..3] : g[3]=1} + THEN Assert(FALSE, "Test 7 Failed") + ELSE Print("Test 7 OK", TRUE) + + /\ IF ~ ((DOMAIN [a |-> 1, b |-> 2]) \subseteq {"a", "b", "cde"}) + THEN Assert(FALSE, "Test 8 Failed") + ELSE Print("Test 8 OK", TRUE) + + /\ IF <<1, 2, 3, 4>> \notin S + THEN Assert(FALSE, "Test 9 Failed") + ELSE Print("Test 9 OK", TRUE) + + /\ IF <<1, 2, -3, 4>> \in S + THEN Assert(FALSE, "Test 10 Failed") + ELSE Print("Test 10 OK", TRUE) + + /\ IF <<1, 2, 4>> \in S + THEN Assert(FALSE, "Test 11 Failed") + ELSE Print("Test 11 OK", TRUE) + + /\ IF [i \in {1, 2} |-> i] \in S + THEN Assert(FALSE, "Test 12 Failed") + ELSE Print("Test 12 OK", TRUE) + + /\ IF [i \in {1, 2, 3, 4} |-> i+1] \notin S + THEN Assert(FALSE, "Test 13 Failed") + ELSE Print("Test 13 OK", TRUE) + + /\ IF [i \in {1, 2, 3, 4} |-> i-2] \in S + THEN Assert(FALSE, "Test 14 Failed") + ELSE Print("Test 14 OK", TRUE) + + /\ IF [i \in 1..100 |-> i+1] \notin [1..100 -> Nat] + THEN Assert(FALSE, "Test 15 Failed") + ELSE Print("Test 15 OK", TRUE) + + /\ IF [i \in 1..10 |-> i+1] \in [1..100 -> Nat] + THEN Assert(FALSE, "Test 16 Failed") + ELSE Print("Test 16 OK", TRUE) + + /\ IF [i \in {99, 100} |-> i+1] \in [1..100 -> Nat] + THEN Assert(FALSE, "Test 17 Failed") + ELSE Print("Test 17 OK", TRUE) + + /\ IF [i \in {"a", "b"} |-> i] \in [1..100 -> Nat] + THEN Assert(FALSE, "Test 18 Failed") + ELSE Print("Test 18 OK", TRUE) + + /\ IF [a |-> 1, b |-> 2] \in [1..100 -> Nat] + THEN Assert(FALSE, "Test 19 Failed") + ELSE Print("Test 19 OK", TRUE) + + /\ Print("Test 20: Enumeration of [{1+1,2} -> {3-1,2,1+1}]", TRUE) + /\ \A f \in [{1+1,2} -> {3-1,2,1+1}] : Print(f, TRUE) + + /\ Print(<<"Test 21: evaluation of [{1+1,2} -> {3-1,2,1+1}] = ", + [{1+1,2} -> {3-1,2,1+1}]>>, TRUE) + + /\ IF /\ Cardinality ([0..1 -> 1..2000]) = 4000000 + /\ Cardinality (1..8099) = 8099 + THEN Print("Test 22 OK", TRUE) + ELSE Assert(FALSE, "Test 22 Failed") + + /\ IF DOMAIN [i \in {1,2}, j \in {3,4} |-> i+j] # {1,2} \X {3, 4} + THEN Assert(FALSE, "Test 23 Failed") + ELSE Print("Test 23 OK", TRUE) + + /\ IF DOMAIN [i \in {1,2}, j \in {3,4}, k \in {5,6} |-> i+j+k] + # {1,2} \X {3, 4} \X {5, 6} + THEN Assert(FALSE, "Test 24 Failed") + ELSE Print("Test 24 OK", TRUE) + + /\ IF <<1,3,5>> \notin + DOMAIN [i \in {1,2}, j \in {3,4}, k \in {5,6} |-> i+j+k] + THEN Assert(FALSE, "Test 25 Failed") + ELSE Print("Test 25 OK", TRUE) +========================================= diff --git a/tlatools/test-model/suite/test12.cfg b/tlatools/test-model/suite/test12.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b0ee260b28eef2026bbc2f6cb01c89fd3d01d947 --- /dev/null +++ b/tlatools/test-model/suite/test12.cfg @@ -0,0 +1,8 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test12.tla b/tlatools/test-model/suite/test12.tla new file mode 100644 index 0000000000000000000000000000000000000000..cde8c843e67a637bb2314e823570bf6336f20153 --- /dev/null +++ b/tlatools/test-model/suite/test12.tla @@ -0,0 +1,120 @@ +--------------- MODULE test12 ------------- + +(* Test of Record constructs. *) + +EXTENDS Integers, TLC, FiniteSets + + +VARIABLE x +Type == x \in BOOLEAN +Init == x = TRUE +Next == UNCHANGED x + + +Inv == +LET r1 == [l1 |-> 1, l2 |-> 2, l3 |-> 3] + r2 == [l1 |-> r1, l2 |-> [r1 EXCEPT !.l2 = 22], l3 |-> [r1 EXCEPT !.l3 = 33]] + r3 == [l1 |-> [i \in Int |-> i+1], + l2 |-> [i , j \in Int |-> [m1 |->i+2, m2 |-> j+3]]] + + r4 == [a |-> [i \in 1..1 |-> i], + b |-> [i \in 1..1 |-> 2]] + + S1 == [l1 : Int, l2 : [{1,2} -> {i \in Int : i > 5}]] + S2(j) == [l1 : {1,3}, l2 : {f \in [{1,2} -> 1..10] : f[1] > j /\ f[2] > j}] + S3 == [l1 : Int, l2 : SUBSET [{1,2} -> {2,3}]] + +IN + /\ IF r1.l1 # 1 \/ r1.l1 # 1 + THEN Assert(FALSE, "Test 1 Failed") + ELSE Print("Test 1 OK", TRUE) + + /\ IF r1["l1"] # 1 \/ r1["l1"] # 1 + THEN Assert(FALSE, "Test 2 Failed") + ELSE Print("Test 2 OK", TRUE) + + /\ IF [l1 |-> 1, l2 |-> 2, l3 |-> 3].l1 # 1 + THEN Assert(FALSE, "Test 3 Failed") + ELSE Print("Test 3 OK", TRUE) + + /\ IF [l1 |-> 1, l2 |-> 2, l3 |-> 3]["l1"] # 1 + THEN Assert(FALSE, "Test 4 Failed") + ELSE Print("Test 4 OK", TRUE) + + /\ IF [1l |-> 1, 2l |-> 2, 3l |-> 3]["2l"] # 2 + THEN Assert(FALSE, "Test 5 Failed") + ELSE Print("Test 5 OK", TRUE) + + /\ IF r2.l1 # r1 \/ r2.l1 # r1 + THEN Assert(FALSE, "Test 6 Failed") + ELSE Print("Test 6 OK", TRUE) + + /\ IF r2.l2.l2 # 22 \/ r2.l2.l2 # 22 + THEN Assert(FALSE, "Test 7 Failed") + ELSE Print("Test 7 OK", TRUE) + + /\ IF r2.l2.l1 # 1 \/ r2.l2.l1 # 1 + THEN Assert(FALSE, "Test 8 Failed") + ELSE Print("Test 8 OK", TRUE) + + /\ IF [r2 EXCEPT !.l2.l1 = 44, !.l2.l3=55].l2.l1 # 44 + THEN Assert(FALSE, "Test 9 Failed") + ELSE Print("Test 9 OK", TRUE) + + /\ IF [r2 EXCEPT !.l2.l1 = 44, !.l2.l3=55].l2.l2 # 22 + THEN Assert(FALSE, "Test 10 Failed") + ELSE Print("Test 10 OK", TRUE) + + /\ IF r3.l2[5,6].m1 # 7 \/ r3.l2[5,6].m1 # 7 + THEN Assert(FALSE, "Test 11 Failed") + ELSE Print("Test 11 OK", TRUE) + + /\ IF [i , j \in Int |-> [m1 |->i+2, m2 |-> j+3]][5,6].m2 # 9 + THEN Assert(FALSE, "Test 12 Failed") + ELSE Print("Test 12 OK", TRUE) + + /\ IF r3.l2[5,6].m2 # 9 \/ r3.l2[5,6].m2 # 9 + THEN Assert(FALSE, "Test 14 Failed") + ELSE Print("Test 13 OK", TRUE) + + /\ IF [l1 |-> 1, l2 |-> [i \in {1,2} |-> i+5]] \notin S1 + THEN Assert(FALSE, "Test 14 Failed") + ELSE Print("Test 14 OK", TRUE) + + /\ IF [l1 |-> 1, l2 |-> [i \in {1,2} |-> i+4]] \in S1 + THEN Assert(FALSE, "Test 15 Failed") + ELSE Print("Test 15 OK", TRUE) + + /\ IF ~(S2(5) \subseteq S1) \/ ~(S2(5) \subseteq S1) + THEN Assert(FALSE, "Test 16 Failed") + ELSE Print("Test 16 OK", TRUE) + + /\ IF S2(4) \subseteq S1 \/ S2(4) \subseteq S1 + THEN Assert(FALSE, "Test 17 Failed") + ELSE Print("Test 17 OK", TRUE) + /\ IF Cardinality(S2(5)) # 50 \/ Cardinality(S2(5)) # 50 + THEN Assert(FALSE, "Test 18 Failed") + ELSE Print("Test 18 OK", TRUE) + + /\ IF Cardinality([l1 : {1,2}, + l2 : {1, 2, 3, 4, 4, 4, 4}, l3 : {3, 3, 2, 1}]) # 24 + THEN Assert(FALSE, "Test 19 Failed") + ELSE Print("Test 19 OK", TRUE) + + /\ IF ~(\A r \in S2(5) : r.l2[1] > 5) \/ ~(\A r \in S2(5) : r.l2[1] > 5) + THEN Assert(FALSE, "Test 20 Failed") + ELSE Print("Test 20 OK", TRUE) + + /\ IF [l1 |-> -4, l2 |-> {<<3,2>>}] \notin S3 + THEN Assert(FALSE, "Test 21 Failed") + ELSE Print("Test 21 OK", TRUE) + + /\ IF [l1 |-> -4, l2 |-> {<<3,4>>}] \in S3 + THEN Assert(FALSE, "Test 22 Failed") + ELSE Print("Test 22 OK", TRUE) + + /\ IF [r4 EXCEPT !["a"][1] = 2]["a"][1] # 2 + THEN Assert(FALSE, "Test 23 Failed") + ELSE Print("Test 23 OK", TRUE) + +========================================= diff --git a/tlatools/test-model/suite/test13.cfg b/tlatools/test-model/suite/test13.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b0ee260b28eef2026bbc2f6cb01c89fd3d01d947 --- /dev/null +++ b/tlatools/test-model/suite/test13.cfg @@ -0,0 +1,8 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test13.tla b/tlatools/test-model/suite/test13.tla new file mode 100644 index 0000000000000000000000000000000000000000..a72f9b93132ade5d59c03cbade567a57c246ac8b --- /dev/null +++ b/tlatools/test-model/suite/test13.tla @@ -0,0 +1,70 @@ +--------------- MODULE test13 ------------- + +(* Test of Tuples and Cartesian products. *) + +EXTENDS Integers, TLC, FiniteSets, Sequences + + +VARIABLE x +Type == x \in BOOLEAN +Init == x = TRUE +Next == UNCHANGED x + +Inv == +LET S1 == {1,2,3} \X {"a", "b", "c", "d"} + S2 == Int \X [{1,2,3} -> {4, 5, 6}] + S3 == {1,2,3} \X {"a", "b", "c", "d"} \X {4,5} + S4 == Int \X [{1,2,3} -> {4, 5, 6}] \X Seq(Int) + +IN + /\ IF Cardinality(S1) # 12 \/ Cardinality(S3) # 24 + THEN Assert(FALSE, "Test 1 Failed") + ELSE Print("Test 1 OK", TRUE) + + /\ IF \/ <<-5, <<4,4,4>> >> \notin S2 + \/ <<-5, <<4,4,4>>, <<-1,-2,-3>> >> \notin S4 + THEN Assert(FALSE, "Test 2 Failed") + ELSE Print("Test 2 OK", TRUE) + + /\ IF <<-5, -4>> \notin Int \X Int + THEN Assert(FALSE, "Test 3 Failed") + ELSE Print("Test 3 OK", TRUE) + + /\ IF <<-5, <<4,4,3>>>> \in S2 + THEN Assert(FALSE, "Test 4 Failed") + ELSE Print("Test 4 OK", TRUE) + + /\ IF {<<"a", "b", "c">>[i] : i \in 1..3} + # DOMAIN [a |-> 1, b |-> 2, c |-> {}] + THEN Assert(FALSE, "Test 5 Failed") + ELSE Print("Test 5 OK", TRUE) + + /\ IF [i \in {1, 2} |-> IF i = 1 THEN "a" ELSE 22] # <<"a", 22>> + THEN Assert(FALSE, "Test 6 Failed") + ELSE Print("Test 6 OK", TRUE) + + /\ IF [i \in {1, 2} |-> IF i = 1 THEN "a" ELSE 22] = <<"a", 23>> + THEN Assert(FALSE, "Test 7 Failed") + ELSE Print("Test 7 OK", TRUE) + + /\ IF <<1,2>> \notin Seq(Int) + THEN Assert(FALSE, "Test 8 Failed") + ELSE Print("Test 8 OK", TRUE) + + /\ IF <<1,2>> \notin Seq({n \in Int : n < 22}) + THEN Assert(FALSE, "Test 9 Failed") + ELSE Print("Test 9 OK", TRUE) + + /\ IF <<1,2>> \in Seq({n \in Int : n > 22}) + THEN Assert(FALSE, "Test 9 Failed") + ELSE Print("Test 9 OK", TRUE) + + /\ IF <<-5, -4, -3>> \notin Int \X Int \X Int + THEN Assert(FALSE, "Test 10 Failed") + ELSE Print("Test 10 OK", TRUE) + + /\ IF <<-5, <<4,4,3>>, <<1,-1>> >> \in S4 + THEN Assert(FALSE, "Test 11 Failed") + ELSE Print("Test 11 OK", TRUE) + + ========================================= diff --git a/tlatools/test-model/suite/test14.cfg b/tlatools/test-model/suite/test14.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b0ee260b28eef2026bbc2f6cb01c89fd3d01d947 --- /dev/null +++ b/tlatools/test-model/suite/test14.cfg @@ -0,0 +1,8 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test14.tla b/tlatools/test-model/suite/test14.tla new file mode 100644 index 0000000000000000000000000000000000000000..4cd3b1783d7ffbf7ea9c5f6cade784c6b79d925f --- /dev/null +++ b/tlatools/test-model/suite/test14.tla @@ -0,0 +1,54 @@ +--------------- MODULE test14 ------------- + +(* Test of IF and CASE and nested junctions *) + +EXTENDS Integers, TLC, FiniteSets, Sequences + + +VARIABLE x +Type == x \in BOOLEAN +Init == x = TRUE +Next == UNCHANGED x + +Inv == + + /\ IF (IF TRUE THEN IF FALSE THEN 3 ELSE 2 ELSE 1) # 2 + THEN Assert(FALSE, "Test 1 Failed") + ELSE Print("Test 1 OK", TRUE) + + /\ IF (CASE FALSE -> 1 [] TRUE -> CASE FALSE -> 2 [] TRUE -> 3 [] OTHER -> 4) + # 3 + THEN Assert(FALSE, "Test 2 Failed") + ELSE Print("Test 2 OK", TRUE) + + /\ IF (CASE FALSE -> 1 [] FALSE -> CASE FALSE -> 2 [] TRUE -> 3 + [] OTHER -> 4 [] TRUE -> 5) # 5 + THEN Assert(FALSE, "Test 3 Failed") + ELSE Print("Test 3 OK", TRUE) + + /\ IF (CASE FALSE -> 1 [] TRUE -> CASE FALSE -> 2 [] FALSE -> 3 + [] OTHER -> 4 [] TRUE -> 5) # 4 + THEN Assert(FALSE, "Test 4 Failed") + ELSE Print("Test 4 OK", TRUE) + + /\ IF (CASE FALSE -> 1 [] FALSE -> CASE TRUE -> 2 [] TRUE -> 3 + [] OTHER -> 4 [] OTHER -> 5) # 5 + THEN Assert(FALSE, "Test 5 Failed") + ELSE Print("Test 5 OK", TRUE) + + /\ IF (CASE TRUE -> 1 [] TRUE -> CASE TRUE -> 2 [] TRUE -> 3 + [] OTHER -> 4 [] OTHER -> 5) \notin {1, 2, 3} + THEN Assert(FALSE, "Test 6 Failed") + ELSE Print("Test 6 OK", TRUE) + + /\ IF ~ \/ /\ 1=3 + /\ "a" = 1 + \/ /\ 1 = 2 + /\ "b" = 1 + \/ /\ 1 = 1 + /\ 2 = 2 + \/ "c" = 1 + THEN Assert(FALSE, "Test 7 Failed") + ELSE Print("Test 7 OK", TRUE) + +========================================= diff --git a/tlatools/test-model/suite/test15.cfg b/tlatools/test-model/suite/test15.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b0ee260b28eef2026bbc2f6cb01c89fd3d01d947 --- /dev/null +++ b/tlatools/test-model/suite/test15.cfg @@ -0,0 +1,8 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test15.tla b/tlatools/test-model/suite/test15.tla new file mode 100644 index 0000000000000000000000000000000000000000..e4d977e74e918a8f2956f3673701651262911d45 --- /dev/null +++ b/tlatools/test-model/suite/test15.tla @@ -0,0 +1,78 @@ +--------------- MODULE test15 ------------- +(* Test of handling the empty set *) + +EXTENDS TLC, Naturals, Sequences + +VARIABLE x +Type == x \in BOOLEAN +Init == x = TRUE +Next == UNCHANGED x + + + +Inv == + /\ IF SUBSET {} # {{}} + THEN Assert(FALSE, "Test 1 Failed") + ELSE Print("Test 1 OK", TRUE) + + /\ IF UNION {} # {} + THEN Assert(FALSE, "Test 2 Failed") + ELSE Print("Test 2 OK", TRUE) + + /\ IF {y \in {} : y = y} # {} + THEN Assert(FALSE, "Test 3 Failed") + ELSE Print("Test 3 OK", TRUE) + + /\ IF [y \in {} |-> y] # << >> + THEN Assert(FALSE, "Test 4 Failed") + ELSE Print("Test 4 OK", TRUE) + + /\ IF (\E S \in {} : TRUE) # FALSE + THEN Assert(FALSE, "Test 5 Failed") + ELSE Print("Test 5 OK", TRUE) + + /\ IF (\A S \in {} : FALSE) # TRUE + THEN Assert(FALSE, "Test 6 Failed") + ELSE Print("Test 6 OK", TRUE) + + /\ IF DOMAIN <<>> # {} + THEN Assert(FALSE, "Test 7 Failed") + ELSE Print("Test 7 OK", TRUE) + + /\ IF 1..0 # {} + THEN Assert(FALSE, "Test 8 Failed") + ELSE Print("Test 8 OK", TRUE) + + /\ IF <<>> \notin Seq({}) + THEN Assert(FALSE, "Test 9 Failed") + ELSE Print("Test 9 OK", TRUE) + + /\ IF <<{}>> \in Seq ({}) + THEN Assert(FALSE, "Test 10 Failed") + ELSE Print("Test 10 OK", TRUE) + + /\ IF \E S \in SUBSET {} : S # {} + THEN Assert(FALSE, "Test 11 Failed") + ELSE Print("Test 11 OK", TRUE) + /\ IF [{} -> {1, 2, 3}] # {<<>>} + THEN Assert(FALSE, "Test 12 Failed") + ELSE Print("Test 12 OK", TRUE) + + /\ IF [{1, 2, 3} -> {}] # {} + THEN Assert(FALSE, "Test 13 Failed") + ELSE Print("Test 13 OK", TRUE) + + + /\ IF (UNION {{1,2,3}, {}}) # (UNION {{1,2,3}}) + THEN Assert(FALSE, "Test 14 Failed") + ELSE Print("Test 14 OK", TRUE) + + /\ IF 1..0 # {} + THEN Assert(FALSE, "Test 15 Failed") + ELSE Print("Test 15 OK", TRUE) + + /\ IF 1..0 # 5..2 + THEN Assert(FALSE, "Test 16 Failed") + ELSE Print("Test 16 OK", TRUE) + +========================================= diff --git a/tlatools/test-model/suite/test16.cfg b/tlatools/test-model/suite/test16.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d191341c2404a4660de5819024419df4563278cd --- /dev/null +++ b/tlatools/test-model/suite/test16.cfg @@ -0,0 +1,9 @@ + INIT + Init + + NEXT + Next + + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test16.tla b/tlatools/test-model/suite/test16.tla new file mode 100644 index 0000000000000000000000000000000000000000..4a5dcc10ca9724d64afc857f3e6f3d4ee083cf7b --- /dev/null +++ b/tlatools/test-model/suite/test16.tla @@ -0,0 +1,40 @@ +--------------- MODULE test16 ------------- +(* Test of handling of one-tuples *) + +EXTENDS TLC, Naturals, Sequences + +VARIABLE x +Type == x \in BOOLEAN +Init == x = TRUE +Next == UNCHANGED x + +S == {<<y>> : y \in {1, 2, 3, 4}} + +Inv == + + /\ IF <<1>> \notin S + THEN Assert(FALSE, "Test 1 Failed") + ELSE Print("Test 1 OK", TRUE) + + /\ IF ~(\E <<y>> \in S : y = 2) + THEN Assert(FALSE, "Test 2 Failed") + ELSE Print("Test 2 OK", TRUE) + + /\ IF ~(\E y \in S : y[1] = 2) + THEN Assert(FALSE, "Test 3 Failed") + ELSE Print("Test 3 OK", TRUE) + + /\ IF {<<y>> \in S : y > 3} # {<<4>>} + THEN Assert(FALSE, "Test 4 Failed") + ELSE Print("Test 4 OK", TRUE) + + /\ IF <<1>> \o <<2>> # <<1, 2>> + THEN Assert(FALSE, "Test 5 Failed") + ELSE Print("Test 5 OK", TRUE) + + /\ IF [<<y>> \in S |-> y+1][<<2>>] # 3 + THEN Assert(FALSE, "Test 6 Failed") + ELSE Print("Test 6 OK", TRUE) + + +========================================= diff --git a/tlatools/test-model/suite/test17.cfg b/tlatools/test-model/suite/test17.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d191341c2404a4660de5819024419df4563278cd --- /dev/null +++ b/tlatools/test-model/suite/test17.cfg @@ -0,0 +1,9 @@ + INIT + Init + + NEXT + Next + + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test17.tla b/tlatools/test-model/suite/test17.tla new file mode 100644 index 0000000000000000000000000000000000000000..d6975f3f805075b4678a5a13c09d48feb550fc1e --- /dev/null +++ b/tlatools/test-model/suite/test17.tla @@ -0,0 +1,131 @@ +--------------- MODULE test17 ------------- + +(* Test of handling of handling expressions with primes. *) + +EXTENDS TLC, Naturals, Sequences + +VARIABLE x, y + +Init == /\ Print("There should be two distinct states", TRUE) + /\ x = 1 + /\ y = 1 + +f[i \in Nat ] == x'+ x + 2*i +g == [i \in {x'} |-> x+i] + + +Foo(a) == a' = x+1 + +Inv == TRUE + +TNext == + /\ x' = x+1 + /\ x' = 2 + /\ \/ UNCHANGED y + + \/ /\ Print("Starting Test 1", TRUE) + /\ y' = IF x' = 2 + THEN 1 + ELSE Assert(FALSE, "Failed Test 1") + + \/ /\ Print("Starting Test 2", TRUE) + /\ IF x' = 2 + THEN y' = 1 + ELSE Assert(FALSE, "Failed Test 2") + + \/ /\ Print("Starting Test 3", TRUE) + /\ x' # 2 + /\ Assert(FALSE, "Failed Test 3") + + \/ /\ Print("Starting Test 4", TRUE) + /\ ~(\E i \in {x'} : i = 2) + /\ Assert(FALSE, "Failed Test 4") + + \/ /\ Print("Starting Test 5", TRUE) + /\ ~ (\A i \in {x'} : i = 2) + /\ Assert(FALSE, "Failed Test 5") + + \/ /\ Print("Starting Test 6", TRUE) + /\ (CHOOSE i \in {x'} : TRUE) # 2 + /\ Assert(FALSE, "Failed Test 6") + + \/ /\ Print("Starting Test 7", TRUE) + /\ 2 \notin {x'} + /\ Assert(FALSE, "Failed Test 7") + + \/ /\ Print("Starting Test 8", TRUE) + /\ {i \in {x'} : TRUE} # {2} + /\ Assert(FALSE, "Failed Test 8") + + \/ /\ Print("Starting Test 9", TRUE) + /\ {i' : i \in {x'}} # {2} + /\ Assert(FALSE, "Failed Test 9") + + \/ /\ Print("Starting Test 10", TRUE) + /\ {2} \notin SUBSET {x'} + /\ Assert(FALSE, "Failed Test 10") + + \/ /\ Print("Starting Test 11", TRUE) + /\ {2} # UNION {{x'}, {}} + /\ Assert(FALSE, "Failed Test 11") + + \/ /\ Print("Starting Test 12", TRUE) + /\ f[1] # 5 + /\ Assert(FALSE, "Failed Test 12") + + \/ /\ Print("Starting Test 13", TRUE) + /\ f[x'] # 7 + /\ Assert(FALSE, "Failed Test 13") + + \/ /\ Print("Starting Test 14", TRUE) + /\ [f EXCEPT ![x'] = x'+x+3][2] # 6 + /\ Assert(FALSE, "Failed Test 14") + + \/ /\ Print("Starting Test 15", TRUE) + /\ [f EXCEPT ![2] = x'+x+3][x'] # 6 + /\ Assert(FALSE, "Failed Test 15") + + \/ /\ Print("Starting Test 16", TRUE) + /\ [{x'-1} -> {x'}] # {<<2>>} + /\ Assert(FALSE, "Failed Test 16") + + \/ /\ Print("Starting Test 17", TRUE) + /\ [{x',x} -> {x'}] # {<<2, 2>>} + /\ Assert(FALSE, "Failed Test 17") + + \/ /\ Print("Starting Test 18", TRUE) + /\ [{x',x} -> {x}] # {<<1, 1>>} + /\ Assert(FALSE, "Failed Test 18") + + \/ /\ Print("Starting Test 19", TRUE) + /\ x'=2 => x'=3 + /\ Assert(FALSE, "Failed Test 19") + + \/ /\ Print("Starting Test 20", TRUE) + /\ CASE x'= x+1 -> FALSE + [] x'# x+1 -> TRUE + /\ Assert(FALSE, "Failed Test 20") + + \/ /\ Print("Starting Test 21", TRUE) + /\ DOMAIN g # {2} + /\ Assert(FALSE, "Failed Test 21") + + \/ /\ Print("Starting Test 22", TRUE) + /\ g[2] # 3 + /\ Assert(FALSE, "Failed Test 22") + + \/ /\ Print("Starting Test 23", TRUE) + /\ CASE x' # 2 -> Assert(FALSE, "Failed Test 23") + [] x' = 2 -> y' = 1 + + \/ /\ Print("Starting Test 24", TRUE) + /\ ~Foo(x) + /\ Assert(FALSE, "Failed Test 24") + + \/ /\ Print("Starting Test 25", TRUE) + /\ ~Foo(x) + /\ Assert(FALSE, "Failed Test 25") + + +Next == TNext \/ UNCHANGED <<x, y>> +========================================= diff --git a/tlatools/test-model/suite/test18.cfg b/tlatools/test-model/suite/test18.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d191341c2404a4660de5819024419df4563278cd --- /dev/null +++ b/tlatools/test-model/suite/test18.cfg @@ -0,0 +1,9 @@ + INIT + Init + + NEXT + Next + + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test18.tla b/tlatools/test-model/suite/test18.tla new file mode 100644 index 0000000000000000000000000000000000000000..de889dc7a9ccc0fb5f583aeabd4e8ce506de8412 --- /dev/null +++ b/tlatools/test-model/suite/test18.tla @@ -0,0 +1,64 @@ +--------------- MODULE test18 ------------- + +(* Test of fingerprinting. *) + +EXTENDS TLC, Naturals, Sequences + +VARIABLE x, y, z, w, u + +f == [i \in {1,2}, j \in {3,4} |-> i+j] +g == [p \in {1,2} \X {3,4} |-> p[1] + p[2]] +m == [i \in {3,4} |-> <<i, 7>>] + +Init == /\ Print("There should be only one distinct state", TRUE) + /\ x = [a |-> 1, b |-> 2] + /\ y = <<3, 4>> + /\ z = {1, 2, 3} + /\ w = f + /\ u = [m EXCEPT ![4] = <<4, 8>>] + /\ IF y # [i \in {1, 2} |-> IF i = 1 THEN 3 ELSE 4] + THEN Print("Error in comparing seq and fcn", TRUE) + ELSE TRUE + + +Inv == /\ TRUE + +Next == + \/ UNCHANGED <<x, y, z, w, u>> + + \/ /\ x' = [i \in {"a", "b"} |-> IF i = "a" THEN 1 ELSE 2] + /\ UNCHANGED <<y, z, w, u>> + + \/ /\ y' = [i \in {1, 2} |-> IF i = 1 THEN 3 ELSE 4] + /\ UNCHANGED <<x, z, w, u>> + + \/ /\ y' = <<3>> \o <<4>> + /\ UNCHANGED <<x, z, w, u>> + + \/ /\ y' = [y EXCEPT ![2]=4] + /\ UNCHANGED <<x, z, w, u>> + + \/ /\ y' = [<<3, 7>> EXCEPT ![2]=4] + /\ UNCHANGED <<x, z, w, u>> + + \/ /\ y' = <<3>> \o <<4>> + /\ UNCHANGED <<x, z, w, u>> + + \/ /\ z' = {3, 3, 2, 2, 1} + /\ UNCHANGED <<x, y, w, u>> + + \/ /\ z' = 1..3 + /\ UNCHANGED <<x, y, w, u>> + + \/ /\ z' = {i - 3 : i \in {4, 5, 6, 4, 5}} + /\ UNCHANGED <<x, y, w, u>> + + \/ /\ z' = DOMAIN <<"a", "b", 4>> + /\ UNCHANGED <<x, y, w, u>> + + \/ /\ w' = g + /\ UNCHANGED <<x, y, z, u>> + + \/ /\ u' = [m EXCEPT ![4][2] = @+1] + /\ UNCHANGED <<x, y, z, w>> +========================================= diff --git a/tlatools/test-model/suite/test19.cfg b/tlatools/test-model/suite/test19.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d191341c2404a4660de5819024419df4563278cd --- /dev/null +++ b/tlatools/test-model/suite/test19.cfg @@ -0,0 +1,9 @@ + INIT + Init + + NEXT + Next + + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test19.tla b/tlatools/test-model/suite/test19.tla new file mode 100644 index 0000000000000000000000000000000000000000..9d4ac22b6d9d3e8b317a150ba1abb11811944f4c --- /dev/null +++ b/tlatools/test-model/suite/test19.tla @@ -0,0 +1,15 @@ +--------------- MODULE test19 ------------- + +(* Test of large initial state space *) + +EXTENDS Naturals, Sequences + +VARIABLE x, y, z +Init == /\ x \in 1..100 + /\ y \in 1..200 + /\ z \in 1..20 + +Next == UNCHANGED <<x, y, z>> + +Inv == TRUE +========================================= diff --git a/tlatools/test-model/suite/test2.cfg b/tlatools/test-model/suite/test2.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d32cfa879ee7389879ef2ad6bdf490a5e474c707 --- /dev/null +++ b/tlatools/test-model/suite/test2.cfg @@ -0,0 +1,12 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + CONSTANT + a = a + b = b + c = c diff --git a/tlatools/test-model/suite/test2.tla b/tlatools/test-model/suite/test2.tla new file mode 100644 index 0000000000000000000000000000000000000000..45ff6602c2d7208ae5df4b1914f195fd666178ef --- /dev/null +++ b/tlatools/test-model/suite/test2.tla @@ -0,0 +1,78 @@ +--------------- MODULE test2 ------------- + +(* test equality of various representations of functions. *) + +EXTENDS Naturals, TLC + +VARIABLE x +CONSTANT a, b, c +f == [i \in {1,2}, j \in {3,4} |-> i+j] +g == [p \in {1,2} \X {3,4} |-> p[1] + p[2]] +h == [i \in {1,2} |-> [j \in {3,4} |-> i+j]] + +m == [i \in {3,4} |-> <<i, 7>>] + + +Type == x \in {1} +Inv == + /\ TRUE + + /\ IF [i \in {3, 2, 1} |-> i+2] # <<3, 4, 5>> + THEN Assert(FALSE, "Failed Test 1") + ELSE Print("Test 1 OK", TRUE) + + /\ IF [i \in {"a", "b", "c"} |-> + CASE i = "a" -> 1 [] i = "b" -> 2 [] i = "c" -> 3] + # [c |-> 3, a |-> 1, b |-> 2] + THEN Assert(FALSE, "Failed Test 2") + ELSE Print("Test 2 OK", TRUE) + + /\ IF [c |-> 3, a |-> 1, b |-> 2] # + [[a |-> 1, b |-> 3, c |-> 4] EXCEPT !.b =2 , !.c=3] + THEN Assert(FALSE, "Failed Test 3") + ELSE Print("Test 3 OK", TRUE) + + /\ IF <<3, 4, 5>> # [<<3, 42, 75>> EXCEPT ![3]=5, ![2]=4] + THEN Assert(FALSE, "Failed Test 4") + ELSE Print("Test 4 OK", TRUE) + + /\ IF [i \in {3, 2, 1} |-> i+2] # [ j \in 1..3 |-> j+2] + THEN Assert(FALSE, "Failed Test 5") + ELSE Print("Test 5 OK", TRUE) + + /\ IF [i \in {} |-> i] # <<>> + THEN Assert(FALSE, "Failed Test 6") + ELSE Print("Test 6 OK", TRUE) + + /\ IF {i \in [{1,2} -> {a, b, c}] : i[1] = a} # {<<a, a>>, <<a, b>>, <<a, c>>} + THEN Assert(FALSE, "Failed Test 7") + ELSE Print("Test 7 OK", TRUE) + + /\ IF [{"a", "bc"} -> {1, 2, 3}] # [bc : {1,2,3}, a : {1,2,3}] + THEN Assert(FALSE, "Failed Test 8") + ELSE Print("Test 8 OK", TRUE) + + /\ IF f # g + THEN Assert(FALSE, "Test 9 Failed") + ELSE Print("Test 9 OK", TRUE) + + /\ IF f = h + THEN Assert(FALSE, "Test 10 Failed") + ELSE Print("Test 10 OK", TRUE) + + /\ IF [m EXCEPT ![4] = <<4, 8>>] # [m EXCEPT ![4][2] = @+1] + THEN Assert(FALSE, "Test 11 Failed") + ELSE Print("Test 11 OK", TRUE) + + /\ IF m#[m EXCEPT ![4][2] = 7] + THEN Assert(FALSE, "Test 12 Failed") + ELSE Print("Test 12 OK", TRUE) + + /\ IF f # [f EXCEPT ![1,3] = 4] + THEN Assert(FALSE, "Test 13 Failed") + ELSE Print("Test 13 OK", TRUE) + +Init == x = 1 + +Next == UNCHANGED x +========================================= diff --git a/tlatools/test-model/suite/test20.cfg b/tlatools/test-model/suite/test20.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d191341c2404a4660de5819024419df4563278cd --- /dev/null +++ b/tlatools/test-model/suite/test20.cfg @@ -0,0 +1,9 @@ + INIT + Init + + NEXT + Next + + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test20.tla b/tlatools/test-model/suite/test20.tla new file mode 100644 index 0000000000000000000000000000000000000000..984160fbd869ab16f92daa1fed3e5d210f6ccd78 --- /dev/null +++ b/tlatools/test-model/suite/test20.tla @@ -0,0 +1,85 @@ +--------------- MODULE test20 ------------- + +(* Test of ENABLED *) + +EXTENDS Naturals, Sequences, TLC + +VARIABLE x, y + +Init == x = 1 /\ y = 1 + +Step(p) == x' = p + +Foo(A) == ENABLED((x' = x) /\ (A'=x+1)) + +Next == + \/ /\ x'=x + /\ y'=y + + \/ /\ Print("Test N1 begun", TRUE) + /\ ~ENABLED (x'=2) + /\ Assert(FALSE, "Test N1 Failed") + + \/ IF ENABLED (x'=2) + THEN /\ Print("Test N2 Passed", TRUE) + /\ UNCHANGED <<x, y>> + ELSE Assert(FALSE, "Test N2 Failed") + \/ IF ENABLED Step(17) + THEN /\ Print("Test N3 Passed", TRUE) + /\ UNCHANGED <<x, y>> + ELSE Assert(FALSE, "Test N3 Failed") + + \/ IF \A p \in 1..3 : ENABLED Step(p) + THEN /\ Print("Test N4 Passed", TRUE) + /\ UNCHANGED <<x, y>> + ELSE Assert(FALSE, "Test N4 Failed") + +Inv == + /\ IF ENABLED <<x'=1 /\ y'=y>>_<<x,y>> + THEN Assert(FALSE, "Test 1 Failed") + ELSE Print("Test 1 OK", TRUE) + + /\ IF ~ ENABLED (x'="a" /\ y'=y) + THEN Assert(FALSE, "Test 2 Failed") + ELSE Print("Test 2 OK", TRUE) + + /\ IF ENABLED (x > 2) + THEN Assert(FALSE, "Test 3 Failed") + ELSE Print("Test 3 OK", TRUE) + + /\ IF ~ENABLED (x=1) + THEN Assert(FALSE, "Test 4 Failed") + ELSE Print("Test 4 OK", TRUE) + + /\ IF ENABLED ((x > 2) /\ Next) + THEN Assert(FALSE, "Test 5 Failed") + ELSE Print("Test 5 OK", TRUE) + + /\ IF ~ENABLED ((x=1) /\ Next) + THEN Assert(FALSE, "Test 6 Failed") + ELSE Print("Test 6 OK", TRUE) + + /\ IF ~ ENABLED (x'=1) + THEN Assert(FALSE, "Test 7 Failed") + ELSE Print("Test 7 OK", TRUE) + + /\ IF Foo(x) + THEN Assert(FALSE, "Test 8 Failed") + ELSE Print("Test 8 OK", TRUE) + + /\ LET A == x + IN IF Foo(A) + THEN Assert(FALSE, "Test 9 Failed") + ELSE Print("Test 9 OK", TRUE) + + /\ IF ~Foo(y) + THEN Assert(FALSE, "Test 10 Failed") + ELSE Print("Test 10 OK", TRUE) + + /\ LET A == x + IN IF ~Foo(y) + THEN Assert(FALSE, "Test 11 Failed") + ELSE Print("Test 11 OK", TRUE) + + +========================================= diff --git a/tlatools/test-model/suite/test201.cfg b/tlatools/test-model/suite/test201.cfg new file mode 100644 index 0000000000000000000000000000000000000000..139597f9cb07c5d48bed18984ec4747f4b4f3438 --- /dev/null +++ b/tlatools/test-model/suite/test201.cfg @@ -0,0 +1,2 @@ + + diff --git a/tlatools/test-model/suite/test201.tla b/tlatools/test-model/suite/test201.tla new file mode 100644 index 0000000000000000000000000000000000000000..76c45796bcad4dd77528b773cc9d61c712fb578b --- /dev/null +++ b/tlatools/test-model/suite/test201.tla @@ -0,0 +1,20 @@ +-------------------- MODULE test201 ---------------- +\* Test of lambda expressions + +EXTENDS Naturals, TLC +Op(A(_)) == A(4) + +bar == Op(LAMBDA x : x^2) + +ASSUME /\ Op(LAMBDA x : {x,2} ) = {4,2} + /\ PrintT("Test1 OK") + +ASSUME /\ bar = 16 + /\ PrintT("Test2 OK") + +foo == INSTANCE test201a WITH A <- LAMBDA y : y^3, b <- 4 + +ASSUME /\ foo!def = 64 + /\ PrintT("Test201 OK") +================================================= + diff --git a/tlatools/test-model/suite/test201a.cfg b/tlatools/test-model/suite/test201a.cfg new file mode 100644 index 0000000000000000000000000000000000000000..139597f9cb07c5d48bed18984ec4747f4b4f3438 --- /dev/null +++ b/tlatools/test-model/suite/test201a.cfg @@ -0,0 +1,2 @@ + + diff --git a/tlatools/test-model/suite/test201a.tla b/tlatools/test-model/suite/test201a.tla new file mode 100644 index 0000000000000000000000000000000000000000..23c0983432153c439208a12c3554db7605b70fc7 --- /dev/null +++ b/tlatools/test-model/suite/test201a.tla @@ -0,0 +1,7 @@ +-------------------- MODULE test201a ---------------- + +CONSTANT A(_), b + +def == A(b) + +============================================================================= \ No newline at end of file diff --git a/tlatools/test-model/suite/test202.cfg b/tlatools/test-model/suite/test202.cfg new file mode 100644 index 0000000000000000000000000000000000000000..139597f9cb07c5d48bed18984ec4747f4b4f3438 --- /dev/null +++ b/tlatools/test-model/suite/test202.cfg @@ -0,0 +1,2 @@ + + diff --git a/tlatools/test-model/suite/test202.tla b/tlatools/test-model/suite/test202.tla new file mode 100644 index 0000000000000000000000000000000000000000..e5ff4307de4d9e3c196b713cf054d5157a87e93f --- /dev/null +++ b/tlatools/test-model/suite/test202.tla @@ -0,0 +1,32 @@ +-------------------- MODULE test202 ---------------- +\* Test of recursion + +EXTENDS Naturals, TLC + +RECURSIVE g(_) +f(a) == IF a = 0 THEN 1 ELSE a * g(a-1) +g(a) == f(a) + + +ASSUME /\ f(0) = 1 + /\ f(4) = 24 + /\ \A i \in 1..5 : f(i) = i * f(i-1) + /\ PrintT("Test 1 OK") + +ASSUME /\ g(0) = 1 + /\ g(4) = 24 + /\ \A i \in 1..5 : g(i) = i * g(i-1) + /\ PrintT("Test 2 OK") + +RECURSIVE fact +fact1[n \in Nat] == fact[n] +fact[n \in Nat] == IF n = 0 THEN 1 ELSE n * fact1[n-1] + +ASSUME /\ fact1[3] = 6 + /\ fact[4] = 24 + /\ \A i \in 0..5 : fact[i] = g(i) + /\ PrintT("Test 3 OK") + + +================================================= + diff --git a/tlatools/test-model/suite/test203.cfg b/tlatools/test-model/suite/test203.cfg new file mode 100644 index 0000000000000000000000000000000000000000..139597f9cb07c5d48bed18984ec4747f4b4f3438 --- /dev/null +++ b/tlatools/test-model/suite/test203.cfg @@ -0,0 +1,2 @@ + + diff --git a/tlatools/test-model/suite/test203.tla b/tlatools/test-model/suite/test203.tla new file mode 100644 index 0000000000000000000000000000000000000000..62230616ae62f817fb5c88324467927e3d18b703 --- /dev/null +++ b/tlatools/test-model/suite/test203.tla @@ -0,0 +1,17 @@ +-------------------- MODULE test203 ---------------- +\* Test of recursion + +EXTENDS Naturals, TLC + +RECURSIVE g(_) + +foo(n) == INSTANCE test203a WITH A <- g, b <- n + +g(n) == IF n = 0 THEN 1 ELSE n * foo(n-1)!h + +ASSUME /\ g(0) = 1 + /\ g(4) = 24 + /\ \A i \in 1..5 : g(i) = i * g(i-1) + /\ PrintT("Test1 OK") +================================================= + diff --git a/tlatools/test-model/suite/test203a.cfg b/tlatools/test-model/suite/test203a.cfg new file mode 100644 index 0000000000000000000000000000000000000000..139597f9cb07c5d48bed18984ec4747f4b4f3438 --- /dev/null +++ b/tlatools/test-model/suite/test203a.cfg @@ -0,0 +1,2 @@ + + diff --git a/tlatools/test-model/suite/test203a.tla b/tlatools/test-model/suite/test203a.tla new file mode 100644 index 0000000000000000000000000000000000000000..ad82d1eb31fbf9c5fc9986559b92782c6913ce04 --- /dev/null +++ b/tlatools/test-model/suite/test203a.tla @@ -0,0 +1,8 @@ +-------------------- MODULE test203a ---------------- + +CONSTANT A(_), b + +h == A(b) + + +============================================================================= \ No newline at end of file diff --git a/examples/TransitiveClosure/TransitiveClosure.cfg b/tlatools/test-model/suite/test204.cfg similarity index 100% rename from examples/TransitiveClosure/TransitiveClosure.cfg rename to tlatools/test-model/suite/test204.cfg diff --git a/tlatools/test-model/suite/test204.tla b/tlatools/test-model/suite/test204.tla new file mode 100644 index 0000000000000000000000000000000000000000..b65c21c4c88718c8b9eaa17d6419854a753c2200 --- /dev/null +++ b/tlatools/test-model/suite/test204.tla @@ -0,0 +1,178 @@ +--------------- MODULE test204 ------------- + +(***************************************************************************) +(* Test definability and use of all user-defined operators as prefix *) +(* operators, as in +(a, b). It does not work with binary minus. *) +(***************************************************************************) + +z - y == <<1, z, y>> +\* ASSUME -(4, 6) = <<1, 4, 6>> +z + y == <<2, z, y>> +ASSUME +(4, 6) = <<2, 4, 6>> +z * y == <<3, z, y>> +ASSUME *(4, 6) = <<3, 4, 6>> +z / y == <<4, z, y>> +ASSUME /(4, 6) = <<4, 4, 6>> +z ^ y == <<5, z, y>> +ASSUME ^(4, 6) = <<5, 4, 6>> +z < y == <<6, z, y>> +ASSUME <(4, 6) = <<6, 4, 6>> +z > y == <<7, z, y>> +ASSUME >(4, 6) = <<7, 4, 6>> +z .. y == <<8, z, y>> +ASSUME ..(4, 6) = <<8, 4, 6>> +z ... y == <<9, z, y>> +ASSUME ...(4, 6) = <<9, 4, 6>> +z | y == <<10, z, y>> +ASSUME |(4, 6) = <<10, 4, 6>> +z || y == <<11, z, y>> +ASSUME ||(4, 6) = <<11, 4, 6>> +z & y == <<12, z, y>> +ASSUME &(4, 6) = <<12, 4, 6>> +z && y == <<13, z, y>> +ASSUME &&(4, 6) = <<13, 4, 6>> +z $ y == <<14, z, y>> +ASSUME $(4, 6) = <<14, 4, 6>> +z $$ y == <<15, z, y>> +ASSUME $$(4, 6) = <<15, 4, 6>> +z ?? y == <<16, z, y>> +ASSUME ??(4, 6) = <<16, 4, 6>> +z %% y == <<17, z, y>> +ASSUME %%(4, 6) = <<17, 4, 6>> +z ## y == <<18, z, y>> +ASSUME ##(4, 6) = <<18, 4, 6>> +z ++ y == <<19, z, y>> +ASSUME ++(4, 6) = <<19, 4, 6>> +z -- y == <<20, z, y>> +ASSUME --(4, 6) = <<20, 4, 6>> +z ** y == <<21, z, y>> +ASSUME **(4, 6) = <<21, 4, 6>> +z // y == <<22, z, y>> +ASSUME //(4, 6) = <<22, 4, 6>> +z ^^ y == <<23, z, y>> +ASSUME ^^(4, 6) = <<23, 4, 6>> +z @@ y == <<23, z, y>> +ASSUME @@(4, 6) = <<23, 4, 6>> +z !! y == <<24, z, y>> +ASSUME !!(4, 6) = <<24, 4, 6>> +z |- y == <<25, z, y>> +ASSUME |-(4, 6) = <<25, 4, 6>> +z |= y == <<26, z, y>> +ASSUME |=(4, 6) = <<26, 4, 6>> +z -| y == <<27, z, y>> +ASSUME -|(4, 6) = <<27, 4, 6>> +z =| y == <<28, z, y>> +ASSUME =|(4, 6) = <<28, 4, 6>> +z <: y == <<29, z, y>> +ASSUME <:(4, 6) = <<29, 4, 6>> +z :> y == <<29, z, y>> +ASSUME :>(4, 6) = <<29, 4, 6>> +z := y == <<30, z, y>> +ASSUME :=(4, 6) = <<30, 4, 6>> +z ::= y == <<31, z, y>> +ASSUME ::=(4, 6) = <<31, 4, 6>> +z \uplus y == <<32, z, y>> +ASSUME \uplus(4, 6) = <<32, 4, 6>> +z \sqcap y == <<33, z, y>> +ASSUME \sqcap(4, 6) = <<33, 4, 6>> +z \sqcup y == <<34, z, y>> +ASSUME \sqcup(4, 6) = <<34, 4, 6>> +z \div y == <<35, z, y>> +ASSUME \div(4, 6) = <<35, 4, 6>> +z \wr y == <<36, z, y>> +ASSUME \wr(4, 6) = <<36, 4, 6>> +z \star y == <<37, z, y>> +ASSUME \star(4, 6) = <<37, 4, 6>> +z \bigcirc y == <<38, z, y>> +ASSUME \bigcirc(4, 6) = <<38, 4, 6>> +z \bullet y == <<39, z, y>> +ASSUME \bullet(4, 6) = <<39, 4, 6>> +z \prec y == <<40, z, y>> +ASSUME \prec(4, 6) = <<40, 4, 6>> +z \succ y == <<41, z, y>> +ASSUME \succ(4, 6) = <<41, 4, 6>> +z \preceq y == <<42, z, y>> +ASSUME \preceq(4, 6) = <<42, 4, 6>> +z \succeq y == <<43, z, y>> +ASSUME \succeq(4, 6) = <<43, 4, 6>> +z \sim y == <<44, z, y>> +ASSUME \sim(4, 6) = <<44, 4, 6>> +z \simeq y == <<45, z, y>> +ASSUME \simeq(4, 6) = <<45, 4, 6>> +z \ll y == <<46, z, y>> +ASSUME \ll(4, 6) = <<46, 4, 6>> +z \gg y == <<47, z, y>> +ASSUME \gg(4, 6) = <<47, 4, 6>> +z \asymp y == <<48, z, y>> +ASSUME \asymp(4, 6) = <<48, 4, 6>> +z \subset y == <<49, z, y>> +ASSUME \subset(4, 6) = <<49, 4, 6>> +z \supset y == <<50, z, y>> +ASSUME \supset(4, 6) = <<50, 4, 6>> +z \supseteq y == <<51, z, y>> +ASSUME \supseteq(4, 6) = <<51, 4, 6>> +z \approx y == <<52, z, y>> +ASSUME \approx(4, 6) = <<52, 4, 6>> +z \cong y == <<53, z, y>> +ASSUME \cong(4, 6) = <<53, 4, 6>> +z \sqsubset y == <<54, z, y>> +ASSUME \sqsubset(4, 6) = <<54, 4, 6>> +z \sqsupset y == <<55, z, y>> +ASSUME \sqsupset(4, 6) = <<55, 4, 6>> +z \sqsubseteq y == <<56, z, y>> +ASSUME \sqsubseteq(4, 6) = <<56, 4, 6>> +z \sqsupseteq y == <<57, z, y>> +ASSUME \sqsupseteq(4, 6) = <<57, 4, 6>> +z \doteq y == <<58, z, y>> +ASSUME \doteq(4, 6) = <<58, 4, 6>> +z \propto y == <<59, z, y>> +ASSUME \propto(4, 6) = <<59, 4, 6>> + +z ^+ == <<60, z>> +ASSUME ^+(4) = <<60, 4>> +z ^* == <<61, z>> +ASSUME ^*(4) = <<61, 4>> +z ^# == <<62, z>> +ASSUME ^#(4) = <<62, 4>> +-. z == <<63, z>> +ASSUME -.(4) = <<63, 4>> + +z \leq y == <<64, z, y>> +ASSUME \leq(4, 6) = <<64, 4, 6>> +ASSUME <=(4, 6) = <<64, 4, 6>> +ASSUME =<(4, 6) = <<64, 4, 6>> + +z \geq y == <<65, z, y>> +ASSUME \geq(4, 6) = <<65, 4, 6>> +ASSUME >=(4, 6) = <<65, 4, 6>> + +z \oplus y == <<66, z, y>> +ASSUME \oplus(4, 6) = <<66, 4, 6>> +ASSUME (+) (4, 6) = <<66, 4, 6>> + +z \ominus y == <<67, z, y>> +ASSUME \ominus(4, 6) = <<67, 4, 6>> +ASSUME (-) (4, 6) = <<67, 4, 6>> + + +z \odot y == <<68, z, y>> +ASSUME \odot(4, 6) = <<68, 4, 6>> +ASSUME (.) (4, 6) = <<68, 4, 6>> + +z \otimes y == <<69, z, y>> +ASSUME \otimes(4, 6) = <<69, 4, 6>> +ASSUME (\X) (4, 6) = <<69, 4, 6>> + +z \oslash y == <<70, z, y>> +ASSUME \oslash(4, 6) = <<70, 4, 6>> +ASSUME (/) (4, 6) = <<70, 4, 6>> + +z \circ y == <<71, z, y>> +ASSUME \circ(4, 6) = <<71, 4, 6>> +ASSUME \o (4, 6) = <<71, 4, 6>> + +ASSUME \in(1, {1}) + +ASSUME \cup({1}, {2}) = {1,2} + +============================================================================= diff --git a/tlatools/test-model/suite/test205.cfg b/tlatools/test-model/suite/test205.cfg new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/tlatools/test-model/suite/test205.cfg @@ -0,0 +1 @@ + diff --git a/tlatools/test-model/suite/test205.tla b/tlatools/test-model/suite/test205.tla new file mode 100644 index 0000000000000000000000000000000000000000..c057b6abba236aa393e4df701a08f4fee26edac3 --- /dev/null +++ b/tlatools/test-model/suite/test205.tla @@ -0,0 +1,175 @@ +--------------- MODULE test205 ------------- + +(***************************************************************************) +(* Test use of notation R!+(a, b) for instantiated *-fix operators. *) +(***************************************************************************) + +F == INSTANCE test204 + +\*z - y == <<1, z, y>> +ASSUME F!-(4, 6) = <<1, 4, 6>> +\*z + y == <<2, z, y>> +ASSUME F!+(4, 6) = <<2, 4, 6>> +\*z * y == <<3, z, y>> +ASSUME F!*(4, 6) = <<3, 4, 6>> +\*z / y == <<4, z, y>> +ASSUME F!/(4, 6) = <<4, 4, 6>> +\*z ^ y == <<5, z, y>> +ASSUME F!^(4, 6) = <<5, 4, 6>> +\*z < y == <<6, z, y>> +ASSUME F!<(4, 6) = <<6, 4, 6>> +\*z > y == <<7, z, y>> +ASSUME F!>(4, 6) = <<7, 4, 6>> +\*z .. y == <<8, z, y>> +ASSUME F!..(4, 6) = <<8, 4, 6>> +\*z ... y == <<9, z, y>> +ASSUME F!...(4, 6) = <<9, 4, 6>> +\*z | y == <<10, z, y>> +ASSUME F!|(4, 6) = <<10, 4, 6>> +\*z || y == <<11, z, y>> +ASSUME F!||(4, 6) = <<11, 4, 6>> +\*z & y == <<12, z, y>> +ASSUME F!&(4, 6) = <<12, 4, 6>> +\*z && y == <<13, z, y>> +ASSUME F!&&(4, 6) = <<13, 4, 6>> +\*z $ y == <<14, z, y>> +ASSUME F!$(4, 6) = <<14, 4, 6>> +\*z $$ y == <<15, z, y>> +ASSUME F!$$(4, 6) = <<15, 4, 6>> +\*z ?? y == <<16, z, y>> +ASSUME F!??(4, 6) = <<16, 4, 6>> +\*z %% y == <<17, z, y>> +ASSUME F!%%(4, 6) = <<17, 4, 6>> +\*z ## y == <<18, z, y>> +ASSUME F!##(4, 6) = <<18, 4, 6>> +\*z ++ y == <<19, z, y>> +ASSUME F!++(4, 6) = <<19, 4, 6>> +\*z -- y == <<20, z, y>> +ASSUME F!--(4, 6) = <<20, 4, 6>> +\*z ** y == <<21, z, y>> +ASSUME F!**(4, 6) = <<21, 4, 6>> +\*z // y == <<22, z, y>> +ASSUME F!//(4, 6) = <<22, 4, 6>> +\*z ^^ y == <<23, z, y>> +ASSUME F!^^(4, 6) = <<23, 4, 6>> +\*z @@ y == <<23, z, y>> +ASSUME F!@@(4, 6) = <<23, 4, 6>> +\*z !! y == <<24, z, y>> +ASSUME F ! !!(4, 6) = <<24, 4, 6>> +\*z |- y == <<25, z, y>> +ASSUME F!|-(4, 6) = <<25, 4, 6>> +\*z |= y == <<26, z, y>> +ASSUME F!|=(4, 6) = <<26, 4, 6>> +\*z -| y == <<27, z, y>> +ASSUME F!-|(4, 6) = <<27, 4, 6>> +\*z =| y == <<28, z, y>> +ASSUME F!=|(4, 6) = <<28, 4, 6>> +\*z <: y == <<29, z, y>> +ASSUME F!<:(4, 6) = <<29, 4, 6>> +\*z :> y == <<29, z, y>> +ASSUME F!:>(4, 6) = <<29, 4, 6>> +\*z := y == <<30, z, y>> +ASSUME F!:=(4, 6) = <<30, 4, 6>> +\*z ::= y == <<31, z, y>> +ASSUME F!::=(4, 6) = <<31, 4, 6>> +\*z \uplus y == <<32, z, y>> +ASSUME F!\uplus(4, 6) = <<32, 4, 6>> +\*z \sqcap y == <<33, z, y>> +ASSUME F!\sqcap(4, 6) = <<33, 4, 6>> +\*z \sqcup y == <<34, z, y>> +ASSUME F!\sqcup(4, 6) = <<34, 4, 6>> +\*z \div y == <<35, z, y>> +ASSUME F!\div(4, 6) = <<35, 4, 6>> +\*z \wr y == <<36, z, y>> +ASSUME F!\wr(4, 6) = <<36, 4, 6>> +\*z \star y == <<37, z, y>> +ASSUME F!\star(4, 6) = <<37, 4, 6>> +\*z \bigcirc y == <<38, z, y>> +ASSUME F!\bigcirc(4, 6) = <<38, 4, 6>> +\*z \bullet y == <<39, z, y>> +ASSUME F!\bullet(4, 6) = <<39, 4, 6>> +\*z \prec y == <<40, z, y>> +ASSUME F!\prec(4, 6) = <<40, 4, 6>> +\*z \succ y == <<41, z, y>> +ASSUME F!\succ(4, 6) = <<41, 4, 6>> +\*z \preceq y == <<42, z, y>> +ASSUME F!\preceq(4, 6) = <<42, 4, 6>> +\*z \succeq y == <<43, z, y>> +ASSUME F!\succeq(4, 6) = <<43, 4, 6>> +\*z \sim y == <<44, z, y>> +ASSUME F!\sim(4, 6) = <<44, 4, 6>> +\*z \simeq y == <<45, z, y>> +ASSUME F!\simeq(4, 6) = <<45, 4, 6>> +\*z \ll y == <<46, z, y>> +ASSUME F!\ll(4, 6) = <<46, 4, 6>> +\*z \gg y == <<47, z, y>> +ASSUME F!\gg(4, 6) = <<47, 4, 6>> +\*z \asymp y == <<48, z, y>> +ASSUME F!\asymp(4, 6) = <<48, 4, 6>> +\*z \subset y == <<49, z, y>> +ASSUME F!\subset(4, 6) = <<49, 4, 6>> +\*z \supset y == <<50, z, y>> +ASSUME F!\supset(4, 6) = <<50, 4, 6>> +\*z \supseteq y == <<51, z, y>> +ASSUME F!\supseteq(4, 6) = <<51, 4, 6>> +\*z \approx y == <<52, z, y>> +ASSUME F!\approx(4, 6) = <<52, 4, 6>> +\*z \cong y == <<53, z, y>> +ASSUME F!\cong(4, 6) = <<53, 4, 6>> +\*z \sqsubset y == <<54, z, y>> +ASSUME F!\sqsubset(4, 6) = <<54, 4, 6>> +\*z \sqsupset y == <<55, z, y>> +ASSUME F!\sqsupset(4, 6) = <<55, 4, 6>> +\*z \sqsubseteq y == <<56, z, y>> +ASSUME F!\sqsubseteq(4, 6) = <<56, 4, 6>> +\*z \sqsupseteq y == <<57, z, y>> +ASSUME F!\sqsupseteq(4, 6) = <<57, 4, 6>> +\*z \doteq y == <<58, z, y>> +ASSUME F!\doteq(4, 6) = <<58, 4, 6>> +\*z \propto y == <<59, z, y>> +ASSUME F!\propto(4, 6) = <<59, 4, 6>> + +\*z ^+ == <<60, z>> +ASSUME F!^+(4) = <<60, 4>> +\*z ^* == <<61, z>> +ASSUME F!^*(4) = <<61, 4>> +\*z ^# == <<62, z>> +ASSUME F!^#(4) = <<62, 4>> +\*-. z == <<63, z>> +ASSUME F!-.(4) = <<63, 4>> + +\*z \leq y == <<64, z, y>> +ASSUME F!\leq(4, 6) = <<64, 4, 6>> +ASSUME F!<=(4, 6) = <<64, 4, 6>> +ASSUME F!=<(4, 6) = <<64, 4, 6>> + +\*z \geq y == <<65, z, y>> +ASSUME F!\geq(4, 6) = <<65, 4, 6>> +ASSUME F!>=(4, 6) = <<65, 4, 6>> + +\*z \oplus y == <<66, z, y>> +ASSUME F!\oplus(4, 6) = <<66, 4, 6>> +ASSUME F!(+) (4, 6) = <<66, 4, 6>> + +\*z \ominus y == <<67, z, y>> +ASSUME F!\ominus(4, 6) = <<67, 4, 6>> +ASSUME F!(-) (4, 6) = <<67, 4, 6>> + + +\*z \odot y == <<68, z, y>> +ASSUME F!\odot(4, 6) = <<68, 4, 6>> +ASSUME F!(.) (4, 6) = <<68, 4, 6>> + +\*z \otimes y == <<69, z, y>> +ASSUME F!\otimes(4, 6) = <<69, 4, 6>> +ASSUME F!(\X) (4, 6) = <<69, 4, 6>> + +\*z \oslash y == <<70, z, y>> +ASSUME F!\oslash(4, 6) = <<70, 4, 6>> +ASSUME F!(/) (4, 6) = <<70, 4, 6>> + +\*z \circ y == <<71, z, y>> +ASSUME F!\circ(4, 6) = <<71, 4, 6>> +ASSUME F!\o (4, 6) = <<71, 4, 6>> + +============================================================================= diff --git a/tlatools/test-model/suite/test206.cfg b/tlatools/test-model/suite/test206.cfg new file mode 100644 index 0000000000000000000000000000000000000000..8f848aa991a48bf066529f284b3990008f6100d4 --- /dev/null +++ b/tlatools/test-model/suite/test206.cfg @@ -0,0 +1 @@ +CONSTANT C = 4 \ No newline at end of file diff --git a/tlatools/test-model/suite/test206.tla b/tlatools/test-model/suite/test206.tla new file mode 100644 index 0000000000000000000000000000000000000000..113ba790596d68bccf659b55e7b3e4a7c8f8c39b --- /dev/null +++ b/tlatools/test-model/suite/test206.tla @@ -0,0 +1,238 @@ +------------------------------- MODULE test206 ------------------------------ +\* Test of labels and their use in subexpression selectors. + +EXTENDS TLC, Integers + +CONSTANT C \* Test with C = 4 + +Op(Arg(_), p) == + \A x \in {1,2}, <<y, z>> \in {<<3, 4>>} : + lab(x,y,z) :: LET a ++ b == + Arg(a) + b + x + 2*y + 3*z + IN (Arg(1) + Arg(p) + C + + 2*x + 4*y + 6*z) = + 1 ++ ( label2 :: p ++ C) +\* IN /\label2:: PrintT("FOO") +\* /\ PrintT(Arg(1)) +\* /\ PrintT("FOO2") +\* /\ PrintT(<<p, Arg(p)>>) +\* /\ PrintT("FOO3") +\* /\ PrintT(<<p, C>>) +\* /\ PrintT("FOO3a") +\* /\ PrintT(1++2) +\* /\ PrintT(p++C) +\* /\ PrintT("FOO4") +\* /\ PrintT(<<x, y, z>>) + +Foo(u) == 2*u + +ASSUME Foo(5) = Foo(5)!: + +THEOREM Thm == ASSUME FALSE + PROVE lab:: C > 0 + +THEOREM Thm2 == lab3 :: TRUE + + +ASSUME Foo(25) = 50 + +Bar == Op(Foo, 9)!lab(1,2,3) + +ASSUME Op(Foo, 9) + +ASSUME Thm2!lab3 + +ASSUME Bar + +ASSUME Op(Foo, 9)!lab(1,2,3)!label2 = Op(Foo, 9)!lab(1,2,3)!:!++(9, 4) + +Op3(A(_,_,_), a1, a2, a3) == A(a1, a2, a3) + +Op1(a) == \A x \in {} : lab(x) :: IF TRUE + THEN LET Op1a(c) == 4 * c + a*x + IN a + Op1a(x) + ELSE 1 +SOp1(a) == a +OOp1(A(_), a) == A(a) +ASSUME OOp1(SOp1, 2) = 2 + +SOp1a(a) == {x \in {1,2} : a = x} +OOp2(A(_,_), a, b) == A(a, b) +ASSUME OOp2(SOp1a!@, 2, 2) = TRUE + +SOp1b(a) == {x + a : x \in {1,2}} +ASSUME OOp2(SOp1b!@, 2, 3) = 5 + +SOp1c(a) == {(LET c == a * x IN x + a) : x \in {1,2}} +ASSUME OOp2(SOp1c!@!c, 2, 3) = 2 * 3 + +SOp1d(a) == {(LET c(y) == (a * x) + y IN x + a) : x \in {1,2}} +OOp3(A(_,_,_), a, b, c) == A(a, b, c) +ASSUME OOp3(SOp1d!@!c, 2, 3, 4) = 2 * 3 + 4 + +OOp4(A(_,_,_,_), a, b, c, d) == A(a, b, c, d) + + +\* Foo1 == Op1(2)!(3)!2!1 +ASSUME Op1(2)!(3)!2!1 = 2 + 4*3 + 6 +ASSUME Op1(2)!(3)!2!Op1a(4) = 16 + 6 +ASSUME Op3(Op1!@!2!Op1a, 2, 3, 4) = 22 + +COp(q, p) == + CHOOSE x : lab(x) :: LET a ++ b == {a, b, q, p, x} + IN <<q, 99 ++ p >> + + +ASSUME COp(1, 2)!(3)!++(4, 5) = {2,1, 3, 4, 5} + +ASSUME COp(1, 2)!(3) = <<1, {99, 1, 2, 3} >> +ASSUME COp(1, 2)!(3)!1 = <<1, {99, 1, 2, 3} >> +ASSUME COp(1, 2)!(3)!1!>> = {99, 1, 2, 3} + +OOp5(A(_, _, _, _, _), a1, a2, a3, a4, a5) == A(a1, a2, a3, a4, a5) + +ASSUME OOp5(COp!@!++, 1, 2, 3, 4, 5) = {2,1, 3, 4, 5} +ASSUME COp(1, 2)!lab(3)!:!++(4, 5) = {2,1, 3, 4, 5} + +Inst == INSTANCE test206a WITH A5 <- COp!@!++ +ASSUME Inst!Foo(1, 2, 3, 4, 5) = {2,1, 3, 4, 5} +ASSUME Inst!Bar(3)!>> = 3 +ASSUME Inst!Bar2(3)!>> = 3 +ASSUME Inst!Bar3!>> = 2 +ASSUME Inst!Bar4(1)!(2)!<< = 2 +ASSUME Inst!Bar4(1)!(2)!>> = 1 +ASSUME Inst!Bar4(1)!lab(2)!<< = 2 +ASSUME Inst!Bar4(1)!lab(2)!>> = 1 +ASSUME OOp2(Inst!Bar4!@!<<, 1, 2) = 2 +ASSUME OOp2(Inst!Bar4!@!>>, 1, 2) = 1 +ASSUME OOp2(Inst!Bar4!lab!<<, 1, 2) = 2 +ASSUME OOp2(Inst!Bar4!lab!>>, 1, 2) = 1 +ASSUME Inst!Bar5(1)!lab(2)!:!++(3, 4) = <<1, 3, 4, 2>> +ASSUME Inst!Bar5(1)!(2)!++(3, 4) = <<1, 3, 4, 2>> +ASSUME OOp4(Inst!Bar5!lab!:!++, 1, 2, 3, 4) = <<1, 3, 4, 2>> + +Inst2(A5(_, _, _, _, _)) == INSTANCE test206a +ASSUME Inst2(COp!@!++)!Foo(1, 2, 3, 4, 5) = {2,1, 3, 4, 5} + + +COp2(q, p) == + CHOOSE x : lab(x) :: LET a ++ b == {lab(y):: y + a + b : y \in {1}} + IN <<q, 99 ++ p >> + +ASSUME COp2(1,2)!lab(3)!:!++(9,10)!lab(11) = 30 +ASSUME COp2(1,2)!(3)!++(9,10)!lab(11) = 30 +ASSUME COp2(1,2)!lab(3)!:!++(9,10)!(11) = 30 +OOp6(A(_, _, _, _, _, _), a1, a2, a3, a4, a5, a6) == A(a1, a2, a3, a4, a5, a6) +ASSUME OOp6(COp2!lab!:!++!lab, 1, 2, 3, 9, 10, 11) = 30 +ASSUME OOp6(COp2!@!++!lab, 1, 2, 3, 9, 10, 11) = 30 +ASSUME OOp6(COp2!lab!:!++!@, 1, 2, 3, 9, 10, 11) = 30 + +\* Let's test all the different kinds of operators + +Def1 == {1, 2, 3, 4} +ASSUME Def1!2 = 2 + +Def2 == {x \in {1, 2, 3} : x > 17} +ASSUME Def2!1 = {1, 2, 3} +ASSUME Def2!(14)!<< = 14 + +Def3 == {<<x, y>> : x \in {1}, y \in {2}} +ASSUME Def3!2!1 = 2 +ASSUME Def3!(1, 2)!<< = 1 + +Def4 == SUBSET UNION {{1}, {2}} +ASSUME Def4!<<!<<!2 = {2} + +Def5 == [i \in 1..10 |-> i+1][3] +ASSUME Def5!>> = 3 +ASSUME Def5!<<[4] = 5 +ASSUME Def5!<<!1!>> = 10 + +Def6 == [[i \in 1..10 |-> i+1] EXCEPT ![2] = 1, ![3] = 2] +ASSUME Def6!1[3] = 4 +\* The following two subexpression expressions are now +\* considered to be illegal because they could contain +\* a "@". +\* ASSUME Def6!2=1 +\* ASSUME Def6!3=2 + +Def7 == 3.a +ASSUME Def7!1 = 3 +ASSUME Def7!2 = "a" + +Def8 == [a |-> 1, b |-> 2] +ASSUME Def8!2 = 2 + +Def9 == [a : 1, b : 2] +ASSUME Def9!2 = 2 + +Def10 == <<1, 2, 3>> +ASSUME Def10!2 = 2 + +Def11 == {1} \X {2} \X {3} +ASSUME Def11!3!1 = 3 + +Def12 == IF 2=3 THEN 2 ELSE 3 +ASSUME /\ Def12!1!<< = 2 + /\ Def12!2 = 2 + /\ Def12!3 = 3 + +Def13 == \A x : CASE x=1 -> 1 + [] x=2 -> 2 + [] OTHER -> 3 +ASSUME /\ Def13!(42)!1!<<!<< = 42 + /\ Def13!(42)!1!>> = 1 + /\ Def13!(42)!2!>> = 2 + /\ Def13!(42)!3!>> = 3 + +Def14 == \A x \in {1} : x = 1 +ASSUME /\ Def14!(2)!<< = 2 + /\ Def14!1!1 = 1 + +Def15 == \A x \in {1}, y \in {2} : (x = 1) /\ (y = 2) +ASSUME /\ Def15!(2,3)!<<!<< = 2 + /\ Def15!(2,3)!>>!<< = 3 + /\ Def15!2!<< = 2 + +Def16 == \E x \in {1}, <<y, z>> \in {<<2,3>>} : /\ ((x = 1)) + /\ y = 2 + /\ (z=3) +ASSUME /\ Def16!(2,3,4)!1!1 = 2 + /\ Def16!(2,3,4)!2!1 = 3 + /\ Def16!2!1!<< = 2 + +Def17 == \E x , y, z : /\ ((x = 1)) + /\ y = 2 + /\ (z=3) +ASSUME /\ Def17!(2,3,4)!1!1 = 2 + /\ Def17!(2,3,4)!2!1 = 3 + +Def18 == CHOOSE x : (x=1) +ASSUME Def18!(2)!<< = 2 + +Def19 == CHOOSE x \in {42}: (x=1) +ASSUME /\ Def19!(2)!<< = 2 + /\ Def19!1!1 = 42 + +Def20 == [12]_(23) +ASSUME /\ Def20!1 = 12 + /\ Def20!>> = 23 + +Def21 == <<12>>_(23) +ASSUME /\ Def21!1 = 12 + /\ Def21!>> = 23 + +Def22 == WF_(12)(23) +ASSUME /\ Def22!1 = 12 + /\ Def22!>> = 23 + +Def23 == \EE x , y, z : /\ ((x = 1)) + /\ y = 2 + /\ (z=3) +ASSUME /\ Def23!(2,3,4)!1!1 = 2 + /\ Def23!(2,3,4)!2!1 = 3 + + +============================================================================= + +last modified on Tue 9 March 2010 at 11:49:54 PST by lamport \ No newline at end of file diff --git a/tlatools/test-model/suite/test206a.cfg b/tlatools/test-model/suite/test206a.cfg new file mode 100644 index 0000000000000000000000000000000000000000..8f848aa991a48bf066529f284b3990008f6100d4 --- /dev/null +++ b/tlatools/test-model/suite/test206a.cfg @@ -0,0 +1 @@ +CONSTANT C = 4 \ No newline at end of file diff --git a/tlatools/test-model/suite/test206a.tla b/tlatools/test-model/suite/test206a.tla new file mode 100644 index 0000000000000000000000000000000000000000..11bb0d2d27e882f5f69ffa3d27dda492bcded99b --- /dev/null +++ b/tlatools/test-model/suite/test206a.tla @@ -0,0 +1,12 @@ +----------------------------- MODULE test206a ----------------------------- + +CONSTANT A5(_, _, _, _, _) + +Foo(a1, a2, a3, a4, a5) == A5(a1, a2, a3, a4, a5) +Bar(a) == <<1, a>> +Bar2(a) == <<1, lab::a>> +Bar3 == <<1, 2>> +Bar4(a) == {x \in {1} : lab(x) :: <<x, a>>} +Bar5(a) == {x \in {1} : lab(x) :: LET b ++ c == <<a, b, c, x>> + IN 42 } +============================================================================= \ No newline at end of file diff --git a/tlatools/test-model/suite/test207.cfg b/tlatools/test-model/suite/test207.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d3f5a12faa99758192ecc4ed3fc22c9249232e86 --- /dev/null +++ b/tlatools/test-model/suite/test207.cfg @@ -0,0 +1 @@ + diff --git a/tlatools/test-model/suite/test207.tla b/tlatools/test-model/suite/test207.tla new file mode 100644 index 0000000000000000000000000000000000000000..c1723057ef5a9ac210ab6af7095e274e8882e19b --- /dev/null +++ b/tlatools/test-model/suite/test207.tla @@ -0,0 +1,38 @@ +\* SANY2 test. +\* Test of scope of NEW declarations. They should be restricted +\* to the statement's proof, except for SUFFICES which should be +\* visible to the rest of the current proof. + +-------------------- MODULE test207 ---------------- +EXTENDS TLC +a + b == <<a, b>> +THEOREM Thm == ASSUME NEW J PROVE lab :: TRUE +<1>1 ASSUME NEW I + PROVE Thm!lab + <2>1 I = J + <2>2 QED +<1> DEFINE I == 1 +<1>2 ASSUME NEW K + PROVE TRUE +<1>3 SUFFICES ASSUME NEW K + PROVE TRUE + <2>1. \A K : TRUE + <2>2. SUFFICES ASSUME NEW L + PROVE TRUE + <2>3. QED +<1>3a. DEFINE L == 0 +<1>4. K = 0 \* 12 June 14 Changed from <*>4 which is now illegal. + <2>1. DEFINE F == 7 + <2>4. TRUE \* 12 June 14 Changed from <*>4 which is now illegal. + <2>2. QED + BY <2>4 +<1>4a. DEFINE F == 42 +<1>5 QED + BY <1>4 +J == 0 +I == 0 +F == 1 + +ASSUME PrintT("SANY2 Test") + +============================= diff --git a/tlatools/test-model/suite/test208.cfg b/tlatools/test-model/suite/test208.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d3f5a12faa99758192ecc4ed3fc22c9249232e86 --- /dev/null +++ b/tlatools/test-model/suite/test208.cfg @@ -0,0 +1 @@ + diff --git a/tlatools/test-model/suite/test208.tla b/tlatools/test-model/suite/test208.tla new file mode 100644 index 0000000000000000000000000000000000000000..08cd7dc26b470290018a33146f8654a34fdd6132 --- /dev/null +++ b/tlatools/test-model/suite/test208.tla @@ -0,0 +1,203 @@ +\* SANY2 test. +\* Test to make sure that all keywords are useable as record fields. + +-------------------- MODULE test208 ---------------- +bar == 17 + +LEMMA TRUE +PROPOSITION TRUE +ASSUMPTION TRUE + +Foo == +/\ bar.NEW \cup [bar EXCEPT !.NEW = 0] +/\ bar.SF_ \cup [bar EXCEPT !.SF_ = 0] +/\ bar.WF_ \cup [bar EXCEPT !.WF_ = 0] +/\ bar.THEN \cup [bar EXCEPT !.THEN = 0] +/\ bar.BY \cup [bar EXCEPT !.BY = 0] \* 68 XXXXXX +/\ bar.HAVE \cup [bar EXCEPT !.HAVE = 0] +/\ bar.QED \cup [bar EXCEPT !.QED = 0] +/\ bar.TAKE \cup [bar EXCEPT !.TAKE = 0] + +/\ bar.DEF \cup [bar EXCEPT !.DEF = 0] +/\ bar.HIDE \cup [bar EXCEPT !.HIDE = 0] +/\ bar.RECURSIVE \cup [bar EXCEPT !.RECURSIVE = 0] \* XXXXX 82 +/\ bar.USE \cup [bar EXCEPT !.USE = 0] + +/\ bar.DEFINE \cup [bar EXCEPT !.DEFINE = 0] +/\ bar.PROOF \cup [bar EXCEPT !.PROOF = 0] +/\ bar.WITNESS \cup [bar EXCEPT !.WITNESS = 0] +/\ bar.PICK \cup [bar EXCEPT !.PICK = 0] + +/\ bar.DEFS \cup [bar EXCEPT !.DEFS = 0] +/\ bar.PROVE \cup [bar EXCEPT !.PROVE = 0] +/\ bar.SUFFICES \cup [bar EXCEPT !.SUFFICES = 0] +/\ bar.NEW \cup [bar EXCEPT !.NEW = 0] + +/\ bar.LAMBDA \cup [bar EXCEPT !.LAMBDA = 0] +/\ bar.LEMMA \cup [bar EXCEPT !.LEMMA = 0] +/\ bar.PROPOSITION \cup [bar EXCEPT !.PROPOSITION = 0] +/\ bar.STATE \cup [bar EXCEPT !.STATE = 0] +/\ bar.ACTION \cup [bar EXCEPT !.ACTION = 0] +/\ bar.TEMPORAL \cup [bar EXCEPT !.TEMPORAL = 0] +/\ bar.VARIABLE \cup [bar EXCEPT !.VARIABLE = 0] + +/\ bar.OBVIOUS \cup [bar EXCEPT !.OBVIOUS = 0] +/\ bar.OMITTED \cup [bar EXCEPT !.OMITTED = 0] + +/\ bar.ASSUME \cup [bar EXCEPT !.ASSUME = 0] +/\ bar.ELSE \cup [bar EXCEPT !.ELSE = 0] +/\ bar.LOCAL \cup [bar EXCEPT !.LOCAL = 0] +/\ bar.UNION \cup [bar EXCEPT !.UNION = 0] + +/\ bar.ASSUMPTION \cup [bar EXCEPT !.ASSUMPTION = 0] +/\ bar.ENABLED \cup [bar EXCEPT !.ENABLED = 0] +/\ bar.MODULE \cup [bar EXCEPT !.MODULE = 0] +/\ bar.VARIABLE \cup [bar EXCEPT !.VARIABLE = 0] + +/\ bar.AXIOM \cup [bar EXCEPT !.AXIOM = 0] +/\ bar.EXCEPT \cup [bar EXCEPT !.EXCEPT = 0] +/\ bar.OTHER \cup [bar EXCEPT !.OTHER = 0] +/\ bar.VARIABLES \cup [bar EXCEPT !.VARIABLES = 0] + +/\ bar.CASE \cup [bar EXCEPT !.CASE = 0] +/\ bar.EXTENDS \cup [bar EXCEPT !.EXTENDS = 0] +/\ bar.SF_ \cup [bar EXCEPT !.SF_ = 0] +/\ bar.WF_ \cup [bar EXCEPT !.WF_ = 0] + +/\ bar.CHOOSE \cup [bar EXCEPT !.CHOOSE = 0] +/\ bar.IF \cup [bar EXCEPT !.IF = 0] \* XXXXX +/\ bar.SUBSET \cup [bar EXCEPT !.SUBSET = 0] +/\ bar.WITH \cup [bar EXCEPT !.WITH = 0] + +/\ bar.CONSTANT \cup [bar EXCEPT !.CONSTANT = 0] +/\ bar.IN \cup [bar EXCEPT !.IN = 0] +/\ bar.THEN \cup [bar EXCEPT !.THEN = 0] \* XXXXX + +/\ bar.CONSTANTS \cup [bar EXCEPT !.CONSTANTS = 0] +/\ bar.INSTANCE \cup [bar EXCEPT !.INSTANCE = 0] +/\ bar.THEOREM \cup [bar EXCEPT !.THEOREM = 0] \* XXXXX + +/\ bar.DOMAIN \cup [bar EXCEPT !.DOMAIN = 0] +/\ bar.LET \cup [bar EXCEPT !.LET = 0] +/\ bar.UNCHANGED \cup [bar EXCEPT !.UNCHANGED = 0] +================================ + + + +THEOREM Bar == ASSUME NEW y, ASSUME TRUE PROVE FALSE + PROVE TRUE + + +THEOREM TRUE + <1>1. TAKE x \in << a:: {}, {}>> + <1>2. <1>1!a + <1>3. <1>1!1 + <1> QED + + +================================================== +a+b == <<a, b>> +THEOREM TRUE +<1>2 TRUE + <33>1 HAVE ~ TRUE + <33>2 TAKE Id, Id1 + <33>3 TAKE Id4 \in {1}, <<Id2, Id3>> \in {2} + <33>123 FooBar == <<Id, Id1, Id4, Id2, Id3>> + <33>4 WITNESS {1} + <33>5 WITNESS {1} \in {2}, {3} + <33>-... PICK x : ~ FALSE + <+>*. PICK y \in {1} : ~ FALSE + <*>* QED + <33>7 PICK y \in {1} : <33>5!1!1 + <33>3!1 + PROOF <55>1... TRUE + <*>2.... USE <33>5, <33>7!1!1, <33>7!(42)!<< DEF + + <55>2 QED + <33>7a Foo == << <33>7!(1)!<< , <33>7!>> >> + <33>8 PICK z \in {1}, <<y1, z1>> \in {2} : ~ FALSE + <33>9 PICK w, u : <<1, 2, 3>> + <34>* DEFINE A == <<x, y, z, y1, z1, w, u>> + <34>*. B == A!1 + <34> QED + <33>44 DEFINE A == <<x, y, z, y1, z1, w, u>> + <33>*. B == <33>9!(1,2)!3 + <33>. BBC(Op(_,_)) == Op(1,2) + DD == BBC(<33>9!@) + <33>22 ASSUME TRUE PROVE FALSE + <33> BBB == \A xxxx \in {} : TRUE + <33>14. INSTANCE Test1 + <*> AA == INSTANCE Test1 + <33> B3 == AA!Foo3!Def2 + <*>a ASSUME FALSE PROVE TRUE + <33>b CASE TRUE + <33>c SUFFICES TRUE + <33>. SUFFICES ASSUME FALSE PROVE TRUE + <33>2a. QED +<1>14 HAVE <<1, 2, 3>> +<1>14a havedef == <1>14!1!3 +<*> TAKE Id7 \in {1} +<*> WITNESS {1} \in {2} +<*> PICK x2 \in {1}, y2 \in {2} : ~ FALSE + <+> PICK x3, y3 : ~ FALSE + <*>*. DEFINE A2 == 1 + <*>2 B2 == 17 + <*> ASSUME FALSE PROVE TRUE + <*> CASE TRUE + <*> TRUE + <*> SUFFICES ASSUME FALSE PROVE TRUE + <2> QED +<1>... DEFINE A == 1 +<1> B == 17 +<1> INSTANCE Test1 +<1> AA == INSTANCE Test2 WITH B <- 1 +<1>3. QED + +=============================== + +\* Foo == \A x , y, z : TRUE +\* Bar == \A x \in {}, y, z \in {}, <<u, v>> \in {} : TRUE +\* Inst(a) == INSTANCE Test1 +\* Foo == Inst(7)!Bar1 +THEOREM Thm2 == TRUE + <1>2 QED + PROOF USE <1>2 + QED +==================== + PROOF +\* DEFINE Def1 == TRUE + USE Thm2!: \* DEF Thm2 , Inst!Bar2 +\* Def2 == TRUE + QED +\* PROOF USE Def1 DEFS Def2 +\* QED +================================= +THEOREM Thm3 == FALSE + PROOF DEFINE A == B + PROVE /\ TRUE + /\ 1=1 + BY Thm2 + QED +========================================================== +THEOREM 1 + PROOF QED + PROOF OBVIOUS +================================================= +============================================================================= + +BY [.] +USE DEF FALSE +HIDE +<1>abc FALSE + BY MODULE M DEF MODULE M, 2 [.] +A == B +DEFINE F == INSTANCE M +A[x \in S] == B +INSTANCE M +<1>2. QED +(******** + PROOF ASSUME TRUE PROVE FALSE + <1>1. TRUE + <1>2. QED + HAVE TRUE + QED +********) +============================================================================= diff --git a/tlatools/test-model/suite/test209.cfg b/tlatools/test-model/suite/test209.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d3f5a12faa99758192ecc4ed3fc22c9249232e86 --- /dev/null +++ b/tlatools/test-model/suite/test209.cfg @@ -0,0 +1 @@ + diff --git a/tlatools/test-model/suite/test209.tla b/tlatools/test-model/suite/test209.tla new file mode 100644 index 0000000000000000000000000000000000000000..28e824c8dbe30afb9aa1c43f4094304a6400bd29 --- /dev/null +++ b/tlatools/test-model/suite/test209.tla @@ -0,0 +1,293 @@ +\* Test of positional subexpression naming. +-------------------- MODULE test209 ---------------- +EXTENDS Naturals, Sequences + +xx == <<11, <<22,33>>, 33>> +F(a) == /\ TRUE + /\ TRUE + /\ Len(xx[a]) > 0 + /\ TRUE + +ASSUME F(2)!3 = (Len(xx[2]) > 0) +ASSUME F(2)!3!1 = Len(xx[2]) +ASSUME F(2)!3!1!1 = xx[2] +ASSUME F(2)!3!1!1!2 = 2 +ASSUME F(2)!3!1!1!1 = xx +ASSUME F(2)!3!<< = Len(xx[2]) +ASSUME F(2)!3!<<!<< = xx[2] +ASSUME F(2)!3!<<!<<!>> = 2 +ASSUME F(2)!3!<<!<<!<< = xx + +G == [xx EXCEPT ![1] = 42, ![2] = 55] +H == xx.foo +I == [fld1 |-> 1, fld2 |->2, fld3 |-> 3] +J == [fld1 : 1, fld2 :2, fld3 : 3] + +ASSUME G!1 = xx +\* Selection of EXCEPT fields disabled because of "@" problem. +\* ASSUME G!2 = 42 +\* ASSUME G!3 = 55 +ASSUME H!1 = xx +ASSUME H!2 = "foo" +\* ASSUME I!3 = "fld3" +ASSUME I!3 = 3 + +\* ASSUME J!3 = "fld3" +ASSUME J!3 = 3 + +K == IF 41 THEN 42 ELSE 43 +ASSUME K!1 = 41 +ASSUME K!2 = 42 +ASSUME K!3 = 43 + +L == CASE 1 -> 11 [] + 2 -> 22 [] + OTHER -> 33 + +ASSUME L!1!1 = 1 +ASSUME L!1!2 = 11 +ASSUME L!2!1 = 2 +ASSUME L!2!2 = 22 +ASSUME L!3!2 = 33 + +M == LET Z == 23 IN Z +Z == 44 +ASSUME M!1 = 23 + +NN == 55 +N == [44]_NN +O == <<44>>_NN +P == WF_NN(44) +Q == SF_NN(44) + +ASSUME N!1 = 44 +ASSUME N!2 = 55 +ASSUME O!1 = 44 +ASSUME O!2 = 55 +ASSUME P!1 = 55 +ASSUME P!2 = 44 +ASSUME Q!1 = 55 +ASSUME Q!2 = 44 + +R == \E x \in {1}, y \in {2} : x + y > 2 +ASSUME R!1 = {1} +ASSUME R!2 = {2} +ASSUME R!(1,2)!<< = 3 + +S == [x, y \in {1, 2}, z \in {3} |-> x+y+z] +ASSUME S!1 = {1, 2} +ASSUME S!2 = {3} +ASSUME S!(2, 3, 4) = 2+3+4 + +T(Op(_)) == Op(42) +U == /\ LET Op(x) == x+1 + IN 44 + /\ TRUE +ASSUME T(U!1!Op) = 43 +ASSUME U!1!Op(42) = 43 +ASSUME U!1!Op(42)!: = 43 +V == \A x \in {} : 2*x +ASSUME T(V!@) = 84 +ASSUME T(LAMBDA x : 2*x) = 84 + +============================================================================= + +CONSTANT bar + +LEMMA TRUE +PROPOSITION TRUE +ASSUMPTION TRUE + +Foo == +/\ bar.NEW \cup [bar EXCEPT !.NEW = 0] +/\ bar.SF_ \cup [bar EXCEPT !.SF_ = 0] +/\ bar.WF_ \cup [bar EXCEPT !.WF_ = 0] +/\ bar.THEN \cup [bar EXCEPT !.THEN = 0] +/\ bar.BY \cup [bar EXCEPT !.BY = 0] \* 68 XXXXXX +/\ bar.HAVE \cup [bar EXCEPT !.HAVE = 0] +/\ bar.QED \cup [bar EXCEPT !.QED = 0] +/\ bar.TAKE \cup [bar EXCEPT !.TAKE = 0] + +/\ bar.DEF \cup [bar EXCEPT !.DEF = 0] +/\ bar.HIDE \cup [bar EXCEPT !.HIDE = 0] +/\ bar.RECURSIVE \cup [bar EXCEPT !.RECURSIVE = 0] \* XXXXX 82 +/\ bar.USE \cup [bar EXCEPT !.USE = 0] + +/\ bar.DEFINE \cup [bar EXCEPT !.DEFINE = 0] +/\ bar.PROOF \cup [bar EXCEPT !.PROOF = 0] +/\ bar.WITNESS \cup [bar EXCEPT !.WITNESS = 0] +/\ bar.PICK \cup [bar EXCEPT !.PICK = 0] + +/\ bar.DEFS \cup [bar EXCEPT !.DEFS = 0] +/\ bar.PROVE \cup [bar EXCEPT !.PROVE = 0] +/\ bar.SUFFICES \cup [bar EXCEPT !.SUFFICES = 0] +/\ bar.NEW \cup [bar EXCEPT !.NEW = 0] + +/\ bar.LAMBDA \cup [bar EXCEPT !.LAMBDA = 0] +/\ bar.LEMMA \cup [bar EXCEPT !.LEMMA = 0] +/\ bar.PROPOSITION \cup [bar EXCEPT !.PROPOSITION = 0] +/\ bar.STATE \cup [bar EXCEPT !.STATE = 0] +/\ bar.ACTION \cup [bar EXCEPT !.ACTION = 0] +/\ bar.TEMPORAL \cup [bar EXCEPT !.TEMPORAL = 0] +/\ bar.VARIABLE \cup [bar EXCEPT !.VARIABLE = 0] + +/\ bar.OBVIOUS \cup [bar EXCEPT !.OBVIOUS = 0] +/\ bar.OMITTED \cup [bar EXCEPT !.OMITTED = 0] + +/\ bar.ASSUME \cup [bar EXCEPT !.ASSUME = 0] +/\ bar.ELSE \cup [bar EXCEPT !.ELSE = 0] +/\ bar.LOCAL \cup [bar EXCEPT !.LOCAL = 0] +/\ bar.UNION \cup [bar EXCEPT !.UNION = 0] + +/\ bar.ASSUMPTION \cup [bar EXCEPT !.ASSUMPTION = 0] +/\ bar.ENABLED \cup [bar EXCEPT !.ENABLED = 0] +/\ bar.MODULE \cup [bar EXCEPT !.MODULE = 0] +/\ bar.VARIABLE \cup [bar EXCEPT !.VARIABLE = 0] + +/\ bar.AXIOM \cup [bar EXCEPT !.AXIOM = 0] +/\ bar.EXCEPT \cup [bar EXCEPT !.EXCEPT = 0] +/\ bar.OTHER \cup [bar EXCEPT !.OTHER = 0] +/\ bar.VARIABLES \cup [bar EXCEPT !.VARIABLES = 0] + +/\ bar.CASE \cup [bar EXCEPT !.CASE = 0] +/\ bar.EXTENDS \cup [bar EXCEPT !.EXTENDS = 0] +/\ bar.SF_ \cup [bar EXCEPT !.SF_ = 0] +/\ bar.WF_ \cup [bar EXCEPT !.WF_ = 0] + +/\ bar.CHOOSE \cup [bar EXCEPT !.CHOOSE = 0] +/\ bar.IF \cup [bar EXCEPT !.IF = 0] \* XXXXX +/\ bar.SUBSET \cup [bar EXCEPT !.SUBSET = 0] +/\ bar.WITH \cup [bar EXCEPT !.WITH = 0] + +/\ bar.CONSTANT \cup [bar EXCEPT !.CONSTANT = 0] +/\ bar.IN \cup [bar EXCEPT !.IN = 0] +/\ bar.THEN \cup [bar EXCEPT !.THEN = 0] \* XXXXX + +/\ bar.CONSTANTS \cup [bar EXCEPT !.CONSTANTS = 0] +/\ bar.INSTANCE \cup [bar EXCEPT !.INSTANCE = 0] +/\ bar.THEOREM \cup [bar EXCEPT !.THEOREM = 0] \* XXXXX + +/\ bar.DOMAIN \cup [bar EXCEPT !.DOMAIN = 0] +/\ bar.LET \cup [bar EXCEPT !.LET = 0] +/\ bar.UNCHANGED \cup [bar EXCEPT !.UNCHANGED = 0] +================================ + + + +THEOREM Bar == ASSUME NEW y, ASSUME TRUE PROVE FALSE + PROVE TRUE + + +THEOREM TRUE + <1>1. TAKE x \in << a:: {}, {}>> + <1>2. <1>1!a + <1>3. <1>1!1 + <1> QED + + +================================================== +a+b == <<a, b>> +THEOREM TRUE +<1>2 TRUE + <33>1 HAVE ~ TRUE + <33>2 TAKE Id, Id1 + <33>3 TAKE Id4 \in {1}, <<Id2, Id3>> \in {2} + <33>123 FooBar == <<Id, Id1, Id4, Id2, Id3>> + <33>4 WITNESS {1} + <33>5 WITNESS {1} \in {2}, {3} + <33>-... PICK x : ~ FALSE + <+>*. PICK y \in {1} : ~ FALSE + <*>* QED + <33>7 PICK y \in {1} : <33>5!1!1 + <33>3!1 + PROOF <55>1... TRUE + <*>2.... USE <33>5, <33>7!1!1, <33>7!(42)!<< DEF + + <55>2 QED + <33>7a Foo == << <33>7!(1)!<< , <33>7!>> >> + <33>8 PICK z \in {1}, <<y1, z1>> \in {2} : ~ FALSE + <33>9 PICK w, u : <<1, 2, 3>> + <34>* DEFINE A == <<x, y, z, y1, z1, w, u>> + <34>*. B == A!1 + <34> QED + <33>44 DEFINE A == <<x, y, z, y1, z1, w, u>> + <33>*. B == <33>9!(1,2)!3 + <33>. BBC(Op(_,_)) == Op(1,2) + DD == BBC(<33>9!@) + <33>22 ASSUME TRUE PROVE FALSE + <33> BBB == \A xxxx \in {} : TRUE + <33>14. INSTANCE Test1 + <*> AA == INSTANCE Test1 + <33> B3 == AA!Foo3!Def2 + <*>a ASSUME FALSE PROVE TRUE + <33>b CASE TRUE + <33>c SUFFICES TRUE + <33>. SUFFICES ASSUME FALSE PROVE TRUE + <33>2a. QED +<1>14 HAVE <<1, 2, 3>> +<1>14a havedef == <1>14!1!3 +<*> TAKE Id7 \in {1} +<*> WITNESS {1} \in {2} +<*> PICK x2 \in {1}, y2 \in {2} : ~ FALSE + <+> PICK x3, y3 : ~ FALSE + <*>*. DEFINE A2 == 1 + <*>2 B2 == 17 + <*> ASSUME FALSE PROVE TRUE + <*> CASE TRUE + <*> TRUE + <*> SUFFICES ASSUME FALSE PROVE TRUE + <2> QED +<1>... DEFINE A == 1 +<1> B == 17 +<1> INSTANCE Test1 +<1> AA == INSTANCE Test2 WITH B <- 1 +<1>3. QED + +=============================== + +\* Foo == \A x , y, z : TRUE +\* Bar == \A x \in {}, y, z \in {}, <<u, v>> \in {} : TRUE +\* Inst(a) == INSTANCE Test1 +\* Foo == Inst(7)!Bar1 +THEOREM Thm2 == TRUE + <1>2 QED + PROOF USE <1>2 + QED +==================== + PROOF +\* DEFINE Def1 == TRUE + USE Thm2!: \* DEF Thm2 , Inst!Bar2 +\* Def2 == TRUE + QED +\* PROOF USE Def1 DEFS Def2 +\* QED +================================= +THEOREM Thm3 == FALSE + PROOF DEFINE A == B + PROVE /\ TRUE + /\ 1=1 + BY Thm2 + QED +========================================================== +THEOREM 1 + PROOF QED + PROOF OBVIOUS +================================================= +============================================================================= + +BY [.] +USE DEF FALSE +HIDE +<1>abc FALSE + BY MODULE M DEF MODULE M, 2 [.] +A == B +DEFINE F == INSTANCE M +A[x \in S] == B +INSTANCE M +<1>2. QED +(******** + PROOF ASSUME TRUE PROVE FALSE + <1>1. TRUE + <1>2. QED + HAVE TRUE + QED +********) +============================================================================= diff --git a/tlatools/test-model/suite/test21.cfg b/tlatools/test-model/suite/test21.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d191341c2404a4660de5819024419df4563278cd --- /dev/null +++ b/tlatools/test-model/suite/test21.cfg @@ -0,0 +1,9 @@ + INIT + Init + + NEXT + Next + + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test21.tla b/tlatools/test-model/suite/test21.tla new file mode 100644 index 0000000000000000000000000000000000000000..fbf1187b3b272a306d395f7aa65133829d47488d --- /dev/null +++ b/tlatools/test-model/suite/test21.tla @@ -0,0 +1,83 @@ +--------------- MODULE test21 ------------- + +(* Test of priming and variable confusion *) + +EXTENDS Naturals, Sequences, TLC + +Bar(z) == z' = 2 +Foo(y) == y = 2 +FooBar(y) == y = 1 + +VARIABLE x, y + +LetTest == LET s == x=1 + IN s + + +Op(a) == x+a + +Init == /\ x = 1 + /\ y = 3 +Next == + + \/ /\ x = 1 + /\ x'=x+1 + /\ y' = y + /\ IF Bar(x) + THEN Print("Test 1 OK", TRUE) + ELSE Assert(FALSE, "Test 1 Failed") + + \/ /\ x = 1 + /\ x'=x+1 + /\ y' = y + /\ IF Foo(x)' + THEN Print("Test 2 OK", TRUE) + ELSE Assert(FALSE, "Test 2 Failed") + + \/ /\ x = 1 + /\ x'=x+1 + /\ y' = y + /\ IF FooBar(x) + THEN Print("Test 3 OK", TRUE) + ELSE Assert(FALSE, "Test 3 Failed") + /\ IF LetTest' THEN Assert(FALSE, "Test 4 Failed") + ELSE Print("Test 4 OK", TRUE) + /\ LET a == x + IN IF a' = 2 THEN Print("Test 5 OK", TRUE) + ELSE Assert(FALSE, "Test 5 Failed") + + /\ IF FooBar(x)' THEN Assert(FALSE, "Test 6 Failed") + ELSE Print("Test 6 OK", TRUE) + + /\ IF FooBar(x') THEN Assert(FALSE, "Test 7 Failed") + ELSE Print("Test 7 OK", TRUE) + + \/ IF (x = 1) + THEN /\ x'=x+1 + /\ y'=y + /\ Print("Test 8 OK", TRUE) + ELSE /\ x'=x+1 + /\ y'=y + /\ Print("Test 12 OK", FALSE) + + \/ /\ x = 1 + /\ x'=x+1 + /\ y'=y + /\ IF Op(1)' = 3 + THEN Print("Test 9 OK", TRUE) + ELSE Assert(FALSE, "Test 9 Failed") + /\ IF LET LetOp(a) == x+a + IN LetOp(1)' = 3 + THEN Print("Test 10 OK", TRUE) + ELSE Assert(FALSE, "Test 10 Failed") + + /\ IF (LET LetOp(a) == x+a + IN LetOp(1) = 3 )' + THEN Print("Test 11 OK", TRUE) + ELSE Assert(FALSE, "Test 11 Failed") + + \/ UNCHANGED <<x,y>> + +Inv == TRUE + +========================================= diff --git a/tlatools/test-model/suite/test210.cfg b/tlatools/test-model/suite/test210.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d191341c2404a4660de5819024419df4563278cd --- /dev/null +++ b/tlatools/test-model/suite/test210.cfg @@ -0,0 +1,9 @@ + INIT + Init + + NEXT + Next + + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test210.tla b/tlatools/test-model/suite/test210.tla new file mode 100644 index 0000000000000000000000000000000000000000..f8f42a96480af1a5bee84755c474b6663d1c04a6 --- /dev/null +++ b/tlatools/test-model/suite/test210.tla @@ -0,0 +1,293 @@ +\* This module is meant to produce parsing errors when evaluating any +\* subexpression reference ref in an expression of the form ref <=> +\* ILLEGAL and any label labeling "ILLEGAL" + + +-------------------- MODULE test210 -------------- +ILLEGAL == FALSE +LEGAL == TRUE + +ASSUME assump == /\ lab :: LEGAL + /\ TRUE + +AssDef == /\ assump!lab <=> LEGAL + /\ assump!1 <=> LEGAL + +THEOREM foo == ASSUME NEW x \in labx :: LEGAL, + NEW y \in laby :: LEGAL, + labz :: LEGAL, + ASSUME TRUE PROVE labi :: LEGAL + PROVE labu :: LEGAL +<1>1. ASSUME LEGAL, + NEW q \in labx :: LEGAL, + NEW r \in laby :: LEGAL + PROVE /\ foo!3 <=> LEGAL + /\ foo!labz <=> LEGAL + /\ foo!5 <=> LEGAL + /\ foo!labu <=> LEGAL + /\ foo!labi <=> LEGAL + BY <1>1!labx <=> LEGAL, <1>1!laby <=> LEGAL, <1>1!4 <=> LEGAL, + foo!4!2 <=> LEGAL, foo!4!1 <=> LEGAL + +<1>1a. /\ <1>1!labx <=> LEGAL + /\ <1>1!laby <=> ILLEGAL + /\ <1>1!1 <=> LEGAL + /\ <1>1!4 <=> ILLEGAL + +<1>2. SUFFICES ASSUME NEW q \in labx :: LEGAL, + TRUE, + NEW r \in laby :: LEGAL, + ASSUME lab1 :: LEGAL, + NEW a \in lab2 :: LEGAL, + NEW b \in lab3 :: ILLEGAL + PROVE lab4 :: ILLEGAL + PROVE /\ foo!3 <=> LEGAL + /\ foo!labz <=> LEGAL + /\ foo!5 <=> LEGAL + /\ foo!labu <=> LEGAL + +<1>2a. /\ <1>2!laby <=> LEGAL + /\ <1>2!labx <=> LEGAL + /\ <1>2!lab1 <=> LEGAL + /\ <1>2!lab2 <=> LEGAL + /\ <1>2!1!5 <=> LEGAL + /\ <1>2!1!5!2 <=> LEGAL + /\ <1>2!2 <=> ILLEGAL + +<1>3. SUFFICES 1 = 2 + +<1>4. QED + +Bar == /\ foo!labx <=> LEGAL + /\ foo!laby <=> ILLEGAL + /\ foo!labi <=> ILLEGAL + /\ foo!labu <=> ILLEGAL + /\ foo!3 <=> ILLEGAL +================== + +CONSTANT x +THEOREM TRUE +<1>1. x = 1 +<1>4. QED +================ +<2>21 bar == 1 foobar == 2 +<2>31 foo + BY DEF <2>21 +(**** +<2>22 WITNESS TRUE +<2>32 <2>22 +<2>23 TAKE x \in {} +<2>33 <2>23 +<2>24 PICK y \in {} : TRUE +<2>34 <2>24 +<2>25 CASE TRUE +<2>35 <2>25 +*****) +<2>3 QED + <3>1 TRUE\* <2>3 + BY <2>31 + <3>2 QED +================= +VARIABLE y +Foo(x) == INSTANCE Test1 +LOCAL fcn[x \in {}] == x +USE MODULE Test, MODULE Test1 DEFS (* MODULE Test, *) MODULE Test1, Foo +Bar == Foo(1)!-(1, 2) +================================ + +THEOREM ASSUME ASSUME P PROVE + PROVE P +BY Foo \* DEFS Foo + +THEOREM foo7 == TRUE + <0>1. TRUE + <*>.... <0>1 + <007>1. TRUE + <07>2. QED + <000>3 QED + +================= +\* Foo == <1>1 +THEOREM foobar == TRUE +<*>1. TRUE +PROOF + <+>1. TRUE + <+> TRUE + <*>11. TRUE + <*>12 TRUE + <2>13. TRUE + <2>14 TRUE + <2>2a TRUE + <*>2 <2>2a + <*>3. TRUE + <*> QED + <*>2. QED +<0>4. TRUE +<0>1a <0>4 +<0>2. QED + +THEOREM foo == ASSUME CONSTANT a, + VARIABLE c, + STATE b + PROVE TRUE +PROOF +<+>1. TRUE + PROOF <+>a. TRUE + <1>3. TRUE + <*> Test == <1>a + + <1>4. QED + <+> <1>3 + <2> QED +<0>... QED + +AXIOM TRUE + +THEOREM ASSUME CONSTANT a, + CONSTANT b \in {} , + VARIABLE c, + STATE d, + ACTION e, + TEMPORAL f + PROVE e = e + +THEOREM ASSUME NEW a, + NEW CONSTANT b \in {} , + NEW VARIABLE c, + NEW STATE d, + NEW ACTION e, + NEW TEMPORAL f + PROVE TRUE + +OBVIOUS + +THEOREM TRUE +OMITTED + +THEOREM TRUE +PROOF OBVIOUS + +THEOREM TRUE +PROOF OMITTED + +a+b == <<a, b>> + +THEOREM TRUE +BY TRUE DEF + + +THEOREM TRUE +BY TRUE DEFS + + +THEOREM TRUE +PROOF BY TRUE DEFS + + + + +THEOREM TRUE +<1>ab.... TRUE + PROOF + <33>0 TRUE + BY <1>ab + <33>1 HAVE ~ (TRUE /\ <33>0) + <33>2 TAKE Id, Id1 + <33>3 TAKE Id4 \in {1}, <<Id2, Id3>> \in {2} + <33>123 FooBar == <<Id, Id1, Id4, Id2, Id3>> + <33>4 WITNESS {1} \cup <33>1!1!1!2 + <33>5 WITNESS {1} \in {2}, {3} + <33>-... PICK x : ~ FALSE + <+>*. PICK y \in {1} : ~ FALSE + <*>* QED + <33>7 PICK y \in {1} : <33>5!1!1 + <33>3!1 + PROOF <*>1... TRUE + <*>2.... USE <*>1, <33>5, <33>7!1!1, <33>7!(42)!<< DEF + + + <*>3 QED + <33>7a Foo == << <33>7!(1)!<< , <33>7!>> >> + <33>8 PICK z \in {1}, <<y1, z1>> \in {2} : ~ FALSE + <33>9 PICK w, u : <<1, 2, 3>> + <34>* DEFINE A == <<x, y, z, y1, z1>> + <34>*. B == A!1 + C == A + <34> QED + <33>44 DEFINE A == <<x, y, z, y1, z1, w, u>> + <33>*. B == <33>9!(1,2)!3 + <33>. BBC(Op(_,_)) == Op(1,2) + DD == BBC(<33>9!@) + <33>22 ASSUME TRUE PROVE FALSE + <33> BBB == \A xxxx \in {} : TRUE + <33>14. INSTANCE Test1 + <*> AA == INSTANCE Test1 + <*>a ASSUME FALSE PROVE TRUE + <33>b CASE TRUE /\ <33>22!1 + <33>c SUFFICES TRUE + <33>. SUFFICES ASSUME FALSE PROVE TRUE + <33>2a. QED +<1>14 HAVE <<1, 2, 3>> +<1>14a havedef == <1>14!1!3 +<*> TAKE Id7 \in {1} +<*> WITNESS {1} \in {2} +<*> PICK x2 \in {1}, y2 \in {2} : ~ FALSE + <+> PICK x3, y3 : ~ FALSE + <*>*. DEFINE A2 == 1 + <*>2 B2 == 17 + <*> ASSUME FALSE PROVE TRUE + <*> CASE TRUE + <*> TRUE + <*> SUFFICES ASSUME FALSE PROVE TRUE + <2> QED +<1>... DEFINE A == 1 +<1> B == 17 +<1> INSTANCE Test1 WITH x <- 27 +<1> AA == INSTANCE Test2 WITH B <- 1 +<1>3. QED + +=============================== + +\* Foo == \A x , y, z : TRUE +\* Bar == \A x \in {}, y, z \in {}, <<u, v>> \in {} : TRUE +\* Inst(a) == INSTANCE Test1 +\* Foo == Inst(7)!Bar1 +THEOREM Thm2 == TRUE + <1>2 QED + PROOF USE <1>2 + QED +==================== + PROOF +\* DEFINE Def1 == TRUE + USE Thm2!: \* DEF Thm2 , Inst!Bar2 +\* Def2 == TRUE + QED +\* PROOF USE Def1 DEFS Def2 +\* QED +================================= +THEOREM Thm3 == FALSE + PROOF DEFINE A == B + PROVE /\ TRUE + /\ 1=1 + BY Thm2 + QED +========================================================== +THEOREM 1 + PROOF QED + PROOF OBVIOUS +================================================= +============================================================================= + +BY [.] +USE DEF FALSE +HIDE +<1>abc FALSE + BY MODULE M DEF MODULE M, 2 [.] +A == B +DEFINE F == INSTANCE M +A[x \in S] == B +INSTANCE M +<1>2. QED +(******** + PROOF ASSUME TRUE PROVE FALSE + <1>1. TRUE + <1>2. QED + HAVE TRUE + QED +********) +============================================================================= diff --git a/tlatools/test-model/suite/test211.tla b/tlatools/test-model/suite/test211.tla new file mode 100644 index 0000000000000000000000000000000000000000..71b03691f981a6143369ee1f05785cde3f21093f --- /dev/null +++ b/tlatools/test-model/suite/test211.tla @@ -0,0 +1,1114 @@ +\* Test of moderately large proof. + +`. last modified on Wed 4 March 2009 at 17:55:12 PST by lamport + Major changes made 21 Sep 2007: + variable chosen renamed learned + action Choose renamed Learn + Major changes made 22 Sep 2007: + removed variable noccmd +.' + + +--------------------------------- MODULE test211 -------------------------------- +EXTENDS Integers, FiniteSets +----------------------------------------------------------------------------- +(***************************************************************************) +(* CONSTANTS *) +(* *) +(* For convenience, we take configuration numbers, instance numbers, and *) +(* ballot numbers all to be the set of naturals. However, to make the *) +(* meanings of our formulas easier to understand, we use different names *) +(* for these three equal sets. *) +(***************************************************************************) +CNum == Nat \* The set of configuration numbers. +INum == Nat \* The set of instance numbers. +BNum == Nat \* The set of ballot numbers. + +CONSTANT Acc \* The set of acceptors + +(***************************************************************************) +(* We define Config to be the set of configurations, where a configuration *) +(* is a record with a cnum field that is the configuration number field *) +(* and a quorums field that is a set of quorums, which is a set of *) +(* pairwise non-disjoint sets of acceptors. *) +(***************************************************************************) +Config == [cnum : CNum, + quorums : {C \in SUBSET SUBSET Acc : + \A P1, P2 \in C : P1 \cap P2 # {}}] + +CONSTANTS Cmd, \* The set of commands (choosable values). + + ConfigCmd(_), \* ConfigCmd(C) is the command that sets the + \* current configuration to C. + + InitConfig \* The initial configuration + +(***************************************************************************) +(* We assume that ConfigCmd(C) is a distinct command for every *) +(* configuration C, and that InitConfig is a configuration with cnum 0. *) +(***************************************************************************) +ASSUME ConstantAssumption == + /\ \A C \in Config : ConfigCmd(C) \in Cmd + /\ \A C, D \in Config : (C # D) => (ConfigCmd(C) # ConfigCmd(D)) + /\ InitConfig \in Config + /\ InitConfig.cnum = 0 + +(***************************************************************************) +(* The configuration of a configuration command. *) +(***************************************************************************) +ConfigOfCmd(c) == CHOOSE C \in Config : c = ConfigCmd(C) + + +(***************************************************************************) +(* CCmd is the set of reconfiguration commands. *) +(***************************************************************************) +CCmd == {ConfigCmd(C) : C \in Config} + +(***************************************************************************) +(* Vote is the set of votes, where a vote is a record with cnum *) +(* (configuration number) field and cmd (command) field. We define init *) +(* and `none' to be two different values a that are not votes. *) +(***************************************************************************) +Vote == [cnum : CNum, cmd : Cmd] +init == CHOOSE v : v \notin Vote +none == CHOOSE v : v \notin Vote \cup {init} +----------------------------------------------------------------------------- +(***************************************************************************) +(* VARIABLES *) +(* *) +(* The algorithm has two variables avote and `learned', where: *) +(* *) +(* - avote[a][i][b] is either the vote cast by acceptor a in instance i *) +(* for ballot b. It initially equals init from which it can be set to *) +(* a vote, to the value `none' indicating that `a' abstains in that *) +(* ballot. *) +(* *) +(* - `learned' is the set of pairs <<i, cmd>> indicating that command cmd *) +(* has been learned in instance i. *) +(***************************************************************************) +VARIABLE avote, learned + +(***************************************************************************) +(* BOUND IDENTIFIER CONVENTIONS *) +(* *) +(* We use the following conventions for the names used in quantifiers and *) +(* operator parameters: *) +(* *) +(* `a' : An acceptor *) +(* *) +(* i : An instance number. *) +(* *) +(* b : A ballot number *) +(* *) +(* C : A configuration *) +(* *) +(* c, cmd : A command *) +(* *) +(* n, cnum : A configuration number. *) +(* *) +(* Multiple identifiers of the same type are named in an obvious way--for *) +(* example b and bb, or c1 and c2. *) +(***************************************************************************) +----------------------------------------------------------------------------- +(***************************************************************************) +(* STATE PREDICATES *) +(* *) +(* The initial predicate asserts that avote[a][i][b] = init for all `a', *) +(* i, and b, and that `learned' contains the single element <<-1, c>> *) +(* where c is the command that sets the current configuration to *) +(* InitConfig. *) +(***************************************************************************) +Init == /\ avote = [a \in Acc |-> [i \in INum |-> [b \in BNum |-> init]]] + /\ learned = {<<-1, ConfigCmd(InitConfig)>>} + +(***************************************************************************) +(* The following state predicate is true iff `a' voted in instance i at *) +(* ballot b for command c with configuration number n. *) +(***************************************************************************) +Voted(a, i, b, n, c) == /\ avote[a][i][b] \in Vote + /\ avote[a][i][b] = [cnum |-> n, cmd |-> c] + +(***************************************************************************) +(* A type correctness assertion, which is an invariant of the algorithm. *) +(* It is trivial to check that this is true in the initial state and *) +(* preserved by every step of the algorithm. *) +(***************************************************************************) +TypeOK == + /\ (**********************************************************************) + (* avote is a function with the correct domain and range. *) + (**********************************************************************) + avote \in [Acc -> [INum -> [BNum -> Vote \cup {init, none}] ] ] + + /\ (**********************************************************************) + (* An acceptor votes only for a new configuration with a *) + (* configuration number 1 greater than that of the current *) + (* configuration. *) + (**********************************************************************) + \A a \in Acc, i \in INum, b \in BNum, n \in CNum, C \in Config : + Voted(a, i, b, n, ConfigCmd(C)) => (C.cnum = n+1) + + /\ (**********************************************************************) + (* `learned' is a set of elements of the proper type. *) + (**********************************************************************) + learned \subseteq (INum \cup {-1}) \X Cmd + + /\ (**********************************************************************) + (* There is exactly one element of the form <<-1, c>> \in learned, *) + (* where c is the command that sets the configuration to InitConfig. *) + (**********************************************************************) + \A c \in Cmd : (<<-1, c>> \in learned) <=> (c = ConfigCmd(InitConfig)) + + +(***************************************************************************) +(* The following state predicates are the usual ones for Paxos for a *) +(* particular instance i and a fixed configuration C. *) +(***************************************************************************) +ChosenInBal(i, b, C, cmd) == + (*************************************************************************) + (* True iff command cmd is chosen in ballot b. *) + (*************************************************************************) + \E Q \in C.quorums : + \A a \in Q : Voted(a, i, b, C.cnum, cmd) + +ChosenIn(i, C, cmd) == \E b \in BNum : ChosenInBal(i, b, C, cmd) + (*************************************************************************) + (* True iff command cmd is chosen. *) + (*************************************************************************) + +ChoosableAt(i, b, C, cmd) == + (*************************************************************************) + (* True iff command c has been chosen or could still be chosen in ballot *) + (* b. *) + (*************************************************************************) + \E Q \in C.quorums : + \A a \in Q : \/ Voted(a, i, b, C.cnum, cmd) + \/ avote[a][i][b] = init + +UnchoosableBefore(i, b, C, cmd) == + (*************************************************************************) + (* True iff it is not possible for command c ever to be chosen in any *) + (* ballot numbered less than b. *) + (*************************************************************************) + \A bb \in 0 .. (b-1): ~ ChoosableAt(i, bb, C, cmd) + +SafeAt(i, b, C, cmd) == + (*************************************************************************) + (* True iff it is safe for an acceptor to vote for command cmd in ballot *) + (* b (because no other command can be chosen with a smaller ballot *) + (* number). *) + (*************************************************************************) + \A c \in Cmd \ {cmd} : UnchoosableBefore(i, b, C, c) + + +(***************************************************************************) +(* The following state predicate asserts that it is safe to try to choose *) +(* a command in ballot b of instance i using configuration C. It assserts *) +(* that C was learned in some instance ii < i and that in every instance j *) +(* with ii < j < i, no reconfiguration command can possibly be chosen in a *) +(* ballot < b and no acceptor can vote for a reconfiguration command in *) +(* ballot b. *) +(***************************************************************************) +ConfigOKAt(i, b, C) == + \E ii \in -1 .. (i-1) : + /\ <<ii, ConfigCmd(C)>> \in learned + /\ \A j \in (ii+1)..(i-1), c \in CCmd : + /\ UnchoosableBefore(j, b, C, c) + /\ \A a \in Acc : ~Voted(a, j, b, C.cnum, c) + (***************************************************************) + (* Note: a ConfigOK formula is used as an enabling condition *) + (* in the action by which an acceptor votes. In practice, the *) + (* real enabling condition will be the stronger formula *) + (* *) + (* \A a \in Acc, n \in BNum : ~ Voted(a, j, b, n, c) *) + (* *) + (* However, my proof seems to requires the weaker formula. I *) + (* think the algorithm remains correct with the weaker *) + (* precondition. *) + (***************************************************************) +----------------------------------------------------------------------------- +(***************************************************************************) +(* ACTIONS *) +(* *) +(* The following is the action in which acceptor `a' votes in instance i *) +(* at ballot b for command cmd using configuration numbere cnum. The *) +(* first three conjuncts are enabling conditions. In an implementation, *) +(* acceptor `a' will perform this action only if it receives of a phase2a *) +(* message containing i, b, cnum, and cmd from the leader of ballot b. *) +(* It is up to the leader to ensure that the second and third conjuncts *) +(* will be satisfied when that message is received. After preforming the *) +(* action (meaning after the new value of avote[a][i][b] is written in *) +(* stable storage), acceptor `a' will send a phase2b message. The *) +(* purpose of those phase2b messages is to enable some process to learn *) +(* if command cmd has been chosen. *) +(***************************************************************************) +VoteFor(a, i, b, cnum, cmd) == + /\ (**********************************************************************) + (* `a' has not already voted or abstained in this ballot. *) + (**********************************************************************) + avote[a][i][b] = init + + /\ (**********************************************************************) + (* Any other acceptor that has voted in ballot b of instance i has *) + (* voted for cmd with configuration number cnum. *) + (**********************************************************************) + \A aa \in Acc \ {a} : + (avote[aa][i][b] \in Vote) => + (avote[aa][i][b] = [cnum |-> cnum, cmd |-> cmd]) + + /\ (**********************************************************************) + (* It is safe to try to choose a command with ballot b in instance i *) + (* for some configuration C with number cnum. Moreover, if cmd is a *) + (* reconfiguration command, then no configuration command can ever be *) + (* chosen with configuration C in any instance after i with a ballot *) + (* number < b. *) + (**********************************************************************) + \E C \in Config : + /\ C.cnum = cnum + /\ ConfigOKAt(i, b, C) + /\ SafeAt(i, b, C, cmd) + /\ \A newC \in Config : + (cmd = ConfigCmd(newC)) + => /\ newC.cnum = cnum + 1 + /\ \A ii \in INum, c \in Cmd : + (ii > i) => + /\ UnchoosableBefore(ii, b, C, c) + /\ \/ ChosenInBal(i, b, C, cmd) + \/ \A aa \in Acc : + avote[aa][ii][b] \notin Vote + (***************************************************************) + (* When the leader sends the Phase2a message for this vote, *) + (* the last disjunct will be true. However, it can send *) + (* Phase2a messages in instance ii once it knows that cmd is *) + (* chosen in ballot b. In that case, the preceding disjunct *) + (* will be true when the first Phase2a message arrives at `a'. *) + (***************************************************************) + + /\ (**********************************************************************) + (* Set avote[a][i][b] to a vote with configuration number cnum and *) + (* command cmd. *) + (**********************************************************************) + avote' = [avote EXCEPT ![a][i][b] = [cnum |-> cnum, cmd |-> cmd]] + + /\ (**********************************************************************) + (* Leave learned unchanged. *) + (**********************************************************************) + UNCHANGED learned + +(***************************************************************************) +(* The following action is one in which acceptor `a' abstains (votes *) +(* `none') for every pair <<i, b>> in the set S of instance number, ballot *) +(* number pairs in which it has not yet voted. This action is always *) +(* enabled. In an actual implementation, acceptor `a' performs this *) +(* action for the set S equal to the set of <<i, b>> with b < b0 and i any *) +(* instance number when it receives a phase1b message with ballot *) +(* number b0. It also performs the action for S the set of all <<i, b>> *) +(* with b < b0 when it receives a phase2a message for instance i with *) +(* ballot number b0 before it performs the Vote action. This action will *) +(* be a no-op (will perform a stuttering step) if `a' discards the phase1a *) +(* or phase2a message because it has already seen one with a ballow number *) +(* \geq b0. *) +(***************************************************************************) +Abstain(a, S) == + /\ avote' = [avote EXCEPT ![a] = + [i \in INum |-> [b \in BNum |-> IF /\ <<i, b>> \in S + /\ avote[a][i][b] = init + THEN none + ELSE avote[a][i][b] ] ] ] + /\ UNCHANGED learned + +(***************************************************************************) +(* The action by which a command cmd is learned in instance i at ballot b. *) +(* It occurs if cmd is chosen for that instance and ballot by a *) +(* configuration C for which it is safe to choose commands in that *) +(* instance and ballot. *) +(***************************************************************************) +Learn(i, b, cmd) == + /\ \E C \in Config : /\ ConfigOKAt(i, b, C) + /\ ChosenInBal(i, b, C, cmd) + /\ learned' = learned \cup {<<i, cmd>>} + /\ UNCHANGED avote + + +(***************************************************************************) +(* The next-state action is one that performs any of the Vote, Abstain, or *) +(* Learn steps described above. *) +(***************************************************************************) +Next == \/ \E a \in Acc: + \/ \E S \in SUBSET (INum \X BNum) : Abstain(a, S) + \/ \E i \in INum, b \in BNum, cnum \in CNum, cmd \in Cmd : + VoteFor(a, i, b, cnum, cmd) + \/ \E i \in INum, b \in BNum, cmd \in Cmd : Learn(i, b, cmd) +----------------------------------------------------------------------------- +(***************************************************************************) +(* The standard TLA+ formula that represents the complete algorithm, with *) +(* no liveness assumptions on when actions must be performed. *) +(***************************************************************************) +Spec == Init /\ [][Next]_<<avote, learned>> + +(***************************************************************************) +(* The fact that TypeOK is an invariant of the algorithm is expressed *) +(* formally by: *) +(***************************************************************************) +THEOREM Spec => []TypeOK + +(***************************************************************************) +(* The following is the invariant that expresses the desired safety *) +(* property, and the theorem asserting that it is an invariant. *) +(***************************************************************************) +SafetyInv == \A ch1, ch2 \in learned : (ch1[1] = ch2[1]) => (ch1 = ch2) +THEOREM Spec => []SafetyInv +----------------------------------------------------------------------------- + +(***************************************************************************) +(* We first prove some stability results. A predicate P is generally *) +(* called stable if it can't be made false by executing a step. When *) +(* formalized in an untyped system, this generally assumes that the *) +(* starting state is type-correct. *) +(***************************************************************************) +Stable(P) == TypeOK /\ P /\ Next => P' + +THEOREM Stability == + /\(*1*) \A i \in INum, c \in Cmd : Stable(<<i, c>> \in learned) + /\(*2*) \A a \in Acc, i \in INum, b \in BNum, n \in CNum, c \in Cmd: + /\(*2.1*) Stable( Voted(a, i, b, n, c) ) + /\(*2.2*) Stable( /\ ~Voted(a, i, b, n, c) + /\ avote[a][i][b] # init ) + /\(*3*) \A i \in INum, b \in BNum, c \in Cmd, C \in Config: + /\(*3.1*) Stable( ChosenInBal(i, b, C, c) ) + /\(*3.2*) Stable( ~ChoosableAt(i, b, C, c) ) + /\(*3.3*) Stable( UnchoosableBefore(i, b, C, c) ) + /\(*3.4*) Stable( SafeAt(i, b, C, c) ) + +(***************************************************************************) +(* Proof: 1 and 2 are obvious since no action removes an element from *) +(* `learned' and once an acceptor has voted or abstained in a ballot, it *) +(* cannot retract that decision. The proof of 3 uses 1 and 2 and the fact *) +(* that the conjunction or disjunction (and hence \A and \E) of stable *) +(* predicates are stable. The only part that takes a little work is 3.2, *) +(* which requires first rewriting ~ChoosableAt(i, b, C, c) as *) +(* *) +(* \A Q \in C.quorums : *) +(* \E a \in Q : ~Voted(a, i, b, C.cnum, c) /\ avote[a][i][b] # init *) +(* *) +(* and applying 2.1. *) +(***************************************************************************) + + +(***************************************************************************) +(* We define Max(S) to be the maximum of the set S of numbers, if S is *) +(* non-empty. *) +(***************************************************************************) +Max(S) == CHOOSE k \in S : \A j \in S : k \geq j + + +(***************************************************************************) +(* Suppose that m+1 reconfiguration commands have been chosen and they *) +(* can be numbered C_0, ... , C_m such that each C_j with j>0 was chosen *) +(* in ballot b_j of instance i_j using configuration C_(j-1) with *) +(* i_1 < i_2 < ... < i_m. Let i_0 = -1 and b_0 = 0, and let c_j be the *) +(* command that chooses new configuration C_j. Then the following *) +(* definitions define *) +(* *) +(* maxcfg = m *) +(* *) +(* cfgl[j] = <<i_j, c_j>> *) +(* *) +(* cfgi[j] = i_j *) +(* *) +(* cfgc[j] = c_j *) +(* *) +(* cfgC[j] = C_j *) +(* *) +(* cfgb[j] = b_j *) +(***************************************************************************) +learnedRcfg == { ln \in learned : ln[2] \in CCmd } +maxcfg == Cardinality(learnedRcfg) - 1 +cfgl == [j \in 0..maxcfg |-> CHOOSE ln \in learnedRcfg : ln[2].cnum = j ] +cfgi == [j \in 0..maxcfg |-> cfgl[j][1]] +cfgc == [j \in 0..maxcfg |-> cfgl[j][2]] +cfgC == [j \in 0..maxcfg |-> ConfigOfCmd(cfgc[j])] + +RECURSIVE cfgb \* This statement warns that the definition of cfgb is recursive. +cfgb == [j \in 0..maxcfg |-> + IF j = 0 THEN 0 + ELSE CHOOSE b \in BNum : + /\ ChosenInBal(cfgi[j], b, cfgC[j-1], cfgc[j]) + /\ ConfigOKAt(cfgi[j], b, cfgC[j-1]) ] + (***************************************************) + (* The choice isn't necessarily unique, but it *) + (* doesn't matter which b is chosen. *) + (***************************************************) + + +(***************************************************************************) +(* The definitions of cfgl, etc. define what they are supposed to only if *) +(* the set of chosen reconfiguration commands satisfies a certain *) +(* property. The following predicate asserts that they really do satisfy *) +(* those properties. More precisely, it asserts enough so that those *) +(* properties follow from it and the definitions. *) +(***************************************************************************) +CfgOK == + /\ cfgl \in [0..maxcfg -> learnedRcfg] + /\ cfgb \in [0..maxcfg -> BNum] + /\ cfgi[0] = -1 + /\ cfgC[0] = InitConfig + /\ cfgb[0] = 0 + /\ \A j \in 0..maxcfg : /\ <<cfgi[j], cfgc[j]>> \in learnedRcfg + /\ cfgC[j].cnum = j + /\ \A j \in 1..maxcfg : /\ ChosenInBal(cfgi[j], cfgb[j], cfgC[j-1], cfgc[j]) + /\ ConfigOKAt(cfgi[j], cfgb[j], cfgC[j-1]) + /\ \A j \in 1..maxcfg, i \in INum : + (i > cfgi[j]) => \A c \in Cmd : UnchoosableBefore(i, cfgb[j], cfgC[j-1], c) + +(***************************************************************************) +(* The following theorem asserts that the desired properties of cfgi, etc. *) +(* not explicitly stated in CfgOK follow from it and the definitions. *) +(* (This theorem isn't used explicitly, but it's probably used *) +(* implicitly.) *) +(***************************************************************************) +THEOREM TypeOK /\ CfgOK => + /\ cfgi \in [0..maxcfg -> INum \cup {-1}] + /\ cfgC \in [0..maxcfg -> Config] + /\ cfgb \in [0..maxcfg -> BNum ] + /\ \A j\in 0..maxcfg : cfgc[j] = ConfigCmd(cfgC[j]) + /\ learnedRcfg = {cfgl[j] : j \in 0..maxcfg} + PROOF OBVIOUS + +(***************************************************************************) +(* The following stability property is used in the invariance proof. *) +(***************************************************************************) +THEOREM CfgStability == + CfgOK => + \A i \in INum, b \in BNum, C \in Config : + /\ \A a \in Acc, c \in Cmd : Stable( /\ Voted(a, i, b, C.cnum, c) + /\ ConfigOKAt(i, b, C) ) + /\ \A c \in Cmd : Stable( /\ ChosenInBal(i, b, C, c) + /\ ConfigOKAt(i, b, C) ) + +<1>1 HAVE CfgOK + (*************************************************************************) + (* This statement means that we're assuming CfgOK and proving the *) + (* formula that it's supposed to imply. *) + (*************************************************************************) + +<1>2. TAKE i \in INum, b \in BNum, C \in Config + (*************************************************************************) + (* This statement means that our current goal is a formula of the form *) + (* *) + (* \A i \in INum, b \in BNum, C \in Config : P *) + (* *) + (* and we're going to prove it by introducing these new constants i, b, *) + (* and C and proving P. *) + (*************************************************************************) + + +<1>3. ASSUME CONSTANT a \in Acc, + CONSTANT c \in Cmd + PROVE Stable( /\ Voted(a, i, b, C.cnum, c) + /\ ConfigOKAt(i, b, C) ) + + <2>1. SUFFICES ASSUME Next, Voted(a, i, b, C.cnum, c), + ConfigOKAt(i, b, C) + PROVE ConfigOKAt(i, b, C)' + + (***********************************************************************) + (* Note: This statement is read "it suffices to assume ... and *) + (* prove ..." *) + (* *) + (* Proof: By definition of stability and the fact that Voted(...) is *) + (* stable. *) + (***********************************************************************) + <2>2. PICK ii \in -1 .. (i-1) : + /\ <<ii, ConfigCmd(C)>> \in learned + /\ \A j \in (ii+1)..(i-1), c4 \in CCmd : + /\ UnchoosableBefore(j, b, C, c4) + /\ \A aa \in Acc : ~ Voted(aa, j, b, C.cnum, c4) + (***********************************************************************) + (* By the assumption ConfigOKAt(...) of <2>1 and the definition of *) + (* ConfigOKAt. *) + (***********************************************************************) + + <2>3. SUFFICES ASSUME CONSTANT j \in (ii+1)..(i-1), + CONSTANT c4 \in CCmd, + CONSTANT aa \in Acc, + ~ Voted(aa, j, b, C.cnum, c4), + Voted(aa, j, b, C.cnum, c4)' + PROVE FALSE + (***********************************************************************) + (* Proof: By <2>1 we're assuming ConfigOKAt(i, b, C) and have to prove *) + (* ConfigOKAt(i, b, C)'. ConfiguOKAt(...) is the disjunction and *) + (* conjunction of formulas all of which are stable except for *) + (* *) + (* \A a \in Acc: ~ Voted(a, j, b, C.cnum, c), *) + (* *) + (* So we just have to show that ~ Voted(aa, j, b, n, c4) is stable for *) + (* every aa, j, c4, and n. The proof is by contradiction. *) + (***********************************************************************) + + <2>4. VoteFor(aa, j, b, C.cnum, c4) + (**********************************************************************) + (* Proof: By the assumptions of <2>3, because this VoteFor action is *) + (* the only subaction of Next that can make *) + (* Voted(aa, j, b, C.cnum, c) become true. *) + (**********************************************************************) + + <2>5. PICK CC \in Config : + /\ CC.cnum = C.cnum + /\ ConfigOKAt(j, b, CC) + /\ ChosenInBal(j, b, CC, c4) + (**********************************************************************) + (* Proof: The required CC exists by <2>4 and the third conjunct of *) + (* VoteFor(aa, j, b, C.cnum, c4), using the assumption c4 \in CCmd of *) + (* <2>3 and the assumption Voted(a, i, b, C.cnum, c) of <2>1, which *) + (* implies avote[a][i][b] \in Vote, so the final disjunct at the end *) + (* of that conjunct is false. *) + (**********************************************************************) + + <2>6. CC = C + (**********************************************************************) + (* This follows from ConfigOKAt(j, b, CC) (from <2>5) and *) + (* ConfigOKAt(i, b, C) (from <2>1, which imply that ConfigCmd(CC) and *) + (* ConfigCmd(C) are both learned commands. It then follows from *) + (* CC.cnum = C.cnum (from <2>5) and CfigOK (<1>1), which implies that *) + (* chosen reconfiguration commands have unique numbers, that CC = C. *) + (**********************************************************************) + + <2>7. \A a3 \in Acc : ~Voted(a3, j, b, C.cnum, c4) + (***********************************************************************) + (* Proof: By the last conjunct of <2>2, since <2>3 implies *) + (* j \in (ii+1)..(i-1) and c4 \in CCmd *) + (***********************************************************************) + + <2>8. QED + (***********************************************************************) + (* Proof: ChosenInBal(j, b, CC, c4) (from <2>5) implies Voted(aa, b, *) + (* CC.cnum, c4) aa. By <2>6 (CC = C), this contradicts <2>7. *) + (***********************************************************************) + +<1>4. ASSUME CONSTANT c1 \in Cmd \* Bug in parser prevents reuse of symbol c + PROVE Stable( /\ ChosenInBal(i, b, C, c1) + /\ ConfigOKAt(i, b, C) ) + (*************************************************************************) + (* Proof: Since ChosenInBal(i, b, C, c1) implies *) + (* Voted(a, i, b, C.cnum, c1), for some `a', this follows easily from *) + (* <1>3 and the stability of ChosenInBal(i, b, C, c1). *) + (*************************************************************************) + BY <1>4!2 + 1 + +<1>5. QED + BY <1>1, <1>2, <1>3, <1>4 +----------------------------------------------------------------------------- + +(***************************************************************************) +(* We now define the inductive invariant that is the heart of the safety *) +(* proof. *) +(***************************************************************************) +Inv == + /\(*1*) TypeOK + + /\(*2*) \A a \in Acc, i \in INum, b \in BNum, n \in CNum, c \in Cmd : + Voted(a, i, b, n, c) => + \A aa \in Acc, nn \in CNum, cc \in Cmd : + Voted(aa, i, b, nn, cc) => (<<nn, cc>> = <<n, c>>) + + /\(*3*) \A i \in INum, c \in Cmd : + (<<i, c>> \in learned) => + \E b \in BNum, C \in Config : /\ ConfigOKAt(i, b, C) + /\ ChosenInBal(i, b, C, c) + + /\(*4*) CfgOK + + /\(*5*) \A a \in Acc, i \in INum, b \in BNum, n \in CNum, c \in Cmd : + Voted(a, i, b, n, c) => + \E C \in Config : + /\ C.cnum = n + /\ ConfigOKAt(i, b, C) + /\ SafeAt(i, b, C, c) + /\ c \in CCmd => /\ ConfigOfCmd(c).cnum = n+1 + /\ \A j \in INum, cc \in Cmd : + (j > i) => UnchoosableBefore(j, b, C, cc) + /\ ChoosableAt(i, b, C, c) => + C = cfgC[ Max({j \in 0..maxcfg : cfgi[j] < i}) ] + + +(***************************************************************************) +(* We first prove that this Inv is strong enough--that is, it implies the *) +(* predicate that we want to show is invariant. *) +(***************************************************************************) +THEOREM Inv => SafetyInv + +<1>1. SUFFICES ASSUME Inv, + CONSTANT i \in INum, + CONSTANT c1 \in Cmd, + CONSTANT c2 \in Cmd, + <<i, c1>> \in learned /\ <<i, c2>> \in learned + PROVE c1 = c2 + PROOF OBVIOUS + +<1>2. PICK C1, C2 \in Config, b1, b2 \in BNum : + /\ ConfigOKAt(i, b1, C1) + /\ ChosenInBal(i, b1, C1, c1) + /\ ConfigOKAt(i, b2, C2) + /\ ChosenInBal(i, b2, C2, c2) + (*************************************************************************) + (* Proof: By <<i, c1>> and <<i, c2>> in `learned' (from <1>1) and Inv!3 *) + (* (which is assumed by <1>1). *) + (*************************************************************************) + +<1>3. PICK a1, a2 \in Acc : /\ Voted(a1, i, b1, C1.cnum, c1) + /\ Voted(a2, i, b2, C2.cnum, c2) + (*************************************************************************) + (* Proof: By <1>2, since ChosenInBal implies at least one vote. *) + (*************************************************************************) + +<1>4. PICK CC1, CC2 \in Config : + /\ CC1.cnum = C1.cnum + /\ ConfigOKAt(i, b1, CC1) + /\ ChoosableAt(i, b1, CC1, c1) => + CC1 = cfgC[Max ({j \in 0 .. maxcfg : cfgi[j] < i})] + /\ CC2.cnum = C2.cnum + /\ ConfigOKAt(i, b2, CC2) + /\ ChoosableAt(i, b2, CC2, c2) => + CC2 = cfgC[Max ({j \in 0 .. maxcfg : cfgi[j] < i})] + (*************************************************************************) + (* Proof: By <1>3 and conjunction 5 of Inv. *) + (*************************************************************************) + +<1>5. (CC1 = C1) /\ (CC2 = C2) + (*************************************************************************) + (* Proof: ConfigOKAt(i, b1, C1) (1st conjunct of <1>2) and *) + (* ConfigOKAt(i, b1, CC1) (2nd conjunct of <1>4) imply that <<i1, C1>> *) + (* and <<ii1, CC1>> are in `learned' for some i1 and ii1, and C1.cnum = *) + (* CC1.cnum (<1>4!1). By CfgOK, this implies that C1 = CC1. Similarly, *) + (* C2 = CC2. *) + (*************************************************************************) + +<1>6. C1 = C2 + (*************************************************************************) + (* Proof: We have ChosenInBal(i, b1, C1, c1) (second conjunct of <1>2), *) + (* which by definition of ChosenInBal and ChoosableAt implies *) + (* ChoosableAt(i, b1, C1, c1). By <1>5 and the 3rd conjunct of <1>4, *) + (* this shows that *) + (* *) + (* C1 = cfgC[Max ({j \in 0 .. maxcfg : cfgi[j] < i})] *) + (* *) + (* A similar argument shows that C2 equals the same expression. *) + (*************************************************************************) + +<1>7. QED + (*************************************************************************) + (* Proof: <1>6 and <1>2 imply ChosenInBal(i, b1, C, c1) and *) + (* ChosenInBal(i, b2, C, c2) for C = C1 = C2. The same simple reasoning *) + (* used in the proof of ordinary Paxos (with a fixed configuration C) *) + (* shows that this implies c1 = c2. *) + (*************************************************************************) +----------------------------------------------------------------------------- + +(***************************************************************************) +(* Here is the heart of the proof--the proof that Inv is an inductive *) +(* invariant. *) +(***************************************************************************) +THEOREM InductiveInvariance == Inv /\ Next => Inv' +<1>1. HAVE Inv /\ Next + +<1>2. Inv!1' + (*************************************************************************) + (* It is straighforward to show that TypeOK /\ Next => TypeOK'. *) + (*************************************************************************) + +\* <1> USE TypeOK +\* On 4 Mar 2009 it became illegal to use arbitrary expressions as +\* facts in a USE or HIDE--making this USE illegal + +<1>2a. TypeOK + PROOF OBVIOUS +<1> USE <1>2a + (*************************************************************************) + (* This statement means that from now on, we are free to use TypeOK *) + (* without explicitly mentioning that we're using it. In an informal *) + (* proof like this one, there are undoubtedly lots of places where we *) + (* assume other things without mentioning them. If we've been careful, *) + (* then we haven't assumed anything that we're not allowed to. *) + (*************************************************************************) + +<1>3. Inv!2' + (*************************************************************************) + (* Proof: Next and Inv!2 true and Inv!2' false implies that *) + (* VoteFor(a1, i, b, n, c) /\ Voted(a2, i, b, nn, cc) is true for some *) + (* a2 # a1 and cc # c. The second conjunct of VoteFor(a1, i, b, n, c) *) + (* implies that this is impossible. *) + (*************************************************************************) + +<1>4. Inv!3' + (*************************************************************************) + (* Proof: Next and Inv!3 true and Inv!3' false implies that there is *) + (* some i, bb, and c such that Learn(i, bb, c) is true but *) + (* *) + (* \E b \in BNum, C \in Config : /\ ConfigOKAt(i, b, C) *) + (* /\ ChosenInBal(i, b, C, c) *) + (* *) + (* is false. The definition of Learn(i, bb, c) implies that this is *) + (* impossible. *) + (*************************************************************************) + +<1>5. Inv!4' + <2>1. CASE learnedRcfg' = learnedRcfg + <3>1. maxcfg' = maxcfg /\ cfgl' = cfgl + (*********************************************************************) + (* Proof: By case assumption <2>1 becuase maxcfg is defined in terms *) + (* of learnedRcfg and cfgl is defined in terms of maxcfg and *) + (* learnedRcfg. *) + (*********************************************************************) + <3>2. cfgi' = cfgi /\ cfgc' = cfgc /\ cfgC' = cfgc /\ cfgb' = cfgb + (*********************************************************************) + (* Proof: By <3>1, since All these values are defined in terms of *) + (* cfgl and maxcfg. *) + (*********************************************************************) + <3>3. QED + (*********************************************************************) + (* Proof: CfgOK' follows by assumption <2>1, <3>1, <3>2, the *) + (* stability of *) + (* *) + (* /\ ChosenInBal(cfgi[j], cfgb[j], cfgC[j-1], cfgc[j]) *) + (* /\ ConfigOKAt(cfgi[j], cfgb[j], cfgC[j-1]) *) + (* *) + (* for all j (by <1>1 and Theorem CfgStability) and the stability of *) + (* *) + (* UnchoosableBefore(i, cfgb[j], cfgC[j-1], c) *) + (* *) + (* for all j, c (by Theorem Stability). *) + (*********************************************************************) + + <2>2. CASE learnedRcfg' # learnedRcfg + + <3>1. PICK i \in INum, b \in BNum, C \in Config : Learn(i, b, ConfigCmd(C)) + (*********************************************************************) + (* Proof: Case assumption <2>2 and the definition of Next. *) + (*********************************************************************) + <3> DEFINE c == ConfigCmd(C) + + <3>2. PICK k \in 0..maxcfg : + /\ ConfigOKAt(i, b, cfgC[k]) + /\ ChosenInBal(i, b, cfgC[k], c) + /\ learned' = learned \cup {<<i, c>>} + (*********************************************************************) + (* Proof: By <3>1, the definition of Learn, and CfgOK (Inv!4), which *) + (* implies that the configuration whose existence is implied by the *) + (* definition Learn(i, b, c) must be one of the cfgC[j]. *) + (*********************************************************************) + <3>3. i > cfgi[k] + (**********************************************************************) + (* Proof: By ChosenInBal(i, b, cfgC[k], c) (<3>2), definition of *) + (* ConfigOKAt, and CfgOK *) + (**********************************************************************) + + <3>4. k = maxcfg + <4>1. SUFFICES ASSUME k < maxcfg + PROVE FALSE + (*******************************************************************) + (* Proof by contradiction. *) + (*******************************************************************) + + <4> HAVE k < maxcfg + + <4>2. CASE i > cfgi[k+1] + <5>1. b < cfgb[k+1] + <6>1. /\ UnchoosableBefore(cfgi[k+1], b, cfgC[k], cfgc[k+1]) + /\ \A a \in Acc: ~Voted(a, cfgi[k+1], b, cfgC[k].cnum, cfgc[k+1]) + (***************************************************************) + (* Proof: By ConfigOKAt(i, b, cfgC[k]) (<3>2), case assumption *) + (* <4>2, and cfgi[k] < cfgi[k+1] (by CfgOK). *) + (***************************************************************) + <6>2. QED + (***************************************************************) + (* Proof: Since CfgOK implies *) + (* *) + (* ChosenInBal(cfgi[k+1], cfgb[k+1], cfgC[k], cfgc[k+1]) *) + (* *) + (* <6>1 implies that cfgb[k+1] cannot be \leq b. *) + (***************************************************************) + + <5>2. UnchoosableBefore(i, cfgb[k+1], cfgC[k], c) + (*****************************************************************) + (* Proof: By the last conjunct of CfgOK, substituting k+1 for j, *) + (* using case assumption <4>2. *) + (*****************************************************************) + + <5>3. QED + (*****************************************************************) + (* Proof: <5>1 and <5>2 contradict <3>2, which implies *) + (* ChosenInBal(i, b, cfgC[k], c). *) + (*****************************************************************) + + <4>3. CASE i < cfgi[k+1] + <5>1. b > cfgb[k+1] + <6>1. /\ UnchoosableBefore(i, cfgb[k+1], cfgC[k], c) + /\ \A a \in Acc : ~Voted(a, i, cfgb[k+1], cfgC[k].cnum, c) + (***************************************************************) + (* Proof: By CfgOK, which implies *) + (* ConfigOKAt(cfgi[k+1], cfgb[k+1], cfgC[k]) and the *) + (* definition of ConfigOKAt, since case assumption <4>3 and *) + (* <3>3 allows us to substitute i for j in the definition. *) + (***************************************************************) + <6>2. QED + (***************************************************************) + (* Proof: <3>2 implies ChosenInBal(i, b, cfgC[k], c), which *) + (* would contradict <6>1 if b \leq cfgb[k+1]. *) + (***************************************************************) + + <5>2. PICK a \in Acc : Voted(a, i, b, cfgC[k].cnum, c) + (*****************************************************************) + (* Proof: By ChosenInBal(i, b, cfgC[k], c) (from <3>2). *) + (*****************************************************************) + + <5>3. PICK CC \in Config : + /\ CC.cnum = cfgC[k].cnum + /\ ConfigOKAt(i, b, CC) + /\ UnchoosableBefore(cfgi[k+1], b, CC, cfgc[k+1]) + (*****************************************************************) + (* Proof: By <5>2 and the Inv!5, using case assumption <4>3 to *) + (* justify substituting cfgc[k+1] for j in the 4th conjunct of *) + (* the body of the \E C \in Config expression. *) + (*****************************************************************) + + <5>4. CC = cfgC[k] + (*****************************************************************) + (* Proof: ConfigOKAt(i, b, CC) (from <5>3) and CfgOK implies CC *) + (* equals cfgC[j] for some j, and CC.cnum = cfgC[k].cnum (from *) + (* <5>3) implies j = k. *) + (*****************************************************************) + + <5>5. QED + (*****************************************************************) + (* Proof: <5>3 and <5>4 imply *) + (* *) + (* UnchoosableBefore(cfgi[k+1], b, cfg[k], cfgc[k+1]) *) + (* *) + (* and by b > cfgb[k+1] (from <5>1) this contradicts CfgOK, *) + (* which implies *) + (* *) + (* ChosenInBal(cfgi[k+1], cfgb[k+1], cfgC[k], cfgc[k+1]) *) + (*****************************************************************) + + <4>4. CASE i = cfgi[k+1] + <5>1. ChosenInBal(i, b, cfgC[k], c) + BY <3>2 + + <5>2. ChosenInBal(cfgi[k+1], cfgb[k+1], cfgC[k], cfgc[k+1]) + BY CfgOK + + <5>3. c = cfgc[k+1] + (*****************************************************************) + (* Proof: By same simple reasoning used to prove the consistency *) + (* of ordinary Paxos (for instance i = cfgi[k+1] and the (fixed) *) + (* configuration cfgC[k]). *) + (*****************************************************************) + + <5>4. QED + (*****************************************************************) + (* Proof: CfgOK implies <<cfgi[k+1], cfgc[k+1]>> \in `learned', *) + (* so Learn(i, b, c) implies that `learned' is unchanged, *) + (* contradicting case assumption <2>2 (learnedRcfg' # *) + (* learnedRcfg). *) + (*****************************************************************) + + <4>5. QED + BY <4>2, <4>3, <4>4 + + <3>5. /\(*1*) <<i, c>> \in learned' \ {learned} + /\(*2*) C.cnum = maxcfg + 1 + /\(*3*) ChosenInBal(i, b, cfgC[maxcfg], c) + /\(*4*) ConfigOKAt(i, b, cfgC[maxcfg]) + /\(*5*) \A ii \in INum : + (ii > i) => + \A cc \in Cmd : UnchoosableBefore(ii, b, cfgC[maxcfg], cc) + <4>1. <3>5!1 + (*******************************************************************) + (* Proof: By <3>1 and case assumption <2>2. *) + (*******************************************************************) + + <4>2. <3>5!3 + BY <3>2 + + <4>3. <3>5!4 + BY <3>2 + + <4>4. /\ C.cnum = cfgC[maxcfg].cnum + 1 + /\ \A ii \in INum, cc \in Cmd : + (ii > i) => UnchoosableBefore(ii, b, cfgC[maxcfg], cc) + + <5>1. PICK a \in Acc : Voted(a, i, b, cfgC[maxcfg], c) + BY <4>2 + <5>2. PICK CC \in Config : + /\ CC.cnum = cfgC[maxcfg] + /\ ConfigOKAt(i, b, CC) + /\ C.cnum = cfgC[maxcfg].cnum + 1 + /\ \A j \in INum, cc \in Cmd : + (j > i) => UnchoosableBefore(j, b, CC, cc) + (*****************************************************************) + (* Proof: By <5>1 and Inv!5, since c \in CCmd and C = *) + (* ConfigOfCmd(c). *) + (*****************************************************************) + <5>3. CC = cfgC[maxcfg] + (*****************************************************************) + (* Proof: BY <5>2, since ConfigOKAt(i, b, CC) implies *) + (* <<j, CmdOfConfig(CC)>> in `learned', so it equals cfgC[j] for *) + (* some j, and CC.cnum = cfgC[maxcfg] implies j = maxcfg. *) + (*****************************************************************) + <5>4. QED + BY <5>2, <5>3 + + <4>5. <3>5!5 + + <4>6. QED + BY <4>1, <4>2, <4>3, <4>4, <4>5 + + <3>6. QED + (*********************************************************************) + (* Proof: <3>5!1 and <3>5!2 imply that maxcfg' = maxcfg+1 and *) + (* *) + (* cfgl' = [j \in 0..maxcfg' |-> *) + (* IF j < maxcfg THEN cfgl[j] ELSE <<i, c>>] *) + (* *) + (* from which it follows that the functions cfgi', cfgc', cfgC', *) + (* and cfgb' are the expected "extensions" of cfgi, cfgc, cfgC, and *) + (* cfgb, where <3>5!3 and <3>5!4 imply the existence of the b in *) + (* BNum satisfying the CHOOSE expression in the definition of *) + (* cfgb'[maxcfg']. This proves the first 5 conjuncts of CfgOK'. *) + (* The remaining three conjuncts are all \A j formulas. For j < *) + (* maxcfg', they follow from CfgOK. For j = maxcfg', they follow *) + (* from <3>5. *) + (*********************************************************************) + <2>3. QED + BY <2>1, <2>2 + +<1>6. Inv!5' + <2>1. TAKE a \in Acc, i \in INum, b \in BNum, n \in CNum, c \in Cmd + <2>2. HAVE Voted(a, i, b, n, c)' + <2>3. CASE Voted(a, i, b, n, c) + (***********************************************************************) + (* Proof: This case follows from the Theorems Stability and *) + (* CfgStability, which imply the stability of all the non-constant *) + (* subformuulas in the \E C \in Config expression in Inv!5. *) + (***********************************************************************) + <2>4. CASE ~Voted(a, i, b, n, c) + <3>1. VoteFor(a, i, b, n, c) + (*********************************************************************) + (* Proof: Next, <2>2 and case assumption <2>4, implies this VoteFor *) + (* action. *) + (*********************************************************************) + + <3>2. SUFFICES (* to prove *) + \E C \in Config : + /\ C.cnum = n + /\ ConfigOKAt(i, b, C) + /\ SafeAt(i, b, C, c) + /\ c \in CCmd => /\ ConfigOfCmd(c).cnum = n+1 + /\ \A j \in INum, cc \in Cmd : + (j > i) => UnchoosableBefore(j, b, C, cc) + /\ ChoosableAt(i, b, C, c) => + C = cfgC[ Max({j \in 0..maxcfg : cfgi[j] < i}) ] + (*********************************************************************) + (* Proof: For all other tuples <<aa, ii, bb, nn, cc>>, the body of *) + (* the \A of Inv!5' follows from Inv!5 and Theorems Stability and *) + (* CfgStability. *) + (*********************************************************************) + + <3>3. PICK C \in Config : + /\ C.cnum = n + /\ ConfigOKAt(i, b, C) + /\ SafeAt(i, b, C, c) + /\ c \in CCmd => /\ ConfigOfCmd(c).cnum = n+1 + /\ \A j \in INum, cc \in Cmd : + (j > i) => UnchoosableBefore(j, b, C, cc) + (*********************************************************************) + (* Proof: The existence of C follows from <3>1 and the definition of *) + (* VoteFor. *) + (*********************************************************************) + + <3>4. ASSUME ChoosableAt(i, b, C, c), + C # cfgC[ Max({j \in 0..maxcfg : cfgi[j] < i}) ] + PROVE FALSE + <4>1. PICK j \in 0..maxcfg : C = cfgC[j] + (*******************************************************************) + (* Proof: By CfgOK and ConfigOKAt(i, b, C), which imply that C is *) + (* one of the cfgC[j], and *) + (*******************************************************************) + <4>2. i > cfgi[j] + (*******************************************************************) + (* Proof: <3>3 and <4>1 imply ConfigOKAt(i, b, cfgC[j]), which *) + (* implies i > cfgi[j]. *) + (*******************************************************************) + <4>3. i > cfgi[j+1] + (*******************************************************************) + (* Proof: <4>1, <4>2, and the assumption <3>4!2. *) + (*******************************************************************) + <4>4. cfgb[j+1] > b + (*******************************************************************) + (* Proof: Since and i > cfgi[j+1] > cfgi[j] (by <4>3 and CfgOK), *) + (* ConfigOKAt(i, b, cfgC[j]) (which holds by <3>3 and <4>1) *) + (* implies UnchoosableBefore(cfgi[j+1], b, cfgC[j], cfgc[j+1]) and *) + (* ~ChosenInBal(cfgi[j+1], b, cfgC[j], cfgc[j+1]). Since CfgOK *) + (* implies ChosenInBal(cfgi[j+1], cfgb[j+1], cfgC[j], cfgc[j+1]), *) + (* we cannot have b \geq cfgb[j+1]. *) + (*******************************************************************) + <4>5. QED + (*******************************************************************) + (* Proof: The last conjunct of CfgOK implies *) + (* *) + (* UnchoosableBefore(i, cfgb[j+1], cfgC[j], c) *) + (* *) + (* By <4>4 and <4>1, this contradicts ChoosableAt(i, b, C, c), *) + (* which is assumption <3>4!1. *) + (*******************************************************************) + <3>5. QED + BY <3>2, <3>3, <3>4 + + <2>5. QED + BY <2>3, <2>4 + +<1>7. QED + BY <1>1, <1>2, <1>3, <1>4, <1>5, <1>6 + +============================================================================= + + +TLA+2 problems: + + - Can't use "!" selectors to name "c \in S" in + ASSUME CONSTANT c \in S + PARTIALLY FIXED 10 Oct 2007 to allow "CONSTANT c \in S" to + be used as a fact. + + - <i>j. PICK x ... makes x declared in the proof of <i>j, which + is wrong, since it's not legal to use it there. + FIXED 10 Oct 2007 + + - For subexpression naming, PICK is treated like a \A, even though + the variables being picked are being declared externally to the + expression. Thus, we have to write + + <3>4. PICK x : P(x) + <3>5. ... + BY <3>4!(x) \* This names P(x) + + This seems wrong, since x is declared in the scope of the use. + However, the !(x) can't be omitted if we want to refer to P inside + the proof of <3>4. Since we don't want the naming convention to + depend on where the name appears, we don't have much choice but to + let it stand as is. + + - Doesn't allow labels in numbered steps. This seems to be a bug, + since the parser allows positional naming of subexpressions of + a numbered step. FIXED 10 Oct 2007 + + - Bug: declaration of NEWs introduced in an ASSUME/PROVE step leak + out into the rest of the proof. (They should only for a + SUFFICE ASSUME/PROVE step.) FIXED 10 Oct 2007 + + - Bug: The error message for duplicate step numbers reports the position + as the entire containing proof body, not the step. This indicates + that some semantic node is being created with the entire proof body + rather than just its own part of the spec as its syntactic node. + FIXED 10 Oct 2007 +============================================================================= diff --git a/tlatools/test-model/suite/test212.cfg b/tlatools/test-model/suite/test212.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tlatools/test-model/suite/test212.tla b/tlatools/test-model/suite/test212.tla new file mode 100644 index 0000000000000000000000000000000000000000..0a01e66ed702cc7125a06826e5c50d5f5eb86dfe --- /dev/null +++ b/tlatools/test-model/suite/test212.tla @@ -0,0 +1,33 @@ +--------------------------- MODULE test212 -------------------------- +\* Test of Leibniz checking +\* Uses the fact that you can't substitute a non-Leibniz operator +\* for a constant operator. +VARIABLE x + +Leibniz(a2) == {a2 , x'} +NonLeibniz2(a, b) == <<a, b'>> +L == INSTANCE test212b WITH y <- x + +NonLeibniz(a1) == a1' +Leibniz2(a, b) == <<a, b, x'>> + +I(a) == INSTANCE test212b WITH y <- a +LL == INSTANCE test212b WITH y <- ENABLED (x'=x) +NonL(a) ==INSTANCE test212b WITH y <- ENABLED a + +\* Legal +L1 == INSTANCE test212a WITH Op <- Leibniz, Op2 <- Leibniz2 +L2 == INSTANCE test212a WITH Op <- LAMBDA a : I(a)!Leibniz(1), + Op2 <- Leibniz2 +L3 == INSTANCE test212a WITH Op <- Leibniz, Op2 <- I!Leibniz +L4 == INSTANCE test212a WITH Op <- Leibniz, Op2 <- LL!Leibniz2 +L5 == INSTANCE test212a WITH Op <- LL!Leibniz, Op2 <- Leibniz2 + +\* Illegal +I1 == INSTANCE test212a WITH Op <- Leibniz, Op2 <- NonLeibniz2 +I2 == INSTANCE test212a WITH Op <- NonLeibniz, Op2 <- Leibniz2 +I3 == INSTANCE test212a WITH Op <- NonL!NoArg, Op2 <- Leibniz2 +I4 == INSTANCE test212a WITH Op <- Leibniz, Op2 <- L!NonLeibniz2 +I5 == INSTANCE test212a WITH Op <- Leibniz, Op2 <- NonL!Leibniz +I6 == INSTANCE test212a WITH Op <- Leibniz, Op2 <- I!NonLeibniz +================================================================== \ No newline at end of file diff --git a/tlatools/test-model/suite/test212a.tla b/tlatools/test-model/suite/test212a.tla new file mode 100644 index 0000000000000000000000000000000000000000..2962bbf49049ab640821169326a73456a7deb7eb --- /dev/null +++ b/tlatools/test-model/suite/test212a.tla @@ -0,0 +1,5 @@ +-------------------------- MODULE test212a ------------------------- + +CONSTANT Op(_) , Op2(_,_) + +============================================================================= \ No newline at end of file diff --git a/tlatools/test-model/suite/test212b.tla b/tlatools/test-model/suite/test212b.tla new file mode 100644 index 0000000000000000000000000000000000000000..bc02b8bdcc15d1579d492a1bbec1efc83e460aeb --- /dev/null +++ b/tlatools/test-model/suite/test212b.tla @@ -0,0 +1,9 @@ +-------------------------- MODULE test212b ------------------------- +VARIABLE y +NoArg == y' +Leibniz(a4) == <<a4, y>> +Leibniz2(a44, a45) == <<a44, a45, y>> +NonLeibniz(a5) == ENABLED a5 +NonLeibniz2(a6, a7) == {a6', a7} + +============================================================================= diff --git a/tlatools/test-model/suite/test213.cfg b/tlatools/test-model/suite/test213.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tlatools/test-model/suite/test213.tla b/tlatools/test-model/suite/test213.tla new file mode 100644 index 0000000000000000000000000000000000000000..9f26d15e40c135e9418e30057a543630fa28a58b --- /dev/null +++ b/tlatools/test-model/suite/test213.tla @@ -0,0 +1,47 @@ +------------------------------- MODULE test213 ------------------------------ +\* Test that +\* - A non-temporal theorem or proof step cannot have a +\* temporal formula in its proof. +\* - A declared constant that appears in an ASSUME or an ASSUME/PROVE +\* cannot be instantiated with a temporal formula +\* +\* Parsing only; produces errors. + +VARIABLE x + +I1 == INSTANCE test213b WITH C <- x', D <- x' +I2 == INSTANCE test213b WITH C <- [](x=0), D <- TRUE \* ERROR +I3 == INSTANCE test213b WITH C <- TRUE, D <- [](x=0) \* ERROR + +THEOREM [](x=0) +<1>1. CASE FALSE + <2>1. [](x=0) + <2>2. QED + <3>1. [](x # 0) + BY [](x # 0) + <3>2. QED +<1>2. x=0 \* ERROR + <2>1. (x=0) + <2>2. QED + <3>1. [](x=0) + <3>2. QED +<1>3. CASE TRUE + <2>1. CASE x=0 \* ERROR + <2>1a. CASE FALSE + <2>2. HAVE x=0 \* ERROR + <2>2a HAVE TRUE + <2>3. WITNESS 3 \in x \* ERROR + <2>4. WITNESS 2 \in {} + <2>5. QED +<1>4. QED + <2>1. [](x=0) + <2>2. QED + + + +THEOREM x=0 \* ERROR + <1>1. x'=0 \* ERROR + BY [](x=0) \* This BY causes an error, though it needn't + <1>2. [](x=0) \* this causes error in THEOREM + <1>3. QED +============================================================================= \ No newline at end of file diff --git a/tlatools/test-model/suite/test213b.tla b/tlatools/test-model/suite/test213b.tla new file mode 100644 index 0000000000000000000000000000000000000000..61dc880f1c2e02f4fd32c140001f18a9cc20c0d8 --- /dev/null +++ b/tlatools/test-model/suite/test213b.tla @@ -0,0 +1,7 @@ +------------------------------ MODULE test213b ------------------------------ +CONSTANT C, D +ASSUME C = {} + +THEOREM ASSUME D + PROVE TRUE +============================================================================= diff --git a/tlatools/test-model/suite/test214.cfg b/tlatools/test-model/suite/test214.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tlatools/test-model/suite/test214.tla b/tlatools/test-model/suite/test214.tla new file mode 100644 index 0000000000000000000000000000000000000000..cfd10fd75d92e25194aa256bec7f1b1b87a0b0fe --- /dev/null +++ b/tlatools/test-model/suite/test214.tla @@ -0,0 +1,16 @@ +------------------------------ MODULE test214 ------------------------------ +\* Test that USE and HIDE cannot contain arbitrary expressions as +\* facts. + +THEOREM bar == <<1, 2>> + +USE bar, bar!1 (*ERROR*) + + +HIDE bar, TRUE (*ERROR*) + +THEOREM xx == ASSUME TRUE PROVE FALSE + <1>2. USE TRUE (*ERROR*), bar , xx , xx!1 (*ERROR*) + <1>3. QED + +============================================================================= diff --git a/tlatools/test-model/suite/test215.cfg b/tlatools/test-model/suite/test215.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tlatools/test-model/suite/test215.tla b/tlatools/test-model/suite/test215.tla new file mode 100644 index 0000000000000000000000000000000000000000..9d163643c0c68afb486ca8c166bfd620a6c422e6 --- /dev/null +++ b/tlatools/test-model/suite/test215.tla @@ -0,0 +1,29 @@ +------------------------- MODULE test215 ------------------------- +\* Test of constraints on levels of temporal operators that +\* outlaw any form of raw TLA. + +VARIABLE x + +a == x ~> []x +b == x' ~> []x \* ERROR +c == []x ~> x' \* ERROR + +d == x -+-> []x +e == x' -+-> []x \* ERROR +f == []x -+-> x' \* ERROR + +g == <><<x'>>_x +h == <>(x') \* ERROR + +foo == [][x']_x + +bar == [](x') \* ERROR + +m == \A i \in {}, j \in x : []x +n == \A i \in {}, j \in x' : []x \* ERROR + +mm == \E i \in {}, j \in x : []x +nn == \E i \in {}, j \in x' : []x \* ERROR + +m2 == \A i \in x' : x' +======================================================================= \ No newline at end of file diff --git a/tlatools/test-model/suite/test216.cfg b/tlatools/test-model/suite/test216.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e0c9dfebfe69a9f1a896f4323120f3e0aaff51b5 --- /dev/null +++ b/tlatools/test-model/suite/test216.cfg @@ -0,0 +1,4 @@ +SPECIFICATION Spec1 \* Spec +CONSTANT C=6 +INVARIANT Inv Inv2 +PROPERTIES Prop1 Prop2 Prop3 Prop4 Prop5 \ No newline at end of file diff --git a/tlatools/test-model/suite/test216.tla b/tlatools/test-model/suite/test216.tla new file mode 100644 index 0000000000000000000000000000000000000000..92836ec9a1f4b23552acdb30510381a63f79318a --- /dev/null +++ b/tlatools/test-model/suite/test216.tla @@ -0,0 +1,72 @@ +---------------------------- MODULE test216 ------------------------ +EXTENDS TLC, Naturals + +INSTANCE test216a WITH D <- 42 +Foo == INSTANCE test216a WITH D <- 43 +FooG == INSTANCE test216a WITH D <- 42 +VARIABLE x +CONSTANT C + +THEOREM Thm1 == x \in 0..C + +THEOREM Thm1Prime == x' \in 0..C + +THEOREM Thm1a == 1+1=2 +Bar == x \in 0..C +Init == Bar \/ Thm1!: \/ (Thm1 /\ ENABLED Thm1Prime!:) +Next == x'=(x+1)%C /\ Thm1!: + /\ Thm1Prime!: /\ Thm1 /\ Thm1Prime +Spec == /\ Init + /\ [][Next]_x + /\ WF_x(Next) + + + + +Inv == Thm1 +Inv2 == Thm1!<< \in Thm1!>> + +THEOREM Thm1b == Spec => /\ []Inv + /\ []<>(x=0) + +Spec1 == Thm1b!1 +\* need to build two tests, since there are two specs + +THEOREM Thm1c == [][Next]_x +Spec2 == Init /\ Thm1c \* Doesn't work + +Thm1d == []<>(x=0) +Prop3 == Thm1d + +Prop1 == Thm1b!2!1 +Prop2 == Thm1b!2!2 + +ASSUME Thm2 +ASSUME ~ Foo!Thm2 +ASSUME ~Foo!Thm3 +ASSUME ~Foo!I!Thm3 +ASSUME FooG!Thm2 +ASSUME FooG!Thm3 +ASSUME FooG!I!Thm3 +ASSUME Thm2!: +ASSUME ~ Foo!Thm2!: +ASSUME Thm2!1 = 42 +ASSUME Foo!Thm2!1 = 43 + +THEOREM Thm3!: +THEOREM ~ Foo!Thm3!: +ASSUME Foo!Thm3!2!2 = 42 +ASSUME Foo!I!Thm3!2!2 = 42 +ASSUME I!Thm3!2!2 = 42 +ASSUME Thm3!2!2 = 42 + + +J == INSTANCE test216c +Prop4 == J!ThmC!1 /\ J!ThmC!2 /\ J!ThmC2!: + +Thm1aDef == Thm1a + +INSTANCE test216c +ThmC3Def == ThmC3 +Prop5 == ThmC!1 /\ ThmC!2 /\ ThmC3!: /\ Thm1aDef /\ ThmC3Def +==================================================================== diff --git a/tlatools/test-model/suite/test216a.tla b/tlatools/test-model/suite/test216a.tla new file mode 100644 index 0000000000000000000000000000000000000000..01d4408c842f7a0bf61289ab3bbe9649a17b5c1c --- /dev/null +++ b/tlatools/test-model/suite/test216a.tla @@ -0,0 +1,15 @@ +---------------------------- MODULE test216a ------------------------ +EXTENDS Naturals +CONSTANT D + +ASSUME Ass2 == D + 0 = 42 +THEOREM Thm2 == D + 0 = 42 +Thm2Def == D + 0 = 42 + +INSTANCE test216b WITH E <- D, y <- 0 + \* 12 June 2014: Changed from Test216b, which is now illegal +I == INSTANCE test216b WITH E <- D, y <- 0 + \* 12 June 2014: Changed from Test216b, which is now illegal + + +==================================================================== diff --git a/tlatools/test-model/suite/test216b.tla b/tlatools/test-model/suite/test216b.tla new file mode 100644 index 0000000000000000000000000000000000000000..0efdfc41b5baa8bfe82eb860358ff92b681fe0dd --- /dev/null +++ b/tlatools/test-model/suite/test216b.tla @@ -0,0 +1,7 @@ +---------------------------- MODULE test216b ------------------------ +CONSTANT E, y + +THEOREM Thm3 == y \in {y} /\ E = 42 + + +==================================================================== diff --git a/tlatools/test-model/suite/test216c.tla b/tlatools/test-model/suite/test216c.tla new file mode 100644 index 0000000000000000000000000000000000000000..9a970c318e1aac754b5c0f46b5e012a155ac3932 --- /dev/null +++ b/tlatools/test-model/suite/test216c.tla @@ -0,0 +1,15 @@ +------------------ MODULE test216c --------------------- +EXTENDS Naturals +VARIABLE x + +InitC == x = 0 +NextC == x'=(x+1) %6 + +SpecC == [][NextC]_x + +THEOREM ThmC == SpecC => [](x \in Nat) + +THEOREM ThmC2 == [](x \in Nat) + +THEOREM ThmC3 == 1+1 = 2 +====================================================== \ No newline at end of file diff --git a/tlatools/test-model/suite/test217.cfg b/tlatools/test-model/suite/test217.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tlatools/test-model/suite/test217.tla b/tlatools/test-model/suite/test217.tla new file mode 100644 index 0000000000000000000000000000000000000000..13e13d185e992fbbd33b2887296cb58e058c05a9 --- /dev/null +++ b/tlatools/test-model/suite/test217.tla @@ -0,0 +1,14 @@ +Sany should produce two level errors when parsing this module. + +---- MODULE test217 ---- + \* 12 June 2014: Changed module name from Test217, which is now illegal +EXTENDS test217a + \* 12 June 2014: Changed from Test217a, which is now illegal +VARIABLE x + +I(z) == INSTANCE test217a WITH y <- z + \* 12 June 2014: Changed from Test217a, which is now illegal + +FooBar == I(x')!Foo +THEOREM I({x'})!Foo +=============================== \ No newline at end of file diff --git a/tlatools/test-model/suite/test217a.tla b/tlatools/test-model/suite/test217a.tla new file mode 100644 index 0000000000000000000000000000000000000000..e72a4e15fd8711bd68a597f8046875f16e6051f8 --- /dev/null +++ b/tlatools/test-model/suite/test217a.tla @@ -0,0 +1,5 @@ +---- MODULE test217a ---- +VARIABLE y + +THEOREM Foo == y'=0 +========================= \ No newline at end of file diff --git a/tlatools/test-model/suite/test218.tla b/tlatools/test-model/suite/test218.tla new file mode 100644 index 0000000000000000000000000000000000000000..12492617d5b78cd24dc845afe630ce63f9f4398c --- /dev/null +++ b/tlatools/test-model/suite/test218.tla @@ -0,0 +1,11 @@ +Check fix to handling of ThmOrAssumpDefNode in Tool.java +on 23 Oct 2012. + +---- MODULE test218 ---- +EXTENDS Test218a, TLC + +I(z) == INSTANCE Test218a WITH y <- z + +ASSUME PrintT(I(55)!Foo) + +=============================== \ No newline at end of file diff --git a/tlatools/test-model/suite/test219.cfg b/tlatools/test-model/suite/test219.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tlatools/test-model/suite/test219.tla b/tlatools/test-model/suite/test219.tla new file mode 100644 index 0000000000000000000000000000000000000000..da6d5328bdad929a233c2e29b55e261dbdf16005 --- /dev/null +++ b/tlatools/test-model/suite/test219.tla @@ -0,0 +1,227 @@ +------------------------------- MODULE test219 ------------------------------ +\* Test of use of labels from instantiated theorems, and repeat +\* test of some instantiations + +EXTENDS TLC , Integers + +I(x) == INSTANCE test219a WITH C <- 4 +J == INSTANCE test219a WITH C <- 4 +INSTANCE test219a WITH C <- 4 + +LOCAL K(x) == INSTANCE test219a WITH C <- 4 +LOCAL L == INSTANCE test219a WITH C <- 4 + + +ASSUME J!Thm2!lab3 +ASSUME I(55)!Thm2!lab3 +ASSUME L!Thm2!lab3 +ASSUME K(55)!Thm2!lab3 +ASSUME Thm2!lab3 + + +ASSUME Op(Foo, 9) + +ASSUME Thm2!lab3 + +ASSUME Bar + +ASSUME Op(Foo, 9)!lab(1,2,3)!label2 = Op(Foo, 9)!lab(1,2,3)!:!++(9, 4) +ASSUME OOp1(SOp1, 2) = 2 +ASSUME OOp2(SOp1b!@, 2, 3) = 5 +ASSUME OOp2(SOp1c!@!c, 2, 3) = 2 * 3 +ASSUME OOp3(SOp1d!@!c, 2, 3, 4) = 2 * 3 + 4 +ASSUME Op1(2)!(3)!2!1 = 2 + 4*3 + 6 +ASSUME Op1(2)!(3)!2!Op1a(4) = 16 + 6 +ASSUME Op3(Op1!@!2!Op1a, 2, 3, 4) = 22 +ASSUME COp(1, 2)!(3)!++(4, 5) = {2,1, 3, 4, 5} +ASSUME COp(1, 2)!(3) = <<1, {99, 1, 2, 3} >> +ASSUME COp(1, 2)!(3)!1 = <<1, {99, 1, 2, 3} >> +ASSUME COp(1, 2)!(3)!1!>> = {99, 1, 2, 3} +ASSUME OOp5(COp!@!++, 1, 2, 3, 4, 5) = {2,1, 3, 4, 5} +ASSUME COp(1, 2)!lab(3)!:!++(4, 5) = {2,1, 3, 4, 5} +ASSUME Inst!Foo(1, 2, 3, 4, 5) = {2,1, 3, 4, 5} +ASSUME Inst!Bar(3)!>> = 3 +ASSUME Inst!Bar2(3)!>> = 3 +ASSUME Inst!Bar3!>> = 2 +ASSUME Inst!Bar4(1)!(2)!<< = 2 +ASSUME Inst!Bar4(1)!(2)!>> = 1 +ASSUME Inst!Bar4(1)!lab(2)!<< = 2 +ASSUME Inst!Bar4(1)!lab(2)!>> = 1 +ASSUME OOp2(Inst!Bar4!@!<<, 1, 2) = 2 +ASSUME OOp2(Inst!Bar4!@!>>, 1, 2) = 1 +ASSUME OOp2(Inst!Bar4!lab!<<, 1, 2) = 2 +ASSUME OOp2(Inst!Bar4!lab!>>, 1, 2) = 1 +ASSUME Inst!Bar5(1)!lab(2)!:!++(3, 4) = <<1, 3, 4, 2>> +ASSUME Inst!Bar5(1)!(2)!++(3, 4) = <<1, 3, 4, 2>> +ASSUME OOp4(Inst!Bar5!lab!:!++, 1, 2, 3, 4) = <<1, 3, 4, 2>> +ASSUME Inst2(COp!@!++)!Foo(1, 2, 3, 4, 5) = {2,1, 3, 4, 5} +ASSUME COp2(1,2)!lab(3)!:!++(9,10)!lab(11) = 30 +ASSUME COp2(1,2)!(3)!++(9,10)!lab(11) = 30 +ASSUME COp2(1,2)!lab(3)!:!++(9,10)!(11) = 30 +ASSUME OOp6(COp2!lab!:!++!lab, 1, 2, 3, 9, 10, 11) = 30 +ASSUME OOp6(COp2!@!++!lab, 1, 2, 3, 9, 10, 11) = 30 +ASSUME OOp6(COp2!lab!:!++!@, 1, 2, 3, 9, 10, 11) = 30 +ASSUME Def1!2 = 2 +ASSUME Def2!(14)!<< = 14 +ASSUME Def3!2!1 = 2 +ASSUME Def3!(1, 2)!<< = 1 +ASSUME Def4!<<!<<!2 = {2} +ASSUME Def5!>> = 3 +ASSUME Def5!<<[4] = 5 +ASSUME Def5!<<!1!>> = 10 +ASSUME Def6!1[3] = 4 +ASSUME Def7!1 = 3 +ASSUME Def7!2 = "a" +ASSUME Def8!2 = 2 +ASSUME Def9!2 = 2 +ASSUME Def10!2 = 2 +ASSUME Def11!3!1 = 3 + +ASSUME L!Op(Foo, 9)!lab(1,2,3)!label2 = Op(Foo, 9)!lab(1,2,3)!:!++(9, 4) +ASSUME L!OOp1(SOp1, 2) = 2 +ASSUME L!OOp2(SOp1b!@, 2, 3) = 5 +ASSUME L!OOp2(SOp1c!@!c, 2, 3) = 2 * 3 +ASSUME L!OOp3(SOp1d!@!c, 2, 3, 4) = 2 * 3 + 4 +ASSUME L!Op1(2)!(3)!2!1 = 2 + 4*3 + 6 +ASSUME L!Op1(2)!(3)!2!Op1a(4) = 16 + 6 +ASSUME L!Op3(Op1!@!2!Op1a, 2, 3, 4) = 22 +ASSUME L!COp(1, 2)!(3)!++(4, 5) = {2,1, 3, 4, 5} +ASSUME L!COp(1, 2)!(3) = <<1, {99, 1, 2, 3} >> +ASSUME L!COp(1, 2)!(3)!1 = <<1, {99, 1, 2, 3} >> +ASSUME L!COp(1, 2)!(3)!1!>> = {99, 1, 2, 3} +ASSUME L!OOp5(COp!@!++, 1, 2, 3, 4, 5) = {2,1, 3, 4, 5} +ASSUME L!COp(1, 2)!lab(3)!:!++(4, 5) = {2,1, 3, 4, 5} +ASSUME L!Inst!Foo(1, 2, 3, 4, 5) = {2,1, 3, 4, 5} +ASSUME L!Inst!Bar(3)!>> = 3 +ASSUME L!Inst!Bar2(3)!>> = 3 +ASSUME L!Inst!Bar3!>> = 2 +ASSUME L!Inst!Bar4(1)!(2)!<< = 2 +ASSUME L!Inst!Bar4(1)!(2)!>> = 1 +ASSUME L!Inst!Bar4(1)!lab(2)!<< = 2 +ASSUME L!Inst!Bar4(1)!lab(2)!>> = 1 +ASSUME L!OOp2(Inst!Bar4!@!<<, 1, 2) = 2 +ASSUME L!OOp2(Inst!Bar4!@!>>, 1, 2) = 1 +ASSUME L!OOp2(Inst!Bar4!lab!<<, 1, 2) = 2 +ASSUME L!OOp2(Inst!Bar4!lab!>>, 1, 2) = 1 +ASSUME L!Inst!Bar5(1)!lab(2)!:!++(3, 4) = <<1, 3, 4, 2>> +ASSUME L!Inst!Bar5(1)!(2)!++(3, 4) = <<1, 3, 4, 2>> +ASSUME L!OOp4(Inst!Bar5!lab!:!++, 1, 2, 3, 4) = <<1, 3, 4, 2>> +ASSUME L!Inst2(COp!@!++)!Foo(1, 2, 3, 4, 5) = {2,1, 3, 4, 5} +ASSUME L!COp2(1,2)!lab(3)!:!++(9,10)!lab(11) = 30 +ASSUME L!COp2(1,2)!(3)!++(9,10)!lab(11) = 30 +ASSUME L!COp2(1,2)!lab(3)!:!++(9,10)!(11) = 30 +ASSUME L!OOp6(COp2!lab!:!++!lab, 1, 2, 3, 9, 10, 11) = 30 +ASSUME L!OOp6(COp2!@!++!lab, 1, 2, 3, 9, 10, 11) = 30 +ASSUME L!OOp6(COp2!lab!:!++!@, 1, 2, 3, 9, 10, 11) = 30 +ASSUME L!Def1!2 = 2 +ASSUME L!Def2!(14)!<< = 14 +ASSUME L!Def3!2!1 = 2 +ASSUME L!Def3!(1, 2)!<< = 1 +ASSUME L!Def4!<<!<<!2 = {2} +ASSUME L!Def5!>> = 3 +ASSUME L!Def5!<<[4] = 5 +ASSUME L!Def5!<<!1!>> = 10 +ASSUME L!Def6!1[3] = 4 +ASSUME L!Def7!1 = 3 +ASSUME L!Def7!2 = "a" +ASSUME L!Def8!2 = 2 +ASSUME L!Def9!2 = 2 +ASSUME L!Def10!2 = 2 +ASSUME L!Def11!3!1 = 3 + +ASSUME I(55)!Op(Foo, 9)!lab(1,2,3)!label2 = Op(Foo, 9)!lab(1,2,3)!:!++(9, 4) +ASSUME I(55)!OOp1(SOp1, 2) = 2 +ASSUME I(55)!OOp2(SOp1b!@, 2, 3) = 5 +ASSUME I(55)!OOp2(SOp1c!@!c, 2, 3) = 2 * 3 +ASSUME I(55)!OOp3(SOp1d!@!c, 2, 3, 4) = 2 * 3 + 4 +ASSUME I(55)!Op1(2)!(3)!2!1 = 2 + 4*3 + 6 +ASSUME I(55)!Op1(2)!(3)!2!Op1a(4) = 16 + 6 +ASSUME I(55)!Op3(Op1!@!2!Op1a, 2, 3, 4) = 22 +ASSUME I(55)!COp(1, 2)!(3)!++(4, 5) = {2,1, 3, 4, 5} +ASSUME I(55)!COp(1, 2)!(3) = <<1, {99, 1, 2, 3} >> +ASSUME I(55)!COp(1, 2)!(3)!1 = <<1, {99, 1, 2, 3} >> +ASSUME I(55)!COp(1, 2)!(3)!1!>> = {99, 1, 2, 3} +ASSUME I(55)!OOp5(COp!@!++, 1, 2, 3, 4, 5) = {2,1, 3, 4, 5} +ASSUME I(55)!COp(1, 2)!lab(3)!:!++(4, 5) = {2,1, 3, 4, 5} +ASSUME I(55)!Inst!Foo(1, 2, 3, 4, 5) = {2,1, 3, 4, 5} +ASSUME I(55)!Inst!Bar(3)!>> = 3 +ASSUME I(55)!Inst!Bar2(3)!>> = 3 +ASSUME I(55)!Inst!Bar3!>> = 2 +ASSUME I(55)!Inst!Bar4(1)!(2)!<< = 2 +ASSUME I(55)!Inst!Bar4(1)!(2)!>> = 1 +ASSUME I(55)!Inst!Bar4(1)!lab(2)!<< = 2 +ASSUME I(55)!Inst!Bar4(1)!lab(2)!>> = 1 +ASSUME I(55)!OOp2(Inst!Bar4!@!<<, 1, 2) = 2 +ASSUME I(55)!OOp2(Inst!Bar4!@!>>, 1, 2) = 1 +ASSUME I(55)!OOp2(Inst!Bar4!lab!<<, 1, 2) = 2 +ASSUME I(55)!OOp2(Inst!Bar4!lab!>>, 1, 2) = 1 +ASSUME I(55)!Inst!Bar5(1)!lab(2)!:!++(3, 4) = <<1, 3, 4, 2>> +ASSUME I(55)!Inst!Bar5(1)!(2)!++(3, 4) = <<1, 3, 4, 2>> +ASSUME I(55)!OOp4(Inst!Bar5!lab!:!++, 1, 2, 3, 4) = <<1, 3, 4, 2>> +ASSUME I(55)!Inst2(COp!@!++)!Foo(1, 2, 3, 4, 5) = {2,1, 3, 4, 5} +ASSUME I(55)!COp2(1,2)!lab(3)!:!++(9,10)!lab(11) = 30 +ASSUME I(55)!COp2(1,2)!(3)!++(9,10)!lab(11) = 30 +ASSUME I(55)!COp2(1,2)!lab(3)!:!++(9,10)!(11) = 30 +ASSUME I(55)!OOp6(COp2!lab!:!++!lab, 1, 2, 3, 9, 10, 11) = 30 +ASSUME I(55)!OOp6(COp2!@!++!lab, 1, 2, 3, 9, 10, 11) = 30 +ASSUME I(55)!OOp6(COp2!lab!:!++!@, 1, 2, 3, 9, 10, 11) = 30 +ASSUME I(55)!Def1!2 = 2 +ASSUME I(55)!Def2!(14)!<< = 14 +ASSUME I(55)!Def3!2!1 = 2 +ASSUME I(55)!Def3!(1, 2)!<< = 1 +ASSUME I(55)!Def4!<<!<<!2 = {2} +ASSUME I(55)!Def5!>> = 3 +ASSUME I(55)!Def5!<<[4] = 5 +ASSUME I(55)!Def5!<<!1!>> = 10 +ASSUME I(55)!Def6!1[3] = 4 +ASSUME I(55)!Def7!1 = 3 +ASSUME I(55)!Def7!2 = "a" +ASSUME I(55)!Def8!2 = 2 +ASSUME I(55)!Def9!2 = 2 +ASSUME I(55)!Def10!2 = 2 +ASSUME I(55)!Def11!3!1 = 3 + +ASSUME /\ Def12!1!<< = 2 + /\ Def12!2 = 2 + /\ Def12!3 = 3 +ASSUME /\ Def13!(42)!1!<<!<< = 42 + /\ Def13!(42)!1!>> = 1 + /\ Def13!(42)!2!>> = 2 + /\ Def13!(42)!3!>> = 3 + +ASSUME /\ Def14!(2)!<< = 2 + /\ Def14!1!1 = 1 + +ASSUME /\ Def15!(2,3)!<<!<< = 2 + /\ Def15!(2,3)!>>!<< = 3 + /\ Def15!2!<< = 2 + +ASSUME /\ Def16!(2,3,4)!1!1 = 2 + /\ Def16!(2,3,4)!2!1 = 3 + /\ Def16!2!1!<< = 2 + +ASSUME /\ Def17!(2,3,4)!1!1 = 2 + /\ Def17!(2,3,4)!2!1 = 3 + +ASSUME Def18!(2)!<< = 2 + +ASSUME /\ Def19!(2)!<< = 2 + /\ Def19!1!1 = 42 + +ASSUME /\ Def20!1 = 12 + /\ Def20!>> = 23 + +ASSUME /\ Def21!1 = 12 + /\ Def21!>> = 23 + +ASSUME /\ Def22!1 = 12 + /\ Def22!>> = 23 + +ASSUME /\ Def23!(2,3,4)!1!1 = 2 + /\ Def23!(2,3,4)!2!1 = 3 + + +============================================================================= + +last modified on Thu 1 November 2012 at 10:11:43 PST by lamport +============================================================================== \ No newline at end of file diff --git a/tlatools/test-model/suite/test219a.cfg b/tlatools/test-model/suite/test219a.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tlatools/test-model/suite/test219a.tla b/tlatools/test-model/suite/test219a.tla new file mode 100644 index 0000000000000000000000000000000000000000..a0013107280618a02f89df7776cfb92aeffac8ba --- /dev/null +++ b/tlatools/test-model/suite/test219a.tla @@ -0,0 +1,239 @@ +------------------------------- MODULE test219a ------------------------------ +\* Test of labels and their use in subexpression selectors. + +EXTENDS TLC, Integers + +CONSTANT C +\* C == 4 + +Op(Arg(_), p) == + \A x \in {1,2}, <<y, z>> \in {<<3, 4>>} : + lab(x,y,z) :: LET a ++ b == + Arg(a) + b + x + 2*y + 3*z + IN (Arg(1) + Arg(p) + C + + 2*x + 4*y + 6*z) = + 1 ++ ( label2 :: p ++ C) +\* IN /\label2:: PrintT("FOO") +\* /\ PrintT(Arg(1)) +\* /\ PrintT("FOO2") +\* /\ PrintT(<<p, Arg(p)>>) +\* /\ PrintT("FOO3") +\* /\ PrintT(<<p, C>>) +\* /\ PrintT("FOO3a") +\* /\ PrintT(1++2) +\* /\ PrintT(p++C) +\* /\ PrintT("FOO4") +\* /\ PrintT(<<x, y, z>>) + +Foo(u) == 2*u + +\* ASSUME Foo(5) = Foo(5)!: + +THEOREM Thm == ASSUME FALSE + PROVE lab:: C > 0 + +THEOREM Thm2 == lab3 :: TRUE + + +\* ASSUME Foo(25) = 50 + +Bar == Op(Foo, 9)!lab(1,2,3) + +\* ASSUME Op(Foo, 9) +\* +\* ASSUME Thm2!lab3 +\* +\* ASSUME Bar +\* +\* ASSUME Op(Foo, 9)!lab(1,2,3)!label2 = Op(Foo, 9)!lab(1,2,3)!:!++(9, 4) + +Op3(A(_,_,_), a1, a2, a3) == A(a1, a2, a3) + +Op1(a) == \A x \in {} : lab(x) :: IF TRUE + THEN LET Op1a(c) == 4 * c + a*x + IN a + Op1a(x) + ELSE 1 +SOp1(a) == a +OOp1(A(_), a) == A(a) +\* ASSUME OOp1(SOp1, 2) = 2 + +SOp1a(a) == {x \in {1,2} : a = x} +OOp2(A(_,_), a, b) == A(a, b) +\* ASSUME OOp2(SOp1a!@, 2, 2) = TRUE + +SOp1b(a) == {x + a : x \in {1,2}} +\* ASSUME OOp2(SOp1b!@, 2, 3) = 5 + +SOp1c(a) == {(LET c == a * x IN x + a) : x \in {1,2}} +\* ASSUME OOp2(SOp1c!@!c, 2, 3) = 2 * 3 + +SOp1d(a) == {(LET c(y) == (a * x) + y IN x + a) : x \in {1,2}} +OOp3(A(_,_,_), a, b, c) == A(a, b, c) +\* ASSUME OOp3(SOp1d!@!c, 2, 3, 4) = 2 * 3 + 4 + +OOp4(A(_,_,_,_), a, b, c, d) == A(a, b, c, d) + + +\* Foo1 == Op1(2)!(3)!2!1 +\* ASSUME Op1(2)!(3)!2!1 = 2 + 4*3 + 6 +\* ASSUME Op1(2)!(3)!2!Op1a(4) = 16 + 6 +\* ASSUME Op3(Op1!@!2!Op1a, 2, 3, 4) = 22 + +COp(q, p) == + CHOOSE x : lab(x) :: LET a ++ b == {a, b, q, p, x} + IN <<q, 99 ++ p >> + + +\* ASSUME COp(1, 2)!(3)!++(4, 5) = {2,1, 3, 4, 5} + +\* ASSUME COp(1, 2)!(3) = <<1, {99, 1, 2, 3} >> +\* ASSUME COp(1, 2)!(3)!1 = <<1, {99, 1, 2, 3} >> +\* ASSUME COp(1, 2)!(3)!1!>> = {99, 1, 2, 3} + +OOp5(A(_, _, _, _, _), a1, a2, a3, a4, a5) == A(a1, a2, a3, a4, a5) + +\* ASSUME OOp5(COp!@!++, 1, 2, 3, 4, 5) = {2,1, 3, 4, 5} +\* ASSUME COp(1, 2)!lab(3)!:!++(4, 5) = {2,1, 3, 4, 5} + +Inst == INSTANCE test206a WITH A5 <- COp!@!++ +\* ASSUME Inst!Foo(1, 2, 3, 4, 5) = {2,1, 3, 4, 5} +\* ASSUME Inst!Bar(3)!>> = 3 +\* ASSUME Inst!Bar2(3)!>> = 3 +\* ASSUME Inst!Bar3!>> = 2 +\* ASSUME Inst!Bar4(1)!(2)!<< = 2 +\* ASSUME Inst!Bar4(1)!(2)!>> = 1 +\* ASSUME Inst!Bar4(1)!lab(2)!<< = 2 +\* ASSUME Inst!Bar4(1)!lab(2)!>> = 1 +\* ASSUME OOp2(Inst!Bar4!@!<<, 1, 2) = 2 +\* ASSUME OOp2(Inst!Bar4!@!>>, 1, 2) = 1 +\* ASSUME OOp2(Inst!Bar4!lab!<<, 1, 2) = 2 +\* ASSUME OOp2(Inst!Bar4!lab!>>, 1, 2) = 1 +\* ASSUME Inst!Bar5(1)!lab(2)!:!++(3, 4) = <<1, 3, 4, 2>> +\* ASSUME Inst!Bar5(1)!(2)!++(3, 4) = <<1, 3, 4, 2>> +\* ASSUME OOp4(Inst!Bar5!lab!:!++, 1, 2, 3, 4) = <<1, 3, 4, 2>> + +Inst2(A5(_, _, _, _, _)) == INSTANCE test206a +\* ASSUME Inst2(COp!@!++)!Foo(1, 2, 3, 4, 5) = {2,1, 3, 4, 5} + + +COp2(q, p) == + CHOOSE x : lab(x) :: LET a ++ b == {lab(y):: y + a + b : y \in {1}} + IN <<q, 99 ++ p >> + +\* ASSUME COp2(1,2)!lab(3)!:!++(9,10)!lab(11) = 30 +\* ASSUME COp2(1,2)!(3)!++(9,10)!lab(11) = 30 +\* ASSUME COp2(1,2)!lab(3)!:!++(9,10)!(11) = 30 +OOp6(A(_, _, _, _, _, _), a1, a2, a3, a4, a5, a6) == A(a1, a2, a3, a4, a5, a6) +\* ASSUME OOp6(COp2!lab!:!++!lab, 1, 2, 3, 9, 10, 11) = 30 +\* ASSUME OOp6(COp2!@!++!lab, 1, 2, 3, 9, 10, 11) = 30 +\* ASSUME OOp6(COp2!lab!:!++!@, 1, 2, 3, 9, 10, 11) = 30 + +\* Let's test all the different kinds of operators + +Def1 == {1, 2, 3, 4} +\* ASSUME Def1!2 = 2 + +Def2 == {x \in {1, 2, 3} : x > 17} +\* ASSUME Def2!1 = {1, 2, 3} +\* ASSUME Def2!(14)!<< = 14 + +Def3 == {<<x, y>> : x \in {1}, y \in {2}} +\* ASSUME Def3!2!1 = 2 +\* ASSUME Def3!(1, 2)!<< = 1 + +Def4 == SUBSET UNION {{1}, {2}} +\* ASSUME Def4!<<!<<!2 = {2} + +Def5 == [i \in 1..10 |-> i+1][3] +\* ASSUME Def5!>> = 3 +\* ASSUME Def5!<<[4] = 5 +\* ASSUME Def5!<<!1!>> = 10 + +Def6 == [[i \in 1..10 |-> i+1] EXCEPT ![2] = 1, ![3] = 2] +\* ASSUME Def6!1[3] = 4 +\* The following two subexpression expressions are now +\* considered to be illegal because they could contain +\* a "@". +\* ASSUME Def6!2=1 +\* ASSUME Def6!3=2 + +Def7 == 3.a +\* ASSUME Def7!1 = 3 +\* ASSUME Def7!2 = "a" + +Def8 == [a |-> 1, b |-> 2] +\* ASSUME Def8!2 = 2 + +Def9 == [a : 1, b : 2] +\* ASSUME Def9!2 = 2 + +Def10 == <<1, 2, 3>> +\* ASSUME Def10!2 = 2 + +Def11 == {1} \X {2} \X {3} +\* ASSUME Def11!3!1 = 3 + +Def12 == IF 2=3 THEN 2 ELSE 3 +\* ASSUME /\ Def12!1!<< = 2 +\* /\ Def12!2 = 2 +\* /\ Def12!3 = 3 + +Def13 == \A x : CASE x=1 -> 1 + [] x=2 -> 2 + [] OTHER -> 3 +\* ASSUME /\ Def13!(42)!1!<<!<< = 42 +\* /\ Def13!(42)!1!>> = 1 +\* /\ Def13!(42)!2!>> = 2 +\* /\ Def13!(42)!3!>> = 3 + +Def14 == \A x \in {1} : x = 1 +\* ASSUME /\ Def14!(2)!<< = 2 +\* /\ Def14!1!1 = 1 + +Def15 == \A x \in {1}, y \in {2} : (x = 1) /\ (y = 2) +\* ASSUME /\ Def15!(2,3)!<<!<< = 2 +\* /\ Def15!(2,3)!>>!<< = 3 +\* /\ Def15!2!<< = 2 + +Def16 == \E x \in {1}, <<y, z>> \in {<<2,3>>} : /\ ((x = 1)) + /\ y = 2 + /\ (z=3) +\* ASSUME /\ Def16!(2,3,4)!1!1 = 2 +\* /\ Def16!(2,3,4)!2!1 = 3 +\* /\ Def16!2!1!<< = 2 + +Def17 == \E x , y, z : /\ ((x = 1)) + /\ y = 2 + /\ (z=3) +\* ASSUME /\ Def17!(2,3,4)!1!1 = 2 +\* /\ Def17!(2,3,4)!2!1 = 3 + +Def18 == CHOOSE x : (x=1) +\* ASSUME Def18!(2)!<< = 2 + +Def19 == CHOOSE x \in {42}: (x=1) +\* ASSUME /\ Def19!(2)!<< = 2 +\* /\ Def19!1!1 = 42 + +Def20 == [12]_(23) +\* ASSUME /\ Def20!1 = 12 +\* /\ Def20!>> = 23 + +Def21 == <<12>>_(23) +\* ASSUME /\ Def21!1 = 12 +\* /\ Def21!>> = 23 + +Def22 == WF_(12)(23) +\* ASSUME /\ Def22!1 = 12 +\* /\ Def22!>> = 23 + +Def23 == \EE x , y, z : /\ ((x = 1)) + /\ y = 2 + /\ (z=3) +\* ASSUME /\ Def23!(2,3,4)!1!1 = 2 +\* /\ Def23!(2,3,4)!2!1 = 3 + + +============================================================================= + +last modified on Wed 31 October 2012 at 14:45:24 PST by lamport \ No newline at end of file diff --git a/tlatools/test-model/suite/test22.cfg b/tlatools/test-model/suite/test22.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d191341c2404a4660de5819024419df4563278cd --- /dev/null +++ b/tlatools/test-model/suite/test22.cfg @@ -0,0 +1,9 @@ + INIT + Init + + NEXT + Next + + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test22.tla b/tlatools/test-model/suite/test22.tla new file mode 100644 index 0000000000000000000000000000000000000000..7f40faf963139cdfb4f01ee341e52c36b6b00b03 --- /dev/null +++ b/tlatools/test-model/suite/test22.tla @@ -0,0 +1,40 @@ +--------------- MODULE test22 ------------- + +(* Test of fingerprinting. *) + +EXTENDS TLC, Naturals, Sequences + +VARIABLE x, y + +S == {1} +T == {2, 3, 4} + + + +Init == /\ Print("Distinct States should equal Distinct Initial States", TRUE) + /\ x \in [S -> [S -> SUBSET T]] + /\ y \in [S -> [S -> SUBSET [a : {2}, b : {3, 4, 5}]]] + +Inv == IF [S -> [S -> SUBSET [b : {4, 4, 3, 5, 4}, a : {2, 2}]]] # + [S -> [S -> SUBSET [a : {2}, b : {3, 4, 5}]]] + THEN Assert(FALSE, "Test 1 Failed") + ELSE TRUE + +Next == + \/ UNCHANGED <<x, y>> + + \/ /\ x' \in [S -> [S -> SUBSET {4, 4, 4, 3, 2, 2}]] + /\ UNCHANGED y + + \/ /\ y' \in [S -> [S -> SUBSET [b : {4, 4, 3, 5, 4}, a : {2, 2}]]] + /\ UNCHANGED x + + \/ /\ y' = [y EXCEPT ![1][1] = {[b |-> 4, a |-> 2]}] + /\ UNCHANGED x + + \/ /\ y' = [y EXCEPT ![1][1] = {[b |-> 3, a |-> 2]}] + /\ UNCHANGED x + + \/ /\ y' = [y EXCEPT ![1][1] = {[b |-> 5, a |-> 2]}] + /\ UNCHANGED x +========================================= diff --git a/tlatools/test-model/suite/test23.cfg b/tlatools/test-model/suite/test23.cfg new file mode 100644 index 0000000000000000000000000000000000000000..6b7101b241f4a4d2db964521a677ea247a42e163 --- /dev/null +++ b/tlatools/test-model/suite/test23.cfg @@ -0,0 +1,5 @@ +INIT Init +NEXT Next +INVARIANT Inv +CONSTANT + SubBag <- MCSubBag diff --git a/tlatools/test-model/suite/test23.tla b/tlatools/test-model/suite/test23.tla new file mode 100644 index 0000000000000000000000000000000000000000..301039f8e8fe1f484e3c7edf5f0fdaa9556903fe --- /dev/null +++ b/tlatools/test-model/suite/test23.tla @@ -0,0 +1,284 @@ +--------------- MODULE test23 ------------- + +(* Test of definitions from the Bags module *) + +EXTENDS Naturals, FiniteSets, TLC + +IsABag(B) == + (************************************************************************) + (* True iff B is a bag. *) + (************************************************************************) + B \in [DOMAIN B -> {n \in Nat : n > 0}] + +BagToSet(B) == DOMAIN B + (************************************************************************) + (* The set of elements at least one copy of which is in B. *) + (************************************************************************) + +SetToBag(S) == [e \in S |-> 1] + (************************************************************************) + (* The bag that contains one copy of every element of the set S. *) + (************************************************************************) + +BagIn(e,B) == e \in BagToSet(B) + (************************************************************************) + (* The \in operator for bags. *) + (************************************************************************) + +EmptyBag == SetToBag({}) + +BagCup(B1, B2) == + (************************************************************************) + (* The union of bags B1 and B2. *) + (************************************************************************) + [e \in (DOMAIN B1) \cup (DOMAIN B2) |-> + (IF e \in DOMAIN B1 THEN B1[e] ELSE 0) + + (IF e \in DOMAIN B2 THEN B2[e] ELSE 0) ] + +B1 ++ B2 == BagCup(B1, B2) + +BagDiff(B1, B2) == + (************************************************************************) + (* The bag B1 with the elements of B2 removed--that is, with one copy *) + (* of an element removed from B1 for each copy of the same element in *) + (* B2. If B2 has at least as many copies of e as B1, then B1 -- B2 *) + (* has no copies of e. *) + (************************************************************************) + LET B == [e \in DOMAIN B1 |-> IF e \in DOMAIN B2 THEN B1[e] - B2[e] + ELSE B1[e]] + IN [e \in {d \in DOMAIN B : B[d] > 0} |-> B[e]] + +B1 -- B2 == BagDiff(B1, B2) + +LOCAL Sum(f) == + (******************************************************************) + (* The sum of f[x] for all x in DOMAIN f. The definition assumes *) + (* that f is a Nat-valued function and that f[x] equals 0 for all *) + (* but a finite number of elements x in DOMAIN f. *) + (******************************************************************) + LET D == {e \in DOMAIN f : f[e] > 0} + DSum[S \in SUBSET DOMAIN f] == + LET elt == CHOOSE e \in S : TRUE + IN IF S = {} THEN 0 + ELSE f[elt] + DSum[S \ {elt}] + IN DSum[DOMAIN f] + +BagUnion(S) == + (************************************************************************) + (* The bag union of all elements of the set S of bags. *) + (************************************************************************) + [e \in UNION {BagToSet(B) : B \in S} |-> + Sum( [B \in S |-> IF BagIn(e, B) THEN B[e] ELSE 0] ) ] + +B1 \sqsubseteq B2 == + (************************************************************************) + (* The subset operator for bags. B1 \sqsubseteq B2 iff, for all e, bag *) + (* B2 has at least as many copies of e as bag B1 does. *) + (************************************************************************) + /\ (DOMAIN B1) \subseteq (DOMAIN B2) + /\ \A e \in DOMAIN B1 : B1[e] \leq B2[e] + +SubBag(B) == + (************************************************************************) + (* The set of all subbags of bag B. *) + (************************************************************************) + LET AllBagsOfSubset == + (******************************************************************) + (* The set of all bags SB such that BagToSet(SB) \subseteq *) + (* BagToSet(B). *) + (******************************************************************) + UNION {[SB -> {n \in Nat : n > 0}] : SB \in SUBSET BagToSet(B)} + IN {SB \in AllBagsOfSubset : \A e \in DOMAIN SB : SB[e] \leq B[e]} + +BagOfAll(F(_), B) == + (************************************************************************) + (* The bag analog of the set {F(x) : x \in B} for a set B. It's the bag *) + (* that contains, for each element e of B, one copy of F(e) for every *) + (* copy of e in B. This defines a bag iff, for any value v, the set of *) + (* e in B such that F(e) = v is finite. *) + (************************************************************************) + [e \in {F(d) : d \in BagToSet(B)} |-> + Sum( [d \in BagToSet(B) |-> IF F(d) = e THEN B[d] ELSE 0] ) ] + +BagCardinality(B) == + (************************************************************************) + (* If B is a finite bag (one such that BagToSet(B) is a finite set), *) + (* then this is its cardinality (the total number of copies of elements *) + (* in B). Its value is unspecified if B is infinite. *) + (************************************************************************) + Sum(B) + +CopiesIn(e, B) == + (************************************************************************) + (* If B is a bag, then CopiesIn(e, B) is the number of copies of e in *) + (* B. If ~BagIn(e, B), then CopiesIn(e, B) = 0. *) + (************************************************************************) + IF BagIn(e, B) THEN B[e] ELSE 0 + + + +Max(a, b) == IF a < b THEN b ELSE a +MaxCopies(B) == + (*************************************************************************) + (* Maximum of B[e] s.t. e \in DOMAIN B *) + (*************************************************************************) + LET MC[S \in SUBSET(DOMAIN B)] == + LET elt == CHOOSE elt \in S : TRUE + IN IF S = {} THEN 0 + ELSE Max(B[elt], MC[S \ {elt}]) + IN MC[DOMAIN B] + +MCSubBag(B) == + (*************************************************************************) + (* Definition of SubBag that TLC can handle. *) + (*************************************************************************) + LET AllBagsOfSubset == + (******************************************************************) + (* The set of all bags SB such that BagToSet(SB) \subseteq *) + (* BagToSet(B). *) + (******************************************************************) + UNION {[SB -> {n \in 1..MaxCopies(B) : n > 0}] : SB \in SUBSET BagToSet(B)} + IN {SB \in AllBagsOfSubset : \A e \in DOMAIN SB : SB[e] \leq B[e]} + +VARIABLES x + +(* S == {"a"} *) +S == {"a", "b", "c"} + +B1 == SetToBag(S) +B2 == BagCup(SetToBag(S), SetToBag({"a"})) +B3 == [i \in S |-> 3] +B4 == BagUnion({B1, B2, B3}) +B9 == BagCup(SetToBag(S), SetToBag({"a"})) + +F1(e) == CASE e = "a" -> "fa" + [] e = "b" -> "fa" + [] e = "c" -> "fc" + [] e = "d" -> "fc" + +Init == /\ Print("Computing Init", TRUE) + /\ x = 1 + +Next == UNCHANGED x + +Inv == + /\ Print("Computing Inv", TRUE) + /\ Print(<<"B1", B1>>, TRUE) + /\ Print(SetToBag({"a"}), TRUE) + + /\ LET B7 == (DOMAIN B1) \cup (DOMAIN SetToBag({"a"})) + e1(e, BB) == (IF e \in DOMAIN BB THEN BB[e] ELSE 0) + IN /\ IF B7 = {} + THEN Assert(FALSE, "Failed Test 0a") + ELSE Print("Test 0a OK", TRUE) + + /\ IF [e \in B7 |-> 2]["a"] # 2 + THEN Assert(FALSE, "Failed Test 0b") + ELSE Print("Test 0b OK", TRUE) + + /\ IF [e \in B7 |-> e1(e, B1)]["a"] # 1 + THEN Assert(FALSE, "Failed Test 0c") + ELSE Print("Test 0c OK", TRUE) + + /\ IF [e \in B7 |-> e1(e, SetToBag({"a"}))]["a"] # 1 + THEN Assert(FALSE, "Failed Test 0d") + ELSE Print("Test 0d OK", TRUE) + + /\ IF [e \in B7 |-> e1(e, B1) + e1(e,SetToBag({"a"}))]["a"] # 2 + THEN Assert(FALSE, "Failed Test 0e") + ELSE Print("Test 0e OK", TRUE) + + /\ IF B9["a"] # 2 + THEN Assert(FALSE, "Failed Test 1aa") + ELSE Print("Test 1aa OK", TRUE) + /\ Print("Finished test 1aa", TRUE) + + /\ IF B2["a"] # 2 + THEN Assert(FALSE, "Failed Test 1a") + ELSE Print("Test 1a OK", TRUE) + /\ Print("Finished test 1a", TRUE) + + /\ IF BagToSet(B9) # S + THEN Assert(FALSE, "Failed Test 1b") + ELSE Print("Test 1b OK", TRUE) + + /\ IF BagToSet(B2) # S + THEN Assert(FALSE, "Failed Test 1c") + ELSE Print("Test 1c OK", TRUE) + + /\ IF BagToSet(B1 -- SetToBag({"a"})) # {"c", "b"} + THEN Assert(FALSE, "Failed Test 2") + ELSE Print("Test 2 OK", TRUE) + + /\ IF BagToSet(B3) # BagToSet(B1) + THEN Assert(FALSE, "Failed Test 3") + ELSE Print("Test 3 OK", TRUE) + + /\ IF BagIn("a", B1 -- SetToBag({"a"})) + THEN Assert(FALSE, "Failed Test 4") + ELSE Print("Test 4 OK", TRUE) + + /\ IF ~BagIn("a", B2) + THEN Assert(FALSE, "Failed Test 5") + ELSE Print("Test 5 OK", TRUE) + + /\ IF EmptyBag # B1 -- B1 + THEN Assert(FALSE, "Failed Test 6") + ELSE Print("Test 6 OK", TRUE) + + /\ IF ~(B1 \sqsubseteq B2) + THEN Assert(FALSE, "Failed Test 7") + ELSE Print("Test 7 OK", TRUE) + + /\ IF ~(B2 \sqsubseteq B3) + THEN Assert(FALSE, "Failed Test 8") + ELSE Print("Test 8 OK", TRUE) + + /\ IF B2 \sqsubseteq B1 + THEN Assert(FALSE, "Failed Test 9") + ELSE Print("Test 9 OK", TRUE) + + /\ IF BagCup(B1, SetToBag({"d"})) \sqsubseteq B1 + THEN Assert(FALSE, "Failed Test 10") + ELSE Print("Test 10 OK", TRUE) + + /\ IF ~(B1 \sqsubseteq (B1 ++ SetToBag({"d"})) ) + THEN Assert(FALSE, "Failed Test 11") + ELSE Print("Test 11 OK", TRUE) + + /\ IF BagToSet(B2 ++ SetToBag({"d"})) # S \cup {"d"} + THEN Assert(FALSE, "Failed Test 12") + ELSE Print("Test 12 OK", TRUE) + + /\ IF Cardinality(SubBag(B1)) # Cardinality(SUBSET S) + THEN Assert(FALSE, "Failed Test 13") + ELSE Print("Test 13 OK", TRUE) + + /\ IF Cardinality(SubBag(B3)) # 64 + THEN Assert(FALSE, "Failed Test 14") + ELSE Print("Test 14 OK", TRUE) + + /\ IF CopiesIn("fa", BagOfAll(F1, B1)) # 2 + THEN Assert(FALSE, "Failed Test 15") + ELSE Print("Test 15 OK", TRUE) + + /\ IF CopiesIn("a", BagOfAll(F1, B1)) # 0 + THEN Assert(FALSE, "Failed Test 16") + ELSE Print("Test 16 OK", TRUE) + + /\ IF CopiesIn("fa", BagOfAll(F1, B3)) # 6 + THEN Assert(FALSE, "Failed Test 17") + ELSE Print("Test 17 OK", TRUE) + + /\ IF BagCardinality(B1) # 3 + THEN Assert(FALSE, "Failed Test 18") + ELSE Print("Test 18 OK", TRUE) + + /\ IF BagCardinality(B3) # 9 + THEN Assert(FALSE, "Failed Test 19") + ELSE Print("Test 19 OK", TRUE) + +========================================================================== + + +============================================================================= diff --git a/tlatools/test-model/suite/test23bis.cfg b/tlatools/test-model/suite/test23bis.cfg new file mode 100644 index 0000000000000000000000000000000000000000..6b7101b241f4a4d2db964521a677ea247a42e163 --- /dev/null +++ b/tlatools/test-model/suite/test23bis.cfg @@ -0,0 +1,5 @@ +INIT Init +NEXT Next +INVARIANT Inv +CONSTANT + SubBag <- MCSubBag diff --git a/tlatools/test-model/suite/test23bis.tla b/tlatools/test-model/suite/test23bis.tla new file mode 100644 index 0000000000000000000000000000000000000000..c8324c3c20a6582895b47c8015d9ed47cc972a3b --- /dev/null +++ b/tlatools/test-model/suite/test23bis.tla @@ -0,0 +1,146 @@ +--------------- MODULE test23 ------------- + +EXTENDS Naturals, FiniteSets, Bags, TLC + +VARIABLES x + +(* S == {"a"} *) +S == {"a", "b", "c"} + +B1 == SetToBag(S) +B2 == BagCup(SetToBag(S), SetToBag({"a"})) +B3 == [i \in S |-> 3] +B4 == BagUnion({B1, B2, B3}) +B9 == BagCup(SetToBag(S), SetToBag({"a"})) + +F1(e) == CASE e = "a" -> "fa" + [] e = "b" -> "fa" + [] e = "c" -> "fc" + [] e = "d" -> "fc" + +Init == /\ Print("Computing Init", TRUE) + /\ x = 1 + +Next == UNCHANGED x + +Inv == + /\ Print("Computing Inv", TRUE) + /\ Print(<<"B1", B1>>, TRUE) + /\ Print(SetToBag({"a"}), TRUE) + + /\ LET B7 == (DOMAIN B1) \cup (DOMAIN SetToBag({"a"})) + e1(e, BB) == (IF e \in DOMAIN BB THEN BB[e] ELSE 0) + IN /\ IF B7 = {} + THEN Assert(FALSE, "Failed Test 0a") + ELSE Print("Test 0a OK", TRUE) + + /\ IF [e \in B7 |-> 2]["a"] # 2 + THEN Assert(FALSE, "Failed Test 0b") + ELSE Print("Test 0b OK", TRUE) + + /\ IF [e \in B7 |-> e1(e, B1)]["a"] # 1 + THEN Assert(FALSE, "Failed Test 0c") + ELSE Print("Test 0c OK", TRUE) + + /\ IF [e \in B7 |-> e1(e, SetToBag({"a"}))]["a"] # 1 + THEN Assert(FALSE, "Failed Test 0d") + ELSE Print("Test 0d OK", TRUE) + + /\ IF [e \in B7 |-> e1(e, B1) + e1(e,SetToBag({"a"}))]["a"] # 2 + THEN Assert(FALSE, "Failed Test 0e") + ELSE Print("Test 0e OK", TRUE) + + /\ IF B9["a"] # 2 + THEN Assert(FALSE, "Failed Test 1aa") + ELSE Print("Test 1aa OK", TRUE) + /\ Print("Finished test 1aa", TRUE) + + /\ IF B2["a"] # 2 + THEN Assert(FALSE, "Failed Test 1a") + ELSE Print("Test 1a OK", TRUE) + /\ Print("Finished test 1a", TRUE) + + /\ IF BagToSet(B9) # S + THEN Assert(FALSE, "Failed Test 1b") + ELSE Print("Test 1b OK", TRUE) + + /\ IF BagToSet(B2) # S + THEN Assert(FALSE, "Failed Test 1c") + ELSE Print("Test 1c OK", TRUE) + + /\ IF BagToSet(B1 -- SetToBag({"a"})) # {"c", "b"} + THEN Assert(FALSE, "Failed Test 2") + ELSE Print("Test 2 OK", TRUE) + + /\ IF BagToSet(B3) # BagToSet(B1) + THEN Assert(FALSE, "Failed Test 3") + ELSE Print("Test 3 OK", TRUE) + + /\ IF BagIn("a", B1 -- SetToBag({"a"})) + THEN Assert(FALSE, "Failed Test 4") + ELSE Print("Test 4 OK", TRUE) + + /\ IF ~BagIn("a", B2) + THEN Assert(FALSE, "Failed Test 5") + ELSE Print("Test 5 OK", TRUE) + + /\ IF EmptyBag # B1 -- B1 + THEN Assert(FALSE, "Failed Test 6") + ELSE Print("Test 6 OK", TRUE) + + /\ IF ~(B1 \sqsubseteq B2) + THEN Assert(FALSE, "Failed Test 7") + ELSE Print("Test 7 OK", TRUE) + + /\ IF ~(B2 \sqsubseteq B3) + THEN Assert(FALSE, "Failed Test 8") + ELSE Print("Test 8 OK", TRUE) + + /\ IF B2 \sqsubseteq B1 + THEN Assert(FALSE, "Failed Test 9") + ELSE Print("Test 9 OK", TRUE) + + /\ IF BagCup(B1, SetToBag({"d"})) \sqsubseteq B1 + THEN Assert(FALSE, "Failed Test 10") + ELSE Print("Test 10 OK", TRUE) + + /\ IF ~(B1 \sqsubseteq (B1 ++ SetToBag({"d"})) ) + THEN Assert(FALSE, "Failed Test 11") + ELSE Print("Test 11 OK", TRUE) + + /\ IF BagToSet(B2 ++ SetToBag({"d"})) # S \cup {"d"} + THEN Assert(FALSE, "Failed Test 12") + ELSE Print("Test 12 OK", TRUE) + + /\ IF Cardinality(SubBag(B1)) # Cardinality(SUBSET S) + THEN Assert(FALSE, "Failed Test 13") + ELSE Print("Test 13 OK", TRUE) + + /\ IF Cardinality(SubBag(B3)) # 64 + THEN Assert(FALSE, "Failed Test 14") + ELSE Print("Test 14 OK", TRUE) + + /\ IF CopiesIn("fa", BagOfAll(F1, B1)) # 2 + THEN Assert(FALSE, "Failed Test 15") + ELSE Print("Test 15 OK", TRUE) + + /\ IF CopiesIn("a", BagOfAll(F1, B1)) # 0 + THEN Assert(FALSE, "Failed Test 16") + ELSE Print("Test 16 OK", TRUE) + + /\ IF CopiesIn("fa", BagOfAll(F1, B3)) # 6 + THEN Assert(FALSE, "Failed Test 17") + ELSE Print("Test 17 OK", TRUE) + + /\ IF BagCardinality(B1) # 3 + THEN Assert(FALSE, "Failed Test 18") + ELSE Print("Test 18 OK", TRUE) + + /\ IF BagCardinality(B3) # 9 + THEN Assert(FALSE, "Failed Test 19") + ELSE Print("Test 19 OK", TRUE) + +========================================================================== + + +============================================================================= diff --git a/tlatools/test-model/suite/test24.cfg b/tlatools/test-model/suite/test24.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d191341c2404a4660de5819024419df4563278cd --- /dev/null +++ b/tlatools/test-model/suite/test24.cfg @@ -0,0 +1,9 @@ + INIT + Init + + NEXT + Next + + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test24.tla b/tlatools/test-model/suite/test24.tla new file mode 100644 index 0000000000000000000000000000000000000000..9e24ff44d5f5d98b015f01bf310a2cf96da1ba5e --- /dev/null +++ b/tlatools/test-model/suite/test24.tla @@ -0,0 +1,71 @@ +--------------- MODULE test24 ------------- + +(* Test of UNCHANGED *) + +EXTENDS Naturals, TLC + +VARIABLES x, y + +Init == /\ x = [i \in 1..3 |-> i] + /\ y = 1 +Next == + + \/ /\ UNCHANGED <<x, y>> + /\ \A i \in 1..3 : (x[i])' = x[i] + /\ Print("Test 1 OK", TRUE) + + \/ /\ UNCHANGED <<x, y>> + /\ \A i \in 1..3 : UNCHANGED x[i] + /\ Print("Test 2 OK", TRUE) + + \/ /\ UNCHANGED <<x, y>> + /\ \A i \in 1..3 : UNCHANGED [a |-> x[i], b |-> x[i]+1] + /\ Print("Test 3 OK", TRUE) + + \/ /\ UNCHANGED <<x, y>> + /\ IF UNCHANGED \E i \in 1..3 : x[i]=3 + THEN Print("Test 4 OK", TRUE) + ELSE Assert(FALSE, "Test 4 Failed") + + \/ /\ UNCHANGED <<x, y>> + /\ IF UNCHANGED \A i \in 1..3 : x[i]=3 + THEN Print("Test 5 OK", TRUE) + ELSE Assert(FALSE, "Test 5 Failed") + + \/ /\ UNCHANGED <<x, y>> + /\ IF UNCHANGED CHOOSE i \in DOMAIN x : x[i] = 2 + THEN Print("Test 6 OK", TRUE) + ELSE Assert(FALSE, "Test 6 Failed") + + \/ /\ UNCHANGED <<x, y>> + /\ IF UNCHANGED {x[i] : i \in 1..2} + THEN Print("Test 7 OK", TRUE) + ELSE Assert(FALSE, "Test 7 Failed") + + \/ /\ UNCHANGED <<x, y>> + /\ IF UNCHANGED {i \in 3..5 : \E j \in 1..3 : x[j]=i} + THEN Print("Test 8 OK", TRUE) + ELSE Assert(FALSE, "Test 8 Failed") + + \/ /\ UNCHANGED <<x, y>> + /\ IF UNCHANGED DOMAIN x + THEN Print("Test 9 OK", TRUE) + ELSE Assert(FALSE, "Test 9 Failed") + + \/ /\ (y=1) /\ (y' = y+1) + /\ UNCHANGED <<x>> + /\ IF UNCHANGED {x} + THEN Print("Test 10 OK", TRUE) + ELSE Assert(FALSE, "Test 10 Failed") + + \/ /\ (y=1) /\ (y' = y+1) + /\ UNCHANGED <<x>> + /\ IF UNCHANGED {1, 2, y} + THEN Print("Test 11 OK", TRUE) + ELSE Assert(FALSE, "Test 11 Failed") + +Inv == TRUE +========================================================================== + + +============================================================================= diff --git a/tlatools/test-model/suite/test25.cfg b/tlatools/test-model/suite/test25.cfg new file mode 100644 index 0000000000000000000000000000000000000000..4ffaa30df7d616b53602ccd0633e211c7a778449 --- /dev/null +++ b/tlatools/test-model/suite/test25.cfg @@ -0,0 +1,12 @@ + INIT Init + + NEXT Next + + INVARIANT Inv + + CONSTANT + s1 = s1 + t1 = t1 + S = {s1, s2, s3} + T = {t1, t2} + c = c diff --git a/tlatools/test-model/suite/test25.tla b/tlatools/test-model/suite/test25.tla new file mode 100644 index 0000000000000000000000000000000000000000..f948d11468a1a99c96d324f902df107300c2d010 --- /dev/null +++ b/tlatools/test-model/suite/test25.tla @@ -0,0 +1,30 @@ +---------------------- MODULE test25 ---------------------- + +(* test of fingerprinting elements of [S -> [B -> C]] *) + +EXTENDS Naturals, Sequences, TLC + +CONSTANT S, T, s1, t1, c + +VARIABLES x, y, z, w + +Init == /\ Print("Should find only one state", TRUE) + /\ x = [i \in 1..3 |-> [j \in {4,5} |-> i+j]] + /\ y = [a |-> <<"b", "c">>, b |-> <<"c", "d", "e">>] + /\ z = [i \in S |-> [j \in {2,3} |-> j+1]] + /\ w = [i \in S |-> [j \in T |-> c]] + +Inv == TRUE + +Next == + \/ UNCHANGED <<x, y, z, w>> + + \/ /\ x' = << [j \in {4,5} |-> 1+j], [j \in {4,5} |-> 2+j], [j \in {4,5} |-> 3+j]>> + /\ y' = [i \in {"a", "b"} |-> + IF i = "a" THEN [j \in {1,2} |-> IF j = 1 THEN "b" ELSE "c"] + ELSE [<<"x", "d", "e">> EXCEPT ![1]= "c"]] + /\ z' = [[z EXCEPT ![s1] = [@ EXCEPT ![3] = 77]] EXCEPT ![s1][3] = 4] + /\ w' = [[w EXCEPT ![s1][t1] = s1] EXCEPT ![s1][t1] = c] + + +=========================================================== diff --git a/tlatools/test-model/suite/test26.cfg b/tlatools/test-model/suite/test26.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e2bf187389678424ffd4335584ec990172d1030d --- /dev/null +++ b/tlatools/test-model/suite/test26.cfg @@ -0,0 +1,3 @@ +INIT Init +NEXT Next +INVARIANT Inv diff --git a/tlatools/test-model/suite/test26.tla b/tlatools/test-model/suite/test26.tla new file mode 100644 index 0000000000000000000000000000000000000000..c5c569383bf9e97e33e8d3cebab1ca759fabe894 --- /dev/null +++ b/tlatools/test-model/suite/test26.tla @@ -0,0 +1,47 @@ +--------------- MODULE test26 ------------- + +(* Test of LET *) + +EXTENDS TLC, Naturals, Sequences + +VARIABLE x + +Init == x = 0 + +FcnSubst(f, e(_)) == + (* A recursive definition of [i \in DOMAIN f |-> e(i)] *) + LET Range == {f[i] : i \in DOMAIN f} + FSet == UNION { [U -> Range] : U \in SUBSET DOMAIN f} + FSub[g \in FSet] == + IF g = << >> + THEN g + ELSE LET el == CHOOSE el \in DOMAIN g : TRUE + IN [ i \in DOMAIN g |-> + IF i = el + THEN e(i) + ELSE FSub[[j \in (DOMAIN g) \ {el} |-> f[j]]][i]] + IN FSub[f] + + +Inv == + + /\ LET A == {} + B == A + IN IF B = {} + THEN Print("Test 1 OK", TRUE) + ELSE Assert(FALSE, "Test 1 Failed") + + /\ LET A == {} + B == A + C[i \in B] == 17 + IN IF C = << >> + THEN Print("Test 2 OK", TRUE) + ELSE Assert(FALSE, "Test 2 Failed") + + /\ LET e(i) == i+1 + IN IF FcnSubst(<<1,2,3>>, e) = <<2,3,4>> + THEN Print("Test 3 OK", TRUE) + ELSE Assert(FALSE, "Test 3 Failed") + +Next == UNCHANGED x +========================================= diff --git a/tlatools/test-model/suite/test27.cfg b/tlatools/test-model/suite/test27.cfg new file mode 100644 index 0000000000000000000000000000000000000000..1b488723acf2908759c2ebde0150fa06a8606089 --- /dev/null +++ b/tlatools/test-model/suite/test27.cfg @@ -0,0 +1,12 @@ +INIT Init +NEXT Next +INVARIANT Inv +CONSTANT + Data = {d1} + InitData = {d1} + Addr = {a1, a2} + N = 2 + InitData = {d1} + InLen = 2 + OutLen = 1 + ND = ND diff --git a/tlatools/test-model/suite/test27.tla b/tlatools/test-model/suite/test27.tla new file mode 100644 index 0000000000000000000000000000000000000000..f6e7a57e64ab2d70606c70c0ab6d85850af373d9 --- /dev/null +++ b/tlatools/test-model/suite/test27.tla @@ -0,0 +1,121 @@ +--------------------------- MODULE test27 ---------------------------------- +(***************************************************************************) +(* A fingerprint test that models LazyCache. *) +(***************************************************************************) + +EXTENDS Naturals, Sequences, FiniteSets, TLC + +CONSTANT Addr, (* A set *) + Data, (* A set *) + InitData, (* A subset of Data *) + ND, (* A model value *) + N, (* The number of processors *) + InLen, OutLen (* Maximum lengths of in and out *) + +VARIABLE mem, c, in, out + +Proc == 1..N + + +Exp(a, m) == + (*************************************************************************) + (* Recursive definition of a^n. *) + (*************************************************************************) + LET E[n \in Nat] == IF n = 0 THEN 1 ELSE a * E[n-1] + IN E[m] + +CountSeq(S, len) == + (*************************************************************************) + (* Number of elements in Seq(S) of length \leq len. *) + (*************************************************************************) + LET CS[n \in Nat] == + (*******************************************************************) + (* Recursive definition of CountSeq(S, n). There are *) + (* (Cardinality(S))^n sequences of length n. *) + (*******************************************************************) + IF n = 0 THEN 1 + ELSE Exp(Cardinality(S), n) + CS[n-1] + IN CS[len] + + +Op == (Data \X Addr) \cup {<<d, a, "*">> : d \in Data, a \in Addr} + (***********************************************) + (* Have to write Data \X Addr \X {"*"} *) + (* in this way. *) + (***********************************************) + +Restrict(f) == + { g \in [Addr -> Data \cup { ND }] : + \A a \in Addr: g[a] \in { f[a] , ND } } + +Init == /\ Print(LET D == Cardinality(Data) + A == Cardinality(Addr) + P == Cardinality(Proc) + IN <<"Number of distinct states =", + Exp(D, A) (* No. of values of mem *) + * Exp(D+1, P * A) (* No. of values of c *) + * Exp(CountSeq(Op, InLen), P) (* No. of values of in *) + * Exp(CountSeq(Data \X Addr, OutLen), P) (* No. of values of out *) + >>, TRUE) + /\ mem \in [Addr -> InitData] + /\ c \in [Proc -> Restrict(mem)] + /\ in = [i \in Proc |-> <<>>] + /\ out = [i \in Proc |-> <<>>] + +Inv == + /\ IF mem \in [Addr -> Data] + THEN TRUE + ELSE /\ Print("Conj 1 False", TRUE) + /\ FALSE + /\ IF c \in [Proc -> [Addr -> (Data \cup {ND})] ] + THEN TRUE + ELSE /\ Print("Conj 2 False", TRUE) + /\ FALSE + /\ IF in \in [Proc -> Seq(Op)] + THEN TRUE + ELSE /\ Print("Conj 3 False", TRUE) + /\ FALSE + /\ IF \A p \in Proc: Len(in[p]) \leq InLen + THEN TRUE + ELSE /\ Print("Conj 4 False", TRUE) + /\ FALSE + /\ IF out \in [Proc -> Seq(Data \X Addr)] + THEN TRUE + ELSE /\ Print("Conj 5 False", TRUE) + /\ FALSE + /\ IF \A p \in Proc: Len(out[p]) \leq OutLen + THEN TRUE + ELSE /\ Print("Conj 6 False", TRUE) + /\ FALSE + +Next == + \/ UNCHANGED <<mem, c, in, out>> + + \/ /\ \E a \in Addr, d \in Data : mem' = [mem EXCEPT ![a] = d] + /\ UNCHANGED <<c, in, out>> + + \/ \E p \in Proc : + + \/ /\ \E a \in Addr, d \in Data \cup {ND} : + c' = [c EXCEPT ![p][a] = d] + /\ UNCHANGED <<mem, in, out>> + + \/ /\ Len(out[p]) < OutLen + /\ \E o \in Data \X Addr : out' = [out EXCEPT ![p] = @ \o <<o>>] + /\ UNCHANGED <<mem, c, in>> + + \/ /\ Len(in[p]) < InLen + /\ \E o \in Op : in' = [in EXCEPT ![p] = @ \o <<o>>] + /\ UNCHANGED <<mem, c, out>> + + \/ /\ out[p] # << >> + /\ out' = [out EXCEPT ![p] = Tail(@)] + /\ UNCHANGED <<mem, c, in>> + + \/ /\ in[p] # << >> + /\ in' = [in EXCEPT ![p] = Tail(@)] + /\ UNCHANGED <<mem, c, out>> + + + +============================================================================= diff --git a/tlatools/test-model/suite/test28.cfg b/tlatools/test-model/suite/test28.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b0ee260b28eef2026bbc2f6cb01c89fd3d01d947 --- /dev/null +++ b/tlatools/test-model/suite/test28.cfg @@ -0,0 +1,8 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test28.tla b/tlatools/test-model/suite/test28.tla new file mode 100644 index 0000000000000000000000000000000000000000..55b36d6e15561e17f719ae2cc07ed3e8490563c6 --- /dev/null +++ b/tlatools/test-model/suite/test28.tla @@ -0,0 +1,31 @@ +--------------- MODULE test28 ------------- +\* Some random test + +EXTENDS TLC, Naturals, Sequences + +VARIABLE x + +BdedSeq(S, n) == UNION {[1..i -> S] : i \in 0..n} + +Init == /\ x = 2 + /\ x > 1 + /\ Print("Test 1 OK", TRUE) + /\ 1..x = {1,2} + /\ Print("Test 2 OK", TRUE) + /\ {i + 1 : i \in {x}} = {3} + /\ Print("Test 3 OK", TRUE) + /\ {i \in {x} : i = 2} = {2} + /\ Print("Test 4 OK", TRUE) + /\ \E i \in {x} : i = 2 + /\ Print("Test 5 OK", TRUE) + /\ \E i \in 1..x : i < x + /\ Print("Test 6 OK", TRUE) + /\ IF BdedSeq({x}, 2) # {<<>>, <<2>>, <<2,2>>} + THEN Print("Failed Test 7", TRUE) + ELSE Print("Test 7 OK", TRUE) + +Next == UNCHANGED x + +Inv == TRUE + +========================================= diff --git a/tlatools/test-model/suite/test29.cfg b/tlatools/test-model/suite/test29.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b0ee260b28eef2026bbc2f6cb01c89fd3d01d947 --- /dev/null +++ b/tlatools/test-model/suite/test29.cfg @@ -0,0 +1,8 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test29.tla b/tlatools/test-model/suite/test29.tla new file mode 100644 index 0000000000000000000000000000000000000000..86a5fbbd934b994310ba0b5cb63343fc0e273330 --- /dev/null +++ b/tlatools/test-model/suite/test29.tla @@ -0,0 +1,30 @@ +--------------- MODULE test29 ------------- + +\* Testing proper evaluation of primed variables in action + +EXTENDS TLC, Naturals, Sequences + +VARIABLE x + + +Init == x = 2 + +Next == /\ x' = 2 + /\ x' > 1 + /\ Print("Test 1 OK", TRUE) + /\ 1..x' = {1,2} + /\ Print("Test 2 OK", TRUE) + /\ {i + 1 : i \in {x'}} = {3} + /\ Print("Test 3 OK", TRUE) + /\ {i \in {x'} : i = 2} = {2} + /\ Print("Test 4 OK", TRUE) + /\ \E i \in {x'} : i = 2 + /\ Print("Test 5 OK", TRUE) + /\ \E i \in 1..x' : i < x' + /\ Print("Test 6 OK", TRUE) + + + +Inv == TRUE + +========================================= diff --git a/tlatools/test-model/suite/test3.cfg b/tlatools/test-model/suite/test3.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d32cfa879ee7389879ef2ad6bdf490a5e474c707 --- /dev/null +++ b/tlatools/test-model/suite/test3.cfg @@ -0,0 +1,12 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + CONSTANT + a = a + b = b + c = c diff --git a/tlatools/test-model/suite/test3.tla b/tlatools/test-model/suite/test3.tla new file mode 100644 index 0000000000000000000000000000000000000000..cba6800e84ce49d26b2d17f42587e1514d1e18d5 --- /dev/null +++ b/tlatools/test-model/suite/test3.tla @@ -0,0 +1,121 @@ +--------------- MODULE test3 ------------- + +(* Test of function application. *) + +EXTENDS Naturals, TLC + +VARIABLE x +CONSTANT a, b, c + +Type == x \in {1} +Inv == + /\ TRUE + + /\ IF [i \in {3, 2, 1} |-> i+1][3] # 4 + THEN Assert(FALSE, "Test 1") + ELSE Print("Test 1", TRUE) + + /\ IF <<a, b, c>>[2] # b + THEN Assert(FALSE, "Test 2") + ELSE Print("Test 2", TRUE) + + /\ IF [a |-> 1, b |-> 42, c |-> 99]["b"] # 42 + THEN Assert(FALSE, "Test 3" ) + ELSE Print("Test 3" , TRUE) + + /\ IF [i \in Nat |-> i+1][3] # 4 + THEN Assert(FALSE, "Test 4" ) + ELSE Print("Test 4" , TRUE) + + /\ IF [[i \in Nat |-> i+1] EXCEPT ![42] = 3, ![42] = 5][42] # 5 + THEN Assert(FALSE, "Test 5" ) + ELSE Print("Test 5" , TRUE) + + /\ IF [[i \in Nat |-> i+1] EXCEPT ![42] = 3, ![42] = 5][79] # 80 + THEN Assert(FALSE, "Test 6" ) + ELSE Print("Test 6" , TRUE) + + /\ IF [i \in Nat |-> [j \in Nat |-> 2*i + j]][5][3] # 13 + THEN Assert(FALSE, "Test 7" ) + ELSE Print("Test 7" , TRUE) + + /\ IF [[i \in Nat |-> [j \in Nat |-> 2*i + j]] EXCEPT ![5] = 11][5] # 11 + THEN Assert(FALSE, "Test 8" ) + ELSE Print("Test 8" , TRUE) + /\ IF [[i \in Nat |-> [j \in Nat |-> 2*i + j]] EXCEPT ![5][3] = @+1][5][3] # 14 + THEN Assert(FALSE, "Test 9" ) + ELSE Print("Test 9" , TRUE) + + /\ IF [[i \in Nat |-> [j \in Nat |-> 2*i + j]] + EXCEPT ![5][4] = @+2, ![5][3] = @+1][5][3] # 14 + THEN Assert(FALSE, "Test 10" ) + ELSE Print("Test 10" , TRUE) + + /\ IF [[i \in Nat |-> [j \in Nat |-> 2*i + j]] + EXCEPT ![5][3] = @+1, ![5][4] = @+2][5][3] # 14 + THEN Assert(FALSE, "Test 11" ) + ELSE Print("Test 11" , TRUE) + + /\ IF [[i \in Nat |-> [j \in Nat |-> 2*i + j]] + EXCEPT ![5][3] = @+1, ![5][3] = @+2][5][3] # 16 + THEN Assert(FALSE, "Test 12" ) + ELSE Print("Test 12" , TRUE) + + /\ IF [i \in Nat, j \in STRING |-> <<i+1, j>>][22, "b"] # <<23, "b">> + THEN Assert(FALSE, "Test 13" ) + ELSE Print("Test 13" , TRUE) + + /\ IF [i \in Nat, j \in STRING |-> <<i+1, j>>][<<22, "b">>] # <<23, "b">> + THEN Assert(FALSE, "Test 14" ) + ELSE Print("Test 14" , TRUE) + + /\ IF [[i \in Nat, j \in STRING |-> <<i+1, j>>] + EXCEPT ![22, "c"] = 15] [22, "b"] # <<23, "b">> + THEN Assert(FALSE, "Test 15" ) + ELSE Print("Test 15" , TRUE) + + /\ IF [[i \in Nat, j \in STRING |-> <<i+1, j>>] + EXCEPT ![22, "c"] = 15] [22, "c"] # 15 + THEN Assert(FALSE, "Test 16" ) + ELSE Print("Test 16" , TRUE) + + /\ IF [[i \in Nat, j \in STRING |-> <<i+1, j>>] + EXCEPT ![22, "c"] = 15] [<<22, "c">>] # 15 + THEN Assert(FALSE, "Test 17" ) + ELSE Print("Test 17" , TRUE) + + /\ IF [[i \in Nat, j \in STRING |-> <<i+1, j>>] + EXCEPT ![22, "c"] = 15, ![22, "d"] = 33] [22, "c"] # 15 + THEN Assert(FALSE, "Test 18" ) + ELSE Print("Test 18" , TRUE) + + /\ IF [[i \in Nat, j \in STRING |-> <<i+1, j>>] + EXCEPT ![22, "d"] = 33, ![22, "c"] = 15] [22, "c"] # 15 + THEN Assert(FALSE, "Test 19" ) + ELSE Print("Test 19" , TRUE) + + /\ IF [[i \in Nat, j \in STRING |-> <<i+1, j>>] + EXCEPT ![22, "d"] = 33, ![22, "d"] = 15] [22, "d"] # 15 + THEN Assert(FALSE, "Test 20" ) + ELSE Print("Test 20" , TRUE) + + /\ IF [[i \in Nat, j \in STRING |-> <<i+1, j>>] + EXCEPT ![22, "d"] = @[1]] [22, "d"] # 23 + THEN Assert(FALSE, "Test 21" ) + ELSE Print("Test 21" , TRUE) + + + /\ IF [[i \in Nat, j \in Nat |-> <<i+1, j>>] + EXCEPT ![22, 3] = @[1]] [22, 3] # 23 + THEN Assert(FALSE, "Test 22" ) + ELSE Print("Test 22" , TRUE) + + /\ Print("Tests completed", TRUE) + + + /\ Print("Tests completed", TRUE) + +Init == x = 1 + +Next == UNCHANGED x +========================================= diff --git a/tlatools/test-model/suite/test30-true.cfg b/tlatools/test-model/suite/test30-true.cfg new file mode 100644 index 0000000000000000000000000000000000000000..392d8232df0571fe24d200364209c46f8ae4dc1a --- /dev/null +++ b/tlatools/test-model/suite/test30-true.cfg @@ -0,0 +1,15 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + CONSTANT + P <- PRep + ++ <- PlusPlus + PLen <- Len + Plus <- + + Seq <- MCSeq + \o <- MCCat \ No newline at end of file diff --git a/tlatools/test-model/suite/test30-true.tla b/tlatools/test-model/suite/test30-true.tla new file mode 100644 index 0000000000000000000000000000000000000000..39aa0937add02d93fbb437e307f2fc24759b7155 --- /dev/null +++ b/tlatools/test-model/suite/test30-true.tla @@ -0,0 +1,47 @@ +--------------- MODULE test31 ------------- + +(* Test replacement of and by infix operators and overridden operators. *) + +EXTENDS TLC, Naturals, Sequences + +VARIABLE x + +CONSTANT P(_,_), _++_ , Plus(_, _), PLen(_) + +PlusPlus(a, b) == <<a, b>> + +PRep(a, b) == {a, b} + +MCSeq(a) = {a} + +MCCat(a, b) == a + b + +Init == /\ x = 1 + /\ IF P(2, x+3) = {2, 4} + THEN Print("Test 1 OK", TRUE) + ELSE Assert(FALSE, "Test 1 Failed") + /\ IF (2++(x+3)) = <<2, 4>> + THEN Print("Test 2 OK", TRUE) + ELSE Assert(FALSE, "Test 2 Failed") + /\ IF PLen(<<1, 2, 3>>) = 3 + THEN Print("Test 3 OK", TRUE) + ELSE Assert(FALSE, "Test 3 Failed") + /\ IF Plus(2, x+3) = 6 + THEN Print("Test 4 OK", TRUE) + ELSE Assert(FALSE, "Test 4 Failed") + /\ IF Seq(22) = {22} + THEN Print("Test 5 OK", TRUE) + ELSE Assert(FALSE, "Test 5 Failed") + /\ IF 1 \o 2 = 3 (* Huh???? *) + THEN Print("Test 6 OK", TRUE) + ELSE Assert(FALSE, "Test 6 Failed") + /\ LET a \prec b == a < b + IN IF 1 \prec 2 + THEN Print("Test 7 OK", TRUE) + ELSE Assert(FALSE, "Test 7 Failed") + +Next == UNCHANGED x + +Inv == TRUE + +========================================= diff --git a/tlatools/test-model/suite/test30.cfg b/tlatools/test-model/suite/test30.cfg new file mode 100644 index 0000000000000000000000000000000000000000..eecec9a4f071796a4236f4bf1bf5a1a1e115560e --- /dev/null +++ b/tlatools/test-model/suite/test30.cfg @@ -0,0 +1,15 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + CONSTANT + P <- PRep + PLen <- Len + Seq <- MCSeq + ++ <- PlusPlus + Plus <- + + \o <- + \ No newline at end of file diff --git a/tlatools/test-model/suite/test30.tla b/tlatools/test-model/suite/test30.tla new file mode 100644 index 0000000000000000000000000000000000000000..9be35d89a743e1d9f919d6ded96a944984e268c1 --- /dev/null +++ b/tlatools/test-model/suite/test30.tla @@ -0,0 +1,47 @@ +--------------- MODULE test30 ------------- + +(* Test replacement of and by infix operators and overridden operators. *) + +EXTENDS TLC, Naturals, Sequences + +VARIABLE x + +CONSTANT P(_,_), _++_ , Plus(_, _), PLen(_) + +PlusPlus(a, b) == <<a, b>> + +PRep(a, b) == {a, b} + +MCSeq(a) == {a} + +MCCat(a, b) == a + b + +Init == /\ x = 1 + /\ IF P(2, x+3) = {2, 4} + THEN Print("Test 1 OK", TRUE) + ELSE Assert(FALSE, "Test 1 Failed") + /\ IF (2++(x+3)) = <<2, 4>> + THEN Print("Test 2 OK", TRUE) + ELSE Assert(FALSE, "Test 2 Failed") + /\ IF PLen(<<1, 2, 3>>) = 3 + THEN Print("Test 3 OK", TRUE) + ELSE Assert(FALSE, "Test 3 Failed") + /\ IF Plus(2, x+3) = 6 + THEN Print("Test 4 OK", TRUE) + ELSE Assert(FALSE, "Test 4 Failed") + /\ IF Seq(22) = {22} + THEN Print("Test 5 OK", TRUE) + ELSE Assert(FALSE, "Test 5 Failed") + /\ IF 1 \o 2 = 3 (* Huh???? *) + THEN Print("Test 6 OK", TRUE) + ELSE Assert(FALSE, "Test 6 Failed") + /\ LET a \prec b == a < b + IN IF 1 \prec 2 + THEN Print("Test 7 OK", TRUE) + ELSE Assert(FALSE, "Test 7 Failed") + +Next == UNCHANGED x + +Inv == TRUE + +========================================= diff --git a/tlatools/test-model/suite/test31.cfg b/tlatools/test-model/suite/test31.cfg new file mode 100644 index 0000000000000000000000000000000000000000..c73ef51536cac7f74a6e6d78154edf3a7c89d042 --- /dev/null +++ b/tlatools/test-model/suite/test31.cfg @@ -0,0 +1,9 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + \ No newline at end of file diff --git a/tlatools/test-model/suite/test31.tla b/tlatools/test-model/suite/test31.tla new file mode 100644 index 0000000000000000000000000000000000000000..2b7a423e5886ff892a1ef38240362c49d658af25 --- /dev/null +++ b/tlatools/test-model/suite/test31.tla @@ -0,0 +1,20 @@ +--------------- MODULE test31 ------------- + +EXTENDS TLC, Naturals, Sequences, FiniteSets + +VARIABLE x, y + +Init == /\ Print("This test should generate 3 distinct state", TRUE) + /\ x = 1 + /\ y = 1 + +Next == \/ /\ Print("1", TRUE) + /\ x' \in {1, 2, 3} + /\ y' = 1 + /\ Print(<<"Generated state", x', y'>>, TRUE) + + \/ UNCHANGED <<x, y>> + +Inv == TRUE + +========================================= diff --git a/tlatools/test-model/suite/test32.cfg b/tlatools/test-model/suite/test32.cfg new file mode 100644 index 0000000000000000000000000000000000000000..c73ef51536cac7f74a6e6d78154edf3a7c89d042 --- /dev/null +++ b/tlatools/test-model/suite/test32.cfg @@ -0,0 +1,9 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + \ No newline at end of file diff --git a/tlatools/test-model/suite/test32.tla b/tlatools/test-model/suite/test32.tla new file mode 100644 index 0000000000000000000000000000000000000000..87a6664bf99a0b9f191409038712442737a9c418 --- /dev/null +++ b/tlatools/test-model/suite/test32.tla @@ -0,0 +1,32 @@ +--------------- MODULE test32 ------------- + +(* Test of [A]_e and <<A>>_e *) + +EXTENDS TLC, Naturals, Sequences, FiniteSets + +VARIABLE x, y + +Init == /\ x = 1 + /\ y = 1 + +Act1 == /\ x' = 1 + /\ y' = 1 + +Next == \/ /\ UNCHANGED <<x, y>> + /\ IF [x # x]_<<x,y>> + THEN Print("Test1 OK", TRUE) + ELSE Assert(FALSE, "Test 1 Failed") + /\ IF <<Act1>>_<<x,y>> + THEN Assert(FALSE, "Test 2 Failed") + ELSE Print("Test2 OK", TRUE) + + \/ /\ <<x'= 1 /\ y'=1>>_y + /\ Assert(FALSE, "Test 3 Failed") + + \/ /\ Print("Test 4 started -- should finish", TRUE) + /\ [FALSE]_<<x,y>> + /\ Print("Test 4 completed" , TRUE) + +Inv == TRUE + +========================================= diff --git a/tlatools/test-model/suite/test33.cfg b/tlatools/test-model/suite/test33.cfg new file mode 100644 index 0000000000000000000000000000000000000000..c73ef51536cac7f74a6e6d78154edf3a7c89d042 --- /dev/null +++ b/tlatools/test-model/suite/test33.cfg @@ -0,0 +1,9 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + \ No newline at end of file diff --git a/tlatools/test-model/suite/test33.tla b/tlatools/test-model/suite/test33.tla new file mode 100644 index 0000000000000000000000000000000000000000..9e003bb6c16936af9961f44fd48f0c48d1235449 --- /dev/null +++ b/tlatools/test-model/suite/test33.tla @@ -0,0 +1,23 @@ +--------------- MODULE test33 ------------- + +(* Test of large sets of functions *) + +EXTENDS TLC, Naturals + +VARIABLE x + +Init == /\ Print(<<"Computing", 7^6, "States">>, TRUE) + /\ x \in [1..6 -> 1..7] + +Next == UNCHANGED x + +Inv == TRUE +========================================= + +Works for 7^6 = 117649 states on dix in 43.049u 3.729s 1:16.97 60.7% + (1529 states/sec) +Works for 6^7 = 279936 states on dix in 113.333u 19.494s 3:37.24 61.1% + (1289 states/sec) +works for 7^7 = 823543 states on rowdy in 655.835u 158.050s 11:03.11 122.7% + (1242 states/sec) +Doesn't work for 7^7 = 823543 states on dix diff --git a/tlatools/test-model/suite/test34.cfg b/tlatools/test-model/suite/test34.cfg new file mode 100644 index 0000000000000000000000000000000000000000..df8f60f24b3d0c5ab136521162c93d401c5e7be4 --- /dev/null +++ b/tlatools/test-model/suite/test34.cfg @@ -0,0 +1,12 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + CONSTANT a = a + b = b + c = c + \ No newline at end of file diff --git a/tlatools/test-model/suite/test34.tla b/tlatools/test-model/suite/test34.tla new file mode 100644 index 0000000000000000000000000000000000000000..9dc008ae6c95f853eca91dc9f4dd8263026c4456 --- /dev/null +++ b/tlatools/test-model/suite/test34.tla @@ -0,0 +1,25 @@ +--------------- MODULE test34 ------------- + +(* Test Model Values *) + +EXTENDS TLC, Naturals, Sequences, FiniteSets + +CONSTANTS a, b, c + +VARIABLE x + +Init == x = 1 + +Next == UNCHANGED x + +Inv == /\ IF a \in STRING THEN Assert(FALSE, "Test 1 failed") + ELSE Print("Test 1 OK", TRUE) + /\ IF a = {1, 2} THEN Assert(FALSE, "Test 2 failed") + ELSE Print("Test 2 OK", TRUE) + /\ IF a \in {i \in Nat : i > 7} + THEN Assert(FALSE, "Test 3 failed") + ELSE Print("Test 3 OK", TRUE) + /\ IF a \in {b, c} THEN Assert(FALSE, "Test 4 failed") + ELSE Print("Test 4 OK", TRUE) + +========================================= diff --git a/tlatools/test-model/suite/test35.cfg b/tlatools/test-model/suite/test35.cfg new file mode 100644 index 0000000000000000000000000000000000000000..5e8cedc4cac917a8a41ec9ad1e980ca0e367180c --- /dev/null +++ b/tlatools/test-model/suite/test35.cfg @@ -0,0 +1,11 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + + + \ No newline at end of file diff --git a/tlatools/test-model/suite/test35.tla b/tlatools/test-model/suite/test35.tla new file mode 100644 index 0000000000000000000000000000000000000000..bae48a67643eb3f980d2c0880ad1ad91815c8e6f --- /dev/null +++ b/tlatools/test-model/suite/test35.tla @@ -0,0 +1,96 @@ +------------------------------ MODULE test35 ----------------------------- +(* Test of standard Sequences module. *) + +EXTENDS Sequences, Integers, TLC + +VARIABLES x + +Init == x = 0 + +Next == UNCHANGED x + +Inv == + /\ IF <<1, 2, 3>> \in Seq(Nat) + THEN Print("Test 1 OK", TRUE) + ELSE Assert(FALSE, "Test 1 Failed") + + /\ IF <<1, -2, 3>> \notin Seq(Nat) + THEN Print("Test 2 OK", TRUE) + ELSE Assert(FALSE, "Test 2 Failed") + + /\ IF <<1, 2, 3>> \o <<4, 5>> = <<1, 2, 3, 4, 5>> + THEN Print("Test 3 OK", TRUE) + ELSE Assert(FALSE, "Test 3 Failed") + + /\ IF << >> \o << >> = << >> + THEN Print("Test 4 OK", TRUE) + ELSE Assert(FALSE, "Test 4 Failed") + + /\ IF << >> \o <<1, 2 >> = <<1, 2 >> + THEN Print("Test 5 OK", TRUE) + ELSE Assert(FALSE, "Test 5 Failed") + + /\ IF Len(<< >>) = 0 + THEN Print("Test 6 OK", TRUE) + ELSE Assert(FALSE, "Test 6 Failed") + + /\ IF Len(<<1, 2, 3>>) = 3 + THEN Print("Test 7 OK", TRUE) + ELSE Assert(FALSE, "Test 7 Failed") + + /\ IF Append(<<1, 2, 3>>, 4) = <<1, 2, 3, 4>> + THEN Print("Test 8 OK", TRUE) + ELSE Assert(FALSE, "Test 8 Failed") + + /\ IF Append(<< >>, "a") = <<"a">> + THEN Print("Test 9 OK", TRUE) + ELSE Assert(FALSE, "Test 9 Failed") + + /\ IF Head(<< 1 >>) = 1 + THEN Print("Test 10 OK", TRUE) + ELSE Assert(FALSE, "Test 10 Failed") + + /\ IF Head(<<1, 2, 3>>) = 1 + THEN Print("Test 11 OK", TRUE) + ELSE Assert(FALSE, "Test 11 Failed") + + /\ IF Tail(<<1>>) = << >> + THEN Print("Test 12 OK", TRUE) + ELSE Assert(FALSE, "Test 12 Failed") + + /\ IF Tail (<<1, 2, 3>>) = <<2, 3>> + THEN Print("Test 13 OK", TRUE) + ELSE Assert(FALSE, "Test 13 Failed") + +(* /\ IF SubSeq(<<1, 2, 3, 4, 5>>, 2, 4) = <<2, 3, 4>> + THEN Print("Test 14 OK", TRUE) + ELSE Assert(FALSE, "Test 14 Failed") + + /\ IF SubSeq(<<1, 2, 3, 4, 5>>, 1, 1) = <<1>> + THEN Print("Test 15 OK", TRUE) + ELSE Assert(FALSE, "Test 15 Failed") *) + + /\ IF SubSeq(<<1, 2, 3, 4, 5>>, 2, 1) = <<>> + THEN Print("Test 16 OK", TRUE) + ELSE Assert(FALSE, "Test 16 Failed") + +(* /\ IF SubSeq(<<1, 2, 3, 4, 5>>, 5, 5) = <<5>> + THEN Print("Test 17 OK", TRUE) + ELSE Assert(FALSE, "Test 17 Failed") *) + + /\ IF LET T(a) == a \in Nat + IN SelectSeq(<<-1, 2, -3, 4, -5, 6>>, T) = <<2, 4, 6>> + THEN Print("Test 18 OK", TRUE) + ELSE Assert(FALSE, "Test 18 Failed") + + /\ IF LET T(a) == a \in Nat + IN SelectSeq(<<0, -1, 2, -3, 4, -5>>, T) = <<0, 2, 4>> + THEN Print("Test 19 OK", TRUE) + ELSE Assert(FALSE, "Test 19 Failed") + + /\ IF LET T(a) == a \in Nat + IN SelectSeq(<<-1, -3, -5>>, T) = << >> + THEN Print("Test 20 OK", TRUE) + ELSE Assert(FALSE, "Test 20 Failed") + +============================================================================= diff --git a/tlatools/test-model/suite/test36.cfg b/tlatools/test-model/suite/test36.cfg new file mode 100644 index 0000000000000000000000000000000000000000..5e8cedc4cac917a8a41ec9ad1e980ca0e367180c --- /dev/null +++ b/tlatools/test-model/suite/test36.cfg @@ -0,0 +1,11 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + + + \ No newline at end of file diff --git a/tlatools/test-model/suite/test36.tla b/tlatools/test-model/suite/test36.tla new file mode 100644 index 0000000000000000000000000000000000000000..fc4f689d0def508b0e72d6ec01ddccf30383e7bb --- /dev/null +++ b/tlatools/test-model/suite/test36.tla @@ -0,0 +1,90 @@ +----------------------------- MODULE test36 -------------------------------- + +(* Test of standard Bags module *) + +EXTENDS Naturals, TLC, Sequences, FiniteSets, Bags + +Bag1 == SetToBag({"a", "b"}) +Bag2 == Bag1 (+) SetToBag({"a"}) + +VARIABLES x +Init == x = 0 +Next == x'=x + +Inv == + /\ IF IsABag( Bag1 ) + THEN Print("Test 1 OK", TRUE) + ELSE Assert(FALSE, "Test 1 Failed") + + /\ IF BagToSet(Bag2) = {"a", "b"} + THEN Print("Test 2 OK", TRUE) + ELSE Assert(FALSE, "Test 2 Failed") + + /\ IF BagIn("a", Bag2) + THEN Print("Test 3 OK", TRUE) + ELSE Assert(FALSE, "Test 3 Failed") + + /\ IF ~BagIn("c", Bag2) + THEN Print("Test 4 OK", TRUE) + ELSE Assert(FALSE, "Test 4 Failed") + + /\ IF BagToSet(EmptyBag) = {} + THEN Print("Test 5 OK", TRUE) + ELSE Assert(FALSE, "Test 5 Failed") + + /\ IF EmptyBag (+) Bag2 = Bag2 + THEN Print("Test 6 OK", TRUE) + ELSE Assert(FALSE, "Test 6 Failed") + + /\ IF Bag2 (-) SetToBag({"a"}) = Bag1 + THEN Print("Test 7 OK", TRUE) + ELSE Assert(FALSE, "Test 7 Failed") + + /\ IF Bag1 (-) SetToBag({"a"}) = SetToBag({"b"}) + THEN Print("Test 8 OK", TRUE) + ELSE Assert(FALSE, "Test 8 Failed") + + /\ IF BagUnion({Bag1, Bag2}) = Bag1 (+) Bag2 + THEN Print("Test 9 OK", TRUE) + ELSE Assert(FALSE, "Test 9 Failed") + + /\ IF Bag1 \sqsubseteq Bag2 + THEN Print("Test 10 OK", TRUE) + ELSE Assert(FALSE, "Test 10 Failed") + + /\ Print("TLC Fails Tests 11 & 12 because SubBag not implemented", TRUE) +(* /\ IF Bag1 \in SubBag(Bag2) + THEN Print("Test 11 OK", TRUE) + ELSE Assert(FALSE, "Test 11 Failed") + + /\ IF Cardinality(SubBag(Bag2)) = 6 + THEN Print("Test 12 OK", TRUE) + ELSE Assert(FALSE, "Test 12 Failed") *) + + /\ IF LET f(a) == <<"c", a>> + IN CopiesIn(<<"c", "a">>, BagOfAll(f, Bag2)) = 2 + THEN Print("Test 13 OK", TRUE) + ELSE Assert(FALSE, "Test 13 Failed") + + /\ IF BagCardinality(Bag2) = 3 + THEN Print("Test 14 OK", TRUE) + ELSE Assert(FALSE, "Test 14 Failed") + + /\ IF CopiesIn("a", Bag2) = 2 + THEN Print("Test 15 OK", TRUE) + ELSE Assert(FALSE, "Test 15 Failed") + + /\ IF CopiesIn("c", Bag2) = 0 + THEN Print("Test 16 OK", TRUE) + ELSE Assert(FALSE, "Test 16 Failed") + + + +============================================================================= + +(* Last modified on Thu Aug 08 13:28:29 PT 2002 by lamport *) + + 6 Apr 99 : Modified version for standard module set + 7 Dec 98 : Corrected error found by Stephan Merz. + 6 Dec 98 : Modified comments based on suggestions by Lyle Ramshaw. + 5 Dec 98 : Initial version. \ No newline at end of file diff --git a/tlatools/test-model/suite/test37.cfg b/tlatools/test-model/suite/test37.cfg new file mode 100644 index 0000000000000000000000000000000000000000..5e8cedc4cac917a8a41ec9ad1e980ca0e367180c --- /dev/null +++ b/tlatools/test-model/suite/test37.cfg @@ -0,0 +1,11 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + + + \ No newline at end of file diff --git a/tlatools/test-model/suite/test37.tla b/tlatools/test-model/suite/test37.tla new file mode 100644 index 0000000000000000000000000000000000000000..bedc7c94e11d48293bf475f18968fec21770d45b --- /dev/null +++ b/tlatools/test-model/suite/test37.tla @@ -0,0 +1,29 @@ +---------------------------- MODULE test37 ----------------------------- + +(* Test of standard FiniteSets module *) + +EXTENDS FiniteSets, TLC + +VARIABLES x + +Init == x = 0 +Next == x'=x +Inv == + /\ IF IsFiniteSet({"a", "b"}) + THEN Print("Test 1 OK", TRUE) + ELSE Assert(FALSE, "Test 1 Failed") + + /\ IF IsFiniteSet({}) + THEN Print("Test 2 OK", TRUE) + ELSE Assert(FALSE, "Test 2 Failed") + + /\ IF Cardinality({}) = 0 + THEN Print("Test 3 OK", TRUE) + ELSE Assert(FALSE, "Test 3 Failed") + + /\ IF Cardinality({"a", "b"}) = 2 + THEN Print("Test 4 OK", TRUE) + ELSE Assert(FALSE, "Test 4 Failed") + + +============================================================================= diff --git a/tlatools/test-model/suite/test38.cfg b/tlatools/test-model/suite/test38.cfg new file mode 100644 index 0000000000000000000000000000000000000000..067eacc43100c3c5c3c09d818e2ed16510c3f573 --- /dev/null +++ b/tlatools/test-model/suite/test38.cfg @@ -0,0 +1,15 @@ + INIT + Init + + NEXT + Next + + CONSTANT c = c + + INVARIANT Inv + + + + + + \ No newline at end of file diff --git a/tlatools/test-model/suite/test38.tla b/tlatools/test-model/suite/test38.tla new file mode 100644 index 0000000000000000000000000000000000000000..580c1ba6cfdf2bae4368c3e69a47d072d9063773 --- /dev/null +++ b/tlatools/test-model/suite/test38.tla @@ -0,0 +1,16 @@ +---------------------------- MODULE test38 ----------------------------- + +(* Test of EXTENDS *) + +EXTENDS test38a, TLC + +VARIABLES x +\* CONSTANT c + +Init == MInit(x) +Next == x'=c +Inv == IF (x=c) THEN Print("Test OK", TRUE) + ELSE Print("Test Failed", TRUE) + + +============================================================================= diff --git a/tlatools/test-model/suite/test38a.tla b/tlatools/test-model/suite/test38a.tla new file mode 100644 index 0000000000000000000000000000000000000000..537c7c2415fba686c4fd29e3a4bc2ad6f6810923 --- /dev/null +++ b/tlatools/test-model/suite/test38a.tla @@ -0,0 +1,10 @@ +---------------------------- MODULE test38a ----------------------------- + +(* Test of EXTENDS *) + +\* VARIABLES x multiple declarations no longer allowed. + CONSTANT c + +MInit(x) == x = c + +============================================================================= diff --git a/tlatools/test-model/suite/test39.cfg b/tlatools/test-model/suite/test39.cfg new file mode 100644 index 0000000000000000000000000000000000000000..0cc6c2124ed19c2b3250dc1dfa1ab569eca3c252 --- /dev/null +++ b/tlatools/test-model/suite/test39.cfg @@ -0,0 +1,13 @@ + INIT + Init + + NEXT + Next + + CONSTRAINT Constraint + + INVARIANT Inv + + + + \ No newline at end of file diff --git a/tlatools/test-model/suite/test39.tla b/tlatools/test-model/suite/test39.tla new file mode 100644 index 0000000000000000000000000000000000000000..6e13785f161b10c66d29d5c8e1d8ca036d7ff516 --- /dev/null +++ b/tlatools/test-model/suite/test39.tla @@ -0,0 +1,36 @@ +--------------- MODULE test39 ------------- + +(* Test priming and operator arguments *) + +EXTENDS TLC, Integers, Sequences, FiniteSets + +VARIABLE x, y + +Init == /\ x = [i \in {1,2} |-> i] + /\ y = 1 + +Action1(c,d) == c' = [c EXCEPT ![1] = d'] +Action2(c,d) == c' = [c EXCEPT ![1] = d] + + +Next == \/ /\ y = 1 + /\ y' = 2 + /\ Action1(x, y) + /\ IF x[1]' = 2 + THEN Print("Test1 OK", TRUE) + ELSE Assert(FALSE, "Test1 Failed") + + \/ /\ y = 1 + /\ y' = 2 + /\ Action2(x, y) + /\ IF x[1]' = 1 + THEN Print("Test2 OK", TRUE) + ELSE Assert(FALSE, "Test2 Failed") + + \/ UNCHANGED <<x, y>> + +Inv == TRUE + + +Constraint == TRUE +========================================= diff --git a/tlatools/test-model/suite/test4.cfg b/tlatools/test-model/suite/test4.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b0ee260b28eef2026bbc2f6cb01c89fd3d01d947 --- /dev/null +++ b/tlatools/test-model/suite/test4.cfg @@ -0,0 +1,8 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test4.tla b/tlatools/test-model/suite/test4.tla new file mode 100644 index 0000000000000000000000000000000000000000..74529b488e490a575ed3f055105325faa103a418 --- /dev/null +++ b/tlatools/test-model/suite/test4.tla @@ -0,0 +1,72 @@ +--------------- MODULE test4 ------------- + +(* Test of fingerprinting of sets. *) + +EXTENDS Naturals, TLC, Sequences + +VARIABLE x, y, z, w + +Type == + /\ x \in {{1, 2, 3}} + /\ y \in {{"a", "b", "c"}} + /\ z \in {[a : {1, 2, 3}, b : {1, 2, 3}, c : {1, 2, 3}]} + /\ w \in {[{1, 2, 3} -> {1, 2, 3}]} + + +Init == + /\ Print("Should find only one distinct state", TRUE) + /\ x = {1, 2, 3} + /\ y = {"a", "b", "c"} + /\ z = [a : {1, 2, 3}, b : {1, 2, 3}, c : {1, 2, 3}] + /\ w = [{1, 2, 3} -> {1, 2, 3}] + +Inv == + /\ TRUE + /\ x = {1, 2, 3} + /\ y = {"a", "b", "c"} + /\ z = [a : {1, 2, 3}, b : {1, 2, 3}, c : {1, 2, 3}] + /\ w = [{1, 2, 3} -> {1, 2, 3}] + + +Next == + \/ /\ x' = {3, 3, 2, 1} + /\ UNCHANGED <<y, z, w>> + /\ Print("Test 1", TRUE) + + \/ /\ x' = 1..3 + /\ UNCHANGED <<y, z, w>> + /\ Print("Test 2", TRUE) + + \/ /\ x' = {i \in {5, 4, 3, 3, 2, 2, 1} : i \leq 3} + /\ UNCHANGED <<y, z, w>> + /\ Print("Test 2", TRUE) + + \/ /\ x' = {i-3 : i \in 4..6} + /\ UNCHANGED <<y, z, w>> + /\ Print("Test 2", TRUE) + + \/ /\ x' = {i-3 : i \in {6, 6, 5, 4, 4, 5, 5}} + /\ UNCHANGED <<y, z, w>> + /\ Print("Test 2", TRUE) + + \/ /\ x' = { f[i] : i \in 1..3, f \in [{1,2,3} -> {1,2,3}] } + /\ UNCHANGED <<y, z, w>> + /\ Print("Test 3", TRUE) + + \/ /\ y' = DOMAIN [a |-> 1, b |-> 2, c |-> 3] + /\ UNCHANGED <<x, z, w>> + /\ Print("Test 4", TRUE) + \/ /\ z' = [{"a", "b", "c"} -> {1, 2, 3}] + /\ UNCHANGED <<y, x, w>> + /\ Print("Test 5", TRUE) + + \/ /\ w' = [{3,1, 2} -> {1, 3, 2}] + /\ UNCHANGED <<y, x, z>> + /\ Print("Test 6", TRUE) + + \/ /\ w' = [{3,1, 3, 3, 3, 2} -> {2, 2, 1, 3, 2}] + /\ UNCHANGED <<y, x, z>> + /\ Print("Test 6", TRUE) + + +============================================ diff --git a/tlatools/test-model/suite/test40.cfg b/tlatools/test-model/suite/test40.cfg new file mode 100644 index 0000000000000000000000000000000000000000..5e8cedc4cac917a8a41ec9ad1e980ca0e367180c --- /dev/null +++ b/tlatools/test-model/suite/test40.cfg @@ -0,0 +1,11 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + + + \ No newline at end of file diff --git a/tlatools/test-model/suite/test40.tla b/tlatools/test-model/suite/test40.tla new file mode 100644 index 0000000000000000000000000000000000000000..e4d631d9757c5abcbf85f142bfe9e4c7c31b2040 --- /dev/null +++ b/tlatools/test-model/suite/test40.tla @@ -0,0 +1,101 @@ +------------------------------ MODULE test40 ----------------------------- +(* Test of standard Naturals module. *) + +EXTENDS Naturals, TLC + +VARIABLES x + +Init == x = 0 + +Next == UNCHANGED x + +Inv == + /\ IF 2^10 + 2^10 = 2^11 + THEN Print("Test 1 OK", TRUE) + ELSE Assert(FALSE, "Test 1 Failed") + + /\ IF 0^20 = 0 + THEN Print("Test 2 OK", TRUE) + ELSE Assert(FALSE, "Test 2 Failed") + + /\ IF 2^21 - 2^20 = 2^20 + THEN Print("Test 2a OK", TRUE) + ELSE Assert(FALSE, "Test 2a Failed") + + /\ IF 2 - 3 \notin Nat + THEN Print("Test 3 OK", TRUE) + ELSE Assert(FALSE, "Test 3 Failed") + + /\ IF 123 * 345 = 42435 + THEN Print("Test 4 OK", TRUE) + ELSE Assert(FALSE, "Test 4 Failed") + + /\ IF 123 < 124 + THEN Print("Test 5 OK", TRUE) + ELSE Assert(FALSE, "Test 5 Failed") + + /\ IF 12345 > 12344 + THEN Print("Test 6 OK", TRUE) + ELSE Assert(FALSE, "Test 6 Failed") + + /\ IF 123 \leq 123 + THEN Print("Test 7 OK", TRUE) + ELSE Assert(FALSE, "Test 7 Failed") + + /\ IF 12345 \geq 12345 + THEN Print("Test 8 OK", TRUE) + ELSE Assert(FALSE, "Test 8 Failed") + + /\ IF 123 \leq 124 + THEN Print("Test 9 OK", TRUE) + ELSE Assert(FALSE, "Test 9 Failed") + + /\ IF 12344 \geq 12333 + THEN Print("Test 10 OK", TRUE) + ELSE Assert(FALSE, "Test 10 Failed") + + /\ IF 145939 = 487 * (145939 \div 487) + (145939 % 487) + THEN Print("Test 11 OK", TRUE) + ELSE Assert(FALSE, "Test 11 Failed") + + /\ IF 139982 \div 1 = 139982 + THEN Print("Test 12 OK", TRUE) + ELSE Assert(FALSE, "Test 12 Failed") + + /\ IF 123099 % 1 = 0 + THEN Print("Test 13 OK", TRUE) + ELSE Assert(FALSE, "Test 13 Failed") + + /\ IF 0 % 345 = 0 + THEN Print("Test 14 OK", TRUE) + ELSE Assert(FALSE, "Test 14 Failed") + + /\ IF 24 % 9 = 6 + THEN Print("Test 15 OK", TRUE) + ELSE Assert(FALSE, "Test 15 Failed") + + /\ IF 4566799 = 423 * (4566799 \div 423) + (4566799 % 423) + THEN Print("Test 16 OK", TRUE) + ELSE Assert(FALSE, "Test 16 Failed") + + /\ IF 2222222 = 18 * (2222222 \div 18) + (2222222 % 18) + THEN Print("Test 17 OK", TRUE) + ELSE Assert(FALSE, "Test 17 Failed") + + /\ IF 3 .. 2 = {} + THEN Print("Test 18 OK", TRUE) + ELSE Assert(FALSE, "Test 18 Failed") + + /\ IF 2..4 = {2, 3, 4} + THEN Print("Test 19 OK", TRUE) + ELSE Assert(FALSE, "Test 19 Failed") + + /\ IF (0-1) * (0-3) = 3 + THEN Print("Test 20 OK", TRUE) + ELSE Assert(FALSE, "Test 20 Failed") + + /\ IF (0-1) % 3 = 2 + THEN Print("Test 21 OK", TRUE) + ELSE Assert(FALSE, "Test 21 Failed") + +============================================================================= diff --git a/tlatools/test-model/suite/test41.cfg b/tlatools/test-model/suite/test41.cfg new file mode 100644 index 0000000000000000000000000000000000000000..5e8cedc4cac917a8a41ec9ad1e980ca0e367180c --- /dev/null +++ b/tlatools/test-model/suite/test41.cfg @@ -0,0 +1,11 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + + + \ No newline at end of file diff --git a/tlatools/test-model/suite/test41.tla b/tlatools/test-model/suite/test41.tla new file mode 100644 index 0000000000000000000000000000000000000000..3101ecb97f7f4712251af5cf238c5842afc4eae9 --- /dev/null +++ b/tlatools/test-model/suite/test41.tla @@ -0,0 +1,130 @@ +------------------------------ MODULE test41 ----------------------------- +(* Test of standard Integers module. *) + +EXTENDS Integers, TLC + +VARIABLES x + +Init == x = 0 + +Next == UNCHANGED x + +Inv == + /\ IF 2^10 + 2^10 = 2^11 + THEN Print("Test 1 OK", TRUE) + ELSE Assert(FALSE, "Test 1 Failed") + + /\ IF 0^20 = 0 + THEN Print("Test 2 OK", TRUE) + ELSE Assert(FALSE, "Test 2 Failed") + + /\ IF 2 - 3 \in Int + THEN Print("Test 3 OK", TRUE) + ELSE Assert(FALSE, "Test 3 Failed") + + /\ IF (-123) * (-345) = 42435 + THEN Print("Test 4 OK", TRUE) + ELSE Assert(FALSE, "Test 4 Failed") + + /\ IF -123 > -124 + THEN Print("Test 5 OK", TRUE) + ELSE Assert(FALSE, "Test 5 Failed") + + /\ IF -12345 < -12344 + THEN Print("Test 6 OK", TRUE) + ELSE Assert(FALSE, "Test 6 Failed") + + /\ IF -123 \leq -123 + THEN Print("Test 7 OK", TRUE) + ELSE Assert(FALSE, "Test 7 Failed") + + /\ IF -12345 \geq -12345 + THEN Print("Test 8 OK", TRUE) + ELSE Assert(FALSE, "Test 8 Failed") + + /\ IF -123 \geq -124 + THEN Print("Test 9 OK", TRUE) + ELSE Assert(FALSE, "Test 9 Failed") + + /\ IF -12344 \leq 12333 + THEN Print("Test 10 OK", TRUE) + ELSE Assert(FALSE, "Test 10 Failed") + + /\ IF -145939 = 487 * ((-145939) \div 487) + ((-145939) % 487) + THEN Print("Test 11 OK", TRUE) + ELSE Assert(FALSE, "Test 11 Failed") + + /\ IF -139982 \div 1 = -139982 + THEN Print("Test 12 OK", TRUE) + ELSE Assert(FALSE, "Test 12 Failed") + + /\ IF -123099 % 1 = 0 + THEN Print("Test 13 OK", TRUE) + ELSE Assert(FALSE, "Test 13 Failed") + + /\ IF (-1) % 345 = 344 + THEN Print("Test 14 OK", TRUE) + ELSE Assert(FALSE, "Test 14 Failed") + + /\ IF (-24) % 9 = 3 + THEN Print("Test 15 OK", TRUE) + ELSE Assert(FALSE, "Test 15 Failed") + + /\ IF -4566799 = 423 * ((-4566799) \div 423) + ((-4566799) % 423) + THEN Print("Test 16 OK", TRUE) + ELSE Assert(FALSE, "Test 16 Failed") + + /\ IF -2222222 = 18 * ((-2222222) \div 18) + (-2222222 % 18) + THEN Print("Test 17 OK", TRUE) + ELSE Assert(FALSE, "Test 17 Failed") + + /\ IF (-2) .. (-3) = {} + THEN Print("Test 18 OK", TRUE) + ELSE Assert(FALSE, "Test 18 Failed") + + /\ IF (-4)..(-2) = {-2, -3, -4} + THEN Print("Test 19 OK", TRUE) + ELSE Assert(FALSE, "Test 19 Failed") + + /\ IF 2*3+4 = 10 + THEN Print("Test 20 OK", TRUE) + ELSE Assert(FALSE, "Test 20 Failed") + + /\ IF 2^3*3 = 24 + THEN Print("Test 21 OK", TRUE) + ELSE Assert(FALSE, "Test 21 Failed") + + + /\ IF 4+2*3 = 10 + THEN Print("Test 22 OK", TRUE) + ELSE Assert(FALSE, "Test 22 Failed") + + + /\ IF 3*2^3 = 24 + THEN Print("Test 23 OK", TRUE) + ELSE Assert(FALSE, "Test 23 Failed") + + + /\ IF 1 + -2 = -1 + THEN Print("Test 24 OK", TRUE) + ELSE Assert(FALSE, "Test 24 Failed") + + + /\ IF 5 + 5 \div 2 = 7 + THEN Print("Test 25 OK", TRUE) + ELSE Assert(FALSE, "Test 25 Failed") + + /\ IF 5 \div 2 + 2 = 4 + THEN Print("Test 26 OK", TRUE) + ELSE Assert(FALSE, "Test 26 Failed") + + /\ IF 3 - 2 * 5 = -7 + THEN Print("Test 27 OK", TRUE) + ELSE Assert(FALSE, "Test 27 Failed") + + /\ IF 4 * 2 % 3 = 2 + THEN Print("Test 28 OK", TRUE) + ELSE Assert(FALSE, "Test 28 Failed") + + +============================================================================= diff --git a/tlatools/test-model/suite/test42.cfg b/tlatools/test-model/suite/test42.cfg new file mode 100644 index 0000000000000000000000000000000000000000..5e8cedc4cac917a8a41ec9ad1e980ca0e367180c --- /dev/null +++ b/tlatools/test-model/suite/test42.cfg @@ -0,0 +1,11 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + + + \ No newline at end of file diff --git a/tlatools/test-model/suite/test42.tla b/tlatools/test-model/suite/test42.tla new file mode 100644 index 0000000000000000000000000000000000000000..2768d3996b52860a848531b47edca7c6b9e69590 --- /dev/null +++ b/tlatools/test-model/suite/test42.tla @@ -0,0 +1,44 @@ +--------------- MODULE test42 ------------- + +(* Test of operator arguments *) + +EXTENDS TLC, Integers, Sequences + +VARIABLE x + +a ++ b == a + b + +Foo(a, _--_) == a -- 0 + + +Init == x = 1 + + +Next == x' = x + +FooBar(a, Op(_,_)) == Op(a, 0) + +Plus(a, b) == a + b + +Inv == /\ IF FooBar(7, Plus) = 7 + THEN Print("Test 1 OK", TRUE) + ELSE Assert(FALSE, "Test 1 Failed") + + /\ IF FooBar(7,+) = 7 + THEN Print("Test 2 OK", TRUE) + ELSE Assert(FALSE, "Test 2 Failed") + + /\ IF Foo(7, *) = 0 + THEN Print("Test 3 OK", TRUE) + ELSE Assert(FALSE, "Test 3 Failed") + + /\ IF Foo(7,+) = 7 + THEN Print("Test 4 OK", TRUE) + ELSE Assert(FALSE, "Test 4 Failed") + + /\ IF Foo(7,++) = 7 + THEN Print("Test 5 OK", TRUE) + ELSE Assert(FALSE, "Test 5 Failed") + +Constraint == TRUE +========================================= diff --git a/tlatools/test-model/suite/test43.cfg b/tlatools/test-model/suite/test43.cfg new file mode 100644 index 0000000000000000000000000000000000000000..5e8cedc4cac917a8a41ec9ad1e980ca0e367180c --- /dev/null +++ b/tlatools/test-model/suite/test43.cfg @@ -0,0 +1,11 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + + + \ No newline at end of file diff --git a/tlatools/test-model/suite/test43.tla b/tlatools/test-model/suite/test43.tla new file mode 100644 index 0000000000000000000000000000000000000000..65ed2fe94fc9b732312cf42bcc8cc21651f3f407 --- /dev/null +++ b/tlatools/test-model/suite/test43.tla @@ -0,0 +1,83 @@ +--------------- MODULE test43 ------------- + +(* Test of TLC module *) + +EXTENDS TLC, Integers, Sequences + +VARIABLE x + +FApply(f, Op(_,_), Identity) == + LET fa[S \in SUBSET DOMAIN f] == + IF S = { } THEN Identity + ELSE LET s == CHOOSE s \in S : TRUE + IN Op(f[s], fa[S \ {s}]) + + IN fa[DOMAIN f] + +BoundedSeq(S, n) == UNION {[1..i -> S] : i \in 0..n} +Plus(a, b) == a + b + +Times(a, b) == a * b + +Init == x = 1 + +Next == x' = x + +Inv == + + /\ IF FApply([i \in {"a", "b", "c"} |-> 3], Times, 1) = 27 + THEN Print("Test 1 OK", TRUE) + ELSE Assert(FALSE, "Test 1 Failed") + + /\ IF FApply(<<3, 4, 5, 6>> , Plus, 0) = 18 + THEN Print("Test 2 OK", TRUE) + ELSE Assert(FALSE, "Test 2 Failed") + + /\ IF FApply(<<3>> , Plus, 0) = 3 + THEN Print("Test 3 OK", TRUE) + ELSE Assert(FALSE, "Test 3 Failed") + + /\ IF FApply(<<>> , Plus, 7) = 7 + THEN Print("Test 4 OK", TRUE) + ELSE Assert(FALSE, "Test 4 Failed") + + /\ IF <<1, 2>> \in BoundedSeq(1..3, 3) + THEN Print("Test 5 OK", TRUE) + ELSE Assert(FALSE, "Test 5 Failed") + + /\ IF <<1, 2, 3>> \notin BoundedSeq(1..3, 2) + THEN Print("Test 6 OK", TRUE) + ELSE Assert(FALSE, "Test 6 Failed") + + /\ IF <<-1, 2>> \notin BoundedSeq(1..4, 6) + THEN Print("Test 7 OK", TRUE) + ELSE Assert(FALSE, "Test 7 Failed") + + /\ IF << >> \in BoundedSeq({"a", "b"}, 2) + THEN Print("Test 8 OK", TRUE) + ELSE Assert(FALSE, "Test 8 Failed") + + /\ IF \A s \in BoundedSeq({"a", "b", "c"}, 2) : + Len(s) \leq 2 + THEN Print("Test 9 OK", TRUE) + ELSE Assert(FALSE, "Test 10 Failed") + + /\ IF SortSeq(<<3, 2, 4, 2>>, \leq) = <<2, 2, 3, 4>> + THEN Print("Test 10 OK", TRUE) + ELSE Assert(FALSE, "Test 12 Failed") + + /\ IF SortSeq(<<3, 2, 4, 2>>, <) = <<2, 2, 3, 4>> + THEN Print("Test 11 OK", TRUE) + ELSE Assert(FALSE, "Test 13 Failed") + + /\ IF SortSeq(<<>>, >) = <<>> + THEN Print("Test 12 OK", TRUE) + ELSE Assert(FALSE, "Test 14 Failed") + + /\ IF SortSeq(<<1>>, >) = <<1>> + THEN Print("Test 13 OK", TRUE) + ELSE Assert(FALSE, "Test 15 Failed") + + +Constraint == TRUE +========================================= diff --git a/tlatools/test-model/suite/test44.cfg b/tlatools/test-model/suite/test44.cfg new file mode 100644 index 0000000000000000000000000000000000000000..5e8cedc4cac917a8a41ec9ad1e980ca0e367180c --- /dev/null +++ b/tlatools/test-model/suite/test44.cfg @@ -0,0 +1,11 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + + + \ No newline at end of file diff --git a/tlatools/test-model/suite/test44.tla b/tlatools/test-model/suite/test44.tla new file mode 100644 index 0000000000000000000000000000000000000000..5370ca0aa508575ac0fa71fe4c5bb12103e9469b --- /dev/null +++ b/tlatools/test-model/suite/test44.tla @@ -0,0 +1,479 @@ +--------------- MODULE test44 ------------- + +(* Test of operator precedence and associativity . *) + +EXTENDS TLC, Integers, Sequences + +VARIABLE x + +Init == x = 1 + + +Next == x' = x + + +a | b == <<a, b>> +a || b == <<a, b>> +a & b == <<a, b>> +a && b == <<a, b>> +a $ b == <<a, b>> +a $$ b == <<a, b>> +a ?? b == <<a, b>> +a %% b == <<a, b>> +a ## b == <<a, b>> +a ++ b == <<a, b>> +a -- b == <<a, b>> +a ** b == <<a, b>> +a (+) b == <<a, b>> +a (-) b == <<a, b>> +a (.) b == <<a, b>> + +a (\X) b == <<a, b>> + +\* a \otimes b == <<a, b>> +a \uplus b == <<a, b>> +a \sqcap b == <<a, b>> +a \sqcup b == <<a, b>> +a \star b == <<a, b>> +a \bigcirc b == <<a, b>> +a \bullet b == <<a, b>> + +a ... b == <<a, b>> +a // b == <<a, b>> +a ^^ b == <<a, b>> +a !! b == <<a, b>> +a |- b == <<a, b>> +a |= b == <<a, b>> +a -| b == <<a, b>> +a =| b == <<a, b>> + +a <: b == <<a, b>> + + +a := b == <<a, b>> +a ::= b == <<a, b>> +a (/) b == <<a, b>> +\* a \oslash b == <<a, b>> +a \wr b == <<a, b>> +a \prec b == <<a, b>> +a \succ b == <<a, b>> +a \preceq b == <<a, b>> +a \succeq b == <<a, b>> +a \sim b == <<a, b>> +a \simeq b == <<a, b>> +a \ll b == <<a, b>> +a \gg b == <<a, b>> +a \asymp b == <<a, b>> +a \subset b == <<a, b>> +a \supset b == <<a, b>> +a \supseteq b == <<a, b>> +a \approx b == <<a, b>> +a \cong b == <<a, b>> +a \sqsubset b == <<a, b>> +a \sqsupset b == <<a, b>> +a \sqsubseteq b == <<a, b>> +a \sqsupseteq b == <<a, b>> +a \doteq b == <<a, b>> +a \propto b == <<a, b>> + + +Inv == + /\ IF (3 - 2 - 1) = 0 + THEN Print("Test 1 OK", TRUE) + ELSE Assert(FALSE, "Test 1 Failed") + + /\ IF 1 | 2 | 3 = <<<<1, 2>>, 3>> + THEN Print("Test 2 OK", TRUE) + ELSE Assert(FALSE, "Test 2 Failed") + + /\ IF 1 || 2 || 3 = <<<<1, 2>>, 3>> + THEN Print("Test 3 OK", TRUE) + ELSE Assert(FALSE, "Test 3 Failed") + + /\ IF 1 & 2 & 3 = <<<<1, 2>>, 3>> + THEN Print("Test 4 OK", TRUE) + ELSE Assert(FALSE, "Test 4 Failed") + + /\ IF 1 && 2 && 3 = <<<<1, 2>>, 3>> + THEN Print("Test 5 OK", TRUE) + ELSE Assert(FALSE, "Test 5 Failed") + + /\ IF 1 $ 2 $ 3 = <<<<1, 2>>, 3>> + THEN Print("Test 6 OK", TRUE) + ELSE Assert(FALSE, "Test 6 Failed") + + /\ IF 1 $$ 2 $$ 3 = <<<<1, 2>>, 3>> + THEN Print("Test 7 OK", TRUE) + ELSE Assert(FALSE, "Test 7 Failed") + + /\ IF 1 ?? 2 ?? 3 = <<<<1, 2>>, 3>> + THEN Print("Test 8 OK", TRUE) + ELSE Assert(FALSE, "Test 8 Failed") + + /\ IF TRUE + THEN Print("Test 9 OK", TRUE) + ELSE Assert(FALSE, "Test 9 Failed") + + /\ IF 1 %% 2 %% 3 = <<<<1, 2>>, 3>> + THEN Print("Test 10 OK", TRUE) + ELSE Assert(FALSE, "Test 10 Failed") + + /\ IF 1 ## 2 ## 3 = <<<<1, 2>>, 3>> + THEN Print("Test 11 OK", TRUE) + ELSE Assert(FALSE, "Test 11 Failed") + + /\ IF 1 ++ 2 ++ 3 = <<<<1, 2>>, 3>> + THEN Print("Test 12 OK", TRUE) + ELSE Assert(FALSE, "Test 12 Failed") + + /\ IF 1 -- 2 -- 3 = <<<<1, 2>>, 3>> + THEN Print("Test 13 OK", TRUE) + ELSE Assert(FALSE, "Test 13 Failed") + + /\ IF 1 ** 2 ** 3 = <<<<1, 2>>, 3>> + THEN Print("Test 14 OK", TRUE) + ELSE Assert(FALSE, "Test 14 Failed") + + /\ IF 1 (+) 2 (+) 3 = <<<<1, 2>>, 3>> + THEN Print("Test 15 OK", TRUE) + ELSE Assert(FALSE, "Test 15 Failed") + + /\ IF 1 (-) 2 (-) 3 = <<<<1, 2>>, 3>> + THEN Print("Test 16 OK", TRUE) + ELSE Assert(FALSE, "Test 16 Failed") + + /\ IF 1 (.) 2 (.) 3 = <<<<1, 2>>, 3>> + THEN Print("Test 17 OK", TRUE) + ELSE Assert(FALSE, "Test 17 Failed") + + /\ IF 1 (\X) 2 (\X) 3 = <<<<1, 2>>, 3>> + THEN Print("Test 18 OK", TRUE) + ELSE Assert(FALSE, "Test 18 Failed") + + /\ IF 1 \oplus 2 \oplus 3 = <<<<1, 2>>, 3>> + THEN Print("Test 19 OK", TRUE) + ELSE Assert(FALSE, "Test 19 Failed") + + /\ IF 1 \ominus 2 \ominus 3 = <<<<1, 2>>, 3>> + THEN Print("Test 20 OK", TRUE) + ELSE Assert(FALSE, "Test 20 Failed") + + /\ IF 1 \odot 2 \odot 3 = <<<<1, 2>>, 3>> + THEN Print("Test 21 OK", TRUE) + ELSE Assert(FALSE, "Test 21 Failed") + + /\ IF 1 \otimes 2 \otimes 3 = <<<<1, 2>>, 3>> + THEN Print("Test 22 OK", TRUE) + ELSE Assert(FALSE, "Test 22 Failed") + + /\ IF 1 \uplus 2 \uplus 3 = <<<<1, 2>>, 3>> + THEN Print("Test 23 OK", TRUE) + ELSE Assert(FALSE, "Test 23 Failed") + + + /\ IF 1 \sqcap 2 \sqcap 3 = <<<<1, 2>>, 3>> + THEN Print("Test 24 OK", TRUE) + ELSE Assert(FALSE, "Test 24 Failed") + + /\ IF 1 \sqcup 2 \sqcup 3 = <<<<1, 2>>, 3>> + THEN Print("Test 25 OK", TRUE) + ELSE Assert(FALSE, "Test 25 Failed") + + /\ IF 1 \star 2 \star 3 = <<<<1, 2>>, 3>> + THEN Print("Test 26 OK", TRUE) + ELSE Assert(FALSE, "Test 26 Failed") + + /\ IF <<1>> \o <<2>> \o <<3>> = <<1, 2, 3>> + THEN Print("Test 27 OK", TRUE) + ELSE Assert(FALSE, "Test 27 Failed") + + /\ IF 1 \bigcirc 2 \bigcirc 3 = <<<<1, 2>>, 3>> + THEN Print("Test 28 OK", TRUE) + ELSE Assert(FALSE, "Test 28 Failed") + + /\ IF 1 \bullet 2 \bullet 3 = <<<<1, 2>>, 3>> + THEN Print("Test 29 OK", TRUE) + ELSE Assert(FALSE, "Test 29 Failed") + + /\ IF 1 ... 2 = <<1, 2>> + THEN Print("Test 30 OK", TRUE) + ELSE Assert(FALSE, "Test 30 Failed") + + /\ IF 1 // 2 = <<1, 2>> + THEN Print("Test 31 OK", TRUE) + ELSE Assert(FALSE, "Test 31 Failed") + + /\ IF 1 ^^ 2 = <<1, 2>> + THEN Print("Test 32 OK", TRUE) + ELSE Assert(FALSE, "Test 32 Failed") + + /\ IF 1 !! 2 = <<1, 2>> + THEN Print("Test 33 OK", TRUE) + ELSE Assert(FALSE, "Test 33 Failed") + + /\ IF (1 |- 2) = <<1, 2>> + THEN Print("Test 34 OK", TRUE) + ELSE Assert(FALSE, "Test 34 Failed") + + /\ IF (1 |= 2) = <<1, 2>> + THEN Print("Test 35 OK", TRUE) + ELSE Assert(FALSE, "Test 35 Failed") + + /\ IF (1 -| 2) = <<1, 2>> + THEN Print("Test 36 OK", TRUE) + ELSE Assert(FALSE, "Test 36 Failed") + + /\ IF (1 =| 2) = <<1, 2>> + THEN Print("Test 37 OK", TRUE) + ELSE Assert(FALSE, "Test 37 Failed") + + /\ IF 1 <: 2 = <<1, 2>> + THEN Print("Test 38 OK", TRUE) + ELSE Assert(FALSE, "Test 38 Failed") + + /\ IF TRUE + THEN Print("Test 39 OK", TRUE) + ELSE Assert(FALSE, "Test 39 Failed") + + /\ IF (1 := 2) = <<1, 2>> + THEN Print("Test 40 OK", TRUE) + ELSE Assert(FALSE, "Test 40 Failed") + + /\ IF (1 ::= 2) = <<1, 2>> + THEN Print("Test 41 OK", TRUE) + ELSE Assert(FALSE, "Test 41 Failed") + + /\ IF 1 (/) 2 = <<1, 2>> + THEN Print("Test 42 OK", TRUE) + ELSE Assert(FALSE, "Test 42 Failed") + + /\ IF 1 \oslash 2 = <<1, 2>> + THEN Print("Test 43 OK", TRUE) + ELSE Assert(FALSE, "Test 43 Failed") + + /\ IF 1 \wr 2 = <<1, 2>> + THEN Print("Test 44 OK", TRUE) + ELSE Assert(FALSE, "Test 44 Failed") + + /\ IF (1 \prec 2) = <<1, 2>> + THEN Print("Test 45 OK", TRUE) + ELSE Assert(FALSE, "Test 45 Failed") + + /\ IF (1 \succ 2) = <<1, 2>> + THEN Print("Test 46 OK", TRUE) + ELSE Assert(FALSE, "Test 46 Failed") + + /\ IF (1 \preceq 2) = <<1, 2>> + THEN Print("Test 47 OK", TRUE) + ELSE Assert(FALSE, "Test 47 Failed") + + /\ IF (1 \succeq 2) = <<1, 2>> + THEN Print("Test 48 OK", TRUE) + ELSE Assert(FALSE, "Test 48 Failed") + + /\ IF (1 \sim 2) = <<1, 2>> + THEN Print("Test 49 OK", TRUE) + ELSE Assert(FALSE, "Test 49 Failed") + + /\ IF (1 \simeq 2) = <<1, 2>> + THEN Print("Test 50 OK", TRUE) + ELSE Assert(FALSE, "Test 50 Failed") + + /\ IF (1 \ll 2) = <<1, 2>> + THEN Print("Test 51 OK", TRUE) + ELSE Assert(FALSE, "Test 51 Failed") + + /\ IF (1 \gg 2) = <<1, 2>> + THEN Print("Test 52 OK", TRUE) + ELSE Assert(FALSE, "Test 52 Failed") + + /\ IF (1 \asymp 2) = <<1, 2>> + THEN Print("Test 53 OK", TRUE) + ELSE Assert(FALSE, "Test 53 Failed") + + /\ IF (1 \subset 2) = <<1, 2>> + THEN Print("Test 54 OK", TRUE) + ELSE Assert(FALSE, "Test 54 Failed") + + /\ IF (1 \supset 2) = <<1, 2>> + THEN Print("Test 55 OK", TRUE) + ELSE Assert(FALSE, "Test 55 Failed") + + /\ IF (1 \supseteq 2) = <<1, 2>> + THEN Print("Test 56 OK", TRUE) + ELSE Assert(FALSE, "Test 56 Failed") + + /\ IF (1 \approx 2) = <<1, 2>> + THEN Print("Test 57 OK", TRUE) + ELSE Assert(FALSE, "Test 57 Failed") + + /\ IF (1 \cong 2) = <<1, 2>> + THEN Print("Test 58 OK", TRUE) + ELSE Assert(FALSE, "Test 58 Failed") + + /\ IF (1 \sqsubset 2) = <<1, 2>> + THEN Print("Test 59 OK", TRUE) + ELSE Assert(FALSE, "Test 59 Failed") + + /\ IF (1 \sqsupset 2) = <<1, 2>> + THEN Print("Test 60 OK", TRUE) + ELSE Assert(FALSE, "Test 60 Failed") + + /\ IF (1 \sqsubseteq 2) = <<1, 2>> + THEN Print("Test 61 OK", TRUE) + ELSE Assert(FALSE, "Test 61 Failed") + + /\ IF (1 \sqsupseteq 2) = <<1, 2>> + THEN Print("Test 62 OK", TRUE) + ELSE Assert(FALSE, "Test 62 Failed") + + /\ IF (1 \doteq 2) = <<1, 2>> + THEN Print("Test 63 OK", TRUE) + ELSE Assert(FALSE, "Test 63 Failed") + + /\ IF (1 \propto 2) = <<1, 2>> + THEN Print("Test 64 OK", TRUE) + ELSE Assert(FALSE, "Test 64 Failed") + + /\ IF << <<1, 2>>, 3 >> = 1 & 2 ... 3 + THEN Print("Test 65 OK", TRUE) + ELSE Assert(FALSE, "Test 65 Failed") + + + /\ IF << <<1, 2>>, 3 >> = 1 && 2 ... 3 + THEN Print("Test 66 OK", TRUE) + ELSE Assert(FALSE, "Test 66 Failed") + + + /\ IF << <<1, 2>>, 3 >> = 1 ** 2 ... 3 + THEN Print("Test 67 OK", TRUE) + ELSE Assert(FALSE, "Test 67 Failed") + + /\ IF << <<1, 2>>, 3 >> = 1 // 2 ... 3 + THEN Print("Test 68 OK", TRUE) + ELSE Assert(FALSE, "Test 68 Failed") + + /\ IF << <<1, 2>>, 3 >> = 1 ^^ 2 ... 3 + THEN Print("Test 69 OK", TRUE) + ELSE Assert(FALSE, "Test 69 Failed") + + /\ IF << <<1, 2>>, 3 >> = 1 (/) 2 ... 3 + THEN Print("Test 70 OK", TRUE) + ELSE Assert(FALSE, "Test 70 Failed") + + /\ IF << <<1, 2>>, 3 >> = 1 (.) 2 ... 3 + THEN Print("Test 71 OK", TRUE) + ELSE Assert(FALSE, "Test 71 Failed") + + /\ IF << <<1, 2>>, 3 >> = 1 \star 2 ... 3 + THEN Print("Test 72 OK", TRUE) + ELSE Assert(FALSE, "Test 72 Failed") + + /\ IF << <<1, 2>>, 3 >> = 1 \bigcirc 2 ... 3 + THEN Print("Test 73 OK", TRUE) + ELSE Assert(FALSE, "Test 73 Failed") + + /\ IF << <<1, 2>>, 3 >> = 1 \bullet 2 ... 3 + THEN Print("Test 74 OK", TRUE) + ELSE Assert(FALSE, "Test 74 Failed") + + + /\ IF << <<1, 2>>, 3 >> = (1 $ 2 \sim 3) + THEN Print("Test 75 OK", TRUE) + ELSE Assert(FALSE, "Test 75 Failed") + + + /\ IF << <<1, 2>>, 3 >> = (1 $$ 2 \simeq 3) + THEN Print("Test 76 OK", TRUE) + ELSE Assert(FALSE, "Test 76 Failed") + + + /\ IF << <<1, 2>>, 3 >> = (1 $ 2 \gg 3) + THEN Print("Test 77 OK", TRUE) + ELSE Assert(FALSE, "Test 77 Failed") + + /\ IF << <<1, 2>>, 3 >> = (1 -- 2 ++ 3) + THEN Print("Test 78 OK", TRUE) + ELSE Assert(FALSE, "Test 78 Failed") + + /\ IF << <<1, 2>>, 3 >> = (1 -- 2 <: 3) + THEN Print("Test 79 OK", TRUE) + ELSE Assert(FALSE, "Test 79 Failed") + + + /\ IF << <<1, 2>>, 3 >> = (1 !! 2 \ll 3) + THEN Print("Test 80 OK", TRUE) + ELSE Assert(FALSE, "Test 80 Failed") + + /\ IF << <<1, 2>>, 3 >> = 1 (-) 2 (+) 3 + THEN Print("Test 81 OK", TRUE) + ELSE Assert(FALSE, "Test 81 Failed") + + /\ IF << <<1, 2>>, 3 >> = (1 ++ 2 |- 3) + THEN Print("Test 82 OK", TRUE) + ELSE Assert(FALSE, "Test 82 Failed") + + /\ IF << <<1, 2>>, 3 >> = 1 (.) 2 (-) 3 + THEN Print("Test 83 OK", TRUE) + ELSE Assert(FALSE, "Test 83 Failed") + + /\ IF << <<1, 2>>, 3 >> = (1 \bullet 2 \prec 3) + THEN Print("Test 84 OK", TRUE) + ELSE Assert(FALSE, "Test 84 Failed") + + /\ IF << <<1, 2>>, 3 >> = (1 \uplus 2 \approx 3) + THEN Print("Test 85 OK", TRUE) + ELSE Assert(FALSE, "Test 85 Failed") + + + /\ IF << <<1, 2>>, 3 >> = (1 ++ 2 \sim 3) + THEN Print("Test 86 OK", TRUE) + ELSE Assert(FALSE, "Test 86 Failed") + + /\ IF << <<1, 2>>, 3 >> = (1 (/) 2 (-) 3) + THEN Print("Test 87 OK", TRUE) + ELSE Assert(FALSE, "Test 87 Failed") + + + +Constraint == TRUE +========================================= + +<< {"..."}, "Infix", <<P.dotdot, P.dotdot>>, "none" >>, +<< {"//"}, "Infix", <<P.times, P.times>>, "none" >>, +<< {"^^"}, "Infix", <<P.exponent, P.exponent>>, "none" >>, +<< {"!!"}, "Infix", <<P.dotdot, P.times>>, "none" >>, +<< {"|-"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"|="}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"-|"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"=|"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"<:"}, "Infix", <<P.colongt, P.colongt>>, "none" >>, +<< {":>"}, "Infix", <<P.colongt, P.colongt>>, "none" >>, +<< {":="}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"::="}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"(/)", "\oslash"}, "Infix", <<P.times, P.times>>, "none" >>, +<< {"\wr"}, "Infix", <<P.dotdot, P.exponent>>, "none" >>, +<< {"\prec"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"\succ"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"\preceq"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"\succeq"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"\sim"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"\simeq"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"\ll"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"\gg"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"\asymp"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"\subset"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"\supset"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"\supseteq"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"\approx"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"\cong"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"\sqsubset"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"\sqsupset"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"\sqsubseteq"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"\sqsupseteq"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"\doteq"}, "Infix", <<P.equals, P.equals>>, "none" >>, +<< {"\propto"}, "Infix", <<P.equals, P.equals>>, "none" >> + + + + diff --git a/tlatools/test-model/suite/test45.cfg b/tlatools/test-model/suite/test45.cfg new file mode 100644 index 0000000000000000000000000000000000000000..5e8cedc4cac917a8a41ec9ad1e980ca0e367180c --- /dev/null +++ b/tlatools/test-model/suite/test45.cfg @@ -0,0 +1,11 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + + + \ No newline at end of file diff --git a/tlatools/test-model/suite/test45.tla b/tlatools/test-model/suite/test45.tla new file mode 100644 index 0000000000000000000000000000000000000000..66d29e9fe2cda1723e527fde5992e8a5e32e0cef --- /dev/null +++ b/tlatools/test-model/suite/test45.tla @@ -0,0 +1,92 @@ +------------------------------ MODULE test45 ----------------------------- +(* Test of recursive function definitions. *) + +EXTENDS Naturals, TLC + +VARIABLES x + +Init == x = 2 + +Next == UNCHANGED x + +f[i \in 0..5] == [j \in 0..5 |-> + IF j = 0 + THEN [k \in 0..i |-> + IF k = 0 THEN i + ELSE f[i][1] + 1] + ELSE IF i = 0 + THEN j + ELSE f[i-1][j] + 1 ] + +g[i \in 0..5] == [j \in 0..i |-> + IF j = 0 + THEN IF i = 0 THEN 0 + ELSE g[i-1][i-1] + ELSE g[i][j-1]+x] + + +h[i \in 0..3, j \in 0..3] == [k \in 0..3 |-> + IF k = 0 + THEN IF j = 0 + THEN IF i = 0 THEN 0 + ELSE h[i-1,j][k] + 1 + ELSE h[i,j-1][k]+1 + ELSE h[i,j][k-1] + 1] + +(* g[0][0] = 0 + g[0][j] = j * x + g[i][j] = j * x + g[i-1][i-1] + = (j + i-1) * x + g[i-2][i-2] + = (j + i + i-1) * x + g[i-3][i-2] + = ... *) + +Inv == /\ IF f[4][3] = 7 + THEN Print("Test 1 OK", TRUE) + ELSE Assert(FALSE, "Test 1 Failed") + + /\ IF f[4][0][2] = 6 + THEN Print("Test 2 OK", TRUE) + ELSE Assert(FALSE, "Test 2 Failed") + + /\ IF DOMAIN g[3] = 0..3 + THEN Print("Test 3 OK", TRUE) + ELSE Assert(FALSE, "Test 3 Failed") + + /\ IF DOMAIN f[5][0] = 0..5 + THEN Print("Test 4 OK", TRUE) + ELSE Assert(FALSE, "Test 4 Failed") + + /\ IF g[0][0] = 0 + THEN Print("Test 5 OK", TRUE) + ELSE Assert(FALSE, "Test 5 Failed") + + /\ IF g[3][3] = 12 + THEN Print("Test 6 OK", TRUE) + ELSE Assert(FALSE, "Test 6 Failed") + + /\ IF g[3][1] = 8 + THEN Print("Test 7 OK", TRUE) + ELSE Assert(FALSE, "Test 7 Failed") + + /\ IF g[2][0] = 2 + THEN Print("Test 8 OK", TRUE) + ELSE Assert(FALSE, "Test 8 Failed") + + /\ IF DOMAIN h[1,2] = 0..3 + THEN Print("Test 9 OK", TRUE) + ELSE Assert(FALSE, "Test 9 Failed") + + /\ IF DOMAIN h = (0..3) \X (0..3) + THEN Print("Test 10 OK", TRUE) + ELSE Assert(FALSE, "Test 10 Failed") + + /\ IF h[2, 3] = [i \in 0..3 |-> i+5] + THEN Print("Test 11 OK", TRUE) + ELSE Assert(FALSE, "Test 11 Failed") + + /\ IF h[1, 2][3] = 6 + THEN Print("Test 12 OK", TRUE) + ELSE Assert(FALSE, "Test 12 Failed") + + +============================================================================= diff --git a/tlatools/test-model/suite/test46.cfg b/tlatools/test-model/suite/test46.cfg new file mode 100644 index 0000000000000000000000000000000000000000..29941a19ca7c8e1d69ca3edf5999b370184f8bb6 --- /dev/null +++ b/tlatools/test-model/suite/test46.cfg @@ -0,0 +1,13 @@ +CONSTANTS + Reg = {r1} + Adr = {a1} + Val = {v1,v2} + Proc = {p1, p2} + +INIT Init + +NEXT Next + +CONSTRAINT Constraint + +INVARIANT TypeInvariant diff --git a/tlatools/test-model/suite/test46.tla b/tlatools/test-model/suite/test46.tla new file mode 100644 index 0000000000000000000000000000000000000000..1968254c3759950d0ff42992aea0633029c169b6 --- /dev/null +++ b/tlatools/test-model/suite/test46.tla @@ -0,0 +1,49 @@ +--------------------- MODULE test46 ----------------------- + +(* This found a bug in Version 1.03 of 18 Oct 1999 *) + +EXTENDS Naturals, Sequences, FiniteSets, TLC +CONSTANT Reg, Adr, Val, Proc +VARIABLE reqQ, reqOrder + +Request == [adr : Adr, val : Val, op : {"Rd", "Wr"}] +FreeRegVal == [adr : Adr, val : Val, op : {"Free"}] + +reqId == UNION { [proc : {p}, idx : DOMAIN reqQ[p]] : p \in Proc } + +oi \prec oj == <<oi, oj>> \in reqOrder + +TypeInvariant == + /\ reqQ \in [Proc -> Seq(Request \cup [reg : Reg])] + /\ reqOrder \in SUBSET (reqId \X reqId) + +Init == /\ reqQ = [p \in Proc |-> << >>] + /\ reqOrder = {} + +GoodReqOrder == + /\ \A oi, oj, ok \in reqId : (oi \prec oj) /\ (oj \prec ok) => (oi \prec ok) + /\ \A oi \in reqId : ~(oi \prec oi) + /\ \A oi, oj \in reqId : + (oi.proc = oj.proc) /\ (oi.idx < oj.idx) => (oi \prec oj) + +----------------------------------------------------------------------------- +UpdateReqOrder == + /\ reqOrder' \in SUBSET(reqId' \X reqId') + /\ reqOrder \subseteq reqOrder' + /\ GoodReqOrder' + +IssueRequest(proc, req, reg) == + (*************************************************************************) + (* The action by which processor proc issues request req in register *) + (* reg. *) + (*************************************************************************) + /\ reqQ' = [reqQ EXCEPT ![proc] = Append(@, [reg |-> reg])] + /\ UpdateReqOrder + + +Next == \E proc \in Proc, reg \in Reg : + \E req \in Request : IssueRequest(proc, req, reg) + + +Constraint == \A p \in Proc : Len(reqQ[p]) < 2 +============================================================================= diff --git a/tlatools/test-model/suite/test47.cfg b/tlatools/test-model/suite/test47.cfg new file mode 100644 index 0000000000000000000000000000000000000000..5e8cedc4cac917a8a41ec9ad1e980ca0e367180c --- /dev/null +++ b/tlatools/test-model/suite/test47.cfg @@ -0,0 +1,11 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + + + \ No newline at end of file diff --git a/tlatools/test-model/suite/test47.tla b/tlatools/test-model/suite/test47.tla new file mode 100644 index 0000000000000000000000000000000000000000..ba1931feae621a40e0d124b820b5217cf591e2ab --- /dev/null +++ b/tlatools/test-model/suite/test47.tla @@ -0,0 +1,12 @@ +------- MODULE test47 ----- + +\* Checks EXTENDing of both Naturals and Integers + +EXTENDS test47a , Integers + +Init == x = -1 + +Next == x'= IF x = -3 THEN x ELSE x - 1 + +Inv == TRUE +========================== diff --git a/tlatools/test-model/suite/test47a.tla b/tlatools/test-model/suite/test47a.tla new file mode 100644 index 0000000000000000000000000000000000000000..6fcfebb7d549774fc7f5f52eae4fbcc40256a492 --- /dev/null +++ b/tlatools/test-model/suite/test47a.tla @@ -0,0 +1,7 @@ +------------- MODULE test47a -------------- + +EXTENDS Naturals, TLC + + +VARIABLE x +============================================= diff --git a/tlatools/test-model/suite/test48.cfg b/tlatools/test-model/suite/test48.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e3e8c3d2505a0163440775d92531a92d4321811c --- /dev/null +++ b/tlatools/test-model/suite/test48.cfg @@ -0,0 +1,2 @@ +INIT Init +NEXT Next diff --git a/tlatools/test-model/suite/test48.tla b/tlatools/test-model/suite/test48.tla new file mode 100644 index 0000000000000000000000000000000000000000..b2841590f92154b4a528b147e8d47276e49ad883 --- /dev/null +++ b/tlatools/test-model/suite/test48.tla @@ -0,0 +1,148 @@ +--------------- MODULE test48 ------------- + +(* test definability of all user-definable infix, prefix, and postfix + operators *) + +EXTENDS TLC + +VARIABLE x + + +z - y == z +z + y == z +z * y == z +z / y == z +z ^ y == z +z < y == z +z > y == z +z .. y == z +z ... y == z +z | y == z +z || y == z +z & y == z +z && y == z +z $ y == z +z $$ y == z +z ?? y == z +z %% y == z +z ## y == z +z ++ y == z +z -- y == z +z ** y == z +z // y == z +z ^^ y == z +\* z @@ y == z \* THIS IS DEFINED IN THE TLC MODULE +z !! y == z +z |- y == z +z |= y == z +z -| y == z +z =| y == z +z <: y == z +\* z :> y == z \* THIS IS DEFINED IN THE TLC MODULE +z := y == z +z ::= y == z +z \uplus y == z +z \sqcap y == z +z \sqcup y == z +z \div y == z +z \wr y == z +z \star y == z +z \bigcirc y == z +z \bullet y == z +z \prec y == z +z \succ y == z +z \preceq y == z +z \succeq y == z +z \sim y == z +z \simeq y == z +z \ll y == z +z \gg y == z +z \asymp y == z +z \subset y == z +z \supset y == z +z \supseteq y == z +z \approx y == z +z \cong y == z +z \sqsubset y == z +z \sqsupset y == z +z \sqsubseteq y == z +z \sqsupseteq y == z +z \doteq y == z +z \propto y == z + +z ^+ == z +z ^* == z +z ^# == z +-. z == z + + +Init == + /\ x = 0 + +Next == +/\ x = 0 +/\ + \/ x' = x - 1 + \/ x' = x + 1 + \/ x' = x * 1 + \/ x' = x / 1 + \/ x' = x ^ 1 + \/ x' = (x < 1) + \/ x' = (x > 1) + \/ x' = x .. 1 + \/ x' = x ... 1 + \/ x' = x | 1 + \/ x' = x || 1 + \/ x' = x & 1 + \/ x' = x && 1 + \/ x' = x $ 1 + \/ x' = x $$ 1 + \/ x' = x ?? 1 + \/ x' = x %% 1 + \/ x' = x ## 1 + \/ x' = x ++ 1 + \/ x' = x -- 1 + \/ x' = x ** 1 + \/ x' = x // 1 + \/ x' = x ^^ 1 + \/ x' = x !! 1 + \/ x' = (x |- 1) + \/ x' = (x |= 1) + \/ x' = (x -| 1) + \/ x' = (x =| 1) + \/ x' = (x <: 1) + \/ x' = (x := 1) + \/ x' = (x ::= 1) + \/ x' = (x \uplus 1) + \/ x' = (x \sqcap 1) + \/ x' = (x \sqcup 1) + \/ x' = x \div 1 + \/ x' = x \wr 1 + \/ x' = x \star 1 + \/ x' = x \bigcirc 1 + \/ x' = x \bullet 1 + \/ x' = (x \prec 1 ) + \/ x' = (x \succ 1) + \/ x' = (x \preceq 1) + \/ x' = (x \succeq 1) + \/ x' = (x \sim 1) + \/ x' = (x \simeq 1) + \/ x' = (x \ll 1) + \/ x' = (x \gg 1) + \/ x' = (x \asymp 1) + \/ x' = (x \subset 1) + \/ x' = (x \supset 1) + \/ x' = (x \supseteq 1) + \/ x' = (x \approx 1) + \/ x' = (x \cong 1) + \/ x' = (x \sqsubset 1) + \/ x' = (x \sqsupset 1) + \/ x' = (x \sqsubseteq 1) + \/ x' = (x \sqsupseteq 1) + \/ x' = (x \doteq 1) + \/ x' = (x \propto 1) + \/ x' = x ^+ + \/ x' = x ^* + \/ x' = x ^# + \/ x' = -x +============================================================================= diff --git a/tlatools/test-model/suite/test49.cfg b/tlatools/test-model/suite/test49.cfg new file mode 100644 index 0000000000000000000000000000000000000000..a90b2d83eaffc0a49e4b947d3b1b1b9345cc8605 --- /dev/null +++ b/tlatools/test-model/suite/test49.cfg @@ -0,0 +1,3 @@ +INIT Init +NEXT Next + diff --git a/tlatools/test-model/suite/test49.tla b/tlatools/test-model/suite/test49.tla new file mode 100644 index 0000000000000000000000000000000000000000..b14cd37f18677ded82092280125ebbc9d1fc47ac --- /dev/null +++ b/tlatools/test-model/suite/test49.tla @@ -0,0 +1,36 @@ +--------------- MODULE test49 ------------- + +(* test definability of operators with aliases *) + + +EXTENDS TLC + +VARIABLE x + +u (+) v == u +u (-) v == u +u (.) v == u +u (/) v == u +u (\X) v == u +u \o v == u +u % v == u +u \leq v == u +u \geq v == u + + +Init == + /\ x = 0 + +Next == + /\ x = 0 + /\ + \/ x' = x (+) 1 + \/ x' = x (-) 1 + \/ x' = x (.) 1 + \/ x' = x (/) 1 + \/ x' = x (\X) 1 + \/ x' = x \o 1 + \/ x' = x % 1 + \/ x' = (x \leq 1) + \/ x' = (x \geq 1 ) +======================================= diff --git a/tlatools/test-model/suite/test49a.cfg b/tlatools/test-model/suite/test49a.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e3e8c3d2505a0163440775d92531a92d4321811c --- /dev/null +++ b/tlatools/test-model/suite/test49a.cfg @@ -0,0 +1,2 @@ +INIT Init +NEXT Next diff --git a/tlatools/test-model/suite/test49a.tla b/tlatools/test-model/suite/test49a.tla new file mode 100644 index 0000000000000000000000000000000000000000..49ae3003ae37d4e6391b9302d7733ef7c9c3508c --- /dev/null +++ b/tlatools/test-model/suite/test49a.tla @@ -0,0 +1,39 @@ +--------------- MODULE test49a ------------- + +(* test definability of operators with aliases *) + + +EXTENDS TLC + +VARIABLE x + +u (+) v == u +u (-) v == u +u (.) v == u +u (/) v == u +u (\X) v == u \* parser can't cope with this +u \o v == u +u % v == u +u \leq v == u +u \geq v == u + + +Init == + /\ x = 0 + /\ Print("******************************************************", TRUE) + /\ Print("Several tests have been commented out because of bugs.", TRUE) + /\ Print("******************************************************", TRUE) + +Next == + /\ x = 0 + /\ + \/ x' = x (+) 1 \* caused TLC bug + \/ x' = x (-) 1 \* caused TLC bug + \/ x' = x (.) 1 \* caused TLC bug + \/ x' = x (/) 1 \* caused TLC bug + \/ x' = x (\X) 1 \* parser can't cope with this. + \/ x' = x \o 1 + \/ x' = x % 1 + \/ x' = (x \leq 1) + \/ x' = (x \geq 1 ) +======================================= diff --git a/tlatools/test-model/suite/test49b.cfg b/tlatools/test-model/suite/test49b.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e3e8c3d2505a0163440775d92531a92d4321811c --- /dev/null +++ b/tlatools/test-model/suite/test49b.cfg @@ -0,0 +1,2 @@ +INIT Init +NEXT Next diff --git a/tlatools/test-model/suite/test49b.tla b/tlatools/test-model/suite/test49b.tla new file mode 100644 index 0000000000000000000000000000000000000000..c8ba49fee511f4e27e6e180f246053bceaae400e --- /dev/null +++ b/tlatools/test-model/suite/test49b.tla @@ -0,0 +1,39 @@ +--------------- MODULE test49b ------------- + +(* test definability of operators with aliases *) + + +EXTENDS TLC + +VARIABLE x + +u \oplus v == u +u \ominus v == u +u \odot v == u +u \oslash v == u +u \otimes v == u +u \circ v == u +u \mod v == u +u =< v == u +u >= v == u + + +Init == + /\ x = 0 + /\ Print("******************************************************", TRUE) + /\ Print("Several tests have been commented out because of bugs.", TRUE) + /\ Print("******************************************************", TRUE) + +Next == + /\ x = 0 + /\ + \/ x' = x \oplus 1 + \/ x' = x \ominus 1 + \/ x' = x \odot 1 + \/ x' = x \oslash 1 + \/ x' = x \otimes 1 +\* \/ x' = x \circ 1 +\* \/ x' = x \mod 1 \* causes TLC bug +\* \/ x' = (x =< 1) \* causes TLC bug +\* \/ x' = (x >= 1 ) \* causes TLC bug +======================================= diff --git a/tlatools/test-model/suite/test49c.cfg b/tlatools/test-model/suite/test49c.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e3e8c3d2505a0163440775d92531a92d4321811c --- /dev/null +++ b/tlatools/test-model/suite/test49c.cfg @@ -0,0 +1,2 @@ +INIT Init +NEXT Next diff --git a/tlatools/test-model/suite/test49c.tla b/tlatools/test-model/suite/test49c.tla new file mode 100644 index 0000000000000000000000000000000000000000..828c88c2dfccb916a3e61ff20d367b49112f075e --- /dev/null +++ b/tlatools/test-model/suite/test49c.tla @@ -0,0 +1,39 @@ +--------------- MODULE test49c ------------- + +(* test definability of operators with aliases *) + + +EXTENDS TLC + +VARIABLE x + +u \oplus v == u +u \ominus v == u +u \odot v == u +u \oslash v == u +u \otimes v == u +u \o v == u +u \mod v == u +u =< v == u +u >= v == u + + +Init == + /\ x = 0 + /\ Print("*************************************************************", TRUE) + /\ Print("Almost all the tests have been commented out because of bugs.", TRUE) + /\ Print("*************************************************************", TRUE) + +Next == + /\ x = 0 + /\ +\* \/ x' = x (+) 1 \* causes TLC bug +\* \/ x' = x (-) 1 \* causes TLC bug +\* \/ x' = x (.) 1 \* causes TLC bug +\* \/ x' = x (/) 1 \* causes TLC bug +\* \/ x' = x (\X) 1 \* parser can't handle this +\* \/ x' = x \circ 1 \* causes TLC bug + \/ x' = x % 1 +\* \/ x' = (x =< 1) \* TLC bug : sets x' to TRUE +\* \/ x' = (x >= 1 ) \* TLC bug : sets x' to FALSE +======================================= diff --git a/tlatools/test-model/suite/test5.cfg b/tlatools/test-model/suite/test5.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b0ee260b28eef2026bbc2f6cb01c89fd3d01d947 --- /dev/null +++ b/tlatools/test-model/suite/test5.cfg @@ -0,0 +1,8 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test5.tla b/tlatools/test-model/suite/test5.tla new file mode 100644 index 0000000000000000000000000000000000000000..ec9791eadf878ba2080f061af7d9f48a0292e466 --- /dev/null +++ b/tlatools/test-model/suite/test5.tla @@ -0,0 +1,113 @@ +--------------- MODULE test5 ------------- + +(* test of Cartesian Product. *) + +EXTENDS Integers, TLC + +VARIABLE x +Type == x \in {1} +Init == x = 1 +Next == UNCHANGED x + +Inv == + /\ IF {1, 2} \X {"a", "b"} # {<<1, "a">>, <<2, "a">>, <<2, "b">>, <<1, "b">>} + THEN Assert(FALSE, "Test 1 failed") + ELSE Print("Test 1 OK", TRUE) + + /\ IF [p \in Nat \X Int |-> p[1] - 2*p[2]][2, -3] # 8 + THEN Assert(FALSE, "Test 2 failed") + ELSE Print("Test 2 OK", TRUE) + + /\ IF [p \in Int \X Int |-> p[1] - 2*p[2]][2, -3] # 8 + THEN Assert(FALSE, "Test 3 failed") + ELSE Print("Test 3 OK", TRUE) + + /\ IF <<1, 3>> \notin Nat \X Nat + THEN Assert(FALSE, "Test 4 failed") + ELSE Print("Test 4 OK", TRUE) + + /\ IF <<1, 3>> \notin (Int \X Int) + THEN Assert(FALSE, "Test 5 failed") + ELSE Print("Test 5 OK", TRUE) + + /\ IF [1..2 -> {1, 2, 3}] \cap ({1} \X {2}) # {<<1,2>>} + THEN Assert(FALSE, "Test 6 failed") + ELSE Print("Test 6 OK", TRUE) + + /\ IF {<<1, 4>>, <<2,3>>} \notin SUBSET ({1,2} \X {3,4}) + THEN Assert(FALSE, "Test 7 failed") + ELSE Print("Test 7 OK", TRUE) + + /\ IF <<1,3>> \notin {1,2,3} \X {2,3,4} + THEN Assert(FALSE, "Test 8 failed") + ELSE Print("Test 8 OK", TRUE) + + /\ IF {1, 2} \X {"a", "b"} \X {"c"} # + {<<1, "a", "c">>, <<2, "a", "c">>, <<2, "b", "c">>, <<1, "b", "c">>} + THEN Assert(FALSE, "Test 9 failed") + ELSE Print("Test 9 OK", TRUE) + + /\ IF [p \in Nat \X Int \X Nat |-> p[1] - 2*p[2] + p[3]][2, -3, 4] # 12 + THEN Assert(FALSE, "Test 10 failed") + ELSE Print("Test 10 OK", TRUE) + + /\ IF [p \in Int \X Int \X Int |-> p[1] - 2*p[2] - p[3]][2, -3, -4] # 12 + THEN Assert(FALSE, "Test 11 failed") + ELSE Print("Test 11 OK", TRUE) + + /\ IF <<1, 2, 3, 4>> \notin Nat \X Nat \X Nat \X Nat + THEN Assert(FALSE, "Test 12 failed") + ELSE Print("Test 12 OK", TRUE) + + /\ IF <<1, 2, 3, 4>> \notin (Int \X Int \X Int \X Int) + THEN Assert(FALSE, "Test 13 failed") + ELSE Print("Test 13 OK", TRUE) + + /\ IF [1..2 -> {1, 2, 3}] \cap ({1} \X {2}) # {<<1,2>>} + THEN Assert(FALSE, "Test 14 failed") + ELSE Print("Test 14 OK", TRUE) + + /\ IF {<<1, 4, 2>>, <<2,3,3>>} \notin SUBSET ({1,2} \X {3,4} \X {2, 3}) + THEN Assert(FALSE, "Test 15 failed") + ELSE Print("Test 15 OK", TRUE) + + /\ IF <<1,3, 5>> \notin {1,2,3} \X {2,3,4} \X {5,6} + THEN Assert(FALSE, "Test 16 failed") + ELSE Print("Test 16 OK", TRUE) + /\ \* Test 17 added 4 June 2014 + IF \/ {} \X {1,2} # {2,3,4} \X {} + \/ {1, 2} \X {} \X {3,4} # {2} \X {4,4} \X {} + \/ {1} \X {2} \X {} # {} \X {3,3} + THEN Assert(FALSE, "Test 17 failed") + ELSE Print("Test 17 OK", TRUE) + /\ \* Test 18 added 12 Jun 2014 + IF \/ [a: {12}, b : {}] # [c: {22}, d: {xyz \in {1,2,3} : xyz < 0}] + \/ [a: {12}, b : {}] # [c: {22}, d: 2..1] + \/ [a: {12}, b : {}] # [c: {22}, d: {1,2,3} \cap 4..6] + \/ [a: {12}, b : {}] # [c: {22}, d: {} \cup {xz \in {1,2,3} : xz < 0}] + \/ [a: {12}, b : {}] # [c: {22}, d: {2,3,4} \X {}] + \/ [a: {12}, b : {}] # [c: {22}, d: [a: {}, b : {1}]] + \/ [a: {12}, b : {}] = [c: {22}, d: SUBSET {}] + \/ [a: {12}, b : {}] # [c: {22}, d: UNION {}] + \/ [a: {12}, b : {}] # [c: {22}, d: {2,3,4} \ 1..5] + \/ [a: {12}, b : {}] # [c: {22}, d: [{1,2,3} -> {}]] + \/ [a: {12}, b : {}] # [c: {22}, d: {}] + \/ [a: {12}, b : {}] # [c: {22}, d: {xyz+1 : xyz \in 2..1}] + THEN Assert(FALSE, "Test 18 failed") + ELSE Print("Test 18 OK", TRUE) + /\ \* Test 19 added 12 Jun 2014 + IF \/ {1} \X {2} \X {} # {22} \X {xyz \in {1,2,3} : xyz < 0} + \/ {1} \X {2} \X {} # {22} \X (2..1) + \/ {1} \X {2} \X {} # {22} \X ({1,2,3} \cap (4..6)) + \/ {1} \X {2} \X {} # {22} \X ({} \cup {xz \in {1,2,3} : xz < 0}) + \/ {1} \X {2} \X {} # {22} \X ({2,3,4} \X {}) + \/ {1} \X {2} \X {} # {22} \X ([a: {}, b : {1}]) + \/ {1} \X {2} \X {} = {22} \X (SUBSET {}) + \/ {1} \X {2} \X {} # {22} \X (UNION {}) + \/ {1} \X {2} \X {} # {22} \X ({2,3,4} \ (1..5)) + \/ {1} \X {2} \X {} # {22} \X ([{1,2,3} -> {}]) + \/ {1} \X {2} \X {} # {22} \X ({}) + \/ {1} \X {2} \X {} # {22} \X ({xyz+1 : xyz \in 2..1}) + THEN Assert(FALSE, "Test 19 failed") + ELSE Print("Test 19 OK", TRUE) +========================================= diff --git a/tlatools/test-model/suite/test50.cfg b/tlatools/test-model/suite/test50.cfg new file mode 100644 index 0000000000000000000000000000000000000000..5e8cedc4cac917a8a41ec9ad1e980ca0e367180c --- /dev/null +++ b/tlatools/test-model/suite/test50.cfg @@ -0,0 +1,11 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + + + \ No newline at end of file diff --git a/tlatools/test-model/suite/test50.tla b/tlatools/test-model/suite/test50.tla new file mode 100644 index 0000000000000000000000000000000000000000..15eecda99a8928eba06fbe67bf6a3f835ea7bc11 --- /dev/null +++ b/tlatools/test-model/suite/test50.tla @@ -0,0 +1,53 @@ +--------------- MODULE test50 ------------- + +(* test usability of the following aliases with the standard modules: + <= and >= of Naturals + \circ of Sequences + (+) and (-) of Bags + +*) + + +EXTENDS Naturals, Sequences, Bags, TLC + +Bag1 == SetToBag({"a", "b"}) +Bag2 == Bag1 \oplus SetToBag({"a"}) \* causes TLC bug +Bag3 == Bag2 \ominus Bag1 +Bag2a == Bag1 (+) SetToBag({"a"}) +Bag3a == Bag2 (-) Bag1 + + +VARIABLES x +Init == x = 0 +Next == x'=x + +Inv == + /\ IF Bag2 = Bag2a + THEN Print("Test 1 OK", TRUE) + ELSE Assert(FALSE, "Test 1 Failed") + + /\ IF Bag3 = Bag3a + THEN Print("Test 2 OK", TRUE) + ELSE Assert(FALSE, "Test 2 Failed") + + /\ IF <<"a">> \o <<"b">> = <<"a">> \circ <<"b">> + THEN Print("Test 3 OK", TRUE) + ELSE Assert(FALSE, "Test 3 Failed") + + /\ IF 1 \leq 2 + THEN Print("Test 4 OK", TRUE) + ELSE Assert(FALSE, "Test 4 Failed") + + /\ IF 1 <= 2 + THEN Print("Test 5 OK", TRUE) + ELSE Assert(FALSE, "Test 5 Failed") + + /\ IF 2 \geq 1 + THEN Print("Test 6 OK", TRUE) + ELSE Assert(FALSE, "Test 6 Failed") + + /\ IF 2 >= 1 + THEN Print("Test 7 OK", TRUE) + ELSE Assert(FALSE, "Test 7 Failed") + +======================================= diff --git a/tlatools/test-model/suite/test51.cfg b/tlatools/test-model/suite/test51.cfg new file mode 100644 index 0000000000000000000000000000000000000000..56f3b36e2773a56fe267643b6b1678e06c9584eb --- /dev/null +++ b/tlatools/test-model/suite/test51.cfg @@ -0,0 +1 @@ + diff --git a/tlatools/test-model/suite/test51.tla b/tlatools/test-model/suite/test51.tla new file mode 100644 index 0000000000000000000000000000000000000000..fe1bbe6406f326c7167277f97dbd59e4314168a3 --- /dev/null +++ b/tlatools/test-model/suite/test51.tla @@ -0,0 +1,495 @@ +---------------------- MODULE test51 ----------------------- +\* Test of handling of infix operator symbols + +EXTENDS TLC + +\* Test parser on action/temporal infix operators + +FooA == INSTANCE test51a +FooB == INSTANCE test51b + +TempTest(_+_) == TRUE + FALSE +Foo1 == TempTest(-+->) +Foo2 == TempTest(~>) +Foo3 == TempTest(\cdot) + +\* Definining all undefined infix operators + +a + b == {a, b} +a - b == {a, b} +a * b == {a, b} +a / b == {a, b} +a ..b == {a, b} +a < b == {a, b} +a > b == {a, b} +a \leq b == {a, b} +a \geq b == {a, b} +a % b == {a, b} +a ^b == {a, b} +a \o b == {a, b} +a ++ b == {a, b} +a \div b == {a, b} +a ...b == {a, b} +a -- b == {a, b} +a (+)b == {a, b} +a (-)b == {a, b} +a (\X)b == {a, b} +a (/)b == {a, b} +a (.)b == {a, b} +a ** b == {a, b} +a \sqcap b == {a, b} +a // b == {a, b} +a \prec b == {a, b} +a \succ b == {a, b} +a \preceq b == {a, b} +a \succeq b == {a, b} +a \sqcup b == {a, b} +a ^^b == {a, b} +a \ll b == {a, b} +a \gg b == {a, b} +a <: b == {a, b} +a & b == {a, b} +a && b == {a, b} +a \sqsubset b == {a, b} +a \sqsupset b == {a, b} +a \sqsubseteq b == {a, b} +a \sqsupseteq b == {a, b} +a | b == {a, b} +a || b == {a, b} +a \subset b == {a, b} +a \supset b == {a, b} +a \supseteq b == {a, b} +a \star b == {a, b} +a %% b == {a, b} +a |- b == {a, b} +a -|b == {a, b} +a |= b == {a, b} +a =|b == {a, b} +a \bullet b == {a, b} +a ##b == {a, b} +a \sim b == {a, b} +a \simeq b == {a, b} +a \approx b == {a, b} +a \cong b == {a, b} +a $b == {a, b} +a $$b == {a, b} +a := b == {a, b} +a ::= b == {a, b} +a \asymp b == {a, b} +a \doteq b == {a, b} +a ?? b == {a, b} +a !! b == {a, b} +a \propto b == {a, b} +a \wr b == {a, b} +a \uplus b == {a, b} +a \bigcirc b == {a, b} + +TestOpArg(Foo(_,_)) == Foo("a", "b") + +TestTLCOps(colongt(_,_), atat(_,_)) == + atat( colongt(1, "ab"), colongt(2, "cd")) + \* 1 :> "ab" @@ 2 :> "cd" + +TestDefinedSetOp(Foo(_,_)) == Foo({"a", "b"}, {"b", "c"}) +TestDefinedBooleanOp(Foo(_,_)) == Foo(TRUE,FALSE) +TestIn(Foo(_,_)) == Foo("a", {"b", "c"}) + +ASSUME + /\ IF TestOpArg(+ ) = {"a", "b"} + THEN Print("Test 1 OK", TRUE) + ELSE Assert(FALSE, "Test 1 Failed") + /\ IF TestOpArg( - ) = {"a", "b"} + THEN Print("Test 2 OK", TRUE) + ELSE Assert(FALSE, "Test 2 Failed") + /\ IF TestOpArg( * ) = {"a", "b"} + THEN Print("Test 3 OK", TRUE) + ELSE Assert(FALSE, "Test 3 Failed") + /\ IF TestOpArg(/ ) = {"a", "b"} + THEN Print("Test 4 OK", TRUE) + ELSE Assert(FALSE, "Test 4 Failed") + /\ IF TestOpArg(..) = {"a", "b"} + THEN Print("Test 5 OK", TRUE) + ELSE Assert(FALSE, "Test 5 Failed") + /\ IF TestOpArg(< ) = {"a", "b"} + THEN Print("Test 6 OK", TRUE) + ELSE Assert(FALSE, "Test 6 Failed") + /\ IF TestOpArg(> ) = {"a", "b"} + THEN Print("Test 7 OK", TRUE) + ELSE Assert(FALSE, "Test 7 Failed") + /\ IF TestOpArg(\leq ) = {"a", "b"} + THEN Print("Test 8 OK", TRUE) + ELSE Assert(FALSE, "Test 8 Failed") + /\ IF TestOpArg(=<) = {"a", "b"} + THEN Print("Test 9 OK", TRUE) + ELSE Assert(FALSE, "Test 9 Failed") + /\ IF TestOpArg(<=) = {"a", "b"} + THEN Print("Test 10 OK", TRUE) + ELSE Assert(FALSE, "Test 10 Failed") + /\ IF TestOpArg(\geq ) = {"a", "b"} + THEN Print("Test 11 OK", TRUE) + ELSE Assert(FALSE, "Test 11 Failed") + /\ IF TestOpArg(>=) = {"a", "b"} + THEN Print("Test 12 OK", TRUE) + ELSE Assert(FALSE, "Test 12 Failed") + /\ IF TestOpArg(% ) = {"a", "b"} + THEN Print("Test 13 OK", TRUE) + ELSE Assert(FALSE, "Test 13 Failed") + /\ IF TestOpArg(^) = {"a", "b"} + THEN Print("Test 14 OK", TRUE) + ELSE Assert(FALSE, "Test 14 Failed") + /\ IF TestOpArg(\circ ) = {"a", "b"} + THEN Print("Test 15 OK", TRUE) + ELSE Assert(FALSE, "Test 15 Failed") + /\ IF TestOpArg(\o) = {"a", "b"} + THEN Print("Test 16 OK", TRUE) + ELSE Assert(FALSE, "Test 16 Failed") + /\ IF TestOpArg(++ ) = {"a", "b"} + THEN Print("Test 17 OK", TRUE) + ELSE Assert(FALSE, "Test 17 Failed") + /\ IF TestOpArg(\div ) = {"a", "b"} + THEN Print("Test 18 OK", TRUE) + ELSE Assert(FALSE, "Test 18 Failed") + /\ IF TestOpArg(...) = {"a", "b"} + THEN Print("Test 19 OK", TRUE) + ELSE Assert(FALSE, "Test 19 Failed") + /\ IF TestOpArg(-- ) = {"a", "b"} + THEN Print("Test 20 OK", TRUE) + ELSE Assert(FALSE, "Test 20 Failed") + /\ IF TestOpArg(\oplus ) = {"a", "b"} + THEN Print("Test 21 OK", TRUE) + ELSE Assert(FALSE, "Test 21 Failed") + /\ IF TestOpArg((+)) = {"a", "b"} + THEN Print("Test 22 OK", TRUE) + ELSE Assert(FALSE, "Test 22 Failed") + /\ IF TestOpArg(\ominus ) = {"a", "b"} + THEN Print("Test 23 OK", TRUE) + ELSE Assert(FALSE, "Test 23 Failed") + /\ IF TestOpArg((-)) = {"a", "b"} + THEN Print("Test 24 OK", TRUE) + ELSE Assert(FALSE, "Test 24 Failed") + /\ IF TestOpArg(\otimes ) = {"a", "b"} + THEN Print("Test 25 OK", TRUE) + ELSE Assert(FALSE, "Test 25 Failed") + /\ IF TestOpArg((\X)) = {"a", "b"} + THEN Print("Test 26 OK", TRUE) + ELSE Assert(FALSE, "Test 26 Failed") + /\ IF TestOpArg(\oslash ) = {"a", "b"} + THEN Print("Test 27 OK", TRUE) + ELSE Assert(FALSE, "Test 27 Failed") + /\ IF TestOpArg((/)) = {"a", "b"} + THEN Print("Test 28 OK", TRUE) + ELSE Assert(FALSE, "Test 28 Failed") + /\ IF TestOpArg(\odot ) = {"a", "b"} + THEN Print("Test 29 OK", TRUE) + ELSE Assert(FALSE, "Test 29 Failed") + /\ IF TestOpArg((.)) = {"a", "b"} + THEN Print("Test 30 OK", TRUE) + ELSE Assert(FALSE, "Test 30 Failed") + /\ IF TestOpArg( ** ) = {"a", "b"} + THEN Print("Test 31 OK", TRUE) + ELSE Assert(FALSE, "Test 31 Failed") + /\ IF TestOpArg(\sqcap ) = {"a", "b"} + THEN Print("Test 32 OK", TRUE) + ELSE Assert(FALSE, "Test 32 Failed") + /\ IF TestOpArg(// ) = {"a", "b"} + THEN Print("Test 33 OK", TRUE) + ELSE Assert(FALSE, "Test 33 Failed") + /\ IF TestOpArg(\prec ) = {"a", "b"} + THEN Print("Test 34 OK", TRUE) + ELSE Assert(FALSE, "Test 34 Failed") + /\ IF TestOpArg(\succ ) = {"a", "b"} + THEN Print("Test 35 OK", TRUE) + ELSE Assert(FALSE, "Test 35 Failed") + /\ IF TestOpArg(\preceq ) = {"a", "b"} + THEN Print("Test 36 OK", TRUE) + ELSE Assert(FALSE, "Test 36 Failed") + /\ IF TestOpArg(\succeq ) = {"a", "b"} + THEN Print("Test 37 OK", TRUE) + ELSE Assert(FALSE, "Test 37 Failed") + /\ IF TestOpArg(\sqcup ) = {"a", "b"} + THEN Print("Test 38 OK", TRUE) + ELSE Assert(FALSE, "Test 38 Failed") + /\ IF TestOpArg(^^) = {"a", "b"} + THEN Print("Test 39 OK", TRUE) + ELSE Assert(FALSE, "Test 39 Failed") + /\ IF TestOpArg(\ll ) = {"a", "b"} + THEN Print("Test 40 OK", TRUE) + ELSE Assert(FALSE, "Test 40 Failed") + /\ IF TestOpArg(\gg ) = {"a", "b"} + THEN Print("Test 41 OK", TRUE) + ELSE Assert(FALSE, "Test 41 Failed") + /\ IF TestOpArg(<: ) = {"a", "b"} + THEN Print("Test 42 OK", TRUE) + ELSE Assert(FALSE, "Test 42 Failed") + /\ IF TestOpArg(& ) = {"a", "b"} + THEN Print("Test 43 OK", TRUE) + ELSE Assert(FALSE, "Test 43 Failed") + /\ IF TestOpArg(&& ) = {"a", "b"} + THEN Print("Test 44 OK", TRUE) + ELSE Assert(FALSE, "Test 44 Failed") + /\ IF TestOpArg(\sqsubset ) = {"a", "b"} + THEN Print("Test 45 OK", TRUE) + ELSE Assert(FALSE, "Test 45 Failed") + /\ IF TestOpArg(\sqsupset ) = {"a", "b"} + THEN Print("Test 46 OK", TRUE) + ELSE Assert(FALSE, "Test 46 Failed") + /\ IF TestOpArg(\sqsubseteq ) = {"a", "b"} + THEN Print("Test 47 OK", TRUE) + ELSE Assert(FALSE, "Test 47 Failed") + /\ IF TestOpArg(\sqsupseteq ) = {"a", "b"} + THEN Print("Test 48 OK", TRUE) + ELSE Assert(FALSE, "Test 48 Failed") + /\ IF TestOpArg(| ) = {"a", "b"} + THEN Print("Test 49 OK", TRUE) + ELSE Assert(FALSE, "Test 49 Failed") + /\ IF TestOpArg(|| ) = {"a", "b"} + THEN Print("Test 50 OK", TRUE) + ELSE Assert(FALSE, "Test 50 Failed") + /\ IF TestOpArg(\subset ) = {"a", "b"} + THEN Print("Test 51 OK", TRUE) + ELSE Assert(FALSE, "Test 51 Failed") + /\ IF TestOpArg(\supset ) = {"a", "b"} + THEN Print("Test 52 OK", TRUE) + ELSE Assert(FALSE, "Test 52 Failed") + /\ IF TestOpArg(\supseteq ) = {"a", "b"} + THEN Print("Test 53 OK", TRUE) + ELSE Assert(FALSE, "Test 53 Failed") + /\ IF TestOpArg(\star ) = {"a", "b"} + THEN Print("Test 54 OK", TRUE) + ELSE Assert(FALSE, "Test 54 Failed") + /\ IF TestOpArg(%% ) = {"a", "b"} + THEN Print("Test 55 OK", TRUE) + ELSE Assert(FALSE, "Test 55 Failed") + /\ IF TestOpArg(|- ) = {"a", "b"} + THEN Print("Test 56 OK", TRUE) + ELSE Assert(FALSE, "Test 56 Failed") + /\ IF TestOpArg(-|) = {"a", "b"} + THEN Print("Test 57 OK", TRUE) + ELSE Assert(FALSE, "Test 57 Failed") + /\ IF TestOpArg(|= ) = {"a", "b"} + THEN Print("Test 58 OK", TRUE) + ELSE Assert(FALSE, "Test 58 Failed") + /\ IF TestOpArg(=|) = {"a", "b"} + THEN Print("Test 59 OK", TRUE) + ELSE Assert(FALSE, "Test 59 Failed") + /\ IF TestOpArg(\bullet ) = {"a", "b"} + THEN Print("Test 60 OK", TRUE) + ELSE Assert(FALSE, "Test 60 Failed") + /\ IF TestOpArg(##) = {"a", "b"} + THEN Print("Test 61 OK", TRUE) + ELSE Assert(FALSE, "Test 61 Failed") + /\ IF TestOpArg(\sim ) = {"a", "b"} + THEN Print("Test 62 OK", TRUE) + ELSE Assert(FALSE, "Test 62 Failed") + /\ IF TestOpArg(\simeq ) = {"a", "b"} + THEN Print("Test 63 OK", TRUE) + ELSE Assert(FALSE, "Test 63 Failed") + /\ IF TestOpArg(\approx ) = {"a", "b"} + THEN Print("Test 64 OK", TRUE) + ELSE Assert(FALSE, "Test 64 Failed") + /\ IF TestOpArg(\cong ) = {"a", "b"} + THEN Print("Test 65 OK", TRUE) + ELSE Assert(FALSE, "Test 65 Failed") + /\ IF TestOpArg($) = {"a", "b"} + THEN Print("Test 66 OK", TRUE) + ELSE Assert(FALSE, "Test 66 Failed") + /\ IF TestOpArg($$) = {"a", "b"} + THEN Print("Test 67 OK", TRUE) + ELSE Assert(FALSE, "Test 67 Failed") + /\ IF TestOpArg(:= ) = {"a", "b"} + THEN Print("Test 68 OK", TRUE) + ELSE Assert(FALSE, "Test 68 Failed") + /\ IF TestOpArg(::= ) = {"a", "b"} + THEN Print("Test 69 OK", TRUE) + ELSE Assert(FALSE, "Test 69 Failed") + /\ IF TestOpArg(\asymp ) = {"a", "b"} + THEN Print("Test 70 OK", TRUE) + ELSE Assert(FALSE, "Test 70 Failed") + /\ IF TestOpArg(\doteq ) = {"a", "b"} + THEN Print("Test 71 OK", TRUE) + ELSE Assert(FALSE, "Test 71 Failed") + /\ IF TestOpArg(?? ) = {"a", "b"} + THEN Print("Test 72 OK", TRUE) + ELSE Assert(FALSE, "Test 72 Failed") + /\ IF TestOpArg(!! ) = {"a", "b"} + THEN Print("Test 73 OK", TRUE) + ELSE Assert(FALSE, "Test 73 Failed") + /\ IF TestOpArg(\propto ) = {"a", "b"} + THEN Print("Test 74 OK", TRUE) + ELSE Assert(FALSE, "Test 74 Failed") + /\ IF TestOpArg(\wr ) = {"a", "b"} + THEN Print("Test 75 OK", TRUE) + ELSE Assert(FALSE, "Test 75 Failed") + /\ IF TestOpArg(\uplus ) = {"a", "b"} + THEN Print("Test 76 OK", TRUE) + ELSE Assert(FALSE, "Test 76 Failed") + /\ IF TestOpArg(\bigcirc ) = {"a", "b"} + THEN Print("Test 77 OK", TRUE) + ELSE Assert(FALSE, "Test 77 Failed") + /\ IF TestTLCOps(:>, @@) = 1 :> "ab" @@ 2 :> "cd" + THEN Print("Test 78 OK", TRUE) + ELSE Assert(FALSE, "Test 78 Failed") + /\ IF TestDefinedBooleanOp(=>) = (TRUE => FALSE) + THEN Print("Test 79 OK", TRUE) + ELSE Assert(FALSE, "Test 79 Failed") + /\ IF TestDefinedBooleanOp(\equiv) = (TRUE \equiv FALSE) + THEN Print("Test 80 OK", TRUE) + ELSE Assert(FALSE, "Test 80 Failed") + /\ IF TestDefinedBooleanOp(<=>) = (TRUE <=> FALSE) + THEN Print("Test 81 OK", TRUE) + ELSE Assert(FALSE, "Test 81 Failed") +\* /\ Print("Test 82 fails because of parser bug", TRUE) + /\ IF TestDefinedBooleanOp(/\) = (TRUE /\ FALSE) + THEN Print("Test 82 OK", TRUE) + ELSE Assert(FALSE, "Test 82 Failed") + /\ IF TestDefinedBooleanOp(\land) = (TRUE \land FALSE) + THEN Print("Test 83 OK", TRUE) + ELSE Assert(FALSE, "Test 83 Failed") +\* /\ Print("Test 84 fails because of parser bug", TRUE) + /\ IF TestDefinedBooleanOp(\/) = (TRUE \/ FALSE) + THEN Print("Test 84 OK", TRUE) + ELSE Assert(FALSE, "Test 84 Failed") + /\ IF TestDefinedBooleanOp(\lor) = (TRUE \lor FALSE) + THEN Print("Test 85 OK", TRUE) + ELSE Assert(FALSE, "Test 85 Failed") + /\ IF TestDefinedSetOp(#) = ({"a", "b"} # {"b", "c"}) + THEN Print("Test 86 OK", TRUE) + ELSE Assert(FALSE, "Test 86 Failed") + /\ IF TestDefinedSetOp(/=) = ({"a", "b"} /= {"b", "c"}) + THEN Print("Test 87 OK", TRUE) + ELSE Assert(FALSE, "Test 87 Failed") + /\ IF TestIn(\in) = ("a"\in {"b", "c"}) + THEN Print("Test 88 OK", TRUE) + ELSE Assert(FALSE, "Test 88 Failed") + /\ IF TestIn(\notin) = ("a" \notin {"b", "c"}) + THEN Print("Test 89 OK", TRUE) + ELSE Assert(FALSE, "Test 89 Failed") + /\ IF TestDefinedSetOp(\subseteq) = ({"a", "b"} \subseteq {"b", "c"}) + THEN Print("Test 90 OK", TRUE) + ELSE Assert(FALSE, "Test 90 Failed") + /\ IF TestDefinedSetOp(\) = ({"a", "b"} \ {"b", "c"}) + THEN Print("Test 91 OK", TRUE) + ELSE Assert(FALSE, "Test 91 Failed") + /\ IF TestDefinedSetOp(\cap) = ({"a", "b"} \cap {"b", "c"}) + THEN Print("Test 92 OK", TRUE) + ELSE Assert(FALSE, "Test 92 Failed") + /\ IF TestDefinedSetOp(\intersect) = ({"a", "b"} \intersect {"b", "c"}) + THEN Print("Test 93 OK", TRUE) + ELSE Assert(FALSE, "Test 93 Failed") + /\ IF TestDefinedSetOp(\cup) = ({"a", "b"} \cup {"b", "c"}) + THEN Print("Test 94 OK", TRUE) + ELSE Assert(FALSE, "Test 94 Failed") + /\ IF TestDefinedSetOp(\union) = ({"a", "b"} \union {"b", "c"}) + THEN Print("Test 95 OK", TRUE) + ELSE Assert(FALSE, "Test 95 Failed") + + +============================================================== +78 +ALL UNDEFINED INFIX OPERATORS + ++ +- +* +/ +.. +< +> +\leq +=< +<= +\geq +>= +% +^ +\circ +\o +++ +\div +... +-- +\oplus +(+) +\ominus +(-) +\otimes +(\X) +\oslash +(/) +\odot +(.) +** +\sqcap +// +\prec +\succ +\preceq +\succeq +\sqcup +^^ +\ll +\gg +<: +& +&& +\sqsubset +\sqsupset +\sqsubseteq +\sqsupseteq +| +|| +\subset +\supset +\supseteq +\star +%% +|- +-| +|= +=| +\bullet +## +\sim +\simeq +\approx +\cong +$ +$$ +:= +::= +\asymp +\doteq +?? +!! +\propto +\wr +\uplus +\bigcirc + + +BUILT-IN BOOLEANS +=> +\equiv +<=> +/\ +\land +\/ +\lor + +BUILT-IN SET OPERATORS +# +/= +\in +\notin +\subseteq +\ +\cap +\intersect +\cup +\union + +OTHER + +-+-> +~> +\cdot diff --git a/tlatools/test-model/suite/test51a.tla b/tlatools/test-model/suite/test51a.tla new file mode 100644 index 0000000000000000000000000000000000000000..8b749bda774d56f358042e9847888f60afce327e --- /dev/null +++ b/tlatools/test-model/suite/test51a.tla @@ -0,0 +1,13 @@ +------------------- MODULE test51a ------------------------- + +\* Test definability of some aliases + +a =< b == {a, b} +a >=b == {a, b} +a \circ b == {a, b} +a \oplus b == {a, b} +a \ominus b == {a, b} +a \otimes b == {a, b} +a \oslash b == {a, b} +a \odot b == {a, b} +============================================================================= diff --git a/tlatools/test-model/suite/test51b.tla b/tlatools/test-model/suite/test51b.tla new file mode 100644 index 0000000000000000000000000000000000000000..d673cef351f233e955741afb399942291266d9da --- /dev/null +++ b/tlatools/test-model/suite/test51b.tla @@ -0,0 +1,4 @@ +---------------- MODULE test51b ----------------- +a <= b == {a, b} + +================================================================== diff --git a/tlatools/test-model/suite/test52.cfg b/tlatools/test-model/suite/test52.cfg new file mode 100644 index 0000000000000000000000000000000000000000..f0e860231ad0256721aa61b69aec5db318681a6c --- /dev/null +++ b/tlatools/test-model/suite/test52.cfg @@ -0,0 +1,3 @@ +SPECIFICATION Spec +PROPERTY Property +INVARIANT Invariant diff --git a/tlatools/test-model/suite/test52.tla b/tlatools/test-model/suite/test52.tla new file mode 100644 index 0000000000000000000000000000000000000000..10b5c5b0d6eb3cb35cdb085398ea3c01400659a3 --- /dev/null +++ b/tlatools/test-model/suite/test52.tla @@ -0,0 +1,71 @@ +---------------------- MODULE test52 ----------------------- + +\* Test of prefix and postfix operators as arguments + +EXTENDS TLC + +VARIABLES x, y + +BoxTest(-._) == -(x=0) +Foo1 == BoxTest([]) +Foo2 == BoxTest(<>) + +-. a == {{"a"}, {"b"}} \ a +a ^+ == {{"a"}, {"b"}} \ a +a ^* == {{"a"}, {"b"}} \ a +a ^# == {{"a"}, {"b"}} \ a + +SetOpTest(Foo(_)) == Foo({{"b"}, {"c"}}) +DomainTest(Foo(_)) == Foo([i\in {"a", "b"} |-> i]) + +ASSUME + /\ Print("Test1 Begun", TRUE) + /\ SetOpTest(-.) = - {{"b"}, {"c"}} + /\ SetOpTest(^+) = {{"b"}, {"c"}} ^+ + /\ SetOpTest(^*) = {{"b"}, {"c"}} ^* + /\ SetOpTest(^#) = {{"b"}, {"c"}} ^# + /\ SetOpTest(SUBSET) = SUBSET {{"b"}, {"c"}} + /\ SetOpTest(UNION) = UNION {{"b"}, {"c"}} + /\ DomainTest(DOMAIN) = DOMAIN [i\in {"a", "b"} |-> i] + /\ Print("Test1 Finished", TRUE) + + +Init == /\ x = {"a"} + /\ y = {"a"} +Next == /\ x'= x \cup {"a"} + /\ y'= y \cup {"b"} +Spec == Init /\ [][Next]_x + +EnabledTest(Foo(_)) == Foo(x'=x) +UnchangedTest(Foo(_)) == Foo(x) +PrimeTest(Foo(_)) == Foo(x) = x + +Invariant == + /\ EnabledTest(ENABLED) + +ImpliedAction == + /\ UnchangedTest(UNCHANGED) + /\ PrimeTest(') + +Property == [][ImpliedAction]_<<x, y>> + +================================================================== +\* Prefix Operators +~ +ENABLED +UNCHANGED +[] +<> +SUBSET +UNION +DOMAIN +- + +\* Postfix Operators +\* Predefined +' + +\* Undefined +^+ +^* +^# diff --git a/tlatools/test-model/suite/test53.cfg b/tlatools/test-model/suite/test53.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e3e8c3d2505a0163440775d92531a92d4321811c --- /dev/null +++ b/tlatools/test-model/suite/test53.cfg @@ -0,0 +1,2 @@ +INIT Init +NEXT Next diff --git a/tlatools/test-model/suite/test53.tla b/tlatools/test-model/suite/test53.tla new file mode 100644 index 0000000000000000000000000000000000000000..a395492b848682f035d04f7db5a95832f09854ac --- /dev/null +++ b/tlatools/test-model/suite/test53.tla @@ -0,0 +1,36 @@ +--------------- MODULE test53 ------------- + +(* test definability of operators with aliases *) + + +EXTENDS TLC + +VARIABLE x + +u \oplus v == u +u \ominus v == u +u \odot v == u +u \oslash v == u +u \otimes v == u +u \circ v == u +u % v == u +u =< v == u +u >= v == u + + +Init == + /\ x = 0 + +Next == + /\ x = 0 + /\ + \/ x' = x \oplus 1 + \/ x' = x \ominus 1 + \/ x' = x \odot 1 + \/ x' = x \oslash 1 + \/ x' = x \otimes 1 + \/ x' = x \circ 1 + \/ x' = x % 1 \* causes TLC bug + \/ x' = (x =< 1) \* causes TLC bug + \/ x' = (x >= 1 ) \* causes TLC bug +======================================= diff --git a/tlatools/test-model/suite/test54.cfg b/tlatools/test-model/suite/test54.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e3e8c3d2505a0163440775d92531a92d4321811c --- /dev/null +++ b/tlatools/test-model/suite/test54.cfg @@ -0,0 +1,2 @@ +INIT Init +NEXT Next diff --git a/tlatools/test-model/suite/test54.tla b/tlatools/test-model/suite/test54.tla new file mode 100644 index 0000000000000000000000000000000000000000..ae7c1670ea8e68ee6685af8c45d3696d661fa36b --- /dev/null +++ b/tlatools/test-model/suite/test54.tla @@ -0,0 +1,36 @@ +--------------- MODULE test54 ------------- + +(* test definability of operators with aliases *) + + +EXTENDS TLC + +VARIABLE x + +u \oplus v == u +u \ominus v == u +u \odot v == u +u \oslash v == u +u \otimes v == u +u \o v == u +u % v == u +u =< v == u +u >= v == u + + +Init == + /\ x = 0 + +Next == + /\ x = 0 + /\ + \/ x' = x (+) 1 \* causes TLC bug + \/ x' = x (-) 1 \* causes TLC bug + \/ x' = x (.) 1 \* causes TLC bug + \/ x' = x (/) 1 \* causes TLC bug + \/ x' = x (\X) 1 \* parser can't handle this + \/ x' = x \circ 1 \* causes TLC bug + \/ x' = x % 1 + \/ x' = (x =< 1) \* TLC bug : sets x' to TRUE + \/ x' = (x >= 1 ) \* TLC bug : sets x' to FALSE +======================================= diff --git a/tlatools/test-model/suite/test55.cfg b/tlatools/test-model/suite/test55.cfg new file mode 100644 index 0000000000000000000000000000000000000000..fe7d864f88046c4367c05c018a558362c39fe97c --- /dev/null +++ b/tlatools/test-model/suite/test55.cfg @@ -0,0 +1,3 @@ +SPECIFICATION Spec +INVARIANT Invariant +PROPERTY InitProperty diff --git a/tlatools/test-model/suite/test55.tla b/tlatools/test-model/suite/test55.tla new file mode 100644 index 0000000000000000000000000000000000000000..fd95511e3caad8f32b2dd3be3e3fe8cfa02a4f21 --- /dev/null +++ b/tlatools/test-model/suite/test55.tla @@ -0,0 +1,22 @@ +------------------------------- MODULE test55 ------------------------------- +\* Test of ENABLED with INSTANCE semantics +EXTENDS Naturals + +VARIABLE z + +I == INSTANCE test55a WITH x <- z, y <- z + +Init == z = 0 +Next == z' = 1 - z + +Spec == Init /\ [][Next]_z /\ WF_z(Next) +Invariant == /\ I!F + /\ ~I!G + +InitProperty == I!Init +SafeProperty == I!SafeSpec +LiveProperty == I!LiveSpec + +============================================================================= + + diff --git a/tlatools/test-model/suite/test55a.tla b/tlatools/test-model/suite/test55a.tla new file mode 100644 index 0000000000000000000000000000000000000000..bd17db17c8ca799dc92596fd99f1300a7bc8b231 --- /dev/null +++ b/tlatools/test-model/suite/test55a.tla @@ -0,0 +1,14 @@ +------------------------------- MODULE test55a ------------------------------ +EXTENDS Naturals +VARIABLES x, y + +F == ENABLED (x'=0 /\ y'=1) +G == ENABLED ((x # y) /\ (x'=0) /\ (y'=1)) + +Init == (x = 0) /\ (y = 0) +Next == /\ x' = 1 - x + /\ y' = y + +SafeSpec == Init /\ [][Next]_<<x,y>> +LiveSpec == SafeSpec /\ WF_<<x,y>>(Next) +============================================================================= diff --git a/tlatools/test-model/suite/test56.cfg b/tlatools/test-model/suite/test56.cfg new file mode 100644 index 0000000000000000000000000000000000000000..59df66b1045c7bbcce67167852fd154f3d81c41e --- /dev/null +++ b/tlatools/test-model/suite/test56.cfg @@ -0,0 +1,2 @@ +SPECIFICATION Spec +PROPERTY Property \ No newline at end of file diff --git a/tlatools/test-model/suite/test56.tla b/tlatools/test-model/suite/test56.tla new file mode 100644 index 0000000000000000000000000000000000000000..4f204445c4a3d8157babd576089f7b0e5cbf62f1 --- /dev/null +++ b/tlatools/test-model/suite/test56.tla @@ -0,0 +1,18 @@ +------------------------------- MODULE test56 ------------------------------- +\* Test of subtle INSTANCE semantics +EXTENDS Naturals +VARIABLE x + +I == INSTANCE test56a WITH u <- x + +NotIBangH == (x'=x) /\ I!G(x, x'=x+1) + +Init == \E i \in 1..3 : x = i +Next == x' = 9-x +Spec == Init /\ [][Next]_x + +Property == [][I!H = NotIBangH]_x + +============================================================================= +I!H = (x'=x) /\ ENABLED (u'=x+1 \/ (u'=x /\ u'=x) \/ (u'=x /\ u'=x)) +NotIBangH = (x'=x) /\ ENABLED (x'=x+1 \/ (u'=x /\ x'=x) \/ (u'=x /\ x'=u)) diff --git a/tlatools/test-model/suite/test56a.tla b/tlatools/test-model/suite/test56a.tla new file mode 100644 index 0000000000000000000000000000000000000000..521cf1046b8d7dc9b71f0117916beb05f98b665e --- /dev/null +++ b/tlatools/test-model/suite/test56a.tla @@ -0,0 +1,7 @@ +------------------------------- MODULE test56a ------------------------------ +\* Test of subtle INSTANCE semantics +EXTENDS Naturals +VARIABLE u +G(v, A) == ENABLED (A \/ (u'=u /\ v'=v) \/ (v'=u /\ u'=v)) +H == (u'=u) /\ G(u, u' = u + 1) +============================================================================= \ No newline at end of file diff --git a/tlatools/test-model/suite/test57.cfg b/tlatools/test-model/suite/test57.cfg new file mode 100644 index 0000000000000000000000000000000000000000..2e385425054877319618031959b1771ec5b65ca3 --- /dev/null +++ b/tlatools/test-model/suite/test57.cfg @@ -0,0 +1,3 @@ +SPECIFICATION Spec +INVARIANT Invariant0 Invariant1 Invariant2 +PROPERTY Property \ No newline at end of file diff --git a/tlatools/test-model/suite/test57.tla b/tlatools/test-model/suite/test57.tla new file mode 100644 index 0000000000000000000000000000000000000000..18539eb3e576a32528123ddd14aea25dc3a0c219 --- /dev/null +++ b/tlatools/test-model/suite/test57.tla @@ -0,0 +1,19 @@ +------------------------------- MODULE test57 ------------------------------- +\* Test of subtle INSTANCE semantics +EXTENDS Naturals +VARIABLE x + +I == INSTANCE test57a WITH u <- x, v <- x + +Init == \E i \in 1..3 : x = i +Next == x' = 9-x +Spec == Init /\ [][Next]_x + +Invariant0 == I!B(Next) +Invariant1 == I!C +Invariant2 == ~ I!B(I!A) +Property == [][~I!A]_x +============================================================================= +I!C = ENABLED((u'=x) /\ (v' = x+1)) +I!B(I!A) = ENABLED ((x'=x) /\ (x'=x+1)) + diff --git a/tlatools/test-model/suite/test57a.tla b/tlatools/test-model/suite/test57a.tla new file mode 100644 index 0000000000000000000000000000000000000000..d90b00c1be9dcd095ff9389681ef82062ee665cf --- /dev/null +++ b/tlatools/test-model/suite/test57a.tla @@ -0,0 +1,8 @@ +------------------------------- MODULE test57a ------------------------------ +\* Test of subtle INSTANCE semantics +EXTENDS Naturals +VARIABLES u, v +A == (u'=u) /\ (v'=v+1) +B(d) == ENABLED d +C == B(A) +============================================================================= \ No newline at end of file diff --git a/tlatools/test-model/suite/test58.cfg b/tlatools/test-model/suite/test58.cfg new file mode 100644 index 0000000000000000000000000000000000000000..56f3b36e2773a56fe267643b6b1678e06c9584eb --- /dev/null +++ b/tlatools/test-model/suite/test58.cfg @@ -0,0 +1 @@ + diff --git a/tlatools/test-model/suite/test58.tla b/tlatools/test-model/suite/test58.tla new file mode 100644 index 0000000000000000000000000000000000000000..514f9353cf3c9a836bb7152f3572b54fc66da5a1 --- /dev/null +++ b/tlatools/test-model/suite/test58.tla @@ -0,0 +1,16 @@ +------------------- MODULE test58 -------------------- +\* Test of binary, octal, and hexadecimal numbers + +EXTENDS Naturals + +ASSUME + /\ 63 = \b111111 + /\ 63 = \o77 + /\ 63 = \h3F + /\ 63 = \B111111 + /\ 63 = \O77 + /\ 63 = \H3f + /\ 63 = \H3F + /\ 63 = \h3f + +======================================================= diff --git a/tlatools/test-model/suite/test59.cfg b/tlatools/test-model/suite/test59.cfg new file mode 100644 index 0000000000000000000000000000000000000000..9816c74f9b53e2266134e30e7da07fa5392c5384 --- /dev/null +++ b/tlatools/test-model/suite/test59.cfg @@ -0,0 +1,2 @@ +SPECIFICATION Spec +PROPERTY Liveness diff --git a/tlatools/test-model/suite/test59.tla b/tlatools/test-model/suite/test59.tla new file mode 100644 index 0000000000000000000000000000000000000000..8a1b24ddf2904342cb22317bb7122f775a6de463 --- /dev/null +++ b/tlatools/test-model/suite/test59.tla @@ -0,0 +1,18 @@ +------------------------------- MODULE test59 ------------------------------- +EXTENDS Naturals +\* Test of INSTANCE inside LET + +VARIABLE y + +Next == LET x == y+1 + M == INSTANCE test59a + IN y' = (M!xplus1 - 1) % 5 + +Init == y = 0 + +Spec == Init /\ [][Next]_y /\ WF_y(Next) + +Invariant == y \in 0..4 +Liveness == []<>(y = 4) + +============================================================================= \ No newline at end of file diff --git a/tlatools/test-model/suite/test59a.tla b/tlatools/test-model/suite/test59a.tla new file mode 100644 index 0000000000000000000000000000000000000000..2963511f41478b31003db2ae4ff96c17207f1f9d --- /dev/null +++ b/tlatools/test-model/suite/test59a.tla @@ -0,0 +1,9 @@ +------------------------------- MODULE test59a ------------------------------- +EXTENDS Naturals +\* Test of INSTANCE inside LET + +VARIABLE x + +xplus1 == x+1 + +============================================================================= \ No newline at end of file diff --git a/tlatools/test-model/suite/test6.cfg b/tlatools/test-model/suite/test6.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b0ee260b28eef2026bbc2f6cb01c89fd3d01d947 --- /dev/null +++ b/tlatools/test-model/suite/test6.cfg @@ -0,0 +1,8 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test6.tla b/tlatools/test-model/suite/test6.tla new file mode 100644 index 0000000000000000000000000000000000000000..2665292fa01e629dede7c238430f0597b8ff27e6 --- /dev/null +++ b/tlatools/test-model/suite/test6.tla @@ -0,0 +1,132 @@ +--------------- MODULE test6 ------------- + +(* test of Propositional Logic. *) + +EXTENDS Integers, TLC + +VARIABLE x, y, z, w +Type == /\ x \in BOOLEAN + /\ y \in BOOLEAN + /\ z \in BOOLEAN + /\ w = 0 +Init == /\ x = TRUE + /\ y = TRUE + /\ z = FALSE + /\ w = 0 +Next == /\ \/ (w = 1) /\ Assert(FALSE, "This is a bug") + \/ (w=0) + /\ (w=0) \* \/ Assert(FALSE, "This is a bug, too") + \* Commented out because I now don't think it's a bug. + /\ UNCHANGED <<w, x, y, z>> + +Inv == + + /\ IF ~(x /\ y /\ ~z) + THEN Assert(FALSE, "Test 1 failed") + ELSE Print("Test 1 OK", TRUE) + + /\ IF ~(~z /\ y) + THEN Assert(FALSE, "Test 2 failed") + ELSE Print("Test 2 OK", TRUE) + + /\ IF ~(x \/ ~y \/ z) + THEN Assert(FALSE, "Test 3 failed") + ELSE Print("Test 3 OK", TRUE) + + /\ IF ~(z \/ ~y \/ x) + THEN Assert(FALSE, "Test 4 failed") + ELSE Print("Test 4 OK", TRUE) + + /\ IF ~(x /\ y) + THEN Assert(FALSE, "Test 5 failed") + ELSE Print("Test 5 OK", TRUE) + + /\ IF (x /\ z) + THEN Assert(FALSE, "Test 6 failed") + ELSE Print("Test 6 OK", TRUE) + + /\ IF (z /\ x) + THEN Assert(FALSE, "Test 7 failed") + ELSE Print("Test 7 OK", TRUE) + + /\ IF (z /\ ~x) + THEN Assert(FALSE, "Test 8 failed") + ELSE Print("Test 8 OK", TRUE) + + /\ IF (z /\ (x=1)) + THEN Assert(FALSE, "Test 9 failed") + ELSE Print("Test 9 OK", TRUE) + + /\ IF ~(x \/ (z=1)) + THEN Assert(FALSE, "Test 10 failed") + ELSE Print("Test 10 OK", TRUE) + + /\ IF ~(x => y) + THEN Assert(FALSE, "Test 11 failed") + ELSE Print("Test 11 OK", TRUE) + + /\ IF ~(~x => y) + THEN Assert(FALSE, "Test 12 failed") + ELSE Print("Test 12 OK", TRUE) + + /\ IF ~(~x => z) + THEN Assert(FALSE, "Test 13 failed") + ELSE Print("Test 13 OK", TRUE) + + /\ IF (x => z) + THEN Assert(FALSE, "Test 14 failed") + ELSE Print("Test 14 OK", TRUE) + + /\ IF ~x + THEN Assert(FALSE, "Test 15 failed") + ELSE Print("Test 15 OK", TRUE) + + /\ IF ~~z + THEN Assert(FALSE, "Test 16 failed") + ELSE Print("Test 16 OK", TRUE) + + /\ IF ~(x <=> y) + THEN Assert(FALSE, "Test 17 failed") + ELSE Print("Test 17 OK", TRUE) + + /\ IF ~(~x <=> z) + THEN Assert(FALSE, "Test 18 failed") + ELSE Print("Test 18 OK", TRUE) + + /\ IF (x <=> z) + THEN Assert(FALSE, "Test 19 failed") + ELSE Print("Test 19 OK", TRUE) + + /\ IF (z <=> x) + THEN Assert(FALSE, "Test 20 failed") + ELSE Print("Test 20 OK", TRUE) + + /\ IF ~(x \equiv y) + THEN Assert(FALSE, "Test 21 failed") + ELSE Print("Test 21 OK", TRUE) + + /\ IF ~(~x \equiv z) + THEN Assert(FALSE, "Test 22 failed") + ELSE Print("Test 22 OK", TRUE) + + /\ IF (x \equiv z) + THEN Assert(FALSE, "Test 23 failed") + ELSE Print("Test 23 OK", TRUE) + + /\ IF (z \equiv x) + THEN Assert(FALSE, "Test 24 failed") + ELSE Print("Test 24 OK", TRUE) + + /\ IF TRUE \notin BOOLEAN + THEN Assert(FALSE, "Test 25 failed") + ELSE Print("Test 25 OK", TRUE) + + /\ IF FALSE \notin BOOLEAN + THEN Assert(FALSE, "Test 26 failed") + ELSE Print("Test 26 OK", TRUE) + + /\ IF {TRUE, FALSE} # BOOLEAN + THEN Assert(FALSE, "Test 27 failed") + ELSE Print("Test 27 OK", TRUE) + +========================================= diff --git a/tlatools/test-model/suite/test60.cfg b/tlatools/test-model/suite/test60.cfg new file mode 100644 index 0000000000000000000000000000000000000000..56f3b36e2773a56fe267643b6b1678e06c9584eb --- /dev/null +++ b/tlatools/test-model/suite/test60.cfg @@ -0,0 +1 @@ + diff --git a/tlatools/test-model/suite/test60.tla b/tlatools/test-model/suite/test60.tla new file mode 100644 index 0000000000000000000000000000000000000000..49fa97c0d1fed5c3bd5cd8e6259c6b2f98b9ab5a --- /dev/null +++ b/tlatools/test-model/suite/test60.tla @@ -0,0 +1,14 @@ +-------------------- MODULE test60 -------------------- +(***************************************************************************) +(* Test of handling strings as sequences. *) +(***************************************************************************) + +EXTENDS Sequences, TLC + +ASSUME "abc" \o "def" = "abcdef" +ASSUME Len("abcdef") = 6 +ASSUME "a\\b\"c\nd" = "a\\b\"" \o "c\nd" +ASSUME Len("a\\b\"c\nd") = 7 + +======================================== + diff --git a/tlatools/test-model/suite/test61.cfg b/tlatools/test-model/suite/test61.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d943a80dfc6f753930e5d1a345b64936e9bdd9d1 --- /dev/null +++ b/tlatools/test-model/suite/test61.cfg @@ -0,0 +1,2 @@ +SPECIFICATION ISpec +INVARIANT Invariant diff --git a/tlatools/test-model/suite/test61.tla b/tlatools/test-model/suite/test61.tla new file mode 100644 index 0000000000000000000000000000000000000000..8e43b969e0af483522fc091a310b85327abaa791 --- /dev/null +++ b/tlatools/test-model/suite/test61.tla @@ -0,0 +1,21 @@ +-------------------- MODULE test61 -------------------- +(***************************************************************************) +(* Test of parametrized INSTANCE *) +(***************************************************************************) +\* Because of bug, it Handles JSpec but not ISpec + +EXTENDS Naturals + +VARIABLE y + +IM(x) == INSTANCE test61a + +ISpec == IM(y)!Spec + +Invariant == y \in 0..4 + +JM == INSTANCE test61a WITH x <- y +JSpec == JM!Spec + +======================================== + diff --git a/tlatools/test-model/suite/test61a.tla b/tlatools/test-model/suite/test61a.tla new file mode 100644 index 0000000000000000000000000000000000000000..91dcc0541cabe2770f338cd068d5325bcf392076 --- /dev/null +++ b/tlatools/test-model/suite/test61a.tla @@ -0,0 +1,11 @@ +-------------------- MODULE test61a -------------------- +(***************************************************************************) +(* Test of parametrized INSTANCE *) +(***************************************************************************) + +EXTENDS Naturals + +VARIABLE x + +Spec == (x = 0) /\ [][x'=(x+1)%5]_x +======================================== diff --git a/tlatools/test-model/suite/test62.cfg b/tlatools/test-model/suite/test62.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d3f5a12faa99758192ecc4ed3fc22c9249232e86 --- /dev/null +++ b/tlatools/test-model/suite/test62.cfg @@ -0,0 +1 @@ + diff --git a/tlatools/test-model/suite/test62.tla b/tlatools/test-model/suite/test62.tla new file mode 100644 index 0000000000000000000000000000000000000000..eb18a3e5df15d72c29a4e6320f67148c84ae223e --- /dev/null +++ b/tlatools/test-model/suite/test62.tla @@ -0,0 +1,5 @@ +----------------------- MODULE test62 -------------------------- +EXTENDS TLC +ASSUME Print("Should print this", TRUE) +ASSUME PrintT("And this") +================================================================= diff --git a/tlatools/test-model/suite/test63.cfg b/tlatools/test-model/suite/test63.cfg new file mode 100644 index 0000000000000000000000000000000000000000..aedfc4d256b3ed021e905504203fd2f4df99ecfe --- /dev/null +++ b/tlatools/test-model/suite/test63.cfg @@ -0,0 +1,12 @@ +CONSTANTS + Rho = 1 + MaxReal = 5 + SecondsPerHour = 2 + +SPECIFICATION Spec +INVARIANT TypeOK +PROPERTY Property + +\* TEMPORAL Fairness +\* PROPERTY ErrorTemporal (* NonZeno ImpliedTemporal *) + diff --git a/examples/SpecifyingSystems/RealTime/MCRealTimeHourClock.tla b/tlatools/test-model/suite/test63.tla similarity index 65% rename from examples/SpecifyingSystems/RealTime/MCRealTimeHourClock.tla rename to tlatools/test-model/suite/test63.tla index 88f0eefef38cba659b5f29073de87f38bff40ad8..1f7175f517c5b420de35cf7d9a2c5f2b3b496179 100644 --- a/examples/SpecifyingSystems/RealTime/MCRealTimeHourClock.tla +++ b/tlatools/test-model/suite/test63.tla @@ -1,6 +1,7 @@ - -------------------------- MODULE MCRealTimeHourClock -------------------------- -EXTENDS Naturals, HourClock +\* Test of use of [A]_v within the next-state relation, checking +\* bug fix of 11 Mar 2009 +------------------------- MODULE test63 -------------------------- +EXTENDS Naturals, test63a VARIABLE now CONSTANT Rho, MaxReal, SecondsPerHour ----------------------------------------------------------------------------- @@ -26,6 +27,13 @@ BigNext == /\ [NowNext]_now /\ HCnxt => t \geq SecondsPerHour - Rho /\ t' \leq SecondsPerHour + Rho +BigNextX == + /\ NowNext \/ now'=now + /\ HCnxt \/ hr'=hr + /\ TNext + /\ HCnxt => t \geq SecondsPerHour - Rho + /\ t' \leq SecondsPerHour + Rho + BigInit == /\ HCini /\ t = 0 /\ now \in Real @@ -34,7 +42,16 @@ Fairness == \A r \in Real : WF_now(NowNext /\ (now'>r)) NonZeno == \A r \in Real : <>(now \geq r) -ImpliedTemporal == \A h \in 1..12 : []<>(hr = h) +\* ImpliedTemporal == \A h \in 1..12 : []<>(hr = h) + +Spec == BigInit /\ [][BigNext]_<<hr, now, t>>\* /\ Fairness + +TypeOK == /\ now \in Nat + /\ hr \in 1..12 + +I == INSTANCE test63a + +Property == I!HC RT == /\ now \in Real /\ [][NowNext]_now diff --git a/tlatools/test-model/suite/test63a.cfg b/tlatools/test-model/suite/test63a.cfg new file mode 100644 index 0000000000000000000000000000000000000000..9608bf7492bdbbbdf9966ffa01eb5eac559a8584 --- /dev/null +++ b/tlatools/test-model/suite/test63a.cfg @@ -0,0 +1,2 @@ +SPECIFICATION HC + diff --git a/examples/SpecifyingSystems/Liveness/HourClock.tla b/tlatools/test-model/suite/test63a.tla similarity index 81% rename from examples/SpecifyingSystems/Liveness/HourClock.tla rename to tlatools/test-model/suite/test63a.tla index f2b7b242d1db6635ed0721a4a116e465d33c84a9..85facb73fd18ebdbd58082093fddcc199cf04efb 100644 --- a/examples/SpecifyingSystems/Liveness/HourClock.tla +++ b/tlatools/test-model/suite/test63a.tla @@ -1,4 +1,4 @@ ----------------------- MODULE HourClock ---------------------- +---------------------- MODULE test63a ---------------------- EXTENDS Naturals VARIABLE hr HCini == hr \in (1 .. 12) diff --git a/tlatools/test-model/suite/test64.cfg b/tlatools/test-model/suite/test64.cfg new file mode 100644 index 0000000000000000000000000000000000000000..290675219f918e816d76cd9539ec1f1bc60323f2 --- /dev/null +++ b/tlatools/test-model/suite/test64.cfg @@ -0,0 +1 @@ +SPECIFICATION Spec diff --git a/tlatools/test-model/suite/test64.tla b/tlatools/test-model/suite/test64.tla new file mode 100644 index 0000000000000000000000000000000000000000..741839b0f33e14517bd90ea106573b7085c5ea1e --- /dev/null +++ b/tlatools/test-model/suite/test64.tla @@ -0,0 +1,8 @@ +-------------------------------- MODULE test64 -------------------------------- +VARIABLE y + +I == INSTANCE test64a WITH x <- y + \* Changed from Test64a on 12 June 2014 because that's now illegal + +Spec == I!Spec +======================================================================= diff --git a/tlatools/test-model/suite/test64a.cfg b/tlatools/test-model/suite/test64a.cfg new file mode 100644 index 0000000000000000000000000000000000000000..290675219f918e816d76cd9539ec1f1bc60323f2 --- /dev/null +++ b/tlatools/test-model/suite/test64a.cfg @@ -0,0 +1 @@ +SPECIFICATION Spec diff --git a/tlatools/test-model/suite/test64a.tla b/tlatools/test-model/suite/test64a.tla new file mode 100644 index 0000000000000000000000000000000000000000..af9d702a422591fe87245d9e3ddd9bdbb04d4b24 --- /dev/null +++ b/tlatools/test-model/suite/test64a.tla @@ -0,0 +1,8 @@ +----------------------- MODULE test64a ----------------------- +VARIABLE x + +ASet == {r \in [{0} -> {0}] : x} + +Spec == x = TRUE /\ [][x' = (ASet = {})]_x +============================================================= + \ No newline at end of file diff --git a/tlatools/test-model/suite/test65.cfg b/tlatools/test-model/suite/test65.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d996c9a48b652401c2185136d4bab906b05f1d5e --- /dev/null +++ b/tlatools/test-model/suite/test65.cfg @@ -0,0 +1 @@ +CONSTANT c = "a" diff --git a/tlatools/test-model/suite/test65.tla b/tlatools/test-model/suite/test65.tla new file mode 100644 index 0000000000000000000000000000000000000000..6fd8b5802763bf090aaeec90be7a66964e6ae668 --- /dev/null +++ b/tlatools/test-model/suite/test65.tla @@ -0,0 +1,8 @@ +-------------------------------- MODULE test65 -------------------------------- +EXTENDS test65a + +I == INSTANCE test65a WITH c <- 42 +J == INSTANCE test65a WITH c <- 44 +ASSUME /\ <<I!foo, J!foo>> = <<42, 44>> + /\ foo = c +======================================================================= diff --git a/tlatools/test-model/suite/test65a.cfg b/tlatools/test-model/suite/test65a.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d996c9a48b652401c2185136d4bab906b05f1d5e --- /dev/null +++ b/tlatools/test-model/suite/test65a.cfg @@ -0,0 +1 @@ +CONSTANT c = "a" diff --git a/tlatools/test-model/suite/test65a.tla b/tlatools/test-model/suite/test65a.tla new file mode 100644 index 0000000000000000000000000000000000000000..86da3688faef5d3fa02c0a85448010e04f782b95 --- /dev/null +++ b/tlatools/test-model/suite/test65a.tla @@ -0,0 +1,7 @@ +----------------------- MODULE test65a ----------------------- +CONSTANT c + +bar == c +foo == bar +============================================================= + \ No newline at end of file diff --git a/tlatools/test-model/suite/test7.cfg b/tlatools/test-model/suite/test7.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b0ee260b28eef2026bbc2f6cb01c89fd3d01d947 --- /dev/null +++ b/tlatools/test-model/suite/test7.cfg @@ -0,0 +1,8 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test7.tla b/tlatools/test-model/suite/test7.tla new file mode 100644 index 0000000000000000000000000000000000000000..b4468cd6736c8d1024be6b6860821c3416d53b46 --- /dev/null +++ b/tlatools/test-model/suite/test7.tla @@ -0,0 +1,100 @@ +--------------- MODULE test7 ------------- + +(* test of Predicate Logic and CHOOSE *) + +EXTENDS Integers, TLC + +VARIABLE x +Type == x \in BOOLEAN +Init == x = TRUE +Next == UNCHANGED x + +Inv == + + /\ IF ~ \E i \in {1,2,3} : i=2 + THEN Assert(FALSE, "Test 1 Failed") + ELSE Print("Test 1 OK", TRUE) + + /\ IF ~ \exists i \in {1,2,3} : i=2 + THEN Assert(FALSE, "Test 1a Failed") + ELSE Print("Test 1a OK", TRUE) + + /\ IF \A i \in {3,3,3,3,2,1} : i=3 + THEN Assert(FALSE, "Test 2 Failed") + ELSE Print("Test 2 OK", TRUE) + + /\ IF \forall i \in {3,3,3,3,2,1} : i=3 + THEN Assert(FALSE, "Test 2a Failed") + ELSE Print("Test 2a OK", TRUE) + + /\ IF \E i \in {1,2,3} : FALSE + THEN Assert(FALSE, "Test 3 Failed") + ELSE Print("Test 3 OK", TRUE) + + /\ IF ~\A i \in {1,2,3} : TRUE + THEN Assert(FALSE, "Test 4 Failed") + ELSE Print("Test 4 OK", TRUE) + + /\ IF \E i \in {} : TRUE + THEN Assert(FALSE, "Test 5 Failed") + ELSE Print("Test 5 OK", TRUE) + + /\ IF \exists i \in {} : TRUE + THEN Assert(FALSE, "Test 5a Failed") + ELSE Print("Test 5a OK", TRUE) + + /\ IF ~\A i \in {} : FALSE + THEN Assert(FALSE, "Test 6 Failed") + ELSE Print("Test 6 OK", TRUE) + + /\ IF ~\forall i \in {} : FALSE + THEN Assert(FALSE, "Test 6a Failed") + ELSE Print("Test 6a OK", TRUE) + + /\ IF ~\E <<i, j>> \in {1,2} \X {3,4}, + k, l \in {4, 5}, m \in {6,7} : i + j + k + l + m = 23 + THEN Assert(FALSE, "Test 7 Failed") + ELSE Print("Test 7 OK", TRUE) + + /\ IF ~\A <<i, j>> \in {1,2} \X {3,4}, + k, l \in {4, 5}, m \in {6,7} : i + j + k + l + m > 17 + THEN Assert(FALSE, "Test 8 Failed") + ELSE Print("Test 8 OK", TRUE) + + /\ IF (CHOOSE i \in {1,2,3} : i > 2) # 3 + THEN Assert(FALSE, "Test 9 Failed") + ELSE Print("Test 9 OK", TRUE) + + /\ IF (CHOOSE i \in {1,2,3, 4} : i > 2) \leq 2 + THEN Assert(FALSE, "Test 10 Failed") + ELSE Print("Test 10 OK", TRUE) + + /\ IF <<1, 3>> # CHOOSE <<i, j>> \in {1,2} \X {3,4} : (i < 2) /\ (j = i+2) + THEN Assert(FALSE, "Test 11 Failed") + ELSE Print("Test 11 OK", TRUE) + + /\ IF ~(\A i \in {1,2}, <<j, k>> \in {3,4} \X {5, 6}, m, n \in {7,8} : + i+j+k+m+n \geq 23) + THEN Assert(FALSE, "Test 12 Failed") + ELSE Print("Test 12 OK", TRUE) + + /\ IF \E i \in {1,2}, <<j, k>> \in {3,4} \X {5, 6}, m, n \in {7,8} : + i+j+k+m+n < 23 + THEN Assert(FALSE, "Test 13 Failed") + ELSE Print("Test 13 OK", TRUE) + + + /\ IF \A i \in CHOOSE j \in {{Nat}, {Int}} : \E k \in j : -1 \in k : + -4 \in i + THEN Print("Test 14 OK", TRUE) + ELSE Assert(FALSE, "Test 14 Failed") +========================================= + +The following test is not expected to work because +TLC does not preserve the semantics of CHOOSE + + /\ IF (CHOOSE i \in {1,2,3, 4} : i > 2) + # (CHOOSE i \in {4, 1, 3 , 2} : i > 2) + THEN Assert(FALSE, "Test 11 Failed") + ELSE Print("Test 11 OK", TRUE) + diff --git a/tlatools/test-model/suite/test8.cfg b/tlatools/test-model/suite/test8.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b0ee260b28eef2026bbc2f6cb01c89fd3d01d947 --- /dev/null +++ b/tlatools/test-model/suite/test8.cfg @@ -0,0 +1,8 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test8.tla b/tlatools/test-model/suite/test8.tla new file mode 100644 index 0000000000000000000000000000000000000000..fe958975938226c2b001df313438f5d7368f01d0 --- /dev/null +++ b/tlatools/test-model/suite/test8.tla @@ -0,0 +1,102 @@ +--------------- MODULE test8 ------------- + +(* Test of set operators \cup, \cap, \subseteq, \ *) + +EXTENDS Integers, TLC, Sequences + +VARIABLE x +Type == x \in BOOLEAN +Init == x = TRUE +Next == UNCHANGED x + +Inv == + + /\ IF {1, 2, 3} \cup {3, 4, 5} # 1..5 + THEN Assert(FALSE, "Test 1 Failed") + ELSE Print("Test 1 OK", TRUE) + + /\ IF {1, 2, 3} \cap {3, 4, 5} # {3} + THEN Assert(FALSE, "Test 2 Failed") + ELSE Print("Test 2 OK", TRUE) + + /\ IF -5 \notin Int \cup Nat + THEN Assert(FALSE, "Test 3 Failed") + ELSE Print("Test 3 OK", TRUE) + + /\ IF -5 \notin Nat \cup Int + THEN Assert(FALSE, "Test 4 Failed") + ELSE Print("Test 4 OK", TRUE) + + /\ IF {1, 2, 3, 4} \cap {i \in Int : i > 2} # {3, 4} + THEN Assert(FALSE, "Test 5 Failed") + ELSE Print("Test 5 OK", TRUE) + + /\ IF {1, 2, 3} \cap {} # {} + THEN Assert(FALSE, "Test 6 Failed") + ELSE Print("Test 6 OK", TRUE) + + /\ IF {} \cap {1, 2, 3} # {} + THEN Assert(FALSE, "Test 7 Failed") + ELSE Print("Test 7 OK", TRUE) + + /\ IF {1, 2, 3, 4} \ {i \in Int : i > 2} # {2, 1} + THEN Assert(FALSE, "Test 8 Failed") + ELSE Print("Test 8 OK", TRUE) + + /\ IF {1, 2, 3} \ {} # {3,1,2} + THEN Assert(FALSE, "Test 9 Failed") + ELSE Print("Test 9 OK", TRUE) + + /\ IF {} \ {1, 2, 3} # {} + THEN Assert(FALSE, "Test 10 Failed") + ELSE Print("Test 10 OK", TRUE) + + /\ IF -5 \in {-5} \ Int + THEN Assert(FALSE, "Test 11 Failed") + ELSE Print("Test 11 OK", TRUE) + + /\ IF <<1, 2>> \in Seq({1,2,3}) \ Seq({1,2}) + THEN Assert(FALSE, "Test 12 Failed") + ELSE Print("Test 12 OK", TRUE) + + /\ IF <<1, 2>> \notin Seq({1,2,3}) + THEN Assert(FALSE, "Test 12a Failed") + ELSE Print("Test 12a OK", TRUE) + + /\ IF <<1, 2>> \notin Seq({1,2,3}) \cap Seq({0,1,2}) + THEN Assert(FALSE, "Test 13 Failed") + ELSE Print("Test 13 OK", TRUE) + + /\ IF <<1, 2>> \notin Seq({0,1}) \cup Seq({1,2,3}) + THEN Assert(FALSE, "Test 14 Failed") + ELSE Print("Test 14 OK", TRUE) + + /\ IF <<1, 2>> \in [1..2 ->{1,2,3}] \ [1..2 ->{1,2}] + THEN Assert(FALSE, "Test 16 Failed") + ELSE Print("Test 16 OK", TRUE) + + /\ IF <<1, 2>> \notin [1..2 ->{1,2,3}] + THEN Assert(FALSE, "Test 17 Failed") + ELSE Print("Test 17 OK", TRUE) + + /\ IF <<1, 2>> \notin [1..2 ->{1,2,3}] \cap [1..2 ->{0,1,2}] + THEN Assert(FALSE, "Test 18 Failed") + ELSE Print("Test 18 OK", TRUE) + + /\ IF <<1, 2>> \notin [1..2 ->{0,1}] \cup [1..2 ->{1,2,3}] + THEN Assert(FALSE, "Test 19 Failed") + ELSE Print("Test 19 OK", TRUE) + + /\ IF ~({1,2,3} \subseteq Int) + THEN Assert(FALSE, "Test 20 Failed") + ELSE Print("Test 20 OK", TRUE) + + /\ IF {1,2,3} \subseteq {i \in Int : i < 3} + THEN Assert(FALSE, "Test 21 Failed") + ELSE Print("Test 21 OK", TRUE) + + /\ IF <<1,2>> \in ({1,2} \X Nat) \cup {<<3,4>>, <<5,6>>} + THEN Print("Test 22 OK", TRUE) + ELSE Assert(FALSE, "Test 22 Failed") + +========================================= diff --git a/tlatools/test-model/suite/test9.cfg b/tlatools/test-model/suite/test9.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b0ee260b28eef2026bbc2f6cb01c89fd3d01d947 --- /dev/null +++ b/tlatools/test-model/suite/test9.cfg @@ -0,0 +1,8 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + diff --git a/tlatools/test-model/suite/test9.tla b/tlatools/test-model/suite/test9.tla new file mode 100644 index 0000000000000000000000000000000000000000..baac310c2b3fc7bd5b29fe68216a884c2a1f2ca3 --- /dev/null +++ b/tlatools/test-model/suite/test9.tla @@ -0,0 +1,73 @@ +--------------- MODULE test9 ------------- + +(* Test of set constructors {x \in S : P(x)} and {e(x) : x \in S} *) + +EXTENDS Integers, TLC, FiniteSets + +VARIABLE x +Type == x \in BOOLEAN +Init == x = TRUE +Next == UNCHANGED x + +Inv == + + /\ IF {i \in {1,3,3,3,4} : i > 1} # {4,3} + THEN Assert(FALSE, "Test 1 Failed") + ELSE Print("Test 1 OK", TRUE) + + /\ IF {<<i, j>> \in {1,2} \X {2,3} : j > i} # {<<1,2>>, <<1,3>>, <<2,3>>} + THEN Assert(FALSE, "Test 2 Failed") + ELSE Print("Test 2 OK", TRUE) + + /\ IF 2 \notin {i \in Int : i > 1} + THEN Assert(FALSE, "Test 3 Failed") + ELSE Print("Test 3 OK", TRUE) + + /\ IF <<3,4>> \notin {<<i,j>> \in Int \X Int : j > i} + THEN Assert(FALSE, "Test 4 Failed") + ELSE Print("Test 4 OK", TRUE) + + /\ IF {i+j+k+l+m : i, j \in {1, 2, 3}, + <<k, l>> \in {4,5} \X {6,7}, m \in {8}} # 20..26 + THEN Assert(FALSE, "Test 5 Failed") + ELSE Print("Test 5 OK", TRUE) + + /\ IF 24 \notin {i+j+k+l+m : i, j \in {1, 2, 3}, + <<k, l>> \in {4,5} \X {6,7}, m \in {8}} + THEN Assert(FALSE, "Test 6 Failed") + ELSE Print("Test 6 OK", TRUE) + + /\ IF {i+j : i \in {1,2,3}, j \in {}} # {} + THEN Assert(FALSE, "Test 7 Failed") + ELSE Print("Test 7 OK", TRUE) + + /\ IF {i \in {} : i > 2} # {} + THEN Assert(FALSE, "Test 8 Failed") + ELSE Print("Test 8 OK", TRUE) + + /\ IF {<<i, j>> \in {1,3} \X {} : i > 2} # {} + THEN Assert(FALSE, "Test 9 Failed") + ELSE Print("Test 9 OK", TRUE) + + /\ IF <<1,2>> \notin {f \in UNION {[S -> {1,2,3}] : + S \in SUBSET {1,2,3}} : f[2] = 2} + THEN Assert(FALSE, "Test 10 Failed") + ELSE Print("Test 10 OK", TRUE) + + /\ IF Cardinality({f \in [{1,2,3} -> {1,2,3}] : f[2] > 1}) # 18 + THEN Assert(FALSE, "Test 11 Failed") + ELSE Print("Test 11 OK", TRUE) + + /\ IF Cardinality([{1,2,3} -> {1,2,3,4}]) # 64 + THEN Assert(FALSE, "Test 12 Failed") + ELSE Print("Test 12 OK", TRUE) + + /\ IF Cardinality([ {5, 5, 5, 3, 5, 2} -> {1, 3, 3, 3} ]) # 8 + THEN Assert(FALSE, "Test 13 Failed") + ELSE Print("Test 13 OK", TRUE) + + /\ IF [ {5, 5, 5, 3, 5, 2} -> {1, 3, 3, 3} ] # [{2,3,5} -> {1,3}] + THEN Assert(FALSE, "Test 14 Failed") + ELSE Print("Test 14 OK", TRUE) + +========================================= diff --git a/tlatools/test-model/suite/test99.cfg b/tlatools/test-model/suite/test99.cfg new file mode 100644 index 0000000000000000000000000000000000000000..5e8cedc4cac917a8a41ec9ad1e980ca0e367180c --- /dev/null +++ b/tlatools/test-model/suite/test99.cfg @@ -0,0 +1,11 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + + + \ No newline at end of file diff --git a/tlatools/test-model/suite/test99.tla b/tlatools/test-model/suite/test99.tla new file mode 100644 index 0000000000000000000000000000000000000000..b020e7eaae3d0e0d844dd2704ef4d4eac81c68cd --- /dev/null +++ b/tlatools/test-model/suite/test99.tla @@ -0,0 +1,89 @@ +------------------------------ MODULE test99 ----------------------------- +(* Test of standard Naturals module. *) + +EXTENDS Integers, TLC + +VARIABLES x + +Init == x = 0 + +Next == UNCHANGED x + +Inv == +(* /\ IF 2^10 + 2^10 = 2^11 + THEN Print("Test 1 OK", TRUE) + ELSE Assert(FALSE, "Test 1 Failed") + + /\ IF 0^20 = 0 + THEN Print("Test 2 OK", TRUE) + ELSE Assert(FALSE, "Test 2 Failed") *) + + /\ IF 2 - 3 \notin Nat + THEN Print("Test 3 OK", TRUE) + ELSE Assert(FALSE, "Test 3 Failed") + + /\ IF 123 * 345 = 42435 + THEN Print("Test 4 OK", TRUE) + ELSE Assert(FALSE, "Test 4 Failed") + + /\ IF 123 < 124 + THEN Print("Test 5 OK", TRUE) + ELSE Assert(FALSE, "Test 5 Failed") + + /\ IF 12345 > 12344 + THEN Print("Test 6 OK", TRUE) + ELSE Assert(FALSE, "Test 6 Failed") + + /\ IF 123 \leq 123 + THEN Print("Test 7 OK", TRUE) + ELSE Assert(FALSE, "Test 7 Failed") + + /\ IF 12345 \geq 12345 + THEN Print("Test 8 OK", TRUE) + ELSE Assert(FALSE, "Test 8 Failed") + + /\ IF 123 \leq 124 + THEN Print("Test 9 OK", TRUE) + ELSE Assert(FALSE, "Test 9 Failed") + + /\ IF 12344 \geq 12333 + THEN Print("Test 10 OK", TRUE) + ELSE Assert(FALSE, "Test 10 Failed") + + /\ IF 145939 = 487 * (145939 \div 487) + (145939 % 487) + THEN Print("Test 11 OK", TRUE) + ELSE Assert(FALSE, "Test 11 Failed") + + /\ IF 139982 \div 1 = 139982 + THEN Print("Test 12 OK", TRUE) + ELSE Assert(FALSE, "Test 12 Failed") + + /\ IF 123099 % 1 = 0 + THEN Print("Test 13 OK", TRUE) + ELSE Assert(FALSE, "Test 13 Failed") + + /\ IF 0 % 345 = 0 + THEN Print("Test 14 OK", TRUE) + ELSE Assert(FALSE, "Test 14 Failed") + + /\ IF 24 % 9 = 6 + THEN Print("Test 15 OK", TRUE) + ELSE Assert(FALSE, "Test 15 Failed") + + /\ IF 4566799 = 423 * (4566799 \div 423) + (4566799 % 423) + THEN Print("Test 16 OK", TRUE) + ELSE Assert(FALSE, "Test 16 Failed") + + /\ IF 2222222 = 18 * (2222222 \div 18) + (2222222 % 18) + THEN Print("Test 17 OK", TRUE) + ELSE Assert(FALSE, "Test 17 Failed") + + /\ IF 3 .. 2 = {} + THEN Print("Test 18 OK", TRUE) + ELSE Assert(FALSE, "Test 18 Failed") + + /\ IF 2..4 = {2, 3, 4} + THEN Print("Test 19 OK", TRUE) + ELSE Assert(FALSE, "Test 19 Failed") + +============================================================================= diff --git a/tlatools/test-model/suite/test999.cfg b/tlatools/test-model/suite/test999.cfg new file mode 100644 index 0000000000000000000000000000000000000000..eecec9a4f071796a4236f4bf1bf5a1a1e115560e --- /dev/null +++ b/tlatools/test-model/suite/test999.cfg @@ -0,0 +1,15 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + CONSTANT + P <- PRep + PLen <- Len + Seq <- MCSeq + ++ <- PlusPlus + Plus <- + + \o <- + \ No newline at end of file diff --git a/tlatools/test-model/suite/test999.tla b/tlatools/test-model/suite/test999.tla new file mode 100644 index 0000000000000000000000000000000000000000..d28a8963809b6279c5d49487d512fcd9a7c15f4d --- /dev/null +++ b/tlatools/test-model/suite/test999.tla @@ -0,0 +1,47 @@ +--------------- MODULE test999 ------------- + +(* Test replacement of and by infix operators and overridden operators. *) + +EXTENDS TLC, Naturals, Sequences + +VARIABLE x + +CONSTANT P(_,_), _++_ , Plus(_, _), PLen(_) + +PlusPlus(a, b) == <<a, b>> + +PRep(a, b) == {a, b} + +MCSeq(a) == {a} + +MCCat(a, b) == a + b + +Init == /\ x = 1 + /\ IF P(2, x+3) = {2, 4} + THEN Print("Test 1 OK", TRUE) + ELSE Assert(FALSE, "Test 1 Failed") + /\ IF (2++(x+3)) = <<2, 4>> + THEN Print("Test 2 OK", TRUE) + ELSE Assert(FALSE, "Test 2 Failed") + /\ IF PLen(<<1, 2, 3>>) = 3 + THEN Print("Test 3 OK", TRUE) + ELSE Assert(FALSE, "Test 3 Failed") + /\ IF Plus(2, x+3) = 6 + THEN Print("Test 4 OK", TRUE) + ELSE Assert(FALSE, "Test 4 Failed") + /\ IF Seq(22) = {22} + THEN Print("Test 5 OK", TRUE) + ELSE Assert(FALSE, "Test 5 Failed") + /\ IF 1 \o 2 = 3 (* Huh???? *) + THEN Print("Test 6 OK", TRUE) + ELSE Assert(FALSE, "Test 6 Failed") + /\ LET a \prec b == a < b + IN IF 1 \prec 2 + THEN Print("Test 7 OK", TRUE) + ELSE Assert(FALSE, "Test 7 Failed") + +Next == UNCHANGED x + +Inv == TRUE + +========================================= diff --git a/tlatools/test-model/suite/testa.cfg b/tlatools/test-model/suite/testa.cfg new file mode 100644 index 0000000000000000000000000000000000000000..5e8cedc4cac917a8a41ec9ad1e980ca0e367180c --- /dev/null +++ b/tlatools/test-model/suite/testa.cfg @@ -0,0 +1,11 @@ + INIT + Init + + NEXT + Next + + INVARIANT Inv + + + + \ No newline at end of file diff --git a/tlatools/test-model/suite/testa.tla b/tlatools/test-model/suite/testa.tla new file mode 100644 index 0000000000000000000000000000000000000000..a535e319b8e45f214181388511f29114c626b2f0 --- /dev/null +++ b/tlatools/test-model/suite/testa.tla @@ -0,0 +1,5 @@ +------- MODULE testa ----- + +EXTENDS test, Integers + +========================== diff --git a/tlatools/test-model/suite/testfoo.cfg b/tlatools/test-model/suite/testfoo.cfg new file mode 100644 index 0000000000000000000000000000000000000000..2a209c125237fe03cfb6a69cde7bd574d490c9ca --- /dev/null +++ b/tlatools/test-model/suite/testfoo.cfg @@ -0,0 +1,11 @@ + INIT + Init + + NEXT + Next + + + + + + \ No newline at end of file diff --git a/tlatools/test-model/suite/testfoo.tla b/tlatools/test-model/suite/testfoo.tla new file mode 100644 index 0000000000000000000000000000000000000000..19ee2927f791114501c75d8bcfe2a00b47930110 --- /dev/null +++ b/tlatools/test-model/suite/testfoo.tla @@ -0,0 +1,9 @@ +------------- MODULE test -------------- +EXTENDS Naturals + +VARIABLES x + +Init == x \in SUBSET (1..32) + +Next == x' = 1 +============================================= diff --git a/tlatools/test-model/suite/testt37.tla b/tlatools/test-model/suite/testt37.tla new file mode 100644 index 0000000000000000000000000000000000000000..f1f6fbbaf012b6ad9b450c2b4f30a940fbcedf27 --- /dev/null +++ b/tlatools/test-model/suite/testt37.tla @@ -0,0 +1,26 @@ +---------------------------- MODULE test37 ----------------------------- +EXTENDS FiniteSets, TLC + +VARIABLES x + +Init == x = 0 +Next == x'=x +Inv == + /\ IF IsFiniteSet({"a", "b"}) + THEN Print("Test 1 OK", TRUE) + ELSE Assert(FALSE, "Test 1 Failed") + + /\ IF IsFiniteSet({}) + THEN Print("Test 2 OK", TRUE) + ELSE Assert(FALSE, "Test 2 Failed") + + /\ IF Cardinality({}) = 0 + THEN Print("Test 3 OK", TRUE) + ELSE Assert(FALSE, "Test 3 Failed") + + /\ IF Cardinality({"a", "b"}) = 2 + THEN Print("Test 4 OK", TRUE) + ELSE Assert(FALSE, "Test 4 Failed") + + +============================================================================= diff --git a/tlatools/test-model/symmetry/April20a.tla b/tlatools/test-model/symmetry/April20a.tla new file mode 100644 index 0000000000000000000000000000000000000000..07c10a69a59e08ee76dd3699026556ffca70a101 --- /dev/null +++ b/tlatools/test-model/symmetry/April20a.tla @@ -0,0 +1,24 @@ +----------------------------- MODULE April20a ----------------------------- +EXTENDS Integers + +CONSTANT S + +VARIABLE x, y +vars == <<x, y>> + +Init == (x = 0) /\ (y=0) + +Next == \/ /\ y=0 + /\ y'=1 + /\ x' \in S + \/ /\ y=1 + /\ y'=2 + /\ x' \in S \ {x} + \/ /\ y = 2 + /\ y'=0 + /\ x' = 0 + +Spec == Init /\ [][Next]_vars + +Live == ~ \A i \in S : \E j \in S \ {i} : []<><<x'=i /\ x=j>>_x +============================================================================= diff --git a/tlatools/test-model/symmetry/April20aMC.cfg b/tlatools/test-model/symmetry/April20aMC.cfg new file mode 100644 index 0000000000000000000000000000000000000000..4975b08bd040c40a68167c9fd5f5eec29ee0e88f --- /dev/null +++ b/tlatools/test-model/symmetry/April20aMC.cfg @@ -0,0 +1,15 @@ +\* MV CONSTANT declarations +CONSTANTS +m1 = m1 +m2 = m2 +\* MV CONSTANT definitions +CONSTANT +S <- const_146115895642519000 +\* SYMMETRY definition +SYMMETRY symm_146115895643520000 +\* SPECIFICATION definition +SPECIFICATION +spec_146115895644521000 +\* PROPERTY definition +PROPERTY +prop_146115895645522000 diff --git a/tlatools/test-model/symmetry/April20aMC.tla b/tlatools/test-model/symmetry/April20aMC.tla new file mode 100644 index 0000000000000000000000000000000000000000..278a73f775e200b7fb275a6576dd83d52a6bcf35 --- /dev/null +++ b/tlatools/test-model/symmetry/April20aMC.tla @@ -0,0 +1,27 @@ +---- MODULE April20aMC ---- +EXTENDS April20a, TLC + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +m1, m2 +---- + +\* MV CONSTANT definitions S +const_146115895642519000 == +{m1, m2} +---- + +\* SYMMETRY definition +symm_146115895643520000 == +Permutations(const_146115895642519000) +---- + +\* SPECIFICATION definition @modelBehaviorSpec:0 +spec_146115895644521000 == +Spec +---- +\* PROPERTY definition @modelCorrectnessProperties:0 +prop_146115895645522000 == +Live +---- +============================================================================= diff --git a/tlatools/test-model/symmetry/April20b.tla b/tlatools/test-model/symmetry/April20b.tla new file mode 100644 index 0000000000000000000000000000000000000000..c0d1e888f6932bdbb22fafc7637cac6fc84241a3 --- /dev/null +++ b/tlatools/test-model/symmetry/April20b.tla @@ -0,0 +1,24 @@ +----------------------------- MODULE April20b ----------------------------- +EXTENDS Integers, Sequences + +CONSTANT S + +VARIABLE x, y +vars == <<x, y>> + +Init == (x = << >>) /\ (y=0) + +Next == \/ /\ y=0 + /\ y'=1 + /\ \E s \in S : x' = <<s>> + \/ /\ y=1 + /\ y'=2 + /\ \E s \in S \ {x[1]} : x' = Append(x, s) + \/ /\ y = 2 + /\ y'=0 + /\ x' = << >> + +Spec == Init /\ [][Next]_vars + +Live == ~ \A i \in S : \E j \in S \ {i} : []<>(x = <<i, j>>) +============================================================================= diff --git a/tlatools/test-model/symmetry/April20bMC.cfg b/tlatools/test-model/symmetry/April20bMC.cfg new file mode 100644 index 0000000000000000000000000000000000000000..850ed89ce61152d41aff311467b5eaf1f40668c2 --- /dev/null +++ b/tlatools/test-model/symmetry/April20bMC.cfg @@ -0,0 +1,15 @@ +\* MV CONSTANT declarations +CONSTANTS +m1 = m1 +m2 = m2 +\* MV CONSTANT definitions +CONSTANT +S <- const_146115906599338000 +\* SYMMETRY definition +SYMMETRY symm_146115906600339000 +\* SPECIFICATION definition +SPECIFICATION +spec_146115906601340000 +\* PROPERTY definition +PROPERTY +prop_146115906602341000 diff --git a/tlatools/test-model/symmetry/April20bMC.tla b/tlatools/test-model/symmetry/April20bMC.tla new file mode 100644 index 0000000000000000000000000000000000000000..b2b4059482829ba9fa897613d9fd3424c68d0e36 --- /dev/null +++ b/tlatools/test-model/symmetry/April20bMC.tla @@ -0,0 +1,27 @@ +---- MODULE April20bMC ---- +EXTENDS April20b, TLC + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +m1, m2 +---- + +\* MV CONSTANT definitions S +const_146115906599338000 == +{m1, m2} +---- + +\* SYMMETRY definition +symm_146115906600339000 == +Permutations(const_146115906599338000) +---- + +\* SPECIFICATION definition @modelBehaviorSpec:0 +spec_146115906601340000 == +Spec +---- +\* PROPERTY definition @modelCorrectnessProperties:0 +prop_146115906602341000 == +Live +---- +============================================================================= diff --git a/tlatools/test-model/symmetry/April21.tla b/tlatools/test-model/symmetry/April21.tla new file mode 100644 index 0000000000000000000000000000000000000000..e161d36f1abcac6bdf2040b46b3d6f63302a056c --- /dev/null +++ b/tlatools/test-model/symmetry/April21.tla @@ -0,0 +1,15 @@ +----------------------------- MODULE April21 ----------------------------- +EXTENDS Integers + +CONSTANT S + +VARIABLE x + +Init == x \in S + +Next == x' \in S + +Spec == Init /\ [][Next]_x + +Live == \E i \in S : <>[][x # i]_x +============================================================================= diff --git a/tlatools/test-model/symmetry/April21MC.cfg b/tlatools/test-model/symmetry/April21MC.cfg new file mode 100644 index 0000000000000000000000000000000000000000..4975b08bd040c40a68167c9fd5f5eec29ee0e88f --- /dev/null +++ b/tlatools/test-model/symmetry/April21MC.cfg @@ -0,0 +1,15 @@ +\* MV CONSTANT declarations +CONSTANTS +m1 = m1 +m2 = m2 +\* MV CONSTANT definitions +CONSTANT +S <- const_146115895642519000 +\* SYMMETRY definition +SYMMETRY symm_146115895643520000 +\* SPECIFICATION definition +SPECIFICATION +spec_146115895644521000 +\* PROPERTY definition +PROPERTY +prop_146115895645522000 diff --git a/tlatools/test-model/symmetry/April21MC.tla b/tlatools/test-model/symmetry/April21MC.tla new file mode 100644 index 0000000000000000000000000000000000000000..a3005a9817fa1b7f7a6aa0d940bb3c70d29d6b17 --- /dev/null +++ b/tlatools/test-model/symmetry/April21MC.tla @@ -0,0 +1,27 @@ +---- MODULE April21MC ---- +EXTENDS April21, TLC + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +m1, m2 +---- + +\* MV CONSTANT definitions S +const_146115895642519000 == +{m1, m2} +---- + +\* SYMMETRY definition +symm_146115895643520000 == +Permutations(const_146115895642519000) +---- + +\* SPECIFICATION definition @modelBehaviorSpec:0 +spec_146115895644521000 == +Spec +---- +\* PROPERTY definition @modelCorrectnessProperties:0 +prop_146115895645522000 == +Live +---- +============================================================================= diff --git a/tlatools/test-model/symmetry/April22.tla b/tlatools/test-model/symmetry/April22.tla new file mode 100644 index 0000000000000000000000000000000000000000..33bcdfd724e834db56863c4a030277e1e63b8956 --- /dev/null +++ b/tlatools/test-model/symmetry/April22.tla @@ -0,0 +1,15 @@ +----------------------------- MODULE April22 ----------------------------- +EXTENDS Integers + +CONSTANT S + +VARIABLE x + +Init == x \in S + +Next == x' \in S + +Spec == Init /\ [][Next]_x /\ WF_x(Next) + +Live == \A i \in S : []<>(x=i) +============================================================================= diff --git a/tlatools/test-model/symmetry/April22MC.cfg b/tlatools/test-model/symmetry/April22MC.cfg new file mode 100644 index 0000000000000000000000000000000000000000..4975b08bd040c40a68167c9fd5f5eec29ee0e88f --- /dev/null +++ b/tlatools/test-model/symmetry/April22MC.cfg @@ -0,0 +1,15 @@ +\* MV CONSTANT declarations +CONSTANTS +m1 = m1 +m2 = m2 +\* MV CONSTANT definitions +CONSTANT +S <- const_146115895642519000 +\* SYMMETRY definition +SYMMETRY symm_146115895643520000 +\* SPECIFICATION definition +SPECIFICATION +spec_146115895644521000 +\* PROPERTY definition +PROPERTY +prop_146115895645522000 diff --git a/tlatools/test-model/symmetry/April22MC.tla b/tlatools/test-model/symmetry/April22MC.tla new file mode 100644 index 0000000000000000000000000000000000000000..f6536924153fa30d97cabc30fccb41e74b278056 --- /dev/null +++ b/tlatools/test-model/symmetry/April22MC.tla @@ -0,0 +1,27 @@ +---- MODULE April22MC ---- +EXTENDS April22, TLC + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +m1, m2 +---- + +\* MV CONSTANT definitions S +const_146115895642519000 == +{m1, m2} +---- + +\* SYMMETRY definition +symm_146115895643520000 == +Permutations(const_146115895642519000) +---- + +\* SPECIFICATION definition @modelBehaviorSpec:0 +spec_146115895644521000 == +Spec +---- +\* PROPERTY definition @modelCorrectnessProperties:0 +prop_146115895645522000 == +Live +---- +============================================================================= diff --git a/tlatools/test-model/symmetry/April25.tla b/tlatools/test-model/symmetry/April25.tla new file mode 100644 index 0000000000000000000000000000000000000000..9dc40bc60ffe1e58b1caf9dd71c34ddd8447bb7e --- /dev/null +++ b/tlatools/test-model/symmetry/April25.tla @@ -0,0 +1,77 @@ +----------------------------- MODULE April25 ----------------------------- +EXTENDS Integers + +CONSTANT S + +VARIABLE x + +Init == x \in S + +Next == x' \in S + +Spec == Init /\ [][Next]_x + +(* + There exists (at least) an element e in S for which variable x in all + suffixes of all behaviors is never assigned e. Prefixes can be anything. + There can be other elements in S which show a different behavior + (even though this is not be the case when the spec/model declares S + to be symmetric). + + A counterexample - to such a liveness claim - is an infinite suffix path + with the property that x gets assigned e. This assignment can occur 1 to + N times within the infinite suffix path. Any SCC is an infinite suffix + path. + + Assume S={a,b}: + + This behavior satisfies Live with e bound to b (in Omega notation) + ... > (x=a)^w + + Conversely, this behavior satisfies Live with e bound to a + ... > (x=b)^w + + Thus, the only infinite path that violates Live is where x is assigned + both elements of the set S. This behavior violates Live for both + values a and b. + ... > (x=a > x=b)^w + + Under no symmetry and S consisting out of two elements, the corresponding + behavior graph - which shows the above violation - has two nodes. The two + nodes are strongly connected. TLC searches the behavior graph for an SCC + whose path dissatisfies all action predicates (arc labels) - indicating + whether x' # x for each of the values of S evaluates to true. + See April25NoSymmetry.dot for an illustration. The illustration omits + self loops as they are irrelevant in this context. + + TLC generates two initial states (x=a and x=b) and for each, explores + its successor states. The successors for x=a are {x=a, x=b} and for x=b + {x=b, x=a}. Thus, the action predicate x'=e is evaluated for element + a *and* b. + + Gen_init = {x=a, x=b} + Gen_succ(x=a) = {x=a, x=b} + Gen_succ(x=b) = {x=a, x=b} + Arcs_sat = {x=a -> x=b, x=b -> x=a} + + + With symmetry declared on S, the behavior graph is reduced to a single + node. This node is logically equivalent to all states of the symmetry + set (which is indicated by the label in April25WithSymmetry.dot). + Consequently, TLC only generates successor states for a single element + of the symmetry set. Thus, it evaluates the action predicate for the + chosen element of S only and just adds its corresponding arcs to the + behavior graph. + + Let the initial state for which successor states are generated be x=a. + Its successors are x=a and x=b. TLC therefore only adds the arc + x=a -> x=b to the behavior graph which satisfies the action predicate + for (-[x#a]_x). + + Gen_init = {x=a, x=b} + Gen_succ(x=a) = {x=a, x=b} + Gen_succ(x=b) never explored due to symmetry of x=a and x=b. + Arcs_sat = {x=a -> x=b} +*) +Live == \E e \in S : <>[][x # e]_x +============================================================================= diff --git a/tlatools/test-model/symmetry/April25MC.cfg b/tlatools/test-model/symmetry/April25MC.cfg new file mode 100644 index 0000000000000000000000000000000000000000..4975b08bd040c40a68167c9fd5f5eec29ee0e88f --- /dev/null +++ b/tlatools/test-model/symmetry/April25MC.cfg @@ -0,0 +1,15 @@ +\* MV CONSTANT declarations +CONSTANTS +m1 = m1 +m2 = m2 +\* MV CONSTANT definitions +CONSTANT +S <- const_146115895642519000 +\* SYMMETRY definition +SYMMETRY symm_146115895643520000 +\* SPECIFICATION definition +SPECIFICATION +spec_146115895644521000 +\* PROPERTY definition +PROPERTY +prop_146115895645522000 diff --git a/tlatools/test-model/symmetry/April25MC.tla b/tlatools/test-model/symmetry/April25MC.tla new file mode 100644 index 0000000000000000000000000000000000000000..afb14df4b32ecba252df13fe5e791bcf0767da4a --- /dev/null +++ b/tlatools/test-model/symmetry/April25MC.tla @@ -0,0 +1,27 @@ +---- MODULE April25MC ---- +EXTENDS April25, TLC + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +m1, m2 +---- + +\* MV CONSTANT definitions S +const_146115895642519000 == +{m1, m2} +---- + +\* SYMMETRY definition +symm_146115895643520000 == +Permutations(const_146115895642519000) +---- + +\* SPECIFICATION definition @modelBehaviorSpec:0 +spec_146115895644521000 == +Spec +---- +\* PROPERTY definition @modelCorrectnessProperties:0 +prop_146115895645522000 == +Live +---- +============================================================================= diff --git a/tlatools/test-model/symmetry/April25NoSymmetry.dot b/tlatools/test-model/symmetry/April25NoSymmetry.dot new file mode 100644 index 0000000000000000000000000000000000000000..8fe72c150a6b9677c1585a10ad63b57bee89b77a --- /dev/null +++ b/tlatools/test-model/symmetry/April25NoSymmetry.dot @@ -0,0 +1,6 @@ +digraph DiskGraph { +3247490433077925545 -> 5068397444161466873 [label="[ft]"]; +5068397444161466873 -> 3247490433077925545 [label="[tf]"]; +3247490433077925545 [label="x = m1"]; +5068397444161466873 [label="x = m2"]; +} \ No newline at end of file diff --git a/tlatools/test-model/symmetry/April25WithSymmetry.dot b/tlatools/test-model/symmetry/April25WithSymmetry.dot new file mode 100644 index 0000000000000000000000000000000000000000..4942746ec112ea1f5a41a7cec744dbb702e3b990 --- /dev/null +++ b/tlatools/test-model/symmetry/April25WithSymmetry.dot @@ -0,0 +1,4 @@ +digraph DiskGraph { +3247490433077925545 [label="x = m1 /\\ x = m2"]; +3247490433077925545 -> 3247490433077925545 [label="[ft]"]; +} \ No newline at end of file diff --git a/tlatools/test-model/symmetry/April29.tla b/tlatools/test-model/symmetry/April29.tla new file mode 100644 index 0000000000000000000000000000000000000000..f7e0cea8a3bc9f11c02cb73256c89822fc1adaae --- /dev/null +++ b/tlatools/test-model/symmetry/April29.tla @@ -0,0 +1,23 @@ +--------------------------- MODULE April29 --------------------------- +CONSTANT S + +VARIABLES x,y +vars == <<x,y>> + +Init == x \in S /\ y = 0 + +NextA == /\ y = 0 + /\ y' = 1 + /\ x' = x + +NextB == /\ y = 1 + /\ y' = 1 + /\ x' = x +Spec == Init /\ [][NextA \/ NextB]_vars /\ WF_vars(NextA \/ NextB) + +NextC == /\ y = 1 + /\ y' = 1 + /\ \E i \in (S \ {x}): x' = i +SpecD == Init /\ [][NextA \/ NextB \/ NextC]_vars /\ WF_vars(NextA \/ NextB \/ NextC) + +============================================================================= diff --git a/tlatools/test-model/symmetry/April29MC.cfg b/tlatools/test-model/symmetry/April29MC.cfg new file mode 100644 index 0000000000000000000000000000000000000000..fa4c00c2199b3370c2b04f8053176aeb78be16bc --- /dev/null +++ b/tlatools/test-model/symmetry/April29MC.cfg @@ -0,0 +1,15 @@ +\* MV CONSTANT declarations +CONSTANTS +a = a +b = b +\* MV CONSTANT definitions +CONSTANT +S <- const_146183936175119000 +\* SYMMETRY definition +SYMMETRY symm_146183936176120000 +\* SPECIFICATION definition +SPECIFICATION +spec_146183936177121000 +\* PROPERTY definition +PROPERTY +prop_146183936178122000 diff --git a/tlatools/test-model/symmetry/April29MC.tla b/tlatools/test-model/symmetry/April29MC.tla new file mode 100644 index 0000000000000000000000000000000000000000..7000424b8ffc7d234eaaffc50e0f3fba44b3c856 --- /dev/null +++ b/tlatools/test-model/symmetry/April29MC.tla @@ -0,0 +1,27 @@ +---- MODULE April29MC ---- +EXTENDS April29, TLC + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +a, b +---- + +\* MV CONSTANT definitions S +const_146183936175119000 == +{a, b} +---- + +\* SYMMETRY definition +symm_146183936176120000 == +Permutations(const_146183936175119000) +---- + +\* SPECIFICATION definition @modelBehaviorSpec:0 +spec_146183936177121000 == +Spec +---- +\* PROPERTY definition @modelCorrectnessProperties:0 +prop_146183936178122000 == +[]<>(x=a) /\ []<>(x=b) +---- +============================================================================= diff --git a/tlatools/test-model/symmetry/April29dMC.cfg b/tlatools/test-model/symmetry/April29dMC.cfg new file mode 100644 index 0000000000000000000000000000000000000000..c4252e0458359333615cd48b7973a8b1a05d8e21 --- /dev/null +++ b/tlatools/test-model/symmetry/April29dMC.cfg @@ -0,0 +1,15 @@ +\* MV CONSTANT declarations +CONSTANTS +a = a +b = b +\* MV CONSTANT definitions +CONSTANT +S <- const_146183938495726000 +\* SYMMETRY definition +SYMMETRY symm_146183938496727000 +\* SPECIFICATION definition +SPECIFICATION +spec_146183938497728000 +\* PROPERTY definition +PROPERTY +prop_146183938498729000 diff --git a/tlatools/test-model/symmetry/April29dMC.tla b/tlatools/test-model/symmetry/April29dMC.tla new file mode 100644 index 0000000000000000000000000000000000000000..cf342a8b9f24c4a985004e1c7cafff69f628e099 --- /dev/null +++ b/tlatools/test-model/symmetry/April29dMC.tla @@ -0,0 +1,27 @@ +---- MODULE April29dMC ---- +EXTENDS April29, TLC + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +a, b +---- + +\* MV CONSTANT definitions S +const_146183938495726000 == +{a, b} +---- + +\* SYMMETRY definition +symm_146183938496727000 == +Permutations(const_146183938495726000) +---- + +\* SPECIFICATION definition @modelBehaviorSpec:0 +spec_146183938497728000 == +SpecD +---- +\* PROPERTY definition @modelCorrectnessProperties:0 +prop_146183938498729000 == +[]<>(x=a) /\ []<>(x=b) +---- +============================================================================= diff --git a/tlatools/test-model/symmetry/May09.tla b/tlatools/test-model/symmetry/May09.tla new file mode 100644 index 0000000000000000000000000000000000000000..600ec7b10a4247105b3309763f922925b0b3ac03 --- /dev/null +++ b/tlatools/test-model/symmetry/May09.tla @@ -0,0 +1,29 @@ +------------------------- MODULE May09 ------------------------- +EXTENDS Integers +CONSTANT S + +VARIABLES x,y +vars == <<x,y>> + +Init == x \in S /\ y = 0 + +NextA == /\ y = 0 + /\ y' = 1 + /\ x' = x + +NextB == /\ y >= 1 + /\ y < 5 + /\ y' = y + 1 + /\ x' = x + +NextC == /\ y = 5 + /\ y' = 1 + /\ x' = x +Spec == Init /\ [][NextA \/ NextB \/ NextC]_vars /\ WF_vars(NextA \/ NextB \/ NextC) + +NextD == /\ y = 5 + /\ y' = 1 + /\ \E i \in (S \ {x}) : x' = i +SpecD == Init /\ [][NextA \/ NextB \/ NextD]_vars /\ WF_vars(NextA \/ NextB \/ NextD) + +============================================================================= diff --git a/tlatools/test-model/symmetry/May09MC.cfg b/tlatools/test-model/symmetry/May09MC.cfg new file mode 100644 index 0000000000000000000000000000000000000000..fa4c00c2199b3370c2b04f8053176aeb78be16bc --- /dev/null +++ b/tlatools/test-model/symmetry/May09MC.cfg @@ -0,0 +1,15 @@ +\* MV CONSTANT declarations +CONSTANTS +a = a +b = b +\* MV CONSTANT definitions +CONSTANT +S <- const_146183936175119000 +\* SYMMETRY definition +SYMMETRY symm_146183936176120000 +\* SPECIFICATION definition +SPECIFICATION +spec_146183936177121000 +\* PROPERTY definition +PROPERTY +prop_146183936178122000 diff --git a/tlatools/test-model/symmetry/May09MC.tla b/tlatools/test-model/symmetry/May09MC.tla new file mode 100644 index 0000000000000000000000000000000000000000..31fc76203af855b7aaf0a50da3a18ae0c28bcdd5 --- /dev/null +++ b/tlatools/test-model/symmetry/May09MC.tla @@ -0,0 +1,27 @@ +---- MODULE May09MC ---- +EXTENDS May09, TLC + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +a, b +---- + +\* MV CONSTANT definitions S +const_146183936175119000 == +{a, b} +---- + +\* SYMMETRY definition +symm_146183936176120000 == +Permutations(const_146183936175119000) +---- + +\* SPECIFICATION definition @modelBehaviorSpec:0 +spec_146183936177121000 == +Spec +---- +\* PROPERTY definition @modelCorrectnessProperties:0 +prop_146183936178122000 == +[]<>(x=a) /\ []<>(x=b) +---- +============================================================================= diff --git a/tlatools/test-model/symmetry/May09dMC.cfg b/tlatools/test-model/symmetry/May09dMC.cfg new file mode 100644 index 0000000000000000000000000000000000000000..fa4c00c2199b3370c2b04f8053176aeb78be16bc --- /dev/null +++ b/tlatools/test-model/symmetry/May09dMC.cfg @@ -0,0 +1,15 @@ +\* MV CONSTANT declarations +CONSTANTS +a = a +b = b +\* MV CONSTANT definitions +CONSTANT +S <- const_146183936175119000 +\* SYMMETRY definition +SYMMETRY symm_146183936176120000 +\* SPECIFICATION definition +SPECIFICATION +spec_146183936177121000 +\* PROPERTY definition +PROPERTY +prop_146183936178122000 diff --git a/tlatools/test-model/symmetry/May09dMC.tla b/tlatools/test-model/symmetry/May09dMC.tla new file mode 100644 index 0000000000000000000000000000000000000000..f829b215add2d9f174db5b93a76a33828a463672 --- /dev/null +++ b/tlatools/test-model/symmetry/May09dMC.tla @@ -0,0 +1,27 @@ +---- MODULE May09dMC ---- +EXTENDS May09, TLC + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +a, b +---- + +\* MV CONSTANT definitions S +const_146183936175119000 == +{a, b} +---- + +\* SYMMETRY definition +symm_146183936176120000 == +Permutations(const_146183936175119000) +---- + +\* SPECIFICATION definition @modelBehaviorSpec:0 +spec_146183936177121000 == +SpecD +---- +\* PROPERTY definition @modelCorrectnessProperties:0 +prop_146183936178122000 == +[]<>(x=a) /\ []<>(x=b) +---- +============================================================================= diff --git a/tlatools/test-model/symmetry/TwoPhaseCommit/DistributedCommit.tla b/tlatools/test-model/symmetry/TwoPhaseCommit/DistributedCommit.tla new file mode 100644 index 0000000000000000000000000000000000000000..89afbcea5c077f6c0c82e1c0427959004d22ec6b --- /dev/null +++ b/tlatools/test-model/symmetry/TwoPhaseCommit/DistributedCommit.tla @@ -0,0 +1,66 @@ +------------------------- MODULE DistributedCommit ------------------------- +(***************************************************************************) +(* This is a high-level TLA+ specification of a distributed commit *) +(* protocol. A set of nodes individually decide whether they wish to *) +(* commit or abort a transaction. Second, the transaction will be *) +(* committed iff every node wishes to commit. *) +(***************************************************************************) +CONSTANT Participant \* set of participating nodes + +VARIABLE pState \* state of each participant + +(***************************************************************************) +(* Possible states of non-coordinator participants. *) +(***************************************************************************) +PState == {"preparing", "readyCommit", "readyAbort", "committed", "aborted"} + +(***************************************************************************) +(* Initially, every participant is preparing the transaction. *) +(***************************************************************************) +Init == pState = [p \in Participant |-> "preparing"] + +(***************************************************************************) +(* A participant decides whether she wishes to commit or abort. *) +(***************************************************************************) +Decide(p) == + /\ pState[p] = "preparing" + /\ \E dec \in {"readyCommit", "readyAbort"} : + pState' = [pState EXCEPT ![p] = dec] + +(***************************************************************************) +(* A participant may definitely commit only if all participants wish *) +(* to do so. *) +(***************************************************************************) +Commit(p) == + /\ \A q \in Participant : pState[q] \in {"readyCommit", "committed"} + /\ pState' = [pState EXCEPT ![p] = "committed"] + +(***************************************************************************) +(* A participant aborts if some participant wishes to do so. *) +(***************************************************************************) +Abort(p) == + /\ \E q \in Participant : pState[q] \in {"readyAbort", "aborted"} + /\ pState' = [pState EXCEPT ![p] = "aborted"] + +(***************************************************************************) +(* The next-state relation is the disjunction of the above actions. *) +(***************************************************************************) +Next == + \E p \in Participant : Decide(p) \/ Commit(p) \/ Abort(p) + +(***************************************************************************) +(* Overall specification. *) +(***************************************************************************) +Spec == Init /\ [][Next]_pState /\ WF_pState(Next) + +----------------------------------------------------------------------------- + +(***************************************************************************) +(* Main safety property: participants may definitely commit only if *) +(* all participants agree. *) +(***************************************************************************) +Safety == + \A p \in Participant : pState[p] = "committed" => + \A q \in Participant : pState[q] \in {"readyCommit", "committed"} + +============================================================================= diff --git a/tlatools/test-model/symmetry/TwoPhaseCommit/MC.cfg b/tlatools/test-model/symmetry/TwoPhaseCommit/MC.cfg new file mode 100644 index 0000000000000000000000000000000000000000..46bf85e8552506cb7dd0e250d429b4a174b52e64 --- /dev/null +++ b/tlatools/test-model/symmetry/TwoPhaseCommit/MC.cfg @@ -0,0 +1,23 @@ +\* MV CONSTANT declarations +CONSTANTS +anna = anna +berta = berta +charlie = charlie +dimitry = dimitry +eugene = eugene +\* MV CONSTANT definitions +CONSTANT +Participant <- const_146894168642461000 +\* SYMMETRY definition +SYMMETRY symm_146894168643562000 +\* SPECIFICATION definition +SPECIFICATION +spec_146894168644663000 +\* INVARIANT definition +INVARIANT +inv_146894168645764000 +inv_146894168646965000 +inv_146894168647966000 +\* PROPERTY definition +PROPERTY +prop_146894168649067000 diff --git a/tlatools/test-model/symmetry/TwoPhaseCommit/MC.tla b/tlatools/test-model/symmetry/TwoPhaseCommit/MC.tla new file mode 100644 index 0000000000000000000000000000000000000000..c195e717456b6454a7aa6297a0b8ba984ffc1c9c --- /dev/null +++ b/tlatools/test-model/symmetry/TwoPhaseCommit/MC.tla @@ -0,0 +1,39 @@ +---- MODULE MC ---- +EXTENDS TwoPhaseCommit, TLC + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +anna, berta, charlie, dimitry, eugene +---- + +\* MV CONSTANT definitions Participant +const_146894168642461000 == +{anna, berta, charlie, dimitry, eugene} +---- + +\* SYMMETRY definition +symm_146894168643562000 == +Permutations(const_146894168642461000) +---- + +\* SPECIFICATION definition @modelBehaviorSpec:0 +spec_146894168644663000 == +Spec +---- +\* INVARIANT definition @modelCorrectnessInvariants:0 +inv_146894168645764000 == +TypeOK +---- +\* INVARIANT definition @modelCorrectnessInvariants:1 +inv_146894168646965000 == +CommitOrAbort +---- +\* INVARIANT definition @modelCorrectnessInvariants:2 +inv_146894168647966000 == +AbortWins +---- +\* PROPERTY definition @modelCorrectnessProperties:0 +prop_146894168649067000 == +Liveness +---- +============================================================================= diff --git a/tlatools/test-model/symmetry/TwoPhaseCommit/TwoPhaseCommit.tla b/tlatools/test-model/symmetry/TwoPhaseCommit/TwoPhaseCommit.tla new file mode 100644 index 0000000000000000000000000000000000000000..2e7833d68a5b7ce65167282b6cd79201ce44eae3 --- /dev/null +++ b/tlatools/test-model/symmetry/TwoPhaseCommit/TwoPhaseCommit.tla @@ -0,0 +1,150 @@ +--------------------------- MODULE TwoPhaseCommit --------------------------- +(***************************************************************************) +(* This is a TLA+ specification of the two-phase commit protocol used for *) +(* distributed data bases. It models only one instance of the protocol, *) +(* i.e. for a single transaction. *) +(* *) +(* We specify only the safety part of the specification: what may occur *) +(* during an execution. This would be complemented by a specification of *) +(* what must eventually occur, specified by suitable fairness conditions. *) +(***************************************************************************) + +CONSTANT Participant \* set of nodes other than the coordinator + +VARIABLES + cState, \* the state of the coordinator + pState, \* the state of the non-coordinator participants + committed, \* participants that the coordinator knows are OK for committing + msgs \* messages sent during the protocol + +vars == <<cState, pState, committed, msgs>> + +(***************************************************************************) +(* Possible states of coordinator. *) +(***************************************************************************) +CState == {"preparing", "committed", "aborted"} + +(***************************************************************************) +(* Possible states of non-coordinator participants. *) +(***************************************************************************) +PState == {"preparing", "readyCommit", "readyAbort", "committed", "aborted"} + +(***************************************************************************) +(* Messages sent during the protocol. *) +(***************************************************************************) +Messages == + \* participant informs coordinator about its decision + [kind : {"commit", "abort"}, part : Participant] \cup + \* coordinator tells participants whether to commit or abort + [kind : {"doCommit", "doAbort"}] + +commit(p) == [kind |-> "commit", part |-> p] +abort(p) == [kind |-> "abort", part |-> p] +doCommit == [kind |-> "doCommit"] +doAbort == [kind |-> "doAbort"] + +(***************************************************************************) +(* The following predicate specifies what values the variables can take *) +(* during an execution of the protocol. *) +(***************************************************************************) +TypeOK == + /\ cState \in CState + /\ pState \in [Participant -> PState] + /\ committed \subseteq Participant + /\ msgs \subseteq Messages + +(***************************************************************************) +(* The initial state of the protocol. *) +(***************************************************************************) +Init == + /\ cState = "preparing" + /\ pState = [p \in Participant |-> "preparing"] + /\ committed = {} + /\ msgs = {} + +(***************************************************************************) +(* The following action formulas describe the possible transitions of *) +(* the nodes. *) +(***************************************************************************) + +(***************************************************************************) +(* A participant decides and informs the coordinator of its decision. *) +(***************************************************************************) +Decide(p) == + /\ pState[p] = "preparing" + /\ \/ pState' = [pState EXCEPT ![p] = "readyCommit"] /\ msgs' = msgs \cup {commit(p)} + \/ pState' = [pState EXCEPT ![p] = "readyAbort"] /\ msgs' = msgs \cup {abort(p)} + /\ UNCHANGED <<cState, committed>> + +(***************************************************************************) +(* A participant receives a commit or abort order from the coordinator. *) +(***************************************************************************) +Execute(p) == + /\ \/ doCommit \in msgs /\ pState' = [pState EXCEPT ![p] = "committed"] + \/ doAbort \in msgs /\ pState' = [pState EXCEPT ![p] = "aborted"] + /\ UNCHANGED <<cState, committed, msgs>> + +(***************************************************************************) +(* The coordinator receives a new commit decision for some participant. *) +(* If all participants wish to commit, it sends an order to commit. *) +(***************************************************************************) +RcvCommit == \E p \in Participant \ committed : + /\ commit(p) \in msgs + /\ committed' = committed \cup {p} + /\ IF committed' = Participant + THEN /\ cState' = "committed" + /\ msgs' = msgs \cup {doCommit} + ELSE UNCHANGED <<cState, msgs>> + /\ pState' = pState + +(***************************************************************************) +(* The coordinator receives an abort decision and sends an order to abort. *) +(***************************************************************************) +RcvAbort == \E p \in Participant : + /\ abort(p) \in msgs + /\ cState' = "aborted" + /\ msgs' = msgs \cup {doAbort} + /\ UNCHANGED <<pState, committed>> + +(***************************************************************************) +(* The overall next-state relation is the disjunction of the action *) +(* formulas defined previously. *) +(***************************************************************************) +Next == + \/ \E p \in Participant : Decide(p) \/ Execute(p) + \/ RcvCommit + \/ RcvAbort + +Spec == Init /\ [][Next]_vars /\ WF_vars(Next) +----------------------------------------------------------------------------- + +(***************************************************************************) +(* Correctness properties. *) +(***************************************************************************) + +(***************************************************************************) +(* The coordinator never sends both a doCommit and a doAbort message. *) +(***************************************************************************) +CommitOrAbort == ~(doCommit \in msgs /\ doAbort \in msgs) + +(***************************************************************************) +(* The coordinator may commit only if all participants wish to commit and *) +(* no participant wishes to abort. *) +(***************************************************************************) +AbortWins == + doCommit \in msgs => + \A p \in Participant : + /\ commit(p) \in msgs /\ pState[p] \in {"readyCommit", "committed"} + /\ abort(p) \notin msgs + +Liveness == + \A p \in Participant : <>(pState[p] \in {"committed", "aborted"}) +----------------------------------------------------------------------------- + +(***************************************************************************) +(* Two-phase commitment implements distributed commitment. *) +(***************************************************************************) +DC == INSTANCE DistributedCommit + +THEOREM Spec => DC!Spec +============================================================================= diff --git a/tlatools/test-verify/tlc2/tool/queue/StateQueueJPFTest.java b/tlatools/test-verify/tlc2/tool/queue/StateQueueJPFTest.java index ea4bc80a8bf128715696af493ac21d00eedd1312..566fa087327e2e383b6659f3ad2986a569c70f93 100644 --- a/tlatools/test-verify/tlc2/tool/queue/StateQueueJPFTest.java +++ b/tlatools/test-verify/tlc2/tool/queue/StateQueueJPFTest.java @@ -85,6 +85,10 @@ public class StateQueueJPFTest extends TestJPF { return state; } + TLCState peekInner() { + return state; + } + public void beginChkpt() throws IOException { // checkpointing not being verified } diff --git a/tlatools/test/tla2sany/drivers/Bug156TEStackOverflowTest.java b/tlatools/test/tla2sany/drivers/Bug156TEStackOverflowTest.java index 6e3b687c232acb80a78b95ce4431bd961a326c81..0e5132d34a1fc80ed4ad341fd2b907393ad90428 100644 --- a/tlatools/test/tla2sany/drivers/Bug156TEStackOverflowTest.java +++ b/tlatools/test/tla2sany/drivers/Bug156TEStackOverflowTest.java @@ -8,7 +8,7 @@ import util.SimpleFilenameToStream; import util.ToolIO; /** - * @see http://bugzilla.tlaplus.net/show_bug.cgi?id=156 + * @see Bug #156 in general/bugzilla/index.html */ public class Bug156TEStackOverflowTest { diff --git a/tlatools/test/tlc2/TestMPRecorder.java b/tlatools/test/tlc2/TestMPRecorder.java index a8061ea16380f7007513937179863828ebbde70a..32a02cbfdbb8c3f951cfadb2bb2914cb67ff91e7 100644 --- a/tlatools/test/tlc2/TestMPRecorder.java +++ b/tlatools/test/tlc2/TestMPRecorder.java @@ -59,6 +59,30 @@ public class TestMPRecorder extends tlc2.output.MPRecorder { } } + public boolean recordedWithSubStringValue(int code, String substring) { + return recordedWithSubStringValue(code, substring, 0); + } + + public boolean recordedWithSubStringValue(int code, String substring, int idx) { + try { + Object object = records.get(code).get(0); + if (object instanceof String[]) { + String[] strs = (String[]) object; + for (String string : strs) { + if (string.contains(substring)) { + return true; + } + } + return false; + } else if (object instanceof String) { + return ((String) object).contains(substring); + } + return false; + } catch (Exception e) { + return false; + } + } + public boolean recordedWithStringValueAt(int code, String str, int idx) { try { Object object = records.get(code).get(0); @@ -84,4 +108,31 @@ public class TestMPRecorder extends tlc2.output.MPRecorder { } return false; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + public String toString() { + final StringBuffer buf = new StringBuffer(records.size()); + for(Integer key : records.keySet()) { + final List<Object> list = records.get(key); + for (Object elem : list) { + if (elem instanceof String[]) { + String[] strs = (String[]) elem; + for (String s : strs) { + buf.append(key); + buf.append(" -> "); + buf.append(s); + buf.append("\n"); + } + } else if (elem instanceof String) { + buf.append(key); + buf.append(" -> "); + buf.append(elem); + buf.append("\n"); + } + } + } + return buf.toString(); + } } diff --git a/tlatools/test/tlc2/module/TLCTest.java b/tlatools/test/tlc2/module/TLCTest.java new file mode 100644 index 0000000000000000000000000000000000000000..2b7420f4aec25f6da2e8338387795cd8b3529c84 --- /dev/null +++ b/tlatools/test/tlc2/module/TLCTest.java @@ -0,0 +1,88 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package tlc2.module; + +import org.junit.Assert; +import org.junit.Test; + +import tlc2.value.FcnRcdValue; +import tlc2.value.IntValue; +import tlc2.value.TupleValue; +import tlc2.value.Value; + +public class TLCTest { + + /** + * func2 == <<1,2,3>> + * ASSUME (3 :> 11 @@ func2) = <<1,2,11>> + */ + @Test + public void testA() { + final Value f = new FcnRcdValue(new Value[] { IntValue.gen(3) }, new Value[] { IntValue.gen(11) }, true); + final Value g = new TupleValue(new Value[] { IntValue.gen(1), IntValue.gen(2), IntValue.gen(3) }); + + final Value combined = TLC.CombineFcn(f, g); + Assert.assertTrue(combined instanceof FcnRcdValue); + final FcnRcdValue rcdVal = (FcnRcdValue) combined; + // Have to normalize to bring values/domain into natural order expected by assertions below + rcdVal.normalize(); + + // domain + Assert.assertEquals(3, rcdVal.domain.length); + Assert.assertArrayEquals(new Value[] { IntValue.gen(1), IntValue.gen(2), IntValue.gen(3) }, rcdVal.domain); + + // values + Assert.assertEquals(3, rcdVal.values.length); + Assert.assertArrayEquals(new Value[] { IntValue.gen(1), IntValue.gen(2), IntValue.gen(11) }, rcdVal.values); + } + + /** + * func2 == <<1,2,3>> + * ASSUME (4 :> 11 @@ func2) = <<1,2,3,11>> + */ + @Test + public void testB() { + final Value f = new FcnRcdValue(new Value[] { IntValue.gen(4) }, new Value[] { IntValue.gen(11) }, true); + final Value g = new TupleValue(new Value[] { IntValue.gen(1), IntValue.gen(2), IntValue.gen(3), IntValue.gen(11) }); + + final Value combined = TLC.CombineFcn(f, g); + Assert.assertTrue(combined instanceof FcnRcdValue); + final FcnRcdValue rcdVal = (FcnRcdValue) combined; + // Have to normalize to bring values/domain into natural order expected by assertions below + rcdVal.normalize(); + + // domain + Assert.assertEquals(4, rcdVal.domain.length); + Assert.assertArrayEquals(new Value[] { IntValue.gen(1), IntValue.gen(2), IntValue.gen(3), IntValue.gen(4) }, + rcdVal.domain); + + // values + Assert.assertEquals(4, rcdVal.values.length); + Assert.assertArrayEquals(new Value[] { IntValue.gen(1), IntValue.gen(2), IntValue.gen(3), IntValue.gen(11) }, + rcdVal.values); + } +} diff --git a/tlatools/test/tlc2/tool/CodePlexBug21Test.java b/tlatools/test/tlc2/tool/CodePlexBug21Test.java new file mode 100644 index 0000000000000000000000000000000000000000..6c10a5580fe9955bb2d1507abcffccdc71db74a5 --- /dev/null +++ b/tlatools/test/tlc2/tool/CodePlexBug21Test.java @@ -0,0 +1,53 @@ +/******************************************************************************* + * Copyright (c) 2015 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package tlc2.tool; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; +import tlc2.tool.liveness.ModelCheckerTestCase; + +/** + * see http://tlaplus.codeplex.com/workitem/21 + */ +public class CodePlexBug21Test extends ModelCheckerTestCase { + + public CodePlexBug21Test() { + super("CodePlexBug21"); + } + + @Test + public void testSpec() { + // ModelChecker has finished and generated the expected amount of states + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertTrue(recorder.recordedWithStringValues(EC.TLC_STATS, "0", "0", "0")); + assertFalse(recorder.recorded(EC.GENERAL)); + } +} diff --git a/tlatools/test/tlc2/tool/CommonTestCase.java b/tlatools/test/tlc2/tool/CommonTestCase.java new file mode 100644 index 0000000000000000000000000000000000000000..06b0b8a34fcc1c471d64809762fb24d425d45dd8 --- /dev/null +++ b/tlatools/test/tlc2/tool/CommonTestCase.java @@ -0,0 +1,165 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package tlc2.tool; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.util.List; + +import tlc2.TLCGlobals; +import tlc2.TestMPRecorder; +import tlc2.output.EC; +import tlc2.output.MPRecorder; +import tlc2.tool.liveness.GraphNode; +import tlc2.util.BitVector; +import tlc2.util.BufferedRandomAccessFile; + +public abstract class CommonTestCase { + + protected static final String BASE_DIR = System.getProperty("basedir", ""); + protected static final String TEST_MODEL = "test-model" + File.separator; + protected static final String BASE_PATH = BASE_DIR + TEST_MODEL; + + protected final TestMPRecorder recorder; + + public CommonTestCase(TestMPRecorder testMPRecorder) { + recorder = testMPRecorder; + } + + /** + * Asserts that the actual trace and the expected error trace are equal. + * + * @param actual + * The actual trace as recorded by {@link MPRecorder}. + * @param expectedTrace + * The expected trace. + */ + protected void assertTraceWith(final List<Object> actual, final List<String> expectedTrace) { + assertEquals(expectedTrace.size(), actual.size()); + for (int i = 0; i < expectedTrace.size(); i++) { + final Object[] objs = (Object[]) actual.get(i); + final TLCStateInfo stateInfo = (TLCStateInfo) objs[0]; + final String info = (String) stateInfo.info; + if (i == 0) { + // The first state has to be an initial state. + "<Initial predicate>".equals(info); + } else { + // ... all others are reachable via an action. + info.startsWith("<Action"); + } + assertEquals(expectedTrace.get(i), + stateInfo.toString().trim()); // trimmed to remove any newlines or whitespace + assertEquals(i+1, objs[1]); + } + } + + /** + * Asserts that the error trace ends in stuttering at the given number. + * + * @param stateNum + * The number of the stuttering state + */ + protected void assertStuttering(int stateNum) { + assertTrue(recorder.recorded(EC.TLC_STATE_PRINT3)); + List<Object> stutter = recorder.getRecords(EC.TLC_STATE_PRINT3); + assertTrue(stutter.size() > 0); + Object[] object = (Object[]) stutter.get(0); + assertEquals(stateNum, object[1]); + } + + /** + * Asserts that the error trace loops back to the state with the given + * number. + * + * @param i The loop back state number. + */ + protected void assertBackToState(int stateNum) { + assertTrue(recorder.recorded(EC.TLC_BACK_TO_STATE)); + List<Object> loop = recorder.getRecords(EC.TLC_BACK_TO_STATE); + assertTrue(loop.size() > 0); + Object[] object = (Object[]) loop.get(0); + assertEquals(Integer.toString(stateNum), object[0]); + } + + /** + * Asserts that the error trace loops back to the state with the given + * number. + * + * @param i The loop back state number. + * @param action The action label associated with the loop back marker + */ + protected void assertBackToState(int stateNum, final String action) { + assertTrue(recorder.recorded(EC.TLC_BACK_TO_STATE)); + List<Object> loop = recorder.getRecords(EC.TLC_BACK_TO_STATE); + assertTrue(loop.size() > 0); + Object[] object = (Object[]) loop.get(0); + assertTrue(object.length > 1); + assertEquals(Integer.toString(stateNum), object[0]); + assertEquals(action, object[1]); + } + + /** + * Check the file size of the AbstractDiskGraph files to assert that the + * expected amount of ptrs and nodes (outgoing arcs) have been written to + * disk. + * <p> + * CAUTION: The order in which the transitions are inserted into the + * {@link GraphNode} determines the size of the {@link BitVector}. I.e. if + * the truth values of the first N nodes inserted are true, and the + * remainder is false, the BitVector's size will correspond to N. However, + * if the first N truth values are false, followed by M trues, the + * BitVector's size is N + M. + * <p> + * See {@link GraphNode}'s constructor: it initializes {@link BitVector} + * with capacity zero and subsequently grows BV when bits are set to true. + * <p> + * + * @see BitVector#read(BufferedRandomAccessFile) + * @see BitVector#write(BufferedRandomAccessFile) + * @see GraphNode#read(BufferedRandomAccessFile) + * @see GraphNode#write(BufferedRandomAccessFile) + * + * @param nodesSize + * @param ptrsSize + */ + protected void assertNodeAndPtrSizes(final long nodesSize, final long ptrsSize) { + final String metadir = TLCGlobals.mainChecker.metadir; + assertNotNull(metadir); + + final File nodes = new File(metadir + File.separator + "nodes_0"); + assertTrue(nodes.exists()); + assertEquals(nodesSize, nodes.length()); + + final File ptrs = new File(metadir + File.separator + "ptrs_0"); + assertTrue(ptrs.exists()); + assertEquals(ptrsSize, ptrs.length()); + } + +} diff --git a/tlatools/test/tlc2/tool/DepthFirstDieHardTest.java b/tlatools/test/tlc2/tool/DepthFirstDieHardTest.java new file mode 100644 index 0000000000000000000000000000000000000000..6a33c34ef85738a809cf75d40b0f03206d4c347e --- /dev/null +++ b/tlatools/test/tlc2/tool/DepthFirstDieHardTest.java @@ -0,0 +1,64 @@ +/******************************************************************************* + * Copyright (c) 2015 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package tlc2.tool; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.List; +import org.junit.Test; +import tlc2.output.EC; +import tlc2.tool.liveness.ModelCheckerTestCase; + +public class DepthFirstDieHardTest extends ModelCheckerTestCase { + + public DepthFirstDieHardTest() { + super("DieHard", "", new String[] {"-dfid", "7"}); + } + + @Test + public void testSpec() { + // ModelChecker has finished and generated the expected amount of states + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertFalse(recorder.recorded(EC.GENERAL)); + + // Assert the error trace + assertTrue(recorder.recorded(EC.TLC_STATE_PRINT1)); + final List<String> expectedTrace = new ArrayList<String>(7); + expectedTrace.add("/\\ action = \"nondet\"\n/\\ smallBucket = 0\n/\\ bigBucket = 0\n/\\ water_to_pour = 0"); + expectedTrace.add("/\\ action = \"fill big\"\n/\\ smallBucket = 0\n/\\ bigBucket = 5\n/\\ water_to_pour = 0"); + expectedTrace.add("/\\ action = \"pour big to small\"\n/\\ smallBucket = 3\n/\\ bigBucket = 2\n/\\ water_to_pour = 3"); + expectedTrace.add("/\\ action = \"empty small\"\n/\\ smallBucket = 0\n/\\ bigBucket = 2\n/\\ water_to_pour = 3"); + expectedTrace.add("/\\ action = \"pour big to small\"\n/\\ smallBucket = 2\n/\\ bigBucket = 0\n/\\ water_to_pour = 2"); + + expectedTrace.add("/\\ action = \"fill big\"\n/\\ smallBucket = 2\n/\\ bigBucket = 5\n/\\ water_to_pour = 2"); + + expectedTrace.add("/\\ action = \"pour big to small\"\n/\\ smallBucket = 3\n/\\ bigBucket = 4\n/\\ water_to_pour = 1"); + assertTraceWith(recorder.getRecords(EC.TLC_STATE_PRINT1), expectedTrace); + } +} diff --git a/tlatools/test/tlc2/tool/DepthFirstErrorTraceTest.java b/tlatools/test/tlc2/tool/DepthFirstErrorTraceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..a53e65cb94eb0e2f4b89221e2cf3888c9465cce2 --- /dev/null +++ b/tlatools/test/tlc2/tool/DepthFirstErrorTraceTest.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2015 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package tlc2.tool; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.List; +import org.junit.Test; +import tlc2.output.EC; +import tlc2.tool.liveness.ModelCheckerTestCase; + +public class DepthFirstErrorTraceTest extends ModelCheckerTestCase { + + public DepthFirstErrorTraceTest() { + super("DepthFirstErrorTrace", "", new String[] {"-dfid", "9"}); + } + + @Test + public void testSpec() { + // ModelChecker has finished and generated the expected amount of states + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertFalse(recorder.recorded(EC.GENERAL)); + + // Assert the error trace + assertTrue(recorder.recorded(EC.TLC_STATE_PRINT1)); + final List<String> expectedTrace = new ArrayList<String>(5); + expectedTrace.add("x = 0"); + expectedTrace.add("x = 1"); + expectedTrace.add("x = 2"); + expectedTrace.add("x = 3"); + expectedTrace.add("x = 4"); + expectedTrace.add("x = 5"); + expectedTrace.add("x = 6"); + expectedTrace.add("x = 7"); + assertTraceWith(recorder.getRecords(EC.TLC_STATE_PRINT1), expectedTrace); + } +} diff --git a/tlatools/test/tlc2/tool/DepthFirstTerminate.java b/tlatools/test/tlc2/tool/DepthFirstTerminate.java new file mode 100644 index 0000000000000000000000000000000000000000..9e7c7ca2db6e0ec252e3a6431e2d50e20591fb7b --- /dev/null +++ b/tlatools/test/tlc2/tool/DepthFirstTerminate.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2017 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package tlc2.tool; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; +import tlc2.tool.liveness.ModelCheckerTestCase; + +public class DepthFirstTerminate extends ModelCheckerTestCase { + + public DepthFirstTerminate() { + super("DepthFirstTerminate", "", new String[] { "-dfid", "50" }); + } + + @Test + public void testSpec() { + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertFalse(recorder.recorded(EC.GENERAL)); + } + + /* (non-Javadoc) + * @see tlc2.tool.liveness.ModelCheckerTestCase#getNumberOfThreads() + */ + @Override + protected int getNumberOfThreads() { + // With >1, TLC's depth first search never terminates. + return 1; + } +} diff --git a/tlatools/test/tlc2/tool/DumpAsDotTest.dot b/tlatools/test/tlc2/tool/DumpAsDotTest.dot new file mode 100644 index 0000000000000000000000000000000000000000..9f2510ac1ff6d8275ac596f1a6810828bcb0b29b --- /dev/null +++ b/tlatools/test/tlc2/tool/DumpAsDotTest.dot @@ -0,0 +1,68 @@ +strict digraph DiskGraph { +rankdir=LR; +609737673425276830 [style = filled] [label="/\\ b = FALSE +/\\ x = 0"] +6816998822487979083 [style = filled] [label="/\\ b = TRUE +/\\ x = 0"] +3365478001808954030 [style = filled] [label="/\\ b = FALSE +/\\ x = 1"] +8671809759910816123 [style = filled] [label="/\\ b = TRUE +/\\ x = 1"] +5040481953810085374 [style = filled] [label="/\\ b = FALSE +/\\ x = 2"] +1377963776297717291 [style = filled] [label="/\\ b = TRUE +/\\ x = 2"] +7147721571019581646 [style = filled] [label="/\\ b = FALSE +/\\ x = 3"] +3881310712274735899 [style = filled] [label="/\\ b = TRUE +/\\ x = 3"] +609737673425276830 -> 8671809759910816123; +609737673425276830 -> 609737673425276830 [style="dashed"]; +609737673425276830 [label="/\\ b = FALSE +/\\ x = 0"]; +6816998822487979083 -> 609737673425276830; +6816998822487979083 -> 6816998822487979083 [style="dashed"]; +6816998822487979083 [label="/\\ b = TRUE +/\\ x = 0"]; +3365478001808954030 -> 1377963776297717291; +3365478001808954030 -> 3365478001808954030 [style="dashed"]; +3365478001808954030 [label="/\\ b = FALSE +/\\ x = 1"]; +8671809759910816123 -> 3365478001808954030; +8671809759910816123 -> 8671809759910816123 [style="dashed"]; +8671809759910816123 [label="/\\ b = TRUE +/\\ x = 1"]; +5040481953810085374 -> 3881310712274735899; +5040481953810085374 -> 5040481953810085374 [style="dashed"]; +5040481953810085374 [label="/\\ b = FALSE +/\\ x = 2"]; +1377963776297717291 -> 5040481953810085374; +1377963776297717291 -> 1377963776297717291 [style="dashed"]; +1377963776297717291 [label="/\\ b = TRUE +/\\ x = 2"]; +7147721571019581646 -> -4210745456684007285; +-4210745456684007285 [label="/\\ b = TRUE +/\\ x = 4"]; +7147721571019581646 -> 7147721571019581646 [style="dashed"]; +7147721571019581646 [label="/\\ b = FALSE +/\\ x = 3"]; +3881310712274735899 -> 7147721571019581646; +3881310712274735899 -> 3881310712274735899 [style="dashed"]; +3881310712274735899 [label="/\\ b = TRUE +/\\ x = 3"]; +-4210745456684007285 -> -7819220713745958050; +-7819220713745958050 [label="/\\ b = FALSE +/\\ x = 4"]; +-4210745456684007285 -> -4210745456684007285 [style="dashed"]; +-4210745456684007285 [label="/\\ b = TRUE +/\\ x = 4"]; +-7819220713745958050 -> -2066378075513578053; +-2066378075513578053 [label="/\\ b = TRUE +/\\ x = 5"]; +-7819220713745958050 -> -7819220713745958050 [style="dashed"]; +-7819220713745958050 [label="/\\ b = FALSE +/\\ x = 4"]; +-2066378075513578053 -> -2066378075513578053 [style="dashed"]; +-2066378075513578053 [label="/\\ b = TRUE +/\\ x = 5"]; +} \ No newline at end of file diff --git a/tlatools/test/tlc2/tool/DumpAsDotTest.java b/tlatools/test/tlc2/tool/DumpAsDotTest.java new file mode 100644 index 0000000000000000000000000000000000000000..ec0d2232b817e328aaa30093e19cda9fadd2353a --- /dev/null +++ b/tlatools/test/tlc2/tool/DumpAsDotTest.java @@ -0,0 +1,80 @@ +/******************************************************************************* + * Copyright (c) 2015 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; + +import org.junit.Test; + +import tlc2.output.EC; +import tlc2.tool.liveness.ModelCheckerTestCase; + +public class DumpAsDotTest extends ModelCheckerTestCase { + + public DumpAsDotTest() { + super("MCa", "CodePlexBug08", + new String[] { "-dump", "dot", System.getProperty("java.io.tmpdir") + File.separator + "DumpAsDotTest" }); + } + + @Test + public void testSpec() throws IOException { + // ModelChecker has finished and generated the expected amount of states + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertFalse(recorder.recorded(EC.GENERAL)); + assertTrue(recorder.recordedWithStringValues(EC.TLC_STATS, "18", "11", "0")); + + // -dump appends the ".dump" extension to the file name + final File dumpFile = new File(System.getProperty("java.io.tmpdir") + File.separator + "DumpAsDotTest.dot"); + assertTrue(dumpFile.exists()); + + // If the file exist, simply compare it to a correct and manually checked version. + final InputStream master = getClass().getResourceAsStream("DumpAsDotTest.dot"); + assertTrue(Arrays.equals(getBytes(master), getBytes(new FileInputStream(dumpFile)))); + } + + // http://stackoverflow.com/a/17861016 + private static byte[] getBytes(InputStream is) throws IOException { + final ByteArrayOutputStream os = new ByteArrayOutputStream(); + try { + byte[] buffer = new byte[0xFFFF]; + for (int len; (len = is.read(buffer)) != -1;) { + os.write(buffer, 0, len); + } + os.flush(); + return os.toByteArray(); + } finally { + os.close(); + } + } +} diff --git a/tlatools/test/tlc2/tool/EmptySubsetEqTest.java b/tlatools/test/tlc2/tool/EmptySubsetEqTest.java new file mode 100644 index 0000000000000000000000000000000000000000..1f1ceed4230d60d59e7453a7f20302db13fefab9 --- /dev/null +++ b/tlatools/test/tlc2/tool/EmptySubsetEqTest.java @@ -0,0 +1,65 @@ +/******************************************************************************* + * Copyright (c) 2017 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool; + +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Test; + +import tlc2.output.EC; +import tlc2.tool.liveness.ModelCheckerTestCase; + +public class EmptySubsetEqTest extends ModelCheckerTestCase { + + // This the supplements SubsetEqTest. It checks that TLC does not + // incorrectly reduce the expression SUBSET (1..3) \subseteq (1..4). The + // empty subset {} is not a subset of (1..4). + public EmptySubsetEqTest() { + super("EmptySubsetEq"); + } + + @Test + public void testSpec() { + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertTrue(recorder.recordedWithStringValues(EC.TLC_STATS, "1", "1", "0")); + + assertTrue(recorder.recordedWithStringValue(EC.GENERAL, + "TLC threw an unexpected exception.\nThis was probably caused by an " + + "error in the spec or model.\nSee the User Output or TLC Console " + + "for clues to what happened.\nThe exception was a " + + "java.lang.RuntimeException\n: Attempted to check if the value:\n" + + "{}\nis in the integer interval 1..4")); + + // Expect an error trace consisting of a single state. + assertTrue(recorder.recorded(EC.TLC_STATE_PRINT2)); + final List<String> expectedTrace = new ArrayList<String>(4); + expectedTrace.add("b = TRUE"); + assertTraceWith(recorder.getRecords(EC.TLC_STATE_PRINT2), expectedTrace); + } +} diff --git a/tlatools/test/tlc2/tool/PrintTraceRaceTest.java b/tlatools/test/tlc2/tool/PrintTraceRaceTest.java index 743f207b8a7c2182f4fe3cf4a910d492e70c0617..d42540e39191e437ac84f82c5d9ccbb4bf74add4 100644 --- a/tlatools/test/tlc2/tool/PrintTraceRaceTest.java +++ b/tlatools/test/tlc2/tool/PrintTraceRaceTest.java @@ -44,7 +44,7 @@ public class PrintTraceRaceTest extends ModelCheckerTestCase { @Test public void testSpec() { assertTrue(recorder.recorded(EC.TLC_FINISHED)); - assertTrue(recorder.recordedWithStringValues(EC.TLC_STATS, "3", "2", "0")); + assertTrue(recorder.recordedWithStringValues(EC.TLC_STATS, "2", "2", "0")); assertFalse(recorder.recorded(EC.GENERAL)); assertTrue(recorder.recorded(EC.TLC_BEHAVIOR_UP_TO_THIS_POINT)); diff --git a/tlatools/test/tlc2/tool/SubsetEqTest.java b/tlatools/test/tlc2/tool/SubsetEqTest.java new file mode 100644 index 0000000000000000000000000000000000000000..6b1774e8b6e58430e6d47c7f88655f28dc3f8847 --- /dev/null +++ b/tlatools/test/tlc2/tool/SubsetEqTest.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2017 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; +import tlc2.tool.liveness.ModelCheckerTestCase; + +public class SubsetEqTest extends ModelCheckerTestCase { + + public SubsetEqTest() { + super("SubsetEq"); + } + + @Test + public void testSpec() { + // This is a performance test. With the original implementation - where + // TLC does not reduce (SUBSET A \subseteq SUBSET B) - the test takes + // forever to generate the successor state. Reduced to (A \subseteq B), + // the test completes within seconds. + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertFalse(recorder.recorded(EC.GENERAL)); + + assertTrue(recorder.recordedWithStringValues(EC.TLC_STATS, "2", "2", "0")); + // No error trace! + assertFalse(recorder.recorded(EC.TLC_STATE_PRINT2)); + } +} diff --git a/tlatools/test/tlc2/tool/TLCSetInitTest.java b/tlatools/test/tlc2/tool/TLCSetInitTest.java new file mode 100644 index 0000000000000000000000000000000000000000..1cd186ada104cde423778683a745095a46b61218 --- /dev/null +++ b/tlatools/test/tlc2/tool/TLCSetInitTest.java @@ -0,0 +1,46 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package tlc2.tool; + +import static org.junit.Assert.assertFalse; + +import org.junit.Test; + +import tlc2.output.EC; +import tlc2.tool.liveness.ModelCheckerTestCase; + +public class TLCSetInitTest extends ModelCheckerTestCase { + + public TLCSetInitTest() { + super("TLCSetInit"); + } + + @Test + public void testSpec() { + assertFalse(recorder.recorded(EC.GENERAL)); + } +} diff --git a/tlatools/test/tlc2/tool/UserModuleOverrideTest.java b/tlatools/test/tlc2/tool/UserModuleOverrideTest.java new file mode 100644 index 0000000000000000000000000000000000000000..23133cd278a8044baa76f1336a34b539b11b34e0 --- /dev/null +++ b/tlatools/test/tlc2/tool/UserModuleOverrideTest.java @@ -0,0 +1,49 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; +import tlc2.tool.liveness.ModelCheckerTestCase; + +public class UserModuleOverrideTest extends ModelCheckerTestCase { + + public UserModuleOverrideTest() { + super("UserModuleOverride"); + } + + @Test + public void testSpec() { + // ModelChecker has finished and generated the expected amount of states + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertTrue(recorder.recordedWithStringValues(EC.TLC_STATS, "2", "1", "0")); + assertFalse(recorder.recorded(EC.GENERAL)); + } +} diff --git a/tlatools/test/tlc2/tool/distributed/DieHardDistributedTLCTest.java b/tlatools/test/tlc2/tool/distributed/DieHardDistributedTLCTest.java new file mode 100644 index 0000000000000000000000000000000000000000..19685ccf7866ffb68f52ae3476c8abadbcf9a20a --- /dev/null +++ b/tlatools/test/tlc2/tool/distributed/DieHardDistributedTLCTest.java @@ -0,0 +1,66 @@ +/******************************************************************************* + * Copyright (c) 2015 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package tlc2.tool.distributed; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Test; + +import tlc2.output.EC; + +public class DieHardDistributedTLCTest extends DistributedTLCTestCase { + + public DieHardDistributedTLCTest() { + super("DieHard", BASE_PATH, new String[] {"-deadlock"}); + } + + @Test + public void testSpec() { + // ModelChecker has finished and generated the expected amount of states + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertFalse(recorder.recorded(EC.GENERAL)); + + // Assert the error trace + assertTrue(recorder.recorded(EC.TLC_BEHAVIOR_UP_TO_THIS_POINT)); + assertTrue(recorder.recorded(EC.TLC_STATE_PRINT2)); + final List<String> expectedTrace = new ArrayList<String>(7); + expectedTrace.add("/\\ action = \"nondet\"\n/\\ smallBucket = 0\n/\\ bigBucket = 0\n/\\ water_to_pour = 0"); + expectedTrace.add("/\\ action = \"fill big\"\n/\\ smallBucket = 0\n/\\ bigBucket = 5\n/\\ water_to_pour = 0"); + expectedTrace.add("/\\ action = \"pour big to small\"\n/\\ smallBucket = 3\n/\\ bigBucket = 2\n/\\ water_to_pour = 3"); + expectedTrace.add("/\\ action = \"empty small\"\n/\\ smallBucket = 0\n/\\ bigBucket = 2\n/\\ water_to_pour = 3"); + expectedTrace.add("/\\ action = \"pour big to small\"\n/\\ smallBucket = 2\n/\\ bigBucket = 0\n/\\ water_to_pour = 2"); + + expectedTrace.add("/\\ action = \"fill big\"\n/\\ smallBucket = 2\n/\\ bigBucket = 5\n/\\ water_to_pour = 2"); + + expectedTrace.add("/\\ action = \"pour big to small\"\n/\\ smallBucket = 3\n/\\ bigBucket = 4\n/\\ water_to_pour = 1"); + assertTraceWith(recorder.getRecords(EC.TLC_STATE_PRINT2), expectedTrace); + } +} diff --git a/tlatools/test/tlc2/tool/distributed/DistributedDoInitFunctorEvalExceptionTest.java b/tlatools/test/tlc2/tool/distributed/DistributedDoInitFunctorEvalExceptionTest.java new file mode 100644 index 0000000000000000000000000000000000000000..b0a80639754da196e541995d412bcd1a4a85d0c0 --- /dev/null +++ b/tlatools/test/tlc2/tool/distributed/DistributedDoInitFunctorEvalExceptionTest.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package tlc2.tool.distributed; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class DistributedDoInitFunctorEvalExceptionTest extends TLCServerTestCase { + + public DistributedDoInitFunctorEvalExceptionTest() { + super("DoInitFunctorEvalException", "DoInitFunctor"); + } + + @Test + public void testSpec() { + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertTrue(recorder.recorded(EC.TLC_STATS)); + assertFalse(recorder.recorded(EC.GENERAL)); + + assertTrue(recorder.recordedWithStringValues(EC.TLC_INITIAL_STATE, + "TLC expected a boolean value, but did not find one. line 15, col 15 to line 15, col 18 of module DoInitFunctorEvalException", + "x = 1\n")); + } +} diff --git a/tlatools/test/tlc2/tool/distributed/DistributedDoInitFunctorInvariantContinueTest.java b/tlatools/test/tlc2/tool/distributed/DistributedDoInitFunctorInvariantContinueTest.java new file mode 100644 index 0000000000000000000000000000000000000000..751b7894dd876dc12b0c497aa2278d7679ff28fc --- /dev/null +++ b/tlatools/test/tlc2/tool/distributed/DistributedDoInitFunctorInvariantContinueTest.java @@ -0,0 +1,50 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package tlc2.tool.distributed; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import tlc2.output.EC; +import tlc2.tool.liveness.ModelCheckerTestCase; + +public class DistributedDoInitFunctorInvariantContinueTest extends ModelCheckerTestCase { + + public DistributedDoInitFunctorInvariantContinueTest() { + super("DoInitFunctorInvariant", "DoInitFunctor", new String[] {"-continue"}); + } + + @Test + public void testSpec() { + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertTrue(recorder.recordedWithStringValues(EC.TLC_STATS, "21", "11")); + assertFalse(recorder.recorded(EC.GENERAL)); + + assertTrue(recorder.recordedWithStringValues(EC.TLC_INVARIANT_VIOLATED_INITIAL, "NotNine", "x = 9\n")); + } +} diff --git a/tlatools/test/tlc2/tool/distributed/DistributedDoInitFunctorInvariantTest.java b/tlatools/test/tlc2/tool/distributed/DistributedDoInitFunctorInvariantTest.java new file mode 100644 index 0000000000000000000000000000000000000000..cc29b649e7d0be8fb50e6f4e040f0ad038bd91dd --- /dev/null +++ b/tlatools/test/tlc2/tool/distributed/DistributedDoInitFunctorInvariantTest.java @@ -0,0 +1,50 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package tlc2.tool.distributed; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import tlc2.output.EC; +import tlc2.tool.liveness.ModelCheckerTestCase; + +public class DistributedDoInitFunctorInvariantTest extends ModelCheckerTestCase { + + public DistributedDoInitFunctorInvariantTest() { + super("DoInitFunctorInvariant", "DoInitFunctor"); + } + + @Test + public void testSpec() { + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertFalse(recorder.recorded(EC.TLC_STATS)); + assertFalse(recorder.recorded(EC.GENERAL)); + + assertTrue(recorder.recordedWithStringValues(EC.TLC_INVARIANT_VIOLATED_INITIAL, "NotNine", "x = 9\n")); + } +} diff --git a/tlatools/test/tlc2/tool/distributed/DistributedTLCTestCase.java b/tlatools/test/tlc2/tool/distributed/DistributedTLCTestCase.java new file mode 100644 index 0000000000000000000000000000000000000000..aa03b3535feb6fef57ed40484b85bf5948660cd1 --- /dev/null +++ b/tlatools/test/tlc2/tool/distributed/DistributedTLCTestCase.java @@ -0,0 +1,182 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.distributed; + +import java.security.Permission; +import java.util.concurrent.CountDownLatch; + +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; + +import tlc2.TestMPRecorder; +import tlc2.output.EC; +import tlc2.output.MP; +import tlc2.tool.CommonTestCase; +import tlc2.tool.distributed.fp.DistributedFPSet; + +public abstract class DistributedTLCTestCase extends CommonTestCase { + + protected final String[] arguments; + protected final int fpSets; + + private SecurityManager securityManager; + + public DistributedTLCTestCase(String spec, String path) { + this(spec, path, new String[] {}); + } + + public DistributedTLCTestCase(String spec, String path, String[] args) { + this(spec, path, args, 0); + } + + public DistributedTLCTestCase(String spec, String path, String[] args, int fpSets) { + super(new FilteringTestMPRecorder()); + this.arguments = new String[args.length + 1]; + this.arguments[this.arguments.length - 1] = path + spec; // Add path to additional arguments + System.arraycopy(args, 0, arguments, 0, args.length); + + this.fpSets = fpSets; + } + + @Before + public void setUp() { + // Remember the original security manager and have it replaced with this + // custom one. Contrary to the original, this security manager + // intercepts calls to System.exit(int) and throws an exception instead + // of terminating the VM. This is done to prevent TLCWorker/TLCServer/... + // from terminating the JUnit test itself. To allow the JUnit test to + // later terminate the VM after test completion, we have to reinstate + // the original security manager again (see tearDown). + securityManager = System.getSecurityManager(); + System.setSecurityManager(new NoExitSecurityManager()); + + MP.setRecorder(recorder); + + // Wait for all processes to terminate before the setup itself is done + final CountDownLatch latch = new CountDownLatch(fpSets + 2); + + // Workers + new Thread(new Runnable() { + public void run() { + try { + TLCWorker.main(new String[] { "localhost" }); + } catch (Exception e) { + e.printStackTrace(); + } finally { + latch.countDown(); + } + } + }, "Worker").start(); + + // master + new Thread(new Runnable() { + public void run() { + try { + System.setProperty(TLCServer.class.getName() + ".expectedFPSetCount", Integer.toString(fpSets)); + TLCServer.main(arguments); + } catch (Exception e) { + e.printStackTrace(); + } finally { + latch.countDown(); + } + } + }, "Master").start(); + + // FPSet + if (fpSets > 0) { + new Thread(new Runnable() { + public void run() { + try { + DistributedFPSet.main(new String[] { "localhost" }); + } catch (Exception e) { + e.printStackTrace(); + } finally { + latch.countDown(); + } + } + }, "FPSet").start(); + } + + try { + latch.await(); + } catch (InterruptedException e) { + Assert.fail(); + } + } + + @After + public void tearDown() { + System.setSecurityManager(securityManager); + } + + private static class NoExitSecurityManager extends SecurityManager { + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkPermission(java.security.Permission) + */ + public void checkPermission(Permission perm) { + // allow anything. + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkPermission(java.security.Permission, java.lang.Object) + */ + public void checkPermission(Permission perm, Object context) { + // allow anything. + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkExit(int) + */ + public void checkExit(int status) { + super.checkExit(status); + throw new NoExitException(); + } + } + + @SuppressWarnings("serial") + public static class NoExitException extends RuntimeException { + // Want an easily distinguishable exception. + } + + private static class FilteringTestMPRecorder extends TestMPRecorder { + /* (non-Javadoc) + * @see tlc2.TestMPRecorder#record(int, java.lang.Object[]) + */ + public void record(int code, Object... objects) { + if (EC.GENERAL == code && objects instanceof String[]) { + // GENERAL errors contain the exceptions thrown because of the + // intercepted System.exit(int) calls. Remove them so that + // tests can check for real EC.GENERAL errors. + final String msg = ((String[]) objects)[0]; + if (msg.contains(NoExitException.class.getName())) { + return; + } + } + super.record(code, objects); + } + } +} diff --git a/tlatools/test/tlc2/tool/distributed/EWD840DistributedTLCTest.java b/tlatools/test/tlc2/tool/distributed/EWD840DistributedTLCTest.java new file mode 100644 index 0000000000000000000000000000000000000000..881482d5eb733cb3d5a18ad54c6e8738b51d0b67 --- /dev/null +++ b/tlatools/test/tlc2/tool/distributed/EWD840DistributedTLCTest.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.distributed; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.io.File; + +import org.junit.Test; + +import tlc2.output.EC; + +public class EWD840DistributedTLCTest extends DistributedTLCTestCase { + + public EWD840DistributedTLCTest() { + super("MC06", BASE_PATH + "EWD840" + File.separator, new String[] {"-deadlock"}); + } + + @Test + public void test() { + // Can we do any assertions here? + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + // Number of generated states differs because of distributed TLC + assertTrue(recorder.recordedWithStringValueAt(EC.TLC_STATS, "114942", 1)); + assertTrue(recorder.recordedWithStringValueAt(EC.TLC_STATS, "0", 2)); + assertFalse(recorder.recorded(EC.GENERAL)); + } +} diff --git a/tlatools/test/tlc2/tool/distributed/EWD840DistributedWithFPSetTLCTest.java b/tlatools/test/tlc2/tool/distributed/EWD840DistributedWithFPSetTLCTest.java new file mode 100644 index 0000000000000000000000000000000000000000..0590e8c7e897ded458cc19e7089d13b56a136a1a --- /dev/null +++ b/tlatools/test/tlc2/tool/distributed/EWD840DistributedWithFPSetTLCTest.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.distributed; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.io.File; + +import org.junit.Test; + +import tlc2.output.EC; + +public class EWD840DistributedWithFPSetTLCTest extends DistributedTLCTestCase { + + public EWD840DistributedWithFPSetTLCTest() { + super("MC06", BASE_PATH + "EWD840" + File.separator, new String[] {"-deadlock"}, 1); + } + + @Test + public void test() { + // Can we do any assertions here? + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + // Number of generated states differs because of distributed TLC + assertTrue(recorder.recordedWithStringValueAt(EC.TLC_STATS, "114942", 1)); + assertTrue(recorder.recordedWithStringValueAt(EC.TLC_STATS, "0", 2)); + assertFalse(recorder.recorded(EC.GENERAL)); + } +} diff --git a/tlatools/test/tlc2/tool/distributed/TSnapShotDistributedTLCTest.java b/tlatools/test/tlc2/tool/distributed/TSnapShotDistributedTLCTest.java new file mode 100644 index 0000000000000000000000000000000000000000..a7e7f800dd49b99953ba2af4ed86236c54db86bb --- /dev/null +++ b/tlatools/test/tlc2/tool/distributed/TSnapShotDistributedTLCTest.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.distributed; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.io.File; + +import org.junit.Test; + +import tlc2.output.EC; + +public class TSnapShotDistributedTLCTest extends DistributedTLCTestCase { + + public TSnapShotDistributedTLCTest() { + super("MC", BASE_PATH + "TSnapShot" + File.separator, new String[] {"-deadlock"}); + } + + @Test + public void test() { + // Can we do any assertions here? + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertTrue(recorder.recordedWithStringValueAt(EC.TLC_STATS, "0", 2)); + assertFalse(recorder.recorded(EC.GENERAL)); + + assertTrue(recorder.recorded(EC.TLC_BEHAVIOR_UP_TO_THIS_POINT)); + } +} diff --git a/tlatools/test/tlc2/tool/distributed/fp/DynamicFPSetManagerTest.java b/tlatools/test/tlc2/tool/distributed/fp/DynamicFPSetManagerTest.java index a10b175dbf58e0be56d3d4cd039c0dd8d38cabc5..caf20ee613ea6dd08df8d7f6cd8073590f434797 100644 --- a/tlatools/test/tlc2/tool/distributed/fp/DynamicFPSetManagerTest.java +++ b/tlatools/test/tlc2/tool/distributed/fp/DynamicFPSetManagerTest.java @@ -175,7 +175,7 @@ public class DynamicFPSetManagerTest { for (Entry<Long, Integer> pair : pairs.entrySet()) { long fp = pair.getKey(); - int index = dfm.getIndex(fp); + int index = dfm.getFPSetIndex(fp); int expected = pair.getValue(); assertEquals(expected, index); } @@ -295,7 +295,7 @@ public class DynamicFPSetManagerTest { final long fp = 2L; - assertEquals("Assert fingerprint corresponds to TestFPSet", 0, dfm.getIndex(fp)); + assertEquals("Assert fingerprint corresponds to TestFPSet", 0, dfm.getFPSetIndex(fp)); // Test DFM correctly behaves first time when TestFPSet works as expected assertFalse(dfm.put(fp)); @@ -325,10 +325,10 @@ public class DynamicFPSetManagerTest { final LongVec[] fps = new LongVec[numOfServers]; fps[0] = new LongVec(); fps[0].addElement(0L); - assertEquals("Assert fingerprint corresponds to TestFPSet", 0, dfm.getIndex(0L)); + assertEquals("Assert fingerprint corresponds to TestFPSet", 0, dfm.getFPSetIndex(0L)); fps[1] = new LongVec(); fps[1].addElement(1L); - assertEquals("Assert fingerprint corresponds to TestFPSet", 1, dfm.getIndex(1L)); + assertEquals("Assert fingerprint corresponds to TestFPSet", 1, dfm.getFPSetIndex(1L)); /* Test DFM correctly behaves first time when TestFPSet works as expected */ @@ -379,10 +379,10 @@ public class DynamicFPSetManagerTest { final LongVec[] fps = new LongVec[numOfServers]; fps[0] = new LongVec(); fps[0].addElement(0L); - assertEquals("Assert fingerprint corresponds to TestFPSet", 0, dfm.getIndex(0L)); + assertEquals("Assert fingerprint corresponds to TestFPSet", 0, dfm.getFPSetIndex(0L)); fps[1] = new LongVec(); fps[1].addElement(1L); - assertEquals("Assert fingerprint corresponds to TestFPSet", 1, dfm.getIndex(1L)); + assertEquals("Assert fingerprint corresponds to TestFPSet", 1, dfm.getFPSetIndex(1L)); /* Test DFM correctly behaves first time when TestFPSet works as expected */ @@ -433,10 +433,10 @@ public class DynamicFPSetManagerTest { final LongVec[] fps = new LongVec[numOfServers]; fps[0] = new LongVec(); fps[0].addElement(0L); - assertEquals("Assert fingerprint corresponds to TestFPSet", 0, dfm.getIndex(0L)); + assertEquals("Assert fingerprint corresponds to TestFPSet", 0, dfm.getFPSetIndex(0L)); fps[1] = new LongVec(); fps[1].addElement(1L); - assertEquals("Assert fingerprint corresponds to TestFPSet", 1, dfm.getIndex(1L)); + assertEquals("Assert fingerprint corresponds to TestFPSet", 1, dfm.getFPSetIndex(1L)); /* Test DFM correctly behaves first time when TestFPSet works as expected */ final ExecutorService es = Executors.newCachedThreadPool(); diff --git a/tlatools/test/tlc2/tool/distributed/fp/FPSetManagerTest.java b/tlatools/test/tlc2/tool/distributed/fp/FPSetManagerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..0420022a50e12491171c5b0a7cb9a01e8ed6b915 --- /dev/null +++ b/tlatools/test/tlc2/tool/distributed/fp/FPSetManagerTest.java @@ -0,0 +1,160 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package tlc2.tool.distributed.fp; + +import java.io.File; +import java.io.IOException; +import java.rmi.RemoteException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import tlc2.tool.distributed.fp.FPSetManager.FPSets; +import tlc2.tool.fp.FPSet; +import tlc2.tool.fp.FPSetConfiguration; +import tlc2.tool.fp.FPSetFactory; + +public class FPSetManagerTest { + + protected static final String tmpdir = System.getProperty("java.io.tmpdir") + File.separator + "FPSetTest" + + System.currentTimeMillis(); + + @Before + public void before() { + new File(tmpdir).mkdirs(); + } + + @Test + public void test2() throws IOException { + doTest(2); + } + + @Test + public void test3() throws IOException { + doTest(3); + } + + @Test + public void test4() throws IOException { + doTest(4); + } + + @Test + public void test5() throws IOException { + doTest(5); + } + + @Test + public void test8() throws IOException { + doTest(8); + } + + private void doTest(int expectedNumOfServers) throws RemoteException, IOException, FPSetManagerException { + final FPSetConfiguration fpSetConfiguration = new FPSetConfiguration(); + fpSetConfiguration.setFpBits(1); // two nested FPSets + + final List<FPSets> sets = new ArrayList<FPSets>(); + for (int i = 0; i < fpSetConfiguration.getMultiFPSetCnt(); i++) { + final FPSet fpSet = FPSetFactory.getFPSet(fpSetConfiguration); + fpSet.init(1, tmpdir, "test" + expectedNumOfServers); + sets.add(new FPSets(fpSet, "localhost" + i)); + } + + final IFPSetManager manager = new DynamicFPSetManager(expectedNumOfServers); + for (FPSets fpSets : sets) { + manager.register(fpSets.getFpset(), fpSets.getFpset().toString()); + } + + // Index uses LSBs + Assert.assertEquals(0, manager.getFPSetIndex(0)); + Assert.assertEquals(1, manager.getFPSetIndex(1)); + Assert.assertEquals(0, manager.getFPSetIndex(2)); + Assert.assertEquals(1, manager.getFPSetIndex(3)); + Assert.assertEquals(0, manager.getFPSetIndex((1L << 63) + 2L)); + Assert.assertEquals(1, manager.getFPSetIndex((1L << 63) + 1L)); + + final Set<Long> fps = new HashSet<Long>(); + // fps.add(0L); // Not accepted by nested FPSets + fps.add(1L); // 00...0001 + fps.add((1L << 62) + 1L); // 01...0001 + fps.add((1L << 63) + 1L); // 10...0001 + fps.add((3L << 62) + 1L); // 11...0001 + fps.add(2L); // 00...0010 + fps.add((1L << 62) + 2L); // 01...0010 + fps.add((1L << 63) + 2L); // 10...0010 + fps.add((3L << 62) + 2L); // 11...0010 + fps.add(3L); // 00...0011 + fps.add((1L << 62) + 3L); // 01...0011 + fps.add((1L << 63) + 3L); // 10...0011 + fps.add((3L << 62) + 3L); // 11...0011 + fps.add(4L); // 00...0100 + fps.add((1L << 62) + 4L); // 01...0100 + fps.add((1L << 63) + 4L); // 10...0100 + fps.add((3L << 62) + 4L); // 11...0100 + fps.add(5L); // 00...0101 + fps.add((1L << 62) + 5L); // 01...0101 + fps.add((1L << 63) + 5L); // 10...0101 + fps.add((3L << 62) + 5L); // 11...0101 + fps.add(6L); // 00...0110 + fps.add((1L << 62) + 6L); // 01...0110 + fps.add((1L << 63) + 6L); // 10...0110 + fps.add((3L << 62) + 6L); // 11...0110 + fps.add(7L); // 00...0110 + fps.add((1L << 62) + 7L); // 01...0111 + fps.add((1L << 63) + 7L); // 10...0111 + fps.add((3L << 62) + 7L); // 11...0111 + fps.add(8L); // 00...1000 + fps.add((1L << 62) + 8L); // 01...1000 + fps.add((1L << 63) + 8L); // 10...1000 + fps.add((3L << 62) + 8L); // 11...1000 + + final Set<Long> unseen = new HashSet<Long>(fps); + for (Long fp : fps) { + // Unseen fingerprints must not be in set. + for (Long unseenFP : unseen) { + Assert.assertFalse(manager.contains(unseenFP)); + } + Assert.assertTrue(unseen.remove(fp)); + + Assert.assertFalse(printBinaryString("", fp), manager.put(fp)); + Assert.assertTrue(printBinaryString("", fp), manager.contains(fp)); + } + + Assert.assertEquals(fps.size(), manager.size()); + + Assert.assertTrue(manager.checkInvariant()); + } + + private String printBinaryString(final String id, final long a) { + return String.format(id + ":%64s", Long.toBinaryString(a)).replace(' ', '0'); + } +} diff --git a/tlatools/test/tlc2/tool/fp/AbstractFPSetTest.java b/tlatools/test/tlc2/tool/fp/AbstractFPSetTest.java index dd7f8ca5f1f9ef72f5d4f0519ab69d55142eab70..3fb25ea844805cbb230f0aa20c55e6960206cf4a 100644 --- a/tlatools/test/tlc2/tool/fp/AbstractFPSetTest.java +++ b/tlatools/test/tlc2/tool/fp/AbstractFPSetTest.java @@ -17,9 +17,11 @@ public abstract class AbstractFPSetTest { + System.currentTimeMillis(); protected static final String filename = "FPSetTestTest"; protected static final DecimalFormat df = new DecimalFormat("###,###.###"); + protected static final DecimalFormat pf = new DecimalFormat("#.##"); protected long previousTimestamp; protected long previousSize; + protected long startTimestamp; protected Date endTimeStamp; private File dir; @@ -34,7 +36,7 @@ public abstract class AbstractFPSetTest { dir = new File(tmpdir); dir.mkdirs(); - previousTimestamp = System.currentTimeMillis(); + previousTimestamp = startTimestamp = System.currentTimeMillis(); previousSize = 0L; System.out.println("Test started at " + new Date()); @@ -77,25 +79,46 @@ public abstract class AbstractFPSetTest { if (fpSet instanceof FPSetStatistic) { FPSetStatistic fpSetStats = (FPSetStatistic) fpSet; long maxTblCnt = fpSetStats.getMaxTblCnt(); - System.out.println("Maximum FPSet bucket count is: " + System.out.println("Maximum FPSet table count is: " + df.format(maxTblCnt) + " (approx: " + df.format(maxTblCnt * FPSet.LongSize >> 20) + " GiB)"); + System.out.println("FPSet lock count is: " + fpSetStats.getLockCnt()); + System.out.println("FPSet bucket count is: " + fpSetStats.getTblCapacity()); } System.out.println("Testing " + fpSet.getClass().getCanonicalName()); return fpSet; } - + // insertion speed - public void printInsertionSpeed(final long currentSize) { - final long currentTimestamp = System.currentTimeMillis(); + public void printInsertionSpeed(final FPSet fpSet) { // print every minute - final double factor = (currentTimestamp - previousTimestamp) / 60000d; + long now = System.currentTimeMillis(); + final double factor = (now - previousTimestamp) / 60000d; if (factor >= 1d) { + final long currentSize = fpSet.size(); long insertions = (long) ((currentSize - previousSize) * factor); - System.out.println(df.format(insertions) + " insertions/min"); - previousTimestamp = currentTimestamp; + if (fpSet instanceof FPSetStatistic) { + FPSetStatistic fpSetStatistics = (FPSetStatistic) fpSet; + System.out.println(System.currentTimeMillis() + " s; " + df.format(insertions) + " insertions/min; " + pf.format(fpSetStatistics.getLoadFactor()) + " load factor"); + } else { + System.out.println(System.currentTimeMillis() + " s (epoch); " + df.format(insertions) + " insertions/min"); + } + previousTimestamp = now; previousSize = currentSize; } } + + public void printInsertionSpeed(final FPSet fpSet, long start, long end) { + final long size = fpSet.size(); + // Normalize insertions to minutes. + final long duration = Math.max(end - start, 1); //ms (avoid div-by-zero) + final long insertions = (long) ((size / duration) * 60000L); + if (fpSet instanceof FPSetStatistic) { + FPSetStatistic fpSetStatistics = (FPSetStatistic) fpSet; + System.out.println(System.currentTimeMillis() + " s; " + df.format(insertions) + " insertions/min; " + pf.format(fpSetStatistics.getLoadFactor()) + " load factor"); + } else { + System.out.println(System.currentTimeMillis() + " s (epoch); " + df.format(insertions) + " insertions/min"); + } + } } diff --git a/tlatools/test/tlc2/tool/fp/AbstractHeapBasedDiskFPSetTest.java b/tlatools/test/tlc2/tool/fp/AbstractHeapBasedDiskFPSetTest.java index 657a01971b7f6a3ff36ce8ab09401c0fcbdf647f..8342c7b06c53bfff9e8ef16696b330a309164ffb 100644 --- a/tlatools/test/tlc2/tool/fp/AbstractHeapBasedDiskFPSetTest.java +++ b/tlatools/test/tlc2/tool/fp/AbstractHeapBasedDiskFPSetTest.java @@ -1,11 +1,18 @@ // Copyright (c) 2012 Markus Alexander Kuppe. All rights reserved. package tlc2.tool.fp; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import java.io.IOException; import java.rmi.RemoteException; + import org.junit.Test; +import tlc2.tool.TLCState; +import tlc2.tool.TLCTrace; +import tlc2.tool.queue.DummyTLCState; + public abstract class AbstractHeapBasedDiskFPSetTest { /* Test the lower limits */ @@ -74,6 +81,59 @@ public abstract class AbstractHeapBasedDiskFPSetTest { doTest((getUpperLimit() << 1) - 1); } + @Test + public void testFPSetRecovery() throws IOException { + final int limit = 99999; + final String metadir = System.getProperty("java.io.tmpdir"); + final String filename = this.getClass().getCanonicalName(); + + // First, create a trace file to recover from. + final TLCTrace trace = new TLCTrace(metadir, filename, + null); + + // Fill the trace file with random fingerprints + final TLCState predecessor = new DummyTLCState(); + predecessor.uid = 1L; + // an init state + trace.writeState(predecessor.uid); + // successor states + for (long fp = predecessor.uid + 1; fp < limit; fp++) { + trace.writeState(predecessor, fp); + predecessor.uid = fp; + } + + // Create a checkpoint file + trace.beginChkpt(); + trace.commitChkpt(); + + // Create a DiskFPSet + final DiskFPSet fpSet = getDiskFPSet(new FPSetConfiguration()); + fpSet.init(1, metadir, filename); + fpSet.recover(); + + // Verify successful recovery + assertEquals(limit-1, fpSet.size()); + for (long fp = 1L; fp < limit; fp++) { + assertTrue(fpSet.contains(fp)); + } + } + + @Test + public void testFPSetRecovery2() throws IOException { + final String metadir = System.getProperty("java.io.tmpdir"); + final String filename = this.getClass().getCanonicalName() + "testFPSetRecovery2"; + + final DiskFPSet fpSet = getDiskFPSet(new FPSetConfiguration()); + fpSet.init(1, metadir, filename); + + // Make sure the FPSet tries to flush to disk. + fpSet.forceFlush(); + + for (long fp = 1; fp <= 1024; fp++) { + fpSet.recoverFP(fp); + } + } + /* Helper */ @SuppressWarnings("deprecation") diff --git a/tlatools/test/tlc2/tool/fp/Bug210DiskFPSetTest.java b/tlatools/test/tlc2/tool/fp/Bug210DiskFPSetTest.java index 1b065adfd57c3601b7d111ac0bd788a013c775cd..c193aca1289b92076d44ce10619d9d10875d432c 100644 --- a/tlatools/test/tlc2/tool/fp/Bug210DiskFPSetTest.java +++ b/tlatools/test/tlc2/tool/fp/Bug210DiskFPSetTest.java @@ -20,7 +20,7 @@ public class Bug210DiskFPSetTest extends AbstractFPSetTest { } /** - * @see http://bugzilla.tlaplus.net/show_bug.cgi?id=210 + * @see Bug #210 in general/bugzilla/index.html * @throws IOException */ @Test diff --git a/tlatools/test/tlc2/tool/fp/Bug242DiskFPSetTest.java b/tlatools/test/tlc2/tool/fp/Bug242DiskFPSetTest.java index 8e6f6882e50903fa31aad69ff0331f5ee041f907..b740e9992c38cc6da9ca531006e378863907ddf6 100644 --- a/tlatools/test/tlc2/tool/fp/Bug242DiskFPSetTest.java +++ b/tlatools/test/tlc2/tool/fp/Bug242DiskFPSetTest.java @@ -29,7 +29,7 @@ public class Bug242DiskFPSetTest extends AbstractFPSetTest { } /** - * @see http://bugzilla.tlaplus.net/show_bug.cgi?id=242 + * @see Bug #242 in general/bugzilla/index.html */ @Test public void testDiskFPSetWithHighMem() throws RemoteException { diff --git a/tlatools/test/tlc2/tool/fp/FPSetFactoryTest.java b/tlatools/test/tlc2/tool/fp/FPSetFactoryTest.java index 28cf1bd8fd81bb7071112bed96afdfca04300921..f7f2999f040c2715537939fd6b9cab868d82113b 100644 --- a/tlatools/test/tlc2/tool/fp/FPSetFactoryTest.java +++ b/tlatools/test/tlc2/tool/fp/FPSetFactoryTest.java @@ -2,12 +2,15 @@ package tlc2.tool.fp; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.rmi.NoSuchObjectException; import java.rmi.RemoteException; import org.junit.Test; +import tlc2.tool.distributed.fp.FPSetRMI; + @SuppressWarnings("deprecation") public class FPSetFactoryTest { // Has to be larger than util.TLCRuntime.MinFpMemSize. For off-heap/non-heap @@ -15,6 +18,30 @@ public class FPSetFactoryTest { // 64mb). 64mb is also the default used by util.TLCRuntime.getNonHeapPhysicalMemory(). private static final long MEMORY = 64L * 1024L * 1024L; + /* Test diskfpset subclasses which always require two instances */ + + @Test + public void testGetDiskFPSet() { + assertTrue(FPSetFactory.isDiskFPSet(DiskFPSet.class.getName())); + assertTrue(FPSetFactory.isDiskFPSet(HeapBasedDiskFPSet.class.getName())); + assertTrue(FPSetFactory.isDiskFPSet(OffHeapDiskFPSet.class.getName())); + assertTrue(FPSetFactory.isDiskFPSet(LSBDiskFPSet.class.getName())); + assertTrue(FPSetFactory.isDiskFPSet(MSBDiskFPSet.class.getName())); + + assertFalse(FPSetFactory.isDiskFPSet(FPSet.class.getName())); + assertFalse(FPSetFactory.isDiskFPSet(FPSetRMI.class.getName())); + + assertFalse(FPSetFactory.isDiskFPSet(MultiFPSet.class.getName())); + + assertFalse(FPSetFactory.isDiskFPSet(MemFPSet.class.getName())); + assertFalse(FPSetFactory.isDiskFPSet(MemFPSet1.class.getName())); + assertFalse(FPSetFactory.isDiskFPSet(MemFPSet2.class.getName())); + + System.setProperty(FPSetFactory.IMPL_PROPERTY, MSBDiskFPSet.class.getName()); + final FPSetConfiguration fpSetConfiguration = new FPSetConfiguration(); + assertTrue(fpSetConfiguration.allowsNesting()); + } + /* Test single FPSet with default memory */ @Test @@ -50,11 +77,8 @@ public class FPSetFactoryTest { fpSetConfiguration.setRatio(1.0d); FPSet fpSet = doTestGetFPSet(MSBDiskFPSet.class, fpSetConfiguration); assertEquals(MEMORY, fpSet.getConfiguration().getMemoryInBytes()); - - // non-multifpsets can be cast to diskfpsets to expose statistics - // interface - final DiskFPSet diskFPSet = (DiskFPSet) fpSet; - assertTrue((MEMORY / FPSet.LongSize) > diskFPSet.getMaxTblCnt()); + + doTestNested(MSBDiskFPSet.class, fpSetConfiguration, (MultiFPSet) fpSet); } @Test @@ -66,12 +90,7 @@ public class FPSetFactoryTest { FPSet fpSet = doTestGetFPSet(LSBDiskFPSet.class, fpSetConfiguration); assertEquals(MEMORY, fpSet.getConfiguration().getMemoryInBytes()); - // non-multifpsets can be cast to diskfpsets to expose statistics - // interface - final DiskFPSet diskFPSet = (DiskFPSet) fpSet; - // LSB implementation can only allocate half of its memory for primary - // fingerprint storage (see auxiliary storage) - assertTrue(((MEMORY / FPSet.LongSize) / 2) > diskFPSet.getMaxTblCnt()); + doTestNested(LSBDiskFPSet.class, fpSetConfiguration, (MultiFPSet) fpSet); } @Test @@ -83,10 +102,7 @@ public class FPSetFactoryTest { FPSet fpSet = doTestGetFPSet(OffHeapDiskFPSet.class, fpSetConfiguration); assertEquals(MEMORY, fpSet.getConfiguration().getMemoryInBytes()); - // non-multifpsets can be cast to diskfpsets to expose statistics - // interface - final DiskFPSet diskFPSet = (DiskFPSet) fpSet; - assertEquals((MEMORY / FPSet.LongSize), diskFPSet.getMaxTblCnt()); + doTestNested(OffHeapDiskFPSet.class, fpSetConfiguration, (MultiFPSet) fpSet); } /* Test single FPSet with explicit memory and ratio */ @@ -100,11 +116,8 @@ public class FPSetFactoryTest { fpSetConfiguration.setRatio(.5d); FPSet fpSet = doTestGetFPSet(MSBDiskFPSet.class, fpSetConfiguration); assertEquals(MEMORY / 2, fpSet.getConfiguration().getMemoryInBytes()); - - // non-multifpsets can be cast to diskfpsets to expose statistics - // interface - final DiskFPSet diskFPSet = (DiskFPSet) fpSet; - assertTrue((MEMORY / FPSet.LongSize) > diskFPSet.getMaxTblCnt()); + + doTestNested(MSBDiskFPSet.class, fpSetConfiguration, (MultiFPSet) fpSet); } @Test @@ -116,12 +129,8 @@ public class FPSetFactoryTest { FPSet fpSet = doTestGetFPSet(LSBDiskFPSet.class, fpSetConfiguration); assertEquals(MEMORY / 2, fpSet.getConfiguration().getMemoryInBytes()); - // non-multifpsets can be cast to diskfpsets to expose statistics - // interface - final DiskFPSet diskFPSet = (DiskFPSet) fpSet; - // LSB implementation can only allocate half of its memory for primary - // fingerprint storage (see auxiliary storage) - assertTrue((MEMORY / FPSet.LongSize) > diskFPSet.getMaxTblCnt()); + + doTestNested(LSBDiskFPSet.class, fpSetConfiguration, (MultiFPSet) fpSet); } @Test @@ -136,10 +145,7 @@ public class FPSetFactoryTest { // non-heap memory assertEquals(MEMORY, fpSet.getConfiguration().getMemoryInBytes()); - // non-multifpsets can be cast to diskfpsets to expose statistics - // interface - final DiskFPSet diskFPSet = (DiskFPSet) fpSet; - assertEquals((MEMORY / FPSet.LongSize), diskFPSet.getMaxTblCnt()); + doTestNested(OffHeapDiskFPSet.class, fpSetConfiguration, (MultiFPSet) fpSet); } /* Test MultiFPSet with default memory */ @@ -150,7 +156,7 @@ public class FPSetFactoryTest { System.setProperty(FPSetFactory.IMPL_PROPERTY, MSBDiskFPSet.class.getName()); final FPSetConfiguration fpSetConfiguration = new FPSetConfiguration(); fpSetConfiguration.setFpBits(1); - final MultiFPSet mFPSet = (MultiFPSet) doTestGetFPSet(MSBMultiFPSet.class, fpSetConfiguration); + final MultiFPSet mFPSet = (MultiFPSet) doTestGetFPSet(MultiFPSet.class, fpSetConfiguration); doTestNested(MSBDiskFPSet.class, fpSetConfiguration, mFPSet); } @@ -170,7 +176,7 @@ public class FPSetFactoryTest { System.setProperty(FPSetFactory.IMPL_PROPERTY, OffHeapDiskFPSet.class.getName()); final FPSetConfiguration fpSetConfiguration = new FPSetConfiguration(); fpSetConfiguration.setFpBits(1); - final MultiFPSet mFPSet = (MultiFPSet) doTestGetFPSet(MSBMultiFPSet.class, fpSetConfiguration); + final MultiFPSet mFPSet = (MultiFPSet) doTestGetFPSet(MultiFPSet.class, fpSetConfiguration); doTestNested(OffHeapDiskFPSet.class, fpSetConfiguration, mFPSet); } @@ -185,7 +191,7 @@ public class FPSetFactoryTest { fpSetConfiguration.setMemory(MEMORY); fpSetConfiguration.setFpBits(1); fpSetConfiguration.setRatio(1.0d); - final MultiFPSet mFPSet = (MultiFPSet) doTestGetFPSet(MSBMultiFPSet.class, fpSetConfiguration); + final MultiFPSet mFPSet = (MultiFPSet) doTestGetFPSet(MultiFPSet.class, fpSetConfiguration); doTestNested(MSBDiskFPSet.class, fpSetConfiguration, mFPSet); } @@ -209,7 +215,7 @@ public class FPSetFactoryTest { fpSetConfiguration.setMemory(MEMORY); fpSetConfiguration.setFpBits(1); fpSetConfiguration.setRatio(1.0d); - final MultiFPSet mFPSet = (MultiFPSet) doTestGetFPSet(MSBMultiFPSet.class, fpSetConfiguration); + final MultiFPSet mFPSet = (MultiFPSet) doTestGetFPSet(MultiFPSet.class, fpSetConfiguration); doTestNested(OffHeapDiskFPSet.class, fpSetConfiguration, mFPSet); } @@ -218,7 +224,9 @@ public class FPSetFactoryTest { private FPSet doTestGetFPSet(final Class<? extends FPSet> class1, final FPSetConfiguration fpSetConfig) throws RemoteException, NoSuchObjectException { final FPSet fpSet = FPSetFactory.getFPSet(fpSetConfig); - assertTrue(class1.isAssignableFrom(fpSet.getClass())); + if (!FPSetFactory.isDiskFPSet(class1.getName())) { + assertTrue(class1.isAssignableFrom(fpSet.getClass())); + } return fpSet; } diff --git a/tlatools/test/tlc2/tool/fp/LongArrayTest.java b/tlatools/test/tlc2/tool/fp/LongArrayTest.java new file mode 100644 index 0000000000000000000000000000000000000000..5b3ccd1a3923319bee6ced5c1ac1293270e91334 --- /dev/null +++ b/tlatools/test/tlc2/tool/fp/LongArrayTest.java @@ -0,0 +1,109 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.fp; + +import java.io.IOException; + +import junit.framework.TestCase; + +public class LongArrayTest extends TestCase { + + public void testGetAndSet() throws IOException { + if (!System.getProperty("sun.arch.data.model").equals("64")) { + // LongArray only works on 64bit architectures. See comment in + // LongArray ctor. + return; + } + + final int elements = 100; + + final LongArray array = new LongArray(elements); + array.zeroMemory(1); + + for (long i = 0L; i < elements; i++) { + assertEquals(0L, array.get(i)); + } + + + for (long i = 0L; i < elements; i++) { + array.set(i, i); + } + for (long i = 0L; i < elements; i++) { + assertEquals(i, array.get(i)); + } + + + for (long i = 0L; i < elements; i++) { + array.set(i, Long.MAX_VALUE - i); + } + for (long i = 0L; i < elements; i++) { + assertEquals(Long.MAX_VALUE - i, array.get(i)); + } + + + for (long i = 0L; i < elements; i++) { + array.set(i, Long.MIN_VALUE + i); + } + for (long i = 0L; i < elements; i++) { + assertEquals(Long.MIN_VALUE + i, array.get(i)); + } + } + + public void testOutOfRangePositive() throws IOException { + final LongArray array = new LongArray(1); + try { + array.get(1); + } catch (AssertionError e) { + return; + } + fail(); + } + + public void testOutOfRangeNegative() throws IOException { + final LongArray array = new LongArray(1); + try { + array.get(-1); + } catch (AssertionError e) { + return; + } + fail(); + } + + public void testZeroMemory() throws IOException { + for (int k = 1; k < 8; k++) { + for (int i = 1; i < 128; i++) { + final LongArray array = new LongArray(i); + array.zeroMemory(k); + for (int j = 0; i < j; i++) { + assertEquals(0L, array.get(j)); + } + for (int j = 0; i < j; i++) { + array.set(j, -1L); + } + } + } + } +} diff --git a/tlatools/test/tlc2/tool/fp/MultiFPSetTest.java b/tlatools/test/tlc2/tool/fp/MultiFPSetTest.java index ef7788d15b3f254dc577c9a5ab17c08cf665e47b..3800893be9604d1b3b65b70d14ae5091bf082b9e 100644 --- a/tlatools/test/tlc2/tool/fp/MultiFPSetTest.java +++ b/tlatools/test/tlc2/tool/fp/MultiFPSetTest.java @@ -3,7 +3,12 @@ package tlc2.tool.fp; import static org.junit.Assert.fail; +import java.io.File; import java.io.IOException; +import java.util.HashSet; +import java.util.Set; + +import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -12,11 +17,15 @@ import org.junit.Test; */ public class MultiFPSetTest { + protected static final String tmpdir = System.getProperty("java.io.tmpdir") + File.separator + "MultiFPSetTest" + + System.currentTimeMillis(); + /* (non-Javadoc) * @see junit.framework.TestCase#setUp() */ @Before public void setUp() throws Exception { + new File(tmpdir).mkdirs(); } /** @@ -25,7 +34,9 @@ public class MultiFPSetTest { */ @Test public void testCTorLowerMin() throws IOException { + System.setProperty(FPSetFactory.IMPL_PROPERTY, MemFPSet.class.getName()); try { + System.setProperty(FPSetFactory.IMPL_PROPERTY, MemFPSet.class.getName()); FPSetConfiguration conf = new FPSetConfiguration(); conf.setFpBits(0); new MultiFPSet(conf); @@ -147,4 +158,623 @@ public class MultiFPSetTest { fail(); } } + + @Test + public void testGetFPSet() throws IOException { + System.setProperty(FPSetFactory.IMPL_PROPERTY, MSBDiskFPSet.class.getName()); + final FPSetConfiguration conf = new FPSetConfiguration(); + conf.setFpBits(1); + + MultiFPSet mfps = new MultiFPSet(conf); + mfps.init(1, tmpdir, "testGetFPSet"); + + final long a = (1L << 62) + 1; // 01...0 + printBinaryString("a01...1", a); + final long b = 1L; // 0...1 + printBinaryString("b00...1", b); + + FPSet aFPSet = mfps.getFPSet(a); + Assert.assertTrue(aFPSet == mfps.getFPSet(b)); + + // Initially neither a nor b are in the set. + Assert.assertFalse(aFPSet.contains(a)); + + Assert.assertFalse(mfps.contains(a)); + Assert.assertFalse(mfps.contains(b)); + + // Add a to the set and verify it's in the + // set and b isn't. + Assert.assertFalse(mfps.put(a)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertFalse(mfps.contains(b)); + + // Add b to the set as well. Now both + // are supposed to be set members. + Assert.assertFalse(mfps.put(b)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertTrue(mfps.contains(b)); + + Assert.assertTrue(aFPSet.contains(a)); + Assert.assertTrue(aFPSet.contains(b)); + Assert.assertEquals(2, aFPSet.size()); + + // Get the other FPSet + FPSet[] fpSets = mfps.getFPSets(); + Set<FPSet> s = new HashSet<FPSet>(); + for (int i = 0; i < fpSets.length; i++) { + s.add(fpSets[i]); + } + s.remove(aFPSet); + FPSet bFPSet = (FPSet) s.toArray()[0]; + + Assert.assertFalse(bFPSet.contains(a)); + Assert.assertFalse(bFPSet.contains(b)); + Assert.assertEquals(0, bFPSet.size()); + + Assert.assertTrue(mfps.checkInvariant()); + } + + @Test + public void testGetFPSet0() throws IOException { + System.setProperty(FPSetFactory.IMPL_PROPERTY, MSBDiskFPSet.class.getName()); + final FPSetConfiguration conf = new FPSetConfiguration(); + conf.setFpBits(1); + + MultiFPSet mfps = new MultiFPSet(conf); + mfps.init(1, tmpdir, "testGetFPSet0"); + + final long a = (1L << 63) + 1; // 10...1 + printBinaryString("a1...1", a); + final long b = 1L; // 00...1 + printBinaryString("b0...1", b); + final long c = (1L << 62) + 1; // 01...1 + printBinaryString("c1...1", c); + final long d = (3L << 62) + 1; // 11...1 + printBinaryString("d0...1", d); + + FPSet aFPSet = mfps.getFPSet(a); + FPSet bFPSet = mfps.getFPSet(b); + Assert.assertTrue(aFPSet != bFPSet); + + // Initially neither a nor b are in the set. + Assert.assertFalse(aFPSet.contains(a)); + Assert.assertFalse(bFPSet.contains(b)); + + Assert.assertFalse(mfps.contains(a)); + Assert.assertFalse(mfps.contains(b)); + Assert.assertFalse(mfps.contains(c)); + Assert.assertFalse(mfps.contains(d)); + + // Add a to the set and verify it's in the + // set and b isn't. + Assert.assertFalse(mfps.put(a)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertFalse(mfps.contains(b)); + Assert.assertFalse(mfps.contains(c)); + Assert.assertFalse(mfps.contains(d)); + + // Add b to the set as well. Now both + // are supposed to be set members. + Assert.assertFalse(mfps.put(b)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertTrue(mfps.contains(b)); + Assert.assertFalse(mfps.contains(c)); + Assert.assertFalse(mfps.contains(d)); + + Assert.assertFalse(mfps.put(c)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertTrue(mfps.contains(b)); + Assert.assertTrue(mfps.contains(c)); + Assert.assertFalse(mfps.contains(d)); + + Assert.assertFalse(mfps.put(d)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertTrue(mfps.contains(b)); + Assert.assertTrue(mfps.contains(c)); + Assert.assertTrue(mfps.contains(d)); + + for (FPSet fpSet : mfps.getFPSets()) { + Assert.assertEquals(2, fpSet.size()); + // Expect to have two buckets + Assert.assertEquals(2, ((FPSetStatistic) fpSet).getTblLoad()); + } + + Assert.assertTrue(mfps.checkInvariant()); + } + + @Test + public void testGetFPSet1() throws IOException { + System.setProperty(FPSetFactory.IMPL_PROPERTY, MSBDiskFPSet.class.getName()); + final FPSetConfiguration conf = new FPSetConfiguration(); + conf.setFpBits(2); + final MultiFPSet mfps = new MultiFPSet(conf); + mfps.init(1, tmpdir, "testGetFPSet1"); + + final long a = 1L; // 00...1 + printBinaryString("a02", a); + final long b = (1L << 62) + 1; // 01...1 + printBinaryString("b02", b); + final long c = (1L << 63) + 1; // 10...1 + printBinaryString("c02", c); + final long d = (3L << 62) + 1; // 11...1 + printBinaryString("d02", d); + + final Set<FPSet> s = new HashSet<FPSet>(); + final FPSet aFPSet = mfps.getFPSet(a); + s.add(aFPSet); + final FPSet bFPSet = mfps.getFPSet(b); + s.add(bFPSet); + final FPSet cFPSet = mfps.getFPSet(c); + s.add(cFPSet); + final FPSet dFPSet = mfps.getFPSet(d); + s.add(dFPSet); + Assert.assertEquals(4, s.size()); + + Assert.assertFalse(mfps.contains(a)); + Assert.assertFalse(mfps.contains(b)); + Assert.assertFalse(mfps.contains(c)); + Assert.assertFalse(mfps.contains(d)); + + Assert.assertFalse(mfps.put(a)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertFalse(mfps.contains(b)); + Assert.assertFalse(mfps.contains(c)); + Assert.assertFalse(mfps.contains(d)); + + Assert.assertFalse(mfps.put(b)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertTrue(mfps.contains(b)); + Assert.assertFalse(mfps.contains(c)); + Assert.assertFalse(mfps.contains(d)); + + Assert.assertFalse(mfps.put(c)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertTrue(mfps.contains(b)); + Assert.assertTrue(mfps.contains(c)); + Assert.assertFalse(mfps.contains(d)); + + Assert.assertFalse(mfps.put(d)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertTrue(mfps.contains(b)); + Assert.assertTrue(mfps.contains(c)); + Assert.assertTrue(mfps.contains(d)); + + for (FPSet fpSet : s) { + Assert.assertEquals(1, fpSet.size()); + // Expect to have two buckets + Assert.assertEquals(1, ((FPSetStatistic) fpSet).getTblLoad()); + } + + // a & c and b & d have collisions at the individual DiskFPSet level. + Assert.assertTrue(aFPSet.contains(a)); + Assert.assertFalse(aFPSet.contains(b)); + Assert.assertTrue(aFPSet.contains(c)); // expected collision + Assert.assertFalse(aFPSet.contains(d)); + + Assert.assertTrue(bFPSet.contains(b)); + Assert.assertFalse(bFPSet.contains(a)); + Assert.assertFalse(bFPSet.contains(c)); + Assert.assertTrue(bFPSet.contains(d)); // expected collision + + Assert.assertTrue(cFPSet.contains(c)); + Assert.assertFalse(cFPSet.contains(b)); + Assert.assertTrue(cFPSet.contains(a)); // expected collision + Assert.assertFalse(cFPSet.contains(d)); + + Assert.assertTrue(dFPSet.contains(d)); + Assert.assertTrue(dFPSet.contains(b)); // expected collision + Assert.assertFalse(dFPSet.contains(c)); + Assert.assertFalse(dFPSet.contains(a)); + + Assert.assertTrue(mfps.checkInvariant()); + } + + @Test + public void testGetFPSetL() throws IOException { + System.setProperty(FPSetFactory.IMPL_PROPERTY, LSBDiskFPSet.class.getName()); + final FPSetConfiguration conf = new FPSetConfiguration(); + conf.setFpBits(1); + + MultiFPSet mfps = new MultiFPSet(conf); + mfps.init(1, tmpdir, "testGetFPSetL"); + + final long a = (1L << 62) + 1; + printBinaryString("a01", a); + final long b = 1L; + printBinaryString("b01", b); + + FPSet aFPSet = mfps.getFPSet(a); + Assert.assertTrue(aFPSet == mfps.getFPSet(b)); + + // Initially neither a nor b are in the set. + Assert.assertFalse(aFPSet.contains(a)); + + Assert.assertFalse(mfps.contains(a)); + Assert.assertFalse(mfps.contains(b)); + + // Add a to the set and verify it's in the + // set and b isn't. + Assert.assertFalse(mfps.put(a)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertFalse(mfps.contains(b)); + + // Add b to the set as well. Now both + // are supposed to be set members. + Assert.assertFalse(mfps.put(b)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertTrue(mfps.contains(b)); + + Assert.assertTrue(aFPSet.contains(a)); + Assert.assertTrue(aFPSet.contains(b)); + Assert.assertEquals(2, aFPSet.size()); + + // Get the other FPSet + FPSet[] fpSets = mfps.getFPSets(); + Set<FPSet> s = new HashSet<FPSet>(); + for (int i = 0; i < fpSets.length; i++) { + s.add(fpSets[i]); + } + s.remove(aFPSet); + FPSet bFPSet = (FPSet) s.toArray()[0]; + + Assert.assertFalse(bFPSet.contains(a)); + Assert.assertFalse(bFPSet.contains(b)); + Assert.assertEquals(0, bFPSet.size()); + + Assert.assertTrue(mfps.checkInvariant()); + } + + @Test + public void testGetFPSet0L() throws IOException { + System.setProperty(FPSetFactory.IMPL_PROPERTY, LSBDiskFPSet.class.getName()); + final FPSetConfiguration conf = new FPSetConfiguration(); + conf.setFpBits(1); + + MultiFPSet mfps = new MultiFPSet(conf); + mfps.init(1, tmpdir, "testGetFPSet0L"); + + final long a = (1L << 63) + 1; + printBinaryString("a01", a); + final long b = 1L; + printBinaryString("b01", b); + + FPSet aFPSet = mfps.getFPSet(a); + FPSet bFPSet = mfps.getFPSet(b); + Assert.assertTrue(aFPSet != bFPSet); + + // Initially neither a nor b are in the set. + Assert.assertFalse(aFPSet.contains(a)); + Assert.assertFalse(bFPSet.contains(b)); + + Assert.assertFalse(mfps.contains(a)); + Assert.assertFalse(mfps.contains(b)); + + // Add a to the set and verify it's in the + // set and b isn't. + Assert.assertFalse(mfps.put(a)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertFalse(mfps.contains(b)); + + // Add b to the set as well. Now both + // are supposed to be set members. + Assert.assertFalse(mfps.put(b)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertTrue(mfps.contains(b)); + + Assert.assertTrue(mfps.checkInvariant()); + } + + @Test + public void testGetFPSet1L() throws IOException { + System.setProperty(FPSetFactory.IMPL_PROPERTY, LSBDiskFPSet.class.getName()); + final FPSetConfiguration conf = new FPSetConfiguration(); + conf.setFpBits(2); + final MultiFPSet mfps = new MultiFPSet(conf); + mfps.init(1, tmpdir, "testGetFPSet1L"); + + final long a = 1L; // 00...1 + printBinaryString("a02", a); + final long b = (1L << 62) + 1; // 01...1 + printBinaryString("b02", b); + final long c = (1L << 63) + 1; // 10...1 + printBinaryString("c02", c); + final long d = (3L << 62) + 1; // 11...1 + printBinaryString("d02", d); + + final Set<FPSet> s = new HashSet<FPSet>(); + final FPSet aFPSet = mfps.getFPSet(a); + s.add(aFPSet); + final FPSet bFPSet = mfps.getFPSet(b); + s.add(bFPSet); + final FPSet cFPSet = mfps.getFPSet(c); + s.add(cFPSet); + final FPSet dFPSet = mfps.getFPSet(d); + s.add(dFPSet); + Assert.assertEquals(4, s.size()); + + Assert.assertFalse(mfps.contains(a)); + Assert.assertFalse(mfps.contains(b)); + Assert.assertFalse(mfps.contains(c)); + Assert.assertFalse(mfps.contains(d)); + + Assert.assertFalse(mfps.put(a)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertFalse(mfps.contains(b)); + Assert.assertFalse(mfps.contains(c)); + Assert.assertFalse(mfps.contains(d)); + + Assert.assertFalse(mfps.put(b)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertTrue(mfps.contains(b)); + Assert.assertFalse(mfps.contains(c)); + Assert.assertFalse(mfps.contains(d)); + + Assert.assertFalse(mfps.put(c)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertTrue(mfps.contains(b)); + Assert.assertTrue(mfps.contains(c)); + Assert.assertFalse(mfps.contains(d)); + + Assert.assertFalse(mfps.put(d)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertTrue(mfps.contains(b)); + Assert.assertTrue(mfps.contains(c)); + Assert.assertTrue(mfps.contains(d)); + + for (FPSet fpSet : s) { + Assert.assertEquals(1, fpSet.size()); + } + + // a & c and b & d have collisions at the individual DiskFPSet level. + Assert.assertTrue(aFPSet.contains(a)); + Assert.assertFalse(aFPSet.contains(b)); + Assert.assertTrue(aFPSet.contains(c)); // expected collision + Assert.assertFalse(aFPSet.contains(d)); + + Assert.assertTrue(bFPSet.contains(b)); + Assert.assertFalse(bFPSet.contains(a)); + Assert.assertFalse(bFPSet.contains(c)); + Assert.assertTrue(bFPSet.contains(d)); // expected collision + + Assert.assertTrue(cFPSet.contains(c)); + Assert.assertFalse(cFPSet.contains(b)); + Assert.assertTrue(cFPSet.contains(a)); // expected collision + Assert.assertFalse(cFPSet.contains(d)); + + Assert.assertTrue(dFPSet.contains(d)); + Assert.assertTrue(dFPSet.contains(b)); // expected collision + Assert.assertFalse(dFPSet.contains(c)); + Assert.assertFalse(dFPSet.contains(a)); + + Assert.assertTrue(mfps.checkInvariant()); + } + + @Test + public void testGetFPSetOffHeap() throws IOException { + if (!System.getProperty("sun.arch.data.model").equals("64")) { + // LongArray only works on 64bit architectures. See comment in + // LongArray ctor. + return; + } + System.setProperty(FPSetFactory.IMPL_PROPERTY, OffHeapDiskFPSet.class.getName()); + final FPSetConfiguration conf = new FPSetConfiguration(); + conf.setFpBits(1); + + MultiFPSet mfps = new MultiFPSet(conf); + mfps.init(1, tmpdir, "testGetFPSetOffHeap"); + + final long a = (1L << 62) + 1; // 01...0 + printBinaryString("a01...1", a); + final long b = 1L; // 0...1 + printBinaryString("b00...1", b); + + FPSet aFPSet = mfps.getFPSet(a); + Assert.assertTrue(aFPSet == mfps.getFPSet(b)); + + // Initially neither a nor b are in the set. + Assert.assertFalse(aFPSet.contains(a)); + + Assert.assertFalse(mfps.contains(a)); + Assert.assertFalse(mfps.contains(b)); + + // Add a to the set and verify it's in the + // set and b isn't. + Assert.assertFalse(mfps.put(a)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertFalse(mfps.contains(b)); + + // Add b to the set as well. Now both + // are supposed to be set members. + Assert.assertFalse(mfps.put(b)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertTrue(mfps.contains(b)); + + Assert.assertTrue(aFPSet.contains(a)); + Assert.assertTrue(aFPSet.contains(b)); + Assert.assertEquals(2, aFPSet.size()); + + // Get the other FPSet + FPSet[] fpSets = mfps.getFPSets(); + Set<FPSet> s = new HashSet<FPSet>(); + for (int i = 0; i < fpSets.length; i++) { + s.add(fpSets[i]); + } + s.remove(aFPSet); + FPSet bFPSet = (FPSet) s.toArray()[0]; + + Assert.assertFalse(bFPSet.contains(a)); + Assert.assertFalse(bFPSet.contains(b)); + Assert.assertEquals(0, bFPSet.size()); + + Assert.assertTrue(mfps.checkInvariant()); + } + + @Test + public void testGetFPSetOffHeap0() throws IOException { + if (!System.getProperty("sun.arch.data.model").equals("64")) { + // LongArray only works on 64bit architectures. See comment in + // LongArray ctor. + return; + } + System.setProperty(FPSetFactory.IMPL_PROPERTY, OffHeapDiskFPSet.class.getName()); + final FPSetConfiguration conf = new FPSetConfiguration(); + conf.setFpBits(1); + + MultiFPSet mfps = new MultiFPSet(conf); + mfps.init(1, tmpdir, "testGetFPSetOffHeap0"); + + final long a = (1L << 63) + 1; // 10...1 + printBinaryString("a1...1", a); + final long b = 1L; // 00...1 + printBinaryString("b0...1", b); + final long c = (1L << 62) + 1; // 01...1 + printBinaryString("c1...1", c); + final long d = (3L << 62) + 1; // 11...1 + printBinaryString("d0...1", d); + + FPSet aFPSet = mfps.getFPSet(a); + FPSet bFPSet = mfps.getFPSet(b); + Assert.assertTrue(aFPSet != bFPSet); + + // Initially neither a nor b are in the set. + Assert.assertFalse(aFPSet.contains(a)); + Assert.assertFalse(bFPSet.contains(b)); + + Assert.assertFalse(mfps.contains(a)); + Assert.assertFalse(mfps.contains(b)); + Assert.assertFalse(mfps.contains(c)); + Assert.assertFalse(mfps.contains(d)); + + // Add a to the set and verify it's in the + // set and b isn't. + Assert.assertFalse(mfps.put(a)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertFalse(mfps.contains(b)); + Assert.assertFalse(mfps.contains(c)); + Assert.assertFalse(mfps.contains(d)); + + // Add b to the set as well. Now both + // are supposed to be set members. + Assert.assertFalse(mfps.put(b)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertTrue(mfps.contains(b)); + Assert.assertFalse(mfps.contains(c)); + Assert.assertFalse(mfps.contains(d)); + + Assert.assertFalse(mfps.put(c)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertTrue(mfps.contains(b)); + Assert.assertTrue(mfps.contains(c)); + Assert.assertFalse(mfps.contains(d)); + + Assert.assertFalse(mfps.put(d)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertTrue(mfps.contains(b)); + Assert.assertTrue(mfps.contains(c)); + Assert.assertTrue(mfps.contains(d)); + + for (FPSet fpSet : mfps.getFPSets()) { + Assert.assertEquals(2, fpSet.size()); + // Expect to have two buckets + Assert.assertEquals(2, ((FPSetStatistic) fpSet).getTblLoad()); + } + + Assert.assertTrue(mfps.checkInvariant()); + } + + @Test + public void testGetFPSetOffHeap1() throws IOException { + if (!System.getProperty("sun.arch.data.model").equals("64")) { + // LongArray only works on 64bit architectures. See comment in + // LongArray ctor. + return; + } + System.setProperty(FPSetFactory.IMPL_PROPERTY, OffHeapDiskFPSet.class.getName()); + final FPSetConfiguration conf = new FPSetConfiguration(); + conf.setFpBits(2); + final MultiFPSet mfps = new MultiFPSet(conf); + mfps.init(1, tmpdir, "testGetFPSetOffHeap1"); + + final long a = 1L; // 00...1 + printBinaryString("a02", a); + final long b = (1L << 62) + 1; // 01...1 + printBinaryString("b02", b); + final long c = (1L << 63) + 1; // 10...1 + printBinaryString("c02", c); + final long d = (3L << 62) + 1; // 11...1 + printBinaryString("d02", d); + + final Set<FPSet> s = new HashSet<FPSet>(); + final FPSet aFPSet = mfps.getFPSet(a); + s.add(aFPSet); + final FPSet bFPSet = mfps.getFPSet(b); + s.add(bFPSet); + final FPSet cFPSet = mfps.getFPSet(c); + s.add(cFPSet); + final FPSet dFPSet = mfps.getFPSet(d); + s.add(dFPSet); + Assert.assertEquals(4, s.size()); + + Assert.assertFalse(mfps.contains(a)); + Assert.assertFalse(mfps.contains(b)); + Assert.assertFalse(mfps.contains(c)); + Assert.assertFalse(mfps.contains(d)); + + Assert.assertFalse(mfps.put(a)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertFalse(mfps.contains(b)); + Assert.assertFalse(mfps.contains(c)); + Assert.assertFalse(mfps.contains(d)); + + Assert.assertFalse(mfps.put(b)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertTrue(mfps.contains(b)); + Assert.assertFalse(mfps.contains(c)); + Assert.assertFalse(mfps.contains(d)); + + Assert.assertFalse(mfps.put(c)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertTrue(mfps.contains(b)); + Assert.assertTrue(mfps.contains(c)); + Assert.assertFalse(mfps.contains(d)); + + Assert.assertFalse(mfps.put(d)); + Assert.assertTrue(mfps.contains(a)); + Assert.assertTrue(mfps.contains(b)); + Assert.assertTrue(mfps.contains(c)); + Assert.assertTrue(mfps.contains(d)); + + for (FPSet fpSet : s) { + Assert.assertEquals(1, fpSet.size()); + // Expect to have two buckets + Assert.assertEquals(1, ((FPSetStatistic) fpSet).getTblLoad()); + } + + // a & c and b & d have collisions at the individual DiskFPSet level. + Assert.assertTrue(aFPSet.contains(a)); + Assert.assertFalse(aFPSet.contains(b)); + Assert.assertTrue(aFPSet.contains(c)); // expected collision + Assert.assertFalse(aFPSet.contains(d)); + + Assert.assertTrue(bFPSet.contains(b)); + Assert.assertFalse(bFPSet.contains(a)); + Assert.assertFalse(bFPSet.contains(c)); + Assert.assertTrue(bFPSet.contains(d)); // expected collision + + Assert.assertTrue(cFPSet.contains(c)); + Assert.assertFalse(cFPSet.contains(b)); + Assert.assertTrue(cFPSet.contains(a)); // expected collision + Assert.assertFalse(cFPSet.contains(d)); + + Assert.assertTrue(dFPSet.contains(d)); + Assert.assertTrue(dFPSet.contains(b)); // expected collision + Assert.assertFalse(dFPSet.contains(c)); + Assert.assertFalse(dFPSet.contains(a)); + + Assert.assertTrue(mfps.checkInvariant()); + } + + private void printBinaryString(final String id, final long a) { +// System.out.println(String.format(id + ":%64s", Long.toBinaryString(a)).replace(' ', '0')); + } } diff --git a/tlatools/test/tlc2/tool/fp/OffHeapIndexerTest.java b/tlatools/test/tlc2/tool/fp/OffHeapIndexerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..900c6fa7179bcaba23fdc390d3e38cebd42e122e --- /dev/null +++ b/tlatools/test/tlc2/tool/fp/OffHeapIndexerTest.java @@ -0,0 +1,86 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.fp; + +import java.rmi.RemoteException; + +import org.junit.Assert; +import org.junit.Test; + +import tlc2.tool.fp.OffHeapDiskFPSet.Indexer; + +public class OffHeapIndexerTest { + + @Test + public void testBitshifting() throws RemoteException { + final int fpBits = 1; + final int bucketCapacity = 1; + final long positions = 128L; + final int logPos = 8; + doTest(fpBits, positions, logPos, new OffHeapDiskFPSet.BitshiftingIndexer(bucketCapacity, positions, fpBits)); + } + + @Test + public void testRescale() throws RemoteException { + final int fpBits = 1; + final int bucketCapacity = 1; + final long positions = 128L; + final int logPos = 8; + doTest(fpBits, positions, logPos, new OffHeapDiskFPSet.Indexer(bucketCapacity, positions, fpBits)); + } + + @Test + public void testBitshifting2() throws RemoteException { + final int fpBits = 2; + final int bucketCapacity = 1; + final long positions = 128L; + final int logPos = 9; + doTest(fpBits, positions, logPos, new OffHeapDiskFPSet.BitshiftingIndexer(bucketCapacity, positions, fpBits)); + } + + @Test + public void testRescale2() throws RemoteException { + final int fpBits = 2; + final int bucketCapacity = 1; + final long positions = 128L; + final int logPos = 9; + doTest(fpBits, positions, logPos, new OffHeapDiskFPSet.Indexer(bucketCapacity, positions, fpBits)); + } + + private void doTest(final int fpBits, final long positions, final int logPos, final Indexer indexer) { + Assert.assertTrue(Double.compare(Math.pow(2, logPos - fpBits), positions) == 0); + + Assert.assertEquals(fpBits, Long.numberOfLeadingZeros((positions << (Long.SIZE - logPos)) - 1)); + + for (long l = 0; l < positions; l++) { + final long fp = l << (Long.SIZE - logPos); + Assert.assertEquals(l, indexer.getLogicalPosition(fp)); + final long fpNext = ((l+1L) << (Long.SIZE - logPos)) - 1; + Assert.assertEquals(l, indexer.getLogicalPosition(fpNext)); + } + Assert.assertEquals(0, indexer.getLogicalPosition(positions << (Long.SIZE - logPos))); + } +} diff --git a/tlatools/test/tlc2/tool/fp/ShortDiskFPSetTest.java b/tlatools/test/tlc2/tool/fp/ShortDiskFPSetTest.java index 8be6387455fe2fbee918542c9906955c3f2a32b3..aab3e2b70ce1fd8904e0722bcf85f7bfc65fe713 100644 --- a/tlatools/test/tlc2/tool/fp/ShortDiskFPSetTest.java +++ b/tlatools/test/tlc2/tool/fp/ShortDiskFPSetTest.java @@ -70,10 +70,10 @@ public class ShortDiskFPSetTest extends AbstractFPSetTest { @Test public void testZeroFP() throws IOException { // skip known failures which aren't likely to be fixed anytime soon - // @see https://bugzilla.tlaplus.net/show_bug.cgi?id=213 + // @see Bug #213 in general/bugzilla/index.html if(!runKnownFailures) { System.out - .println("Skipping test failing due to https://bugzilla.tlaplus.net/show_bug.cgi?id=213"); + .println("Skipping test failing due to Bug #213 in general/bugzilla/index.html"); return; } @@ -89,10 +89,10 @@ public class ShortDiskFPSetTest extends AbstractFPSetTest { @Test public void testMinFP() throws IOException { // skip known failures which aren't likely to be fixed anytime soon - // @see https://bugzilla.tlaplus.net/show_bug.cgi?id=213 + // @see Bug #213 in general/bugzilla/index.html if(!runKnownFailures) { System.out - .println("Skipping test failing due to https://bugzilla.tlaplus.net/show_bug.cgi?id=213"); + .println("Skipping test failing due to Bug #213 in general/bugzilla/index.html"); return; } @@ -309,10 +309,10 @@ public class ShortDiskFPSetTest extends AbstractFPSetTest { @Test public void testMemLookupWithZeros() throws IOException { // skip known failures which aren't likely to be fixed anytime soon - // @see https://bugzilla.tlaplus.net/show_bug.cgi?id=213 + // @see Bug #213 in general/bugzilla/index.html if(!runKnownFailures) { System.out - .println("Skipping test failing due to https://bugzilla.tlaplus.net/show_bug.cgi?id=213"); + .println("Skipping test failing due to Bug #213 in general/bugzilla/index.html"); return; } @@ -330,10 +330,10 @@ public class ShortDiskFPSetTest extends AbstractFPSetTest { @Test public void testMemLookupWithMin() throws IOException { // skip known failures which aren't likely to be fixed anytime soon - // @see https://bugzilla.tlaplus.net/show_bug.cgi?id=213 + // @see Bug #213 in general/bugzilla/index.html if(!runKnownFailures) { System.out - .println("Skipping test failing due to https://bugzilla.tlaplus.net/show_bug.cgi?id=213"); + .println("Skipping test failing due to Bug #213 in general/bugzilla/index.html"); return; } @@ -440,10 +440,10 @@ public class ShortDiskFPSetTest extends AbstractFPSetTest { @Test public void testDiskLookupWithZerosOnPage() throws IOException { // skip known failures which aren't likely to be fixed anytime soon - // @see https://bugzilla.tlaplus.net/show_bug.cgi?id=213 + // @see Bug #213 in general/bugzilla/index.html if(!runKnownFailures) { System.out - .println("Skipping test failing due to https://bugzilla.tlaplus.net/show_bug.cgi?id=213"); + .println("Skipping test failing due to Bug #213 in general/bugzilla/index.html"); return; } testDiskLookupOnPage(0l); @@ -457,10 +457,10 @@ public class ShortDiskFPSetTest extends AbstractFPSetTest { @Test public void testDiskLookupWithLongMinValueOnPage() throws IOException { // skip known failures which aren't likely to be fixed anytime soon - // @see https://bugzilla.tlaplus.net/show_bug.cgi?id=213 + // @see Bug #213 in general/bugzilla/index.html if(!runKnownFailures) { System.out - .println("Skipping test failing due to https://bugzilla.tlaplus.net/show_bug.cgi?id=213"); + .println("Skipping test failing due to Bug #213 in general/bugzilla/index.html"); return; } diff --git a/tlatools/test/tlc2/tool/liveness/April20aTest.java b/tlatools/test/tlc2/tool/liveness/April20aTest.java new file mode 100644 index 0000000000000000000000000000000000000000..213e7537a416e60d284460916c1d69131f3e87f6 --- /dev/null +++ b/tlatools/test/tlc2/tool/liveness/April20aTest.java @@ -0,0 +1,75 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.liveness; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Ignore; +import org.junit.Test; + +import tlc2.output.EC; + +public class April20aTest extends ModelCheckerTestCase { + + public April20aTest() { + super("April20aMC", "symmetry"); + } + + @Test + @Ignore("Ignored for as long as symmetry is incorrectly handled by TLC with liveness checking.") + public void testSpec() { + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertTrue(recorder.recordedWithStringValues(EC.TLC_STATS, "5", "3", "0")); + assertFalse(recorder.recorded(EC.GENERAL)); + + // Assert TLC has found a temporal violation and a counter example + assertTrue(recorder.recorded(EC.TLC_TEMPORAL_PROPERTY_VIOLATED)); + assertTrue(recorder.recorded(EC.TLC_COUNTER_EXAMPLE)); + + // Assert the error trace + assertTrue(recorder.recorded(EC.TLC_STATE_PRINT2)); + final List<String> expectedTrace = new ArrayList<String>(6); + expectedTrace.add("/\\ x = 0\n" + + "/\\ y = 0"); + expectedTrace.add("/\\ x = m2\n" + + "/\\ y = 1"); + expectedTrace.add("/\\ x = m1\n" + + "/\\ y = 2"); + expectedTrace.add("/\\ x = 0\n" + + "/\\ y = 0"); + expectedTrace.add("/\\ x = m1\n" + + "/\\ y = 1"); + expectedTrace.add("/\\ x = m2\n" + + "/\\ y = 2"); + assertTraceWith(recorder.getRecords(EC.TLC_STATE_PRINT2), expectedTrace); + + assertBackToState(1, "<Action line 17, col 12 to line 19, col 20 of module April20a>"); + } +} diff --git a/tlatools/test/tlc2/tool/liveness/April20bTest.java b/tlatools/test/tlc2/tool/liveness/April20bTest.java new file mode 100644 index 0000000000000000000000000000000000000000..ee37bd5a7260643136777f79194eac2463a24d47 --- /dev/null +++ b/tlatools/test/tlc2/tool/liveness/April20bTest.java @@ -0,0 +1,75 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.liveness; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Ignore; +import org.junit.Test; + +import tlc2.output.EC; + +public class April20bTest extends ModelCheckerTestCase { + + public April20bTest() { + super("April20bMC", "symmetry"); + } + + @Test + @Ignore("Ignored for as long as symmetry is incorrectly handled by TLC with liveness checking.") + public void testSpec() { + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertTrue(recorder.recordedWithStringValues(EC.TLC_STATS, "5", "3", "0")); + assertFalse(recorder.recorded(EC.GENERAL)); + + // Assert TLC has found a temporal violation and a counter example + assertTrue(recorder.recorded(EC.TLC_TEMPORAL_PROPERTY_VIOLATED)); + assertTrue(recorder.recorded(EC.TLC_COUNTER_EXAMPLE)); + + // Assert the error trace + assertTrue(recorder.recorded(EC.TLC_STATE_PRINT2)); + final List<String> expectedTrace = new ArrayList<String>(6); + expectedTrace.add("/\\ x = <<>>\n" + + "/\\ y = 0"); + expectedTrace.add("/\\ x = <<m2>>\n" + + "/\\ y = 1"); + expectedTrace.add("/\\ x = <<m2, m1>>\n" + + "/\\ y = 2"); + expectedTrace.add("/\\ x = <<>>\n" + + "/\\ y = 0"); + expectedTrace.add("/\\ x = <<m1>>\n" + + "/\\ y = 1"); + expectedTrace.add("/\\ x = <<m1, m2>>\n" + + "/\\ y = 2"); + assertTraceWith(recorder.getRecords(EC.TLC_STATE_PRINT2), expectedTrace); + + assertBackToState(1, "<Action line 17, col 12 to line 19, col 24 of module April20b>"); + } +} diff --git a/tlatools/test/tlc2/tool/liveness/April21Test.java b/tlatools/test/tlc2/tool/liveness/April21Test.java new file mode 100644 index 0000000000000000000000000000000000000000..a826dde2f5cdd69d514de87bfb6fc65cad857747 --- /dev/null +++ b/tlatools/test/tlc2/tool/liveness/April21Test.java @@ -0,0 +1,64 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.liveness; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Ignore; +import org.junit.Test; + +import tlc2.output.EC; + +public class April21Test extends ModelCheckerTestCase { + + public April21Test() { + super("April21MC", "symmetry"); + } + + @Test + @Ignore("Ignored for as long as symmetry is incorrectly handled by TLC with liveness checking.") + public void testSpec() { + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertFalse(recorder.recorded(EC.GENERAL)); + + // Assert TLC has found a temporal violation and a counter example + assertTrue(recorder.recorded(EC.TLC_TEMPORAL_PROPERTY_VIOLATED)); + assertTrue(recorder.recorded(EC.TLC_COUNTER_EXAMPLE)); + + // Assert the error trace + assertTrue(recorder.recorded(EC.TLC_STATE_PRINT2)); + final List<String> expectedTrace = new ArrayList<String>(2); + expectedTrace.add("x = m1"); + expectedTrace.add("x = m2"); + assertTraceWith(recorder.getRecords(EC.TLC_STATE_PRINT2), expectedTrace); + + assertBackToState(1, "<Action line 10, col 9 to line 10, col 16 of module April21>"); + } +} diff --git a/tlatools/test/tlc2/tool/liveness/April22Test.java b/tlatools/test/tlc2/tool/liveness/April22Test.java new file mode 100644 index 0000000000000000000000000000000000000000..432d9d455b33c0db08d95d5475dfbca6473a32d7 --- /dev/null +++ b/tlatools/test/tlc2/tool/liveness/April22Test.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.liveness; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Ignore; +import org.junit.Test; + +import tlc2.output.EC; + +public class April22Test extends ModelCheckerTestCase { + + public April22Test() { + super("April22MC", "symmetry"); + } + + @Test + @Ignore("Ignored for as long as symmetry is incorrectly handled by TLC with liveness checking.") + public void testSpec() { + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertFalse(recorder.recorded(EC.GENERAL)); + + // Assert TLC has not found a temporal violation + assertFalse(recorder.recorded(EC.TLC_TEMPORAL_PROPERTY_VIOLATED)); + assertFalse(recorder.recorded(EC.TLC_COUNTER_EXAMPLE)); + } +} diff --git a/tlatools/test/tlc2/tool/liveness/April25Test.java b/tlatools/test/tlc2/tool/liveness/April25Test.java new file mode 100644 index 0000000000000000000000000000000000000000..7fa4922943f06b8e49bc304774c5596160fbe70f --- /dev/null +++ b/tlatools/test/tlc2/tool/liveness/April25Test.java @@ -0,0 +1,64 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.liveness; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Ignore; +import org.junit.Test; + +import tlc2.output.EC; + +public class April25Test extends ModelCheckerTestCase { + + public April25Test() { + super("April25MC", "symmetry"); + } + + @Test + @Ignore("Ignored for as long as symmetry is incorrectly handled by TLC with liveness checking.") + public void testSpec() { + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertFalse(recorder.recorded(EC.GENERAL)); + + // Assert TLC has found a temporal violation and a counter example + assertTrue(recorder.recorded(EC.TLC_TEMPORAL_PROPERTY_VIOLATED)); + assertTrue(recorder.recorded(EC.TLC_COUNTER_EXAMPLE)); + + // Assert the error trace + assertTrue(recorder.recorded(EC.TLC_STATE_PRINT2)); + final List<String> expectedTrace = new ArrayList<String>(2); + expectedTrace.add("x = m1"); + expectedTrace.add("x = m2"); + assertTraceWith(recorder.getRecords(EC.TLC_STATE_PRINT2), expectedTrace); + + assertBackToState(1, "<Action line 10, col 9 to line 10, col 16 of module April25>"); + } +} diff --git a/tlatools/test/tlc2/tool/liveness/April29Test.java b/tlatools/test/tlc2/tool/liveness/April29Test.java new file mode 100644 index 0000000000000000000000000000000000000000..1d6e78a61d5652bf06b57ad99bafaa0725796537 --- /dev/null +++ b/tlatools/test/tlc2/tool/liveness/April29Test.java @@ -0,0 +1,119 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.liveness; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import org.junit.Ignore; +import org.junit.Test; + +import tlc2.TLC; +import tlc2.output.EC; +import tlc2.tool.AbstractChecker; +import tlc2.tool.liveness.GraphNode.Transition; +import tlc2.util.BitVector; +import tlc2.util.LongVec; + +/** + * April29 and April29d exemplify how two different specifications have isomorph + * state graphs under symmetry. Without symmetry, April29dTest does *not* + * violate its liveness property. Under symmetry, TLC incorrectly finds a + * violation and produces a bogus (identical to April29Test) counterexample. + */ +public class April29Test extends ModelCheckerTestCase { + + public April29Test() { + super("April29MC", "symmetry"); + } + + @Test + @Ignore("Ignored for as long as symmetry is incorrectly handled by TLC with liveness checking.") + public void testSpec() throws IOException { + // Assert TLC has found a temporal violation and a counter example + assertTrue(recorder.recorded(EC.TLC_TEMPORAL_PROPERTY_VIOLATED)); + assertTrue(recorder.recorded(EC.TLC_COUNTER_EXAMPLE)); + + // Assert the error trace + assertTrue(recorder.recorded(EC.TLC_STATE_PRINT2)); + final List<String> expectedTrace = new ArrayList<String>(2); + expectedTrace.add("/\\ x = a\n/\\ y = 0"); + expectedTrace.add("/\\ x = a\n/\\ y = 1"); + assertTraceWith(recorder.getRecords(EC.TLC_STATE_PRINT2), expectedTrace); + + assertStuttering(3); + + // Verify the nodes and arcs in the behavior graph in terms of nodes and arcs. + final ILiveCheck liveCheck = (ILiveCheck) getField(AbstractChecker.class, "liveCheck", + getField(TLC.class, "instance", tlc)); + assertEquals(1, liveCheck.getNumChecker()); + + final ILiveChecker checker = liveCheck.getChecker(0); + final DiskGraph graph = (DiskGraph) checker.getDiskGraph(); + graph.makeNodePtrTbl(); + assertEquals(2, graph.size()); // two nodes + + final LongVec initNodes = graph.getInitNodes(); + assertEquals(2, initNodes.size()); // <<fp,tidx>>, thus a single init state + + final int slen = checker.getSolution().getCheckState().length; + assertEquals(0, slen); + final int alen = checker.getSolution().getCheckAction().length; + assertEquals(3, alen); + + final GraphNode init = graph.getNode(initNodes.elementAt(0)); + Set<Transition> transitions = init.getTransition(slen, alen); + assertEquals(2, transitions.size()); // One self-loop and one successor + + // Remove self loop from init's transitions. The remaining transitions are + // the true successors (here just a single). + final List<Transition> outs = new ArrayList<Transition>(); + for (Transition t : transitions) { + if (t.getFP() != init.stateFP) { + outs.add(t); + } + } + assertEquals(1, outs.size()); + + final GraphNode successor = graph.getNode(outs.get(0).getFP()); + transitions = successor.getTransition(slen, alen); + assertEquals(1, transitions.size()); + + // Verify both outgoing transitions are self loops with the expected + // action predicates. transitions is a Set and thus adding equal + // instance does not increase the set's size. + BitVector bv = new BitVector(alen + slen); + bv.set(0); + bv.set(2); + transitions.add(new Transition(successor.stateFP, -1, bv)); + assertEquals(1, transitions.size()); + } +} diff --git a/tlatools/test/tlc2/tool/liveness/April29dTest.java b/tlatools/test/tlc2/tool/liveness/April29dTest.java new file mode 100644 index 0000000000000000000000000000000000000000..122c49f550203ec5dae68340add6a583aeeb454a --- /dev/null +++ b/tlatools/test/tlc2/tool/liveness/April29dTest.java @@ -0,0 +1,114 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.liveness; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import org.junit.Ignore; +import org.junit.Test; + +import tlc2.TLC; +import tlc2.output.EC; +import tlc2.tool.AbstractChecker; +import tlc2.tool.liveness.GraphNode.Transition; +import tlc2.util.BitVector; +import tlc2.util.LongVec; + +/** + * @see April29Test + */ +public class April29dTest extends ModelCheckerTestCase { + + public April29dTest() { + super("April29dMC", "symmetry"); + } + + @Test + @Ignore("Ignored for as long as symmetry is incorrectly handled by TLC with liveness checking.") + public void testSpec() throws IOException { + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertFalse(recorder.recorded(EC.GENERAL)); + + // Verify the nodes and arcs in the behavior graph in terms of nodes and arcs. + final ILiveCheck liveCheck = (ILiveCheck) getField(AbstractChecker.class, "liveCheck", + getField(TLC.class, "instance", tlc)); + assertEquals(1, liveCheck.getNumChecker()); + + final ILiveChecker checker = liveCheck.getChecker(0); + final DiskGraph graph = (DiskGraph) checker.getDiskGraph(); + graph.makeNodePtrTbl(); + assertEquals(2, graph.size()); // two nodes + + final LongVec initNodes = graph.getInitNodes(); + assertEquals(2, initNodes.size()); // <<fp,tidx>>, thus a single init state + + final int slen = checker.getSolution().getCheckState().length; + assertEquals(0, slen); + final int alen = checker.getSolution().getCheckAction().length; + assertEquals(3, alen); + + final GraphNode init = graph.getNode(initNodes.elementAt(0)); + Set<Transition> transitions = init.getTransition(slen, alen); + assertEquals(2, transitions.size()); // One self-loop and one successor + + // Remove self loop from init's transitions. The remaining transitions are + // the true successors (here just a single). + final List<Transition> outs = new ArrayList<Transition>(); + for (Transition t : transitions) { + if (t.getFP() != init.stateFP) { + outs.add(t); + } + } + assertEquals(1, outs.size()); + + final GraphNode successor = graph.getNode(outs.get(0).getFP()); + transitions = successor.getTransition(slen, alen); + assertEquals(2, transitions.size()); + + // Verify both outgoing transitions are self loops with the expected + // action predicates. transitions is a Set and thus adding equal + // instance does not increase the set's size. + BitVector bv = new BitVector(alen + slen); + bv.set(0); + bv.set(2); + transitions.add(new Transition(successor.stateFP, -1, bv)); + bv = new BitVector(alen + slen); + bv.set(2); + transitions.add(new Transition(successor.stateFP, -1, bv)); + assertEquals(2, transitions.size()); + + // Assert TLC has found a temporal violation and a counter example + assertFalse(recorder.recorded(EC.TLC_TEMPORAL_PROPERTY_VIOLATED)); + assertFalse(recorder.recorded(EC.TLC_COUNTER_EXAMPLE)); + } +} diff --git a/tlatools/test/tlc2/tool/liveness/CodePlexBug08EWD840FL2FromCheckpointTest.java b/tlatools/test/tlc2/tool/liveness/CodePlexBug08EWD840FL2FromCheckpointTest.java new file mode 100644 index 0000000000000000000000000000000000000000..fcc2126e15b5a6dba3dd0d191db8b76e97c389a3 --- /dev/null +++ b/tlatools/test/tlc2/tool/liveness/CodePlexBug08EWD840FL2FromCheckpointTest.java @@ -0,0 +1,155 @@ +/******************************************************************************* + * Copyright (c) 2015 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package tlc2.tool.liveness; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; + +import org.junit.Test; + +import tlc2.output.EC; + +/** + * see http://tlaplus.codeplex.com/workitem/8 + */ +public class CodePlexBug08EWD840FL2FromCheckpointTest extends ModelCheckerTestCase { + + public CodePlexBug08EWD840FL2FromCheckpointTest() { + super("EWD840MC2", "CodePlexBug08", new String[] {"-recover", BASE_DIR + TEST_MODEL + "CodePlexBug08" + File.separator + "checkpoint"}); + } + + + @Override + public void setUp() { + try { + String prefix = BASE_DIR + TEST_MODEL + "CodePlexBug08" + File.separator; + ZipFile zipFile = new ZipFile(prefix + "checkpoint.zip"); + Enumeration<?> enu = zipFile.entries(); + while (enu.hasMoreElements()) { + ZipEntry zipEntry = (ZipEntry) enu.nextElement(); + + File file = new File(prefix + zipEntry.getName()); + if (zipEntry.getName().endsWith("/")) { + file.mkdirs(); + continue; + } + + File parent = file.getParentFile(); + if (parent != null) { + parent.mkdirs(); + } + + InputStream is = zipFile.getInputStream(zipEntry); + FileOutputStream fos = new FileOutputStream(file); + byte[] bytes = new byte[1024]; + int length; + while ((length = is.read(bytes)) >= 0) { + fos.write(bytes, 0, length); + } + is.close(); + fos.close(); + + } + zipFile.close(); + } catch (IOException e) { + e.printStackTrace(); + } + super.setUp(); + } + + @Test + public void testSpec() { + // ModelChecker has finished and generated the expected amount of states + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertTrue(recorder.recordedWithStringValues(EC.TLC_STATS, "4938", "1566","0")); + assertFalse(recorder.recorded(EC.GENERAL)); + + // Assert it has found the temporal violation and also a counter example + assertTrue(recorder.recorded(EC.TLC_TEMPORAL_PROPERTY_VIOLATED)); + assertTrue(recorder.recorded(EC.TLC_COUNTER_EXAMPLE)); + + assertNodeAndPtrSizes(54037212L, 831296L); + + // Assert the error trace + assertTrue(recorder.recorded(EC.TLC_STATE_PRINT2)); + final List<String> expectedTrace = new ArrayList<String>(); + expectedTrace.add("/\\ tpos = 0\n" + + "/\\ active = (0 :> FALSE @@ 1 :> FALSE @@ 2 :> FALSE @@ 3 :> TRUE)\n" + + "/\\ tcolor = \"black\"\n" + + "/\\ color = (0 :> \"white\" @@ 1 :> \"white\" @@ 2 :> \"white\" @@ 3 :> \"white\")"); + expectedTrace.add("/\\ tpos = 3\n" + + "/\\ active = (0 :> FALSE @@ 1 :> FALSE @@ 2 :> FALSE @@ 3 :> TRUE)\n" + + "/\\ tcolor = \"white\"\n" + + "/\\ color = (0 :> \"white\" @@ 1 :> \"white\" @@ 2 :> \"white\" @@ 3 :> \"white\")"); + expectedTrace.add("/\\ tpos = 3\n" + + "/\\ active = (0 :> FALSE @@ 1 :> FALSE @@ 2 :> TRUE @@ 3 :> TRUE)\n" + + "/\\ tcolor = \"white\"\n" + + "/\\ color = (0 :> \"white\" @@ 1 :> \"white\" @@ 2 :> \"white\" @@ 3 :> \"white\")"); + expectedTrace.add("/\\ tpos = 3\n" + + "/\\ active = (0 :> TRUE @@ 1 :> FALSE @@ 2 :> TRUE @@ 3 :> TRUE)\n" + + "/\\ tcolor = \"white\"\n" + + "/\\ color = (0 :> \"white\" @@ 1 :> \"white\" @@ 2 :> \"white\" @@ 3 :> \"white\")"); + expectedTrace.add("/\\ tpos = 3\n" + + "/\\ active = (0 :> TRUE @@ 1 :> FALSE @@ 2 :> TRUE @@ 3 :> FALSE)\n" + + "/\\ tcolor = \"white\"\n" + + "/\\ color = (0 :> \"white\" @@ 1 :> \"white\" @@ 2 :> \"white\" @@ 3 :> \"white\")"); + expectedTrace.add("/\\ tpos = 3\n" + + "/\\ active = (0 :> FALSE @@ 1 :> FALSE @@ 2 :> TRUE @@ 3 :> FALSE)\n" + + "/\\ tcolor = \"white\"\n" + + "/\\ color = (0 :> \"white\" @@ 1 :> \"white\" @@ 2 :> \"white\" @@ 3 :> \"white\")"); + expectedTrace.add("/\\ tpos = 2\n" + + "/\\ active = (0 :> FALSE @@ 1 :> FALSE @@ 2 :> TRUE @@ 3 :> FALSE)\n" + + "/\\ tcolor = \"white\"\n" + + "/\\ color = (0 :> \"white\" @@ 1 :> \"white\" @@ 2 :> \"white\" @@ 3 :> \"white\")"); + expectedTrace.add("/\\ tpos = 2\n" + + "/\\ active = (0 :> FALSE @@ 1 :> FALSE @@ 2 :> TRUE @@ 3 :> TRUE)\n" + + "/\\ tcolor = \"white\"\n" + + "/\\ color = (0 :> \"white\" @@ 1 :> \"white\" @@ 2 :> \"black\" @@ 3 :> \"white\")"); + expectedTrace.add("/\\ tpos = 1\n" + + "/\\ active = (0 :> FALSE @@ 1 :> FALSE @@ 2 :> TRUE @@ 3 :> TRUE)\n" + + "/\\ tcolor = \"black\"\n" + + "/\\ color = (0 :> \"white\" @@ 1 :> \"white\" @@ 2 :> \"white\" @@ 3 :> \"white\")"); + expectedTrace.add("/\\ tpos = 1\n" + + "/\\ active = (0 :> FALSE @@ 1 :> FALSE @@ 2 :> FALSE @@ 3 :> TRUE)\n" + + "/\\ tcolor = \"black\"\n" + + "/\\ color = (0 :> \"white\" @@ 1 :> \"white\" @@ 2 :> \"white\" @@ 3 :> \"white\")"); + assertTraceWith(recorder.getRecords(EC.TLC_STATE_PRINT2), expectedTrace); + + // last state points back to state 1 + assertBackToState(1); + } +} diff --git a/tlatools/test/tlc2/tool/liveness/DiskGraphTest.java b/tlatools/test/tlc2/tool/liveness/DiskGraphTest.java index 075943ff473499d5e7a7c68ed6b3259c11cd4c53..037ed6d20c98e9874d6ed2ce6f3e692aaa94e1f1 100644 --- a/tlatools/test/tlc2/tool/liveness/DiskGraphTest.java +++ b/tlatools/test/tlc2/tool/liveness/DiskGraphTest.java @@ -126,7 +126,7 @@ public class DiskGraphTest { * * The specialty here is that there are *two* init nodes and one of them has *no* successors. * - * @see https://bugzilla.tlaplus.net/show_bug.cgi?id=293 + * @see Bug #293 in general/bugzilla/index.html */ @Test public void testPathWithTwoInitNodes() throws IOException { diff --git a/tlatools/test/tlc2/tool/liveness/May09Test.java b/tlatools/test/tlc2/tool/liveness/May09Test.java new file mode 100644 index 0000000000000000000000000000000000000000..1534c255879b67f6e80ceb80d5b48ca6aa1085dd --- /dev/null +++ b/tlatools/test/tlc2/tool/liveness/May09Test.java @@ -0,0 +1,89 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.liveness; + +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.junit.Ignore; +import org.junit.Test; + +import tlc2.output.EC; + +/** + * May09Test and its counterpart May09dTest prove that the algorithm with + * redundant arcs with different action predicate labels in the liveness graph + * does not work even when liveness properties containing conjuncts over the + * elements of the symmetry set are rewritten to a disjunct and out-arcs are + * counted (compare to {@link April29Test} and {@link April29dTest}). + * + * <pre> + * []<>P(a) /\ []<>P(b) rewritten to: []<>P(a) \/ []<>P(b) + * </pre> + * + * (where P is either a State or Action predicate and a,b are all elements of + * the symmetry set) + * + * Trying to deduce []<>P(b) from the occurrence of []<>P(a) (or vice versa) + * fails because the two specs (Spec & SpecD) under symmetry produce the same + * state graph. Without symmetry, Spec does not satisfy []<>P(a) /\ []<>P(b), + * only SpecD does. Under symmetry, a version of TLC that does not rewrite the + * liveness property finds the bogus counterexample for SpecD. + * + * A yet unexplored research hypothesis is, that labeling all arcs with the + * permutation that the to-state represents in the liveness graph. This information + * would allow us to distinguish the graphs of May09 and May09d. + */ +public class May09Test extends ModelCheckerTestCase { + + public May09Test() { + super("May09MC", "symmetry"); + } + + @Test + @Ignore("Ignored for as long as symmetry is incorrectly handled by TLC with liveness checking.") + public void testSpec() throws IOException { + // Assert TLC has found a temporal violation and a counter example + assertTrue(recorder.recorded(EC.TLC_TEMPORAL_PROPERTY_VIOLATED)); + assertTrue(recorder.recorded(EC.TLC_COUNTER_EXAMPLE)); + + // Assert the error trace + assertTrue(recorder.recorded(EC.TLC_STATE_PRINT2)); + final List<String> expectedTrace = new ArrayList<String>(2); + expectedTrace.add("/\\ x = a\n/\\ y = 0"); + expectedTrace.add("/\\ x = a\n/\\ y = 1"); + expectedTrace.add("/\\ x = a\n/\\ y = 2"); + expectedTrace.add("/\\ x = a\n/\\ y = 3"); + expectedTrace.add("/\\ x = a\n/\\ y = 4"); + expectedTrace.add("/\\ x = a\n/\\ y = 5"); + assertTraceWith(recorder.getRecords(EC.TLC_STATE_PRINT2), expectedTrace); + + assertBackToState(2, "<Action line 19, col 10 to line 21, col 18 of module May09>"); + } +} diff --git a/tlatools/test/tlc2/tool/liveness/May09dTest.java b/tlatools/test/tlc2/tool/liveness/May09dTest.java new file mode 100644 index 0000000000000000000000000000000000000000..6150fe234bf68ecb59e306546747518ac5fbfb5a --- /dev/null +++ b/tlatools/test/tlc2/tool/liveness/May09dTest.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.liveness; + +import static org.junit.Assert.assertFalse; + +import java.io.IOException; + +import org.junit.Ignore; +import org.junit.Test; + +import tlc2.output.EC; + +/** + * see {@link May09dTest}May09Test + */ +public class May09dTest extends ModelCheckerTestCase { + + public May09dTest() { + super("May09dMC", "symmetry"); + } + + @Test + @Ignore("Ignored for as long as symmetry is incorrectly handled by TLC with liveness checking.") + public void testSpec() throws IOException { + assertFalse(recorder.recorded(EC.TLC_TEMPORAL_PROPERTY_VIOLATED)); + assertFalse(recorder.recorded(EC.TLC_COUNTER_EXAMPLE)); + } +} diff --git a/tlatools/test/tlc2/tool/liveness/ModelCheckerTestCase.java b/tlatools/test/tlc2/tool/liveness/ModelCheckerTestCase.java index f2c1beaa873b916e9068e97d88371a2ac18dca22..8ff6006c787a2bcdff6f128cabdf447cd36a1686 100644 --- a/tlatools/test/tlc2/tool/liveness/ModelCheckerTestCase.java +++ b/tlatools/test/tlc2/tool/liveness/ModelCheckerTestCase.java @@ -25,39 +25,34 @@ ******************************************************************************/ package tlc2.tool.liveness; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import java.io.File; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.List; + import org.junit.Before; + import tlc2.TLC; import tlc2.TLCGlobals; import tlc2.TestMPRecorder; -import tlc2.output.EC; import tlc2.output.MP; -import tlc2.output.MPRecorder; -import tlc2.tool.TLCStateInfo; -import tlc2.util.BitVector; -import tlc2.util.BufferedRandomAccessFile; +import tlc2.tool.CommonTestCase; +import tlc2.tool.ModelChecker; +import util.FileUtil; +import util.SimpleFilenameToStream; import util.ToolIO; -public abstract class ModelCheckerTestCase { - - protected static final String BASE_DIR = System.getProperty("basedir", ""); - protected static final String TEST_MODEL = "test-model" + File.separator; +public abstract class ModelCheckerTestCase extends CommonTestCase { protected String path = ""; - protected final String spec; - protected final TestMPRecorder recorder = new TestMPRecorder(); + protected String spec; protected String[] extraArguments = new String[0]; - + protected TLC tlc; public ModelCheckerTestCase(String spec) { + super(new TestMPRecorder()); this.spec = spec; } @@ -76,6 +71,11 @@ public abstract class ModelCheckerTestCase { */ @Before public void setUp() { + // some tests might want to access the liveness graph after model + // checking completed. Thus, prevent the liveness graph from being + // closed too earlier. + System.setProperty(ModelChecker.class.getName() + ".vetoCleanup", "true"); + try { // TEST_MODEL is where TLC should look for user defined .tla files ToolIO.setUserDir(BASE_DIR + TEST_MODEL + path); @@ -89,7 +89,8 @@ public abstract class ModelCheckerTestCase { // generated. TLCGlobals.livenessThreshold = Double.MAX_VALUE; - final TLC tlc = new TLC(); + tlc = new TLC(); + tlc.setResolver(new SimpleFilenameToStream()); // * We want *no* deadlock checking to find the violation of the // temporal formula // * We use (unless overridden) a single worker to simplify @@ -101,7 +102,9 @@ public abstract class ModelCheckerTestCase { // *Don't* check for deadlocks. All tests are interested in liveness // checks which are shielded away by deadlock checking. TLC finds a // deadlock (if it exists) before it finds most liveness violations. - args.add("-deadlock"); + if (!checkDeadLock()) { + args.add("-deadlock"); + } args.add("-workers"); args.add(Integer.toString(getNumberOfThreads())); @@ -110,6 +113,11 @@ public abstract class ModelCheckerTestCase { // of no use anyway. args.add("-checkpoint"); args.add("0"); + + // Always print the state graph in dot file notation. + args.add("-dump"); + args.add("dot"); + args.add("${metadir}" + FileUtil.separator + getClass().getCanonicalName() + ".dot"); args.addAll(Arrays.asList(extraArguments)); @@ -125,118 +133,38 @@ public abstract class ModelCheckerTestCase { } /** - * @return The number of worker threads TLC should use. - */ - protected int getNumberOfThreads() { - return 1; - } - - /** - * Asserts that the actual trace and the expected error trace are equal. - * - * @param actual - * The actual trace as recorded by {@link MPRecorder}. - * @param expectedTrace - * The expected trace. - */ - protected void assertTraceWith(final List<Object> actual, final List<String> expectedTrace) { - assertEquals(expectedTrace.size(), actual.size()); - for (int i = 0; i < expectedTrace.size(); i++) { - final Object[] objs = (Object[]) actual.get(i); - final TLCStateInfo stateInfo = (TLCStateInfo) objs[0]; - final String info = (String) stateInfo.info; - if (i == 0) { - // The first state has to be an initial state. - "<Initial predicate>".equals(info); - } else { - // ... all others are reachable via an action. - info.startsWith("<Action"); - } - assertEquals(expectedTrace.get(i), - stateInfo.toString().trim()); // trimmed to remove any newlines or whitespace - assertEquals(i+1, objs[1]); - } - } - - /** - * Asserts that the error trace ends in stuttering at the given number. - * - * @param stateNum - * The number of the stuttering state - */ - protected void assertStuttering(int stateNum) { - assertTrue(recorder.recorded(EC.TLC_STATE_PRINT3)); - List<Object> stutter = recorder.getRecords(EC.TLC_STATE_PRINT3); - assertTrue(stutter.size() > 0); - Object[] object = (Object[]) stutter.get(0); - assertEquals(stateNum, object[1]); - } - - /** - * Asserts that the error trace loops back to the state with the given - * number. - * - * @param i The loop back state number. + * @return True if TLC is to be called with "-deadlock". */ - protected void assertBackToState(int stateNum) { - assertTrue(recorder.recorded(EC.TLC_BACK_TO_STATE)); - List<Object> loop = recorder.getRecords(EC.TLC_BACK_TO_STATE); - assertTrue(loop.size() > 0); - Object[] object = (Object[]) loop.get(0); - assertEquals(Integer.toString(stateNum), object[0]); + protected boolean checkDeadLock() { + return false; } /** - * Asserts that the error trace loops back to the state with the given - * number. - * - * @param i The loop back state number. - * @param action The action label associated with the loop back marker + * @return The number of worker threads TLC should use. */ - protected void assertBackToState(int stateNum, final String action) { - assertTrue(recorder.recorded(EC.TLC_BACK_TO_STATE)); - List<Object> loop = recorder.getRecords(EC.TLC_BACK_TO_STATE); - assertTrue(loop.size() > 0); - Object[] object = (Object[]) loop.get(0); - assertTrue(object.length > 1); - assertEquals(Integer.toString(stateNum), object[0]); - assertEquals(action, object[1]); + protected int getNumberOfThreads() { + return 1; } - + /** - * Check the file size of the AbstractDiskGraph files to assert that the - * expected amount of ptrs and nodes (outgoing arcs) have been written to - * disk. - * <p> - * CAUTION: The order in which the transitions are inserted into the - * {@link GraphNode} determines the size of the {@link BitVector}. I.e. if - * the truth values of the first N nodes inserted are true, and the - * remainder is false, the BitVector's size will correspond to N. However, - * if the first N truth values are false, followed by M trues, the - * BitVector's size is N + M. - * <p> - * See {@link GraphNode}'s constructor: it initializes {@link BitVector} - * with capacity zero and subsequently grows BV when bits are set to true. - * <p> - * - * @see BitVector#read(BufferedRandomAccessFile) - * @see BitVector#write(BufferedRandomAccessFile) - * @see GraphNode#read(BufferedRandomAccessFile) - * @see GraphNode#write(BufferedRandomAccessFile) - * - * @param nodesSize - * @param ptrsSize + * E.g. + * ILiveCheck liveCheck = (ILiveCheck) getField(AbstractChecker.class, "liveCheck", + * getField(TLC.class, "instance", tlc)); */ - protected void assertNodeAndPtrSizes(final long nodesSize, final long ptrsSize) { - final String metadir = TLCGlobals.mainChecker.metadir; - assertNotNull(metadir); - - final File nodes = new File(metadir + File.separator + "nodes_0"); - assertTrue(nodes.exists()); - assertEquals(nodesSize, nodes.length()); - - final File ptrs = new File(metadir + File.separator + "ptrs_0"); - assertTrue(ptrs.exists()); - assertEquals(ptrsSize, ptrs.length()); + protected Object getField(Class<?> targetClass, String fieldName, Object instance) { + try { + Field field = targetClass.getDeclaredField(fieldName); + field.setAccessible(true); + return field.get(instance); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } catch (SecurityException e) { + e.printStackTrace(); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return null; } } diff --git a/tlatools/test/tlc2/tool/liveness/NQTest.java b/tlatools/test/tlc2/tool/liveness/NQTest.java index 3aedf8cf1d6f973e685bc3f5dd830518ea327183..be01acc7c7503af7791444c9ec0c46702c199911 100644 --- a/tlatools/test/tlc2/tool/liveness/NQTest.java +++ b/tlatools/test/tlc2/tool/liveness/NQTest.java @@ -42,6 +42,16 @@ public class NQTest extends ModelCheckerTestCase { super("MC", "symmetry" + File.separator + "NQ"); } + /* + * WRT @Ignore: + * Without symmetry defined, TLC finds no counterexample. With symmetry, + * which is the case for this test, TLC incorrectly finds a counterexample + * which it subsequently fails to recreate. In the end, this causes TLC to + * claim that the spec is not symmetric. + * + * So why does TLC think the PossibleErrorModel is P-Satisfiable and + * consequently tries to produce a counterexample? + */ @Test @Ignore("Ignored for as long as symmetry is incorrectly handled by TLC with liveness checking.") public void testSpec() { diff --git a/tlatools/test/tlc2/tool/liveness/SymmetryTableauLiveCheckTest.java b/tlatools/test/tlc2/tool/liveness/SymmetryTableauLiveCheckTest.java index 662f1a3a3da9f1d3d78c65e6bc35af48eac26cb5..779162afa2867099dfa82ac1b36ec1194955c1e6 100644 --- a/tlatools/test/tlc2/tool/liveness/SymmetryTableauLiveCheckTest.java +++ b/tlatools/test/tlc2/tool/liveness/SymmetryTableauLiveCheckTest.java @@ -132,7 +132,7 @@ public class SymmetryTableauLiveCheckTest { EasyMock.expect(node0.getIndex()).andReturn(0).anyTimes(); EasyMock.replay(node0); - final TBGraph tbGraph = new TBGraph(null); + final TBGraph tbGraph = new TBGraph(); tbGraph.addElement(node0); tbGraph.addElement(node1); tbGraph.setInitCnt(1); @@ -149,7 +149,7 @@ public class SymmetryTableauLiveCheckTest { EasyMock.replay(oos); return new LiveCheck(EasyMock.createNiceMock(Tool.class), new Action[0], - new OrderOfSolution[] { oos }, System.getProperty("java.io.tmpdir"), new DummyBucketStatistics()); + new OrderOfSolution[] { oos }, System.getProperty("java.io.tmpdir"), new DummyBucketStatistics(), null); } @Test @@ -333,7 +333,7 @@ public class SymmetryTableauLiveCheckTest { EasyMock.expect(node0.nextAt(1)).andReturn(node1).anyTimes(); EasyMock.replay(node0); - final TBGraph tbGraph = new TBGraph(null); + final TBGraph tbGraph = new TBGraph(); tbGraph.addElement(node0); tbGraph.addElement(node1); tbGraph.addElement(node2); @@ -368,6 +368,6 @@ public class SymmetryTableauLiveCheckTest { EasyMock.expect(tool.isInActions((TLCState) EasyMock.anyObject(), (TLCState) EasyMock.anyObject())).andReturn(true).anyTimes(); EasyMock.replay(tool); return new LiveCheck(tool, new Action[1], - new OrderOfSolution[] { oos }, "states", new DummyBucketStatistics()); + new OrderOfSolution[] { oos }, "states", new DummyBucketStatistics(), null); } } diff --git a/tlatools/test/tlc2/tool/liveness/TableauDiskGraphTest.java b/tlatools/test/tlc2/tool/liveness/TableauDiskGraphTest.java index d2aba42ca272e23affbc0028f387d5d4f8079cb2..2ea24ef276c1aea4ce7465a16c5119b884c66b2e 100644 --- a/tlatools/test/tlc2/tool/liveness/TableauDiskGraphTest.java +++ b/tlatools/test/tlc2/tool/liveness/TableauDiskGraphTest.java @@ -340,7 +340,7 @@ public class TableauDiskGraphTest extends DiskGraphTest { * * The specialty here is that there are *two* init nodes and one them has *no* successors. * - * @see https://bugzilla.tlaplus.net/show_bug.cgi?id=293 + * @see Bug #293 in general/bugzilla/index.html */ @Test public void testPathWithTwoInitNodesWithTableau() throws IOException { diff --git a/tlatools/test/tlc2/tool/liveness/TwoPhaseCommitTest.java b/tlatools/test/tlc2/tool/liveness/TwoPhaseCommitTest.java new file mode 100644 index 0000000000000000000000000000000000000000..0c414d720f5e094cdc40fbcd5303cada7eb57587 --- /dev/null +++ b/tlatools/test/tlc2/tool/liveness/TwoPhaseCommitTest.java @@ -0,0 +1,46 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.liveness; + +import static org.junit.Assert.assertFalse; + +import java.io.File; + +import org.junit.Test; + +import tlc2.output.EC; + +public class TwoPhaseCommitTest extends ModelCheckerTestCase { + + public TwoPhaseCommitTest() { + super("MC", "symmetry" + File.separator + "TwoPhaseCommit"); + } + + @Test + public void testSpec() { + assertFalse(recorder.recorded(EC.GENERAL)); + } +} diff --git a/tlatools/test/tlc2/tool/liveness/simulation/LiveCheckTest.java b/tlatools/test/tlc2/tool/liveness/simulation/LiveCheckTest.java index fb3b64f8848464d17cf607ed1020686bfa8d7837..e4a73d0ad1d1eed2cca4f0a07eb0129ca78bda7b 100644 --- a/tlatools/test/tlc2/tool/liveness/simulation/LiveCheckTest.java +++ b/tlatools/test/tlc2/tool/liveness/simulation/LiveCheckTest.java @@ -106,7 +106,7 @@ public class LiveCheckTest { EasyMock.replay(oos); return new LiveCheck(EasyMock.createNiceMock(Tool.class), new Action[0], - new OrderOfSolution[] { oos }, System.getProperty("java.io.tmpdir"), new DummyBucketStatistics()); + new OrderOfSolution[] { oos }, System.getProperty("java.io.tmpdir"), new DummyBucketStatistics(), null); } private ILiveCheck getLiveCheckWithTableau() throws IOException { @@ -118,7 +118,7 @@ public class LiveCheckTest { EasyMock.expect(node.getIndex()).andReturn(0).anyTimes(); EasyMock.replay(node); - final TBGraph tbGraph = new TBGraph(null); + final TBGraph tbGraph = new TBGraph(); tbGraph.addElement(node); tbGraph.setInitCnt(1); @@ -133,7 +133,7 @@ public class LiveCheckTest { EasyMock.replay(oos); return new LiveCheck(EasyMock.createNiceMock(Tool.class), new Action[0], - new OrderOfSolution[] { oos }, System.getProperty("java.io.tmpdir"), new DummyBucketStatistics()); + new OrderOfSolution[] { oos }, System.getProperty("java.io.tmpdir"), new DummyBucketStatistics(), null); } } diff --git a/tlatools/test/tlc2/tool/suite/ETest1.java b/tlatools/test/tlc2/tool/suite/ETest1.java new file mode 100644 index 0000000000000000000000000000000000000000..0d510851567b9aa9e122586d8cce4ce4deabbf61 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/ETest1.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class ETest1 extends SuiteETestCase { + + @Test + public void testSpec() { + assertTrue(recorder.recorded(EC.GENERAL)); + assertSubstring("*** Errors: 1\n\n" + "line 18, col 12 to line 18, col 17 of module etest1\n\n" + + "The operator Foo requires 1 arguments."); + } +} diff --git a/tlatools/test/tlc2/tool/suite/ETest10.java b/tlatools/test/tlc2/tool/suite/ETest10.java new file mode 100644 index 0000000000000000000000000000000000000000..b7d3798909dbe2d7aadc572f32156e18a20f84fe --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/ETest10.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class ETest10 extends SuiteETestCase { + + @Test + public void testSpec() { + assertTrue(recorder.recordedWithSubStringValue(EC.GENERAL, + "Attempted to check if the value:\n\"a\"\nis an element of Int.")); + } +} diff --git a/tlatools/test/tlc2/tool/suite/ETest11.java b/tlatools/test/tlc2/tool/suite/ETest11.java new file mode 100644 index 0000000000000000000000000000000000000000..de177831ca36d9cc648d62a8560dafce49b8ea55 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/ETest11.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class ETest11 extends SuiteETestCase { + + @Test + public void testSpec() { + assertTrue(recorder.recordedWithSubStringValue(EC.GENERAL, + "Attempted to check if the value:\n1\nis an element of STRING.")); + } +} diff --git a/tlatools/test/tlc2/tool/suite/ETest12.java b/tlatools/test/tlc2/tool/suite/ETest12.java new file mode 100644 index 0000000000000000000000000000000000000000..bdb542361b280dcc9b8760cb557a6a15e3038d18 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/ETest12.java @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class ETest12 extends SuiteETestCase { + + @Test + public void testSpec() { + assertTrue(recorder.toString(), recorder.recordedWithSubStringValue(EC.TLC_ASSUMPTION_EVALUATION_ERROR, + "Attempted to apply the operator overridden by the Java method\n" + + "public static tlc2.value.IntValue tlc2.module.FiniteSets.Cardinality(tlc2.value.Value),\n" + + "but it produced the following error:\n" + + "Overflow when computing the number of elements in:" + + "\n[0..2 -> 1..2000]")); + } +} diff --git a/tlatools/test/tlc2/tool/suite/ETest13.java b/tlatools/test/tlc2/tool/suite/ETest13.java new file mode 100644 index 0000000000000000000000000000000000000000..98db4229e3d3e67ad6b4b03877c1e2f80a52e552 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/ETest13.java @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class ETest13 extends SuiteETestCase { + + @Test + public void testSpec() { + assertTrue(recorder.toString(), recorder.recordedWithSubStringValue(EC.TLC_ASSUMPTION_EVALUATION_ERROR, + "Attempted to apply the operator overridden by the Java method\n" + + "public static tlc2.value.IntValue tlc2.module.FiniteSets.Cardinality(tlc2.value.Value),\n" + + "but it produced the following error:\n" + + "Overflow when computing the number of elements in:" + + "\n[0..2 -> 1..2000]")); + } +} diff --git a/tlatools/test/tlc2/tool/suite/ETest14.java b/tlatools/test/tlc2/tool/suite/ETest14.java new file mode 100644 index 0000000000000000000000000000000000000000..894b16c62e6410f2196894f5c1337c9cf7381ae2 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/ETest14.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class ETest14 extends SuiteETestCase { + + @Test + public void testSpec() { + assertTrue(recorder.toString(), recorder.recordedWithSubStringValue(EC.TLC_ASSUMPTION_EVALUATION_ERROR, + "Attempted to compute the value of an expression of form\nCHOOSE x \\in S: P, but no element of S satisfied P.\nline 5, col 7 to line 5, col 28 of module etest14")); + } +} diff --git a/tlatools/test/tlc2/tool/suite/ETest15.java b/tlatools/test/tlc2/tool/suite/ETest15.java new file mode 100644 index 0000000000000000000000000000000000000000..24f6bb6945937290b938100cb0de7e74a35a7321 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/ETest15.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class ETest15 extends SuiteETestCase { + + @Test + public void testSpec() { + assertTrue(recorder.toString(), recorder.recordedWithSubStringValue(EC.TLC_ASSUMPTION_EVALUATION_ERROR, + "Attempted to compare integer 2 with non-integer:\n<<3>>")); + } +} diff --git a/tlatools/test/tlc2/tool/suite/ETest16.java b/tlatools/test/tlc2/tool/suite/ETest16.java new file mode 100644 index 0000000000000000000000000000000000000000..81b5ffb6789e3ddaa4d8f99bd121bacb2cac040e --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/ETest16.java @@ -0,0 +1,44 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class ETest16 extends SuiteETestCase { + + @Test + public void testSpec() { + assertTrue(recorder.recorded(EC.GENERAL)); + assertSubstring("*** Errors: 2\n\n" + "line 5, col 27 to line 5, col 27 of module etest16\n\n" + + "Non-unique fields in constructor.\n\n\n" + + "line 7, col 27 to line 7, col 27 of module etest16\n\n" + + "Non-unique fields in constructor."); + } +} diff --git a/tlatools/test/tlc2/tool/suite/ETest2.java b/tlatools/test/tlc2/tool/suite/ETest2.java new file mode 100644 index 0000000000000000000000000000000000000000..a560dd836704cdd5ce0c1e31f038a04d8438f506 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/ETest2.java @@ -0,0 +1,43 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class ETest2 extends SuiteETestCase { + + @Test + public void testSpec() { + assertTrue(recorder.recorded(EC.GENERAL)); + assertSubstring("*** Errors: 1\n\n" + + "line 18, col 12 to line 18, col 14 of module etest2\n\n" + + "The operator Foo requires 2 arguments."); + } +} diff --git a/tlatools/test/tlc2/tool/suite/ETest3.java b/tlatools/test/tlc2/tool/suite/ETest3.java new file mode 100644 index 0000000000000000000000000000000000000000..37c802da1f8e0555550bda416f18f804cfb6e8a9 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/ETest3.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class ETest3 extends SuiteETestCase { + + /* (non-Javadoc) + * @see tlc2.tool.liveness.ModelCheckerTestCase#checkDeadLock() + */ + protected boolean checkDeadLock() { + return true; + } + + @Test + public void testSpec() { + assertTrue(recorder.recorded(EC.TLC_DEADLOCK_REACHED)); + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertTrue(recorder.recordedWithStringValues(EC.TLC_STATS, "2", "2", "0")); + assertFalse(recorder.recorded(EC.GENERAL)); + } +} diff --git a/tlatools/test/tlc2/tool/suite/ETest4.java b/tlatools/test/tlc2/tool/suite/ETest4.java new file mode 100644 index 0000000000000000000000000000000000000000..068547335dac9d9a545d3b2d9956ee88fb3f5bbc --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/ETest4.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class ETest4 extends SuiteETestCase { + + @Test + public void testSpec() { + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertTrue(recorder.recordedWithStringValues(EC.TLC_STATS, "0", "0", "0")); + assertTrue(recorder.recordedWithStringValues(EC.TLC_NESTED_EXPRESSION, "0. Line 15, column 12 to line 15, column 22 in etest4\n\n")); + } +} diff --git a/tlatools/test/tlc2/tool/suite/ETest5.java b/tlatools/test/tlc2/tool/suite/ETest5.java new file mode 100644 index 0000000000000000000000000000000000000000..119c466d61bec13ef3926146658bfd8f5ddba63e --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/ETest5.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class ETest5 extends SuiteETestCase { + + @Test + public void testSpec() { + assertTrue(recorder.recorded(EC.GENERAL)); + } +} diff --git a/tlatools/test/tlc2/tool/suite/ETest6.java b/tlatools/test/tlc2/tool/suite/ETest6.java new file mode 100644 index 0000000000000000000000000000000000000000..7404ca4f182ae9f1162cf6c3f2451c6a210bbaff --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/ETest6.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class ETest6 extends SuiteETestCase { + + @Test + public void testSpec() { + assertTrue(recorder.recordedWithSubStringValue(EC.GENERAL, + "In evaluation, the identifier x is either undefined or not an operator.\nline 16, col 23 to line 16, col 23 of module etest6")); + } +} diff --git a/tlatools/test/tlc2/tool/suite/ETest7.java b/tlatools/test/tlc2/tool/suite/ETest7.java new file mode 100644 index 0000000000000000000000000000000000000000..2ae7371cf00dba2e06d1a51fedd5a411788e1bf7 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/ETest7.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class ETest7 extends SuiteETestCase { + + @Test + public void testSpec() { + assertTrue(recorder.recordedWithSubStringValue(EC.GENERAL, + "In evaluation, the identifier x is either undefined or not an operator.\nline 11, col 8 to line 11, col 8 of module etest7")); + } +} diff --git a/tlatools/test/tlc2/tool/suite/ETest8.java b/tlatools/test/tlc2/tool/suite/ETest8.java new file mode 100644 index 0000000000000000000000000000000000000000..2ea0eec705edfcb2a8010adcdc6bbad4512276e6 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/ETest8.java @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class ETest8 extends SuiteETestCase { + + public ETest8() { + super(new String[]{"-simulate"}); + } + + /* (non-Javadoc) + * @see tlc2.tool.liveness.ModelCheckerTestCase#checkDeadLock() + */ + protected boolean checkDeadLock() { + return false; + } + + @Test + public void testSpec() { + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertTrue(recorder.recorded(EC.TLC_STATS_SIMU)); + assertFalse(recorder.recorded(EC.TLC_DEADLOCK_REACHED)); + } +} diff --git a/tlatools/test/tlc2/tool/suite/ETest9.java b/tlatools/test/tlc2/tool/suite/ETest9.java new file mode 100644 index 0000000000000000000000000000000000000000..f37a5702b05d8afa1f6c5685628be5014d69bf5e --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/ETest9.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class ETest9 extends SuiteETestCase { + + @Test + public void testSpec() { + assertTrue(recorder.recordedWithSubStringValue(EC.GENERAL, + "Attempted to check if the value:\n\"a\"\nis an element of Nat.")); + } +} diff --git a/tlatools/test/tlc2/tool/suite/SuiteETestCase.java b/tlatools/test/tlc2/tool/suite/SuiteETestCase.java new file mode 100644 index 0000000000000000000000000000000000000000..de11017f98f1586146b894b9c48f5240824c8841 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/SuiteETestCase.java @@ -0,0 +1,90 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package tlc2.tool.suite; +import static org.junit.Assert.fail; +import java.io.PipedOutputStream; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.List; + +import tlc2.tool.liveness.ModelCheckerTestCase; +import util.ToolIO; + +public abstract class SuiteETestCase extends ModelCheckerTestCase { + + private TestPrintStream testPrintStream = new TestPrintStream(); + + public SuiteETestCase() { + super("setBySetUp", "suite"); + } + + public SuiteETestCase(String[] params) { + super("setBySetUp", "suite", params); + } + + /* (non-Javadoc) + * @see tlc2.tool.liveness.ModelCheckerTestCase#setUp() + */ + public void setUp() { + // Set spec name to the name of the unit tests + spec = getClass().getSimpleName().toLowerCase(); + + // Intercept tool out to check SANY parser errors + ToolIO.out = testPrintStream; + ToolIO.err = testPrintStream; + + super.setUp(); + } + + + protected void assertSubstring(String substring) { + for (String string : testPrintStream.strings) { + if (string.contains(substring)) { + return; + } + } + fail("Substring not found"); + } + + private static class TestPrintStream extends PrintStream { + + private final List<String> strings = new ArrayList<String>(); + + public TestPrintStream() { + super(new PipedOutputStream()); + } + + /* (non-Javadoc) + * @see java.io.PrintStream#println(java.lang.String) + */ + public void println(String x) { + strings.add(x); + System.out.println(x); + super.println(x); + } + } +} diff --git a/tlatools/test/tlc2/tool/suite/SuiteTestCase.java b/tlatools/test/tlc2/tool/suite/SuiteTestCase.java new file mode 100644 index 0000000000000000000000000000000000000000..049a57ba6b2398394eb90be15750c8710f5f3c30 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/SuiteTestCase.java @@ -0,0 +1,72 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package tlc2.tool.suite; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; +import tlc2.tool.liveness.ModelCheckerTestCase; + +public abstract class SuiteTestCase extends ModelCheckerTestCase { + + private String initStates = "1"; + private String leftStates = "0"; + private String distinctStates = "1"; + private String stateGenerated = "2"; + + public SuiteTestCase() { + super("setBySetUp", "suite"); + } + + public SuiteTestCase(String stateGenerated, String distinctStates, String leftStates, String initStates) { + this(); + this.stateGenerated = stateGenerated; + this.distinctStates = distinctStates; + this.leftStates = leftStates; + this.initStates = initStates; + } + + /* (non-Javadoc) + * @see tlc2.tool.liveness.ModelCheckerTestCase#setUp() + */ + public void setUp() { + // Set spec name to the name of the unit tests + spec = getClass().getSimpleName().toLowerCase(); + + super.setUp(); + } + + @Test + public void testSpec() { + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertTrue(recorder.recordedWithStringValues(EC.TLC_STATS, stateGenerated, distinctStates, leftStates)); + assertTrue(recorder.recordedWithStringValue(EC.TLC_INIT_GENERATED1, initStates)); + assertFalse(recorder.recorded(EC.GENERAL)); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test1.java b/tlatools/test/tlc2/tool/suite/Test1.java new file mode 100644 index 0000000000000000000000000000000000000000..9e825ddc217a79a8d06d4cfbfa48bcf30773b436 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test1.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test1 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test10.java b/tlatools/test/tlc2/tool/suite/Test10.java new file mode 100644 index 0000000000000000000000000000000000000000..a384f5ea6b9d1b9eb41d029c56eadc294132fec1 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test10.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test10 extends SuiteTestCase { +} diff --git a/tlatools/test/tlc2/tool/suite/Test11.java b/tlatools/test/tlc2/tool/suite/Test11.java new file mode 100644 index 0000000000000000000000000000000000000000..0b2eee23bdf974c42875609fe8d1bb9611a6e6e3 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test11.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test11 extends SuiteTestCase { +} diff --git a/tlatools/test/tlc2/tool/suite/Test12.java b/tlatools/test/tlc2/tool/suite/Test12.java new file mode 100644 index 0000000000000000000000000000000000000000..21b4ede643f1de455a62774e6112f22bdd2cc922 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test12.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test12 extends SuiteTestCase { +} diff --git a/tlatools/test/tlc2/tool/suite/Test13.java b/tlatools/test/tlc2/tool/suite/Test13.java new file mode 100644 index 0000000000000000000000000000000000000000..f82a5bd4ae74e9f3af821918a02ea20ead1123be --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test13.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test13 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test14.java b/tlatools/test/tlc2/tool/suite/Test14.java new file mode 100644 index 0000000000000000000000000000000000000000..b296543ddab0197a42981d3b1ae6f19ccf6e9c77 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test14.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test14 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test15.java b/tlatools/test/tlc2/tool/suite/Test15.java new file mode 100644 index 0000000000000000000000000000000000000000..b69446cbb1bd85e9dea3942195cc99957fd52e58 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test15.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test15 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test16.java b/tlatools/test/tlc2/tool/suite/Test16.java new file mode 100644 index 0000000000000000000000000000000000000000..ae6e21b654de39c4c9fbf3f30719bc21f921f541 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test16.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test16 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test17.java b/tlatools/test/tlc2/tool/suite/Test17.java new file mode 100644 index 0000000000000000000000000000000000000000..f1e76c53446ee97b9cb9862d53c8101cb336caf9 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test17.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test17 extends SuiteTestCase { + + public Test17() { + super("7", "2", "0", "1"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test18.java b/tlatools/test/tlc2/tool/suite/Test18.java new file mode 100644 index 0000000000000000000000000000000000000000..d042607122e44878e758534cd5982985defdbbca --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test18.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test18 extends SuiteTestCase { + public Test18() { + super("14", "1", "0", "1"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test19.java b/tlatools/test/tlc2/tool/suite/Test19.java new file mode 100644 index 0000000000000000000000000000000000000000..8c690fa6834cdb998bdcb2bd3972b1cdb0f3a674 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test19.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test19 extends SuiteTestCase { + public Test19() { + super("800000", "400000", "0", "400000"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test2.java b/tlatools/test/tlc2/tool/suite/Test2.java new file mode 100644 index 0000000000000000000000000000000000000000..fca4bbefb021ad215436e2cc6cbe736acf14c830 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test2.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test2 extends SuiteTestCase { +} diff --git a/tlatools/test/tlc2/tool/suite/Test20.java b/tlatools/test/tlc2/tool/suite/Test20.java new file mode 100644 index 0000000000000000000000000000000000000000..7e713a3dd1a42e5c93699669f5b127d3d56cb5b3 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test20.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test20 extends SuiteTestCase { + public Test20() { + super("5", "1", "0", "1"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test201.java b/tlatools/test/tlc2/tool/suite/Test201.java new file mode 100644 index 0000000000000000000000000000000000000000..a7d3a47d1ce7fd585e0cfcf81fd801ae970e84de --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test201.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test201 extends SuiteTestCase { + public Test201() { + super("0", "0", "0", "0"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test202.java b/tlatools/test/tlc2/tool/suite/Test202.java new file mode 100644 index 0000000000000000000000000000000000000000..32b0aeee9089bacd1ef3a960173edcf659779f57 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test202.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test202 extends SuiteTestCase { + public Test202() { + super("0", "0", "0", "0"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test203.java b/tlatools/test/tlc2/tool/suite/Test203.java new file mode 100644 index 0000000000000000000000000000000000000000..579c071bef6bca72efc53859f7488eadb78274bc --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test203.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test203 extends SuiteTestCase { + public Test203() { + super("0", "0", "0", "0"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test204.java b/tlatools/test/tlc2/tool/suite/Test204.java new file mode 100644 index 0000000000000000000000000000000000000000..7f294a1837f8f7049d2e100bf6315b351cb2cc7a --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test204.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test204 extends SuiteTestCase { + public Test204() { + super("0", "0", "0", "0"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test205.java b/tlatools/test/tlc2/tool/suite/Test205.java new file mode 100644 index 0000000000000000000000000000000000000000..168e55ac3088f8d633969937f4298dd84b90bf57 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test205.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test205 extends SuiteTestCase { + public Test205() { + super("0", "0", "0", "0"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test206.java b/tlatools/test/tlc2/tool/suite/Test206.java new file mode 100644 index 0000000000000000000000000000000000000000..7436d21083dcd1f903eea86a4ece23cd18371489 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test206.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test206 extends SuiteTestCase { + public Test206() { + super("0", "0", "0", "0"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test207.java b/tlatools/test/tlc2/tool/suite/Test207.java new file mode 100644 index 0000000000000000000000000000000000000000..a65c36343fd9ccd6348b833e8f5b08baedcf25dc --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test207.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test207 extends SuiteTestCase { + public Test207() { + super("0", "0", "0", "0"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test208.java b/tlatools/test/tlc2/tool/suite/Test208.java new file mode 100644 index 0000000000000000000000000000000000000000..249a535e9678e4f7e8fcddf7c2472074be5be9bd --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test208.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test208 extends SuiteTestCase { + public Test208() { + super("0", "0", "0", "0"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test209.java b/tlatools/test/tlc2/tool/suite/Test209.java new file mode 100644 index 0000000000000000000000000000000000000000..c32c251ec76dea3dfaf312902322cac666b57d96 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test209.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test209 extends SuiteTestCase { + public Test209() { + super("0", "0", "0", "0"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test21.java b/tlatools/test/tlc2/tool/suite/Test21.java new file mode 100644 index 0000000000000000000000000000000000000000..c2074db4b7fd0661a384ed17436dadbe71a2c7dc --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test21.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test21 extends SuiteTestCase { + public Test21() { + super("8", "2", "0", "1"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test210.java b/tlatools/test/tlc2/tool/suite/Test210.java new file mode 100644 index 0000000000000000000000000000000000000000..0c2d4022688777f59ffb1cb8b55e66499912d696 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test210.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class Test210 extends SuiteETestCase { + @Test + public void testSpec() { + assertTrue(recorder.recorded(EC.GENERAL)); + assertSubstring("*** Errors: 9\n\n" + "line 33, col 16 to line 33, col 19 of module test210\n\n" + + "Accessing subexpression labeled `laby' of ASSUME/PROVE clause within the scope of a declaration"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test212.java b/tlatools/test/tlc2/tool/suite/Test212.java new file mode 100644 index 0000000000000000000000000000000000000000..1d7130ab060f07f5f5af82968c43eb37ff70d8a5 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test212.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class Test212 extends SuiteETestCase { + @Test + public void testSpec() { + assertTrue(recorder.recorded(EC.GENERAL)); + assertSubstring("*** Errors: 6\n\n" + "line 27, col 1 to line 27, col 62 of module test212\n\n" + + "Error in instantiating module 'test212a':"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test213.java b/tlatools/test/tlc2/tool/suite/Test213.java new file mode 100644 index 0000000000000000000000000000000000000000..8ecf01b2db9f21584d7353c82118c9d0fdca3e4b --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test213.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class Test213 extends SuiteETestCase { + @Test + public void testSpec() { + assertTrue(recorder.recorded(EC.GENERAL)); + assertSubstring("*** Errors: 5\n\n" + + "line 13, col 1 to line 13, col 52 of module test213\n\n" + + "Level error in instantiating module 'test213b':"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test214.java b/tlatools/test/tlc2/tool/suite/Test214.java new file mode 100644 index 0000000000000000000000000000000000000000..5cc5a90225f598e7703a3450d26bfaee5709d869 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test214.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class Test214 extends SuiteETestCase { + @Test + public void testSpec() { + assertTrue(recorder.recorded(EC.GENERAL)); + assertSubstring("*** Errors: 1\n\n" + + "line 10, col 11 to line 10, col 14 of module test214\n\n" + + "The only expression allowed as a fact in a HIDE is"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test215.java b/tlatools/test/tlc2/tool/suite/Test215.java new file mode 100644 index 0000000000000000000000000000000000000000..5fb8a29b6964ab2880897a8ac1166bf03a0c6838 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test215.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class Test215 extends SuiteETestCase { + @Test + public void testSpec() { + assertTrue(recorder.recorded(EC.GENERAL)); + assertSubstring("*** Errors: 8\n\n" + + "line 8, col 6 to line 8, col 14 of module test215\n\n" + + "Action used where only temporal formula or state predicate allowed."); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test216.java b/tlatools/test/tlc2/tool/suite/Test216.java new file mode 100644 index 0000000000000000000000000000000000000000..1341f88fb912388d6bc3e455d1d21f1b6c13fc97 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test216.java @@ -0,0 +1,43 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class Test216 extends SuiteETestCase { + @Test + public void testSpec() { + assertTrue(recorder.recorded(EC.TLC_FINISHED)); + assertTrue(recorder.recordedWithStringValues(EC.TLC_STATS, "28", "7", "0")); + assertTrue(recorder.recordedWithStringValues(EC.TLC_INIT_GENERATED2, "21", "7")); + assertFalse(recorder.recorded(EC.GENERAL)); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test217.java b/tlatools/test/tlc2/tool/suite/Test217.java new file mode 100644 index 0000000000000000000000000000000000000000..573b322b7e60ebbb00899760a11c01f223dffa33 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test217.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import tlc2.output.EC; + +public class Test217 extends SuiteETestCase { + @Test + public void testSpec() { + assertTrue(recorder.recorded(EC.GENERAL)); + assertSubstring("*** Errors: 2\n\n" + + "line 12, col 11 to line 12, col 19 of module test217\n\n" + + "Level error in applying operator I!Foo:"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test219.java b/tlatools/test/tlc2/tool/suite/Test219.java new file mode 100644 index 0000000000000000000000000000000000000000..dcf9f9bdb36edf7f20f85a3d0a296b34711715c0 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test219.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test219 extends SuiteTestCase { + public Test219() { + super("0", "0", "0", "0"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test22.java b/tlatools/test/tlc2/tool/suite/Test22.java new file mode 100644 index 0000000000000000000000000000000000000000..9eb0e371b062c5e066af726c9e1db9ec77beb71b --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test22.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test22 extends SuiteTestCase { + public Test22() { + super("1344", "64", "0", "64"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test23.java b/tlatools/test/tlc2/tool/suite/Test23.java new file mode 100644 index 0000000000000000000000000000000000000000..a97ec032c739baa3ee5d4ddb4813ec7e1dbcdd40 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test23.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test23 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test24.java b/tlatools/test/tlc2/tool/suite/Test24.java new file mode 100644 index 0000000000000000000000000000000000000000..ead4a5db9668a8f5c2e13c1e92555a38bc7a6d07 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test24.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test24 extends SuiteTestCase { + public Test24() { + super("21", "2", "0", "1"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test25.java b/tlatools/test/tlc2/tool/suite/Test25.java new file mode 100644 index 0000000000000000000000000000000000000000..c5b290ea24df3afda2a54d6219c9548091c0328b --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test25.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test25 extends SuiteTestCase { + public Test25() { + super("3", "1", "0", "1"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test26.java b/tlatools/test/tlc2/tool/suite/Test26.java new file mode 100644 index 0000000000000000000000000000000000000000..fe30483472ca481f4cdffc09aa07ee39fbc61252 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test26.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test26 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test27.java b/tlatools/test/tlc2/tool/suite/Test27.java new file mode 100644 index 0000000000000000000000000000000000000000..8353f98f97a4c88921ed0a759d451b16c639b932 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test27.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test27 extends SuiteTestCase { + public Test27() { + super("1109824", "63504", "0", "16"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test28.java b/tlatools/test/tlc2/tool/suite/Test28.java new file mode 100644 index 0000000000000000000000000000000000000000..05e3c4b2c6a3d37ce6124e9ad7e8329d0ac64352 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test28.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test28 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test29.java b/tlatools/test/tlc2/tool/suite/Test29.java new file mode 100644 index 0000000000000000000000000000000000000000..2c6153c36aaf091acc7f4d9930ee0c5a11552d90 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test29.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test29 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test3.java b/tlatools/test/tlc2/tool/suite/Test3.java new file mode 100644 index 0000000000000000000000000000000000000000..65b5dd3a8bb1ffeb04df73b333e7b23f15998cf5 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test3.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test3 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test30.java b/tlatools/test/tlc2/tool/suite/Test30.java new file mode 100644 index 0000000000000000000000000000000000000000..1ebdf08a3be06b86b06a8761f88ec7cfc7fc48da --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test30.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test30 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test31.java b/tlatools/test/tlc2/tool/suite/Test31.java new file mode 100644 index 0000000000000000000000000000000000000000..1650624c2f2ca17c393d3539ef0104eeaea8a66d --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test31.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test31 extends SuiteTestCase { + public Test31() { + super("13", "3", "0", "1"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test32.java b/tlatools/test/tlc2/tool/suite/Test32.java new file mode 100644 index 0000000000000000000000000000000000000000..efe17f4a1b3dceb8f29b40c66dbf8f375c7f823b --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test32.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test32 extends SuiteTestCase { + public Test32() { + super("3", "1", "0", "1"); + } +} \ No newline at end of file diff --git a/tlatools/test/tlc2/tool/suite/Test33.java b/tlatools/test/tlc2/tool/suite/Test33.java new file mode 100644 index 0000000000000000000000000000000000000000..126489f802d569f8c02e4ddc348b115502f90d42 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test33.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test33 extends SuiteTestCase { + public Test33() { + super("235298", "117649", "0", "117649"); + } +} \ No newline at end of file diff --git a/tlatools/test/tlc2/tool/suite/Test34.java b/tlatools/test/tlc2/tool/suite/Test34.java new file mode 100644 index 0000000000000000000000000000000000000000..32d0702fc5ab908890a3fe614128f8fc197f5403 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test34.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test34 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test35.java b/tlatools/test/tlc2/tool/suite/Test35.java new file mode 100644 index 0000000000000000000000000000000000000000..bf9ef33f767fcbbb45d88bd0a5e9736dea6d8459 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test35.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test35 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test36.java b/tlatools/test/tlc2/tool/suite/Test36.java new file mode 100644 index 0000000000000000000000000000000000000000..ce6762f6ca2d313aee3b940c5d518c28f3cc9e7a --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test36.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test36 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test37.java b/tlatools/test/tlc2/tool/suite/Test37.java new file mode 100644 index 0000000000000000000000000000000000000000..d94e6bdbc7c304a66fe2d66f09aad0f4a6907d38 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test37.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test37 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test38.java b/tlatools/test/tlc2/tool/suite/Test38.java new file mode 100644 index 0000000000000000000000000000000000000000..63f083299e2e890675f9bf9c688fc6eec403ea3f --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test38.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test38 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test39.java b/tlatools/test/tlc2/tool/suite/Test39.java new file mode 100644 index 0000000000000000000000000000000000000000..f71ea0b574966446180bd32fb0c5e983b1e4747e --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test39.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test39 extends SuiteTestCase { + public Test39() { + super("6", "3", "0", "1"); + } +} \ No newline at end of file diff --git a/tlatools/test/tlc2/tool/suite/Test4.java b/tlatools/test/tlc2/tool/suite/Test4.java new file mode 100644 index 0000000000000000000000000000000000000000..2e42e72500bc020c470e158db88a4af2597b0768 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test4.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test4 extends SuiteTestCase { + public Test4() { + super("11", "1", "0", "1"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test40.java b/tlatools/test/tlc2/tool/suite/Test40.java new file mode 100644 index 0000000000000000000000000000000000000000..6ba4a84e94d9e78e7180f438fb105065d145d4ce --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test40.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test40 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test41.java b/tlatools/test/tlc2/tool/suite/Test41.java new file mode 100644 index 0000000000000000000000000000000000000000..059d9a1ad4870891ea82b7599d1a1a75f826ad51 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test41.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test41 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test42.java b/tlatools/test/tlc2/tool/suite/Test42.java new file mode 100644 index 0000000000000000000000000000000000000000..a3b848de071e62f972365037331a47fbdbfbb2ae --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test42.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test42 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test43.java b/tlatools/test/tlc2/tool/suite/Test43.java new file mode 100644 index 0000000000000000000000000000000000000000..78103b9eae1c42b65118bfda40b8d6219f8c05b0 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test43.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test43 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test44.java b/tlatools/test/tlc2/tool/suite/Test44.java new file mode 100644 index 0000000000000000000000000000000000000000..1fa8a4476348b56088e5e96bfa1c5c076fd5d727 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test44.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test44 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test45.java b/tlatools/test/tlc2/tool/suite/Test45.java new file mode 100644 index 0000000000000000000000000000000000000000..2ba45bfc4b44cf749ecc8fe2ccbb48db189af0c9 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test45.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test45 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test46.java b/tlatools/test/tlc2/tool/suite/Test46.java new file mode 100644 index 0000000000000000000000000000000000000000..a4c33c30e781103ba111330e3af6d09ebef302ab --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test46.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test46 extends SuiteTestCase { + public Test46() { + super("121", "6", "0", "1"); + } +} \ No newline at end of file diff --git a/tlatools/test/tlc2/tool/suite/Test47.java b/tlatools/test/tlc2/tool/suite/Test47.java new file mode 100644 index 0000000000000000000000000000000000000000..ded35b6adfb01db8ca83e56ae0359dfc6cc1a664 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test47.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test47 extends SuiteTestCase { + public Test47() { + super("4", "3", "0", "1"); + } +} \ No newline at end of file diff --git a/tlatools/test/tlc2/tool/suite/Test48.java b/tlatools/test/tlc2/tool/suite/Test48.java new file mode 100644 index 0000000000000000000000000000000000000000..8537c7f72de825c891a6cc22eb6cf34329bba845 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test48.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test48 extends SuiteTestCase { + public Test48() { + super("64", "1", "0", "1"); + } +} \ No newline at end of file diff --git a/tlatools/test/tlc2/tool/suite/Test49.java b/tlatools/test/tlc2/tool/suite/Test49.java new file mode 100644 index 0000000000000000000000000000000000000000..3f2d0fca27ef12db288308738d44b5a9eb5ebd5f --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test49.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test49 extends SuiteTestCase { + public Test49() { + super("10", "1", "0", "1"); + } +} \ No newline at end of file diff --git a/tlatools/test/tlc2/tool/suite/Test5.java b/tlatools/test/tlc2/tool/suite/Test5.java new file mode 100644 index 0000000000000000000000000000000000000000..ff3c020840a57abf8220df632eadd9c28d4ddf84 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test5.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test5 extends SuiteTestCase { +} diff --git a/tlatools/test/tlc2/tool/suite/Test50.java b/tlatools/test/tlc2/tool/suite/Test50.java new file mode 100644 index 0000000000000000000000000000000000000000..3a33c567067e582fbfb7fde89ce8e90d42b1e895 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test50.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test50 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test51.java b/tlatools/test/tlc2/tool/suite/Test51.java new file mode 100644 index 0000000000000000000000000000000000000000..ed9a0f0bb629140e1e1d720fc1e2ac0592fbf1a7 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test51.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test51 extends SuiteTestCase { + public Test51() { + super("0", "0", "0", "0"); + } +} \ No newline at end of file diff --git a/tlatools/test/tlc2/tool/suite/Test52.java b/tlatools/test/tlc2/tool/suite/Test52.java new file mode 100644 index 0000000000000000000000000000000000000000..3f3d52317b4cfbd06a7cdaec4c0662de88b7b9cd --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test52.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test52 extends SuiteTestCase { + public Test52() { + super("3", "2", "0", "1"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test53.java b/tlatools/test/tlc2/tool/suite/Test53.java new file mode 100644 index 0000000000000000000000000000000000000000..c9314bd6c320bca235ab77210730700644b69a84 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test53.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test53 extends SuiteTestCase { + public Test53() { + super("10", "1", "0", "1"); + } +} \ No newline at end of file diff --git a/tlatools/test/tlc2/tool/suite/Test54.java b/tlatools/test/tlc2/tool/suite/Test54.java new file mode 100644 index 0000000000000000000000000000000000000000..36600ea77819d0b8497af0f00691690813a5b447 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test54.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test54 extends SuiteTestCase { + public Test54() { + super("10", "1", "0", "1"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test55.java b/tlatools/test/tlc2/tool/suite/Test55.java new file mode 100644 index 0000000000000000000000000000000000000000..a034f870693a844f213aab9320422b5528a01748 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test55.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test55 extends SuiteTestCase { + public Test55() { + super("3", "2", "0", "1"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test56.java b/tlatools/test/tlc2/tool/suite/Test56.java new file mode 100644 index 0000000000000000000000000000000000000000..1fdc56d9bc371f866c04516961ce7f62a78f5717 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test56.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test56 extends SuiteTestCase { + public Test56() { + super("9", "6", "0", "3"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test58.java b/tlatools/test/tlc2/tool/suite/Test58.java new file mode 100644 index 0000000000000000000000000000000000000000..8d2bba3c4d3a35b05fdae4002d51b841b2e4d714 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test58.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test58 extends SuiteTestCase { + public Test58() { + super("0", "0", "0", "0"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test59.java b/tlatools/test/tlc2/tool/suite/Test59.java new file mode 100644 index 0000000000000000000000000000000000000000..0b2f1172a3edb6f73b73d19c90475a902d1fb80b --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test59.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test59 extends SuiteTestCase { + public Test59() { + super("6", "5", "0", "1"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test6.java b/tlatools/test/tlc2/tool/suite/Test6.java new file mode 100644 index 0000000000000000000000000000000000000000..6877ab55644e57e8283b2cc1cfbf83ad13bbebd9 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test6.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test6 extends SuiteTestCase { +} diff --git a/tlatools/test/tlc2/tool/suite/Test60.java b/tlatools/test/tlc2/tool/suite/Test60.java new file mode 100644 index 0000000000000000000000000000000000000000..fc639b61e0202bdd2145898cb2a43f04b606e762 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test60.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test60 extends SuiteTestCase { + public Test60() { + super("0", "0", "0", "0"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test61.java b/tlatools/test/tlc2/tool/suite/Test61.java new file mode 100644 index 0000000000000000000000000000000000000000..a951f4cd770b9b64bc32495d6045e47fb2b0907b --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test61.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +import org.junit.Ignore; + +@Ignore("known bug, it Handles JSpec but not ISpec") +public class Test61 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test62.java b/tlatools/test/tlc2/tool/suite/Test62.java new file mode 100644 index 0000000000000000000000000000000000000000..e057a74094cb68038107361d6d4c3d50276cc1ce --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test62.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test62 extends SuiteTestCase { + public Test62() { + super("0", "0", "0", "0"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test63.java b/tlatools/test/tlc2/tool/suite/Test63.java new file mode 100644 index 0000000000000000000000000000000000000000..37a9b0701095bf07c6bcdf9ed4529850772324ba --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test63.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test63 extends SuiteTestCase { + public Test63() { + super("696", "216", "0", "72"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test63a.java b/tlatools/test/tlc2/tool/suite/Test63a.java new file mode 100644 index 0000000000000000000000000000000000000000..5f02e3908ca68f7db16cfcd3a87511a68d816bfd --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test63a.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test63a extends SuiteTestCase { + public Test63a() { + super("24", "12", "0", "12"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test64.java b/tlatools/test/tlc2/tool/suite/Test64.java new file mode 100644 index 0000000000000000000000000000000000000000..b5dbc4b3623a6c9a7f4291246f02ee747ef8065f --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test64.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test64 extends SuiteTestCase { + public Test64() { + super("3", "2", "0", "1"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test64a.java b/tlatools/test/tlc2/tool/suite/Test64a.java new file mode 100644 index 0000000000000000000000000000000000000000..c86986761311805f3c5ce96d9831fef11e0f1760 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test64a.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test64a extends SuiteTestCase { + public Test64a() { + super("3", "2", "0", "1"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test65.java b/tlatools/test/tlc2/tool/suite/Test65.java new file mode 100644 index 0000000000000000000000000000000000000000..daa3b3364288c8fccfffd07b1724d9f9aac00111 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test65.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test65 extends SuiteTestCase { + public Test65() { + super("0", "0", "0", "0"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test65a.java b/tlatools/test/tlc2/tool/suite/Test65a.java new file mode 100644 index 0000000000000000000000000000000000000000..65aa645d8193d31bcd4f3077502e35608ee420ea --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test65a.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test65a extends SuiteTestCase { + public Test65a() { + super("0", "0", "0", "0"); + } +} diff --git a/tlatools/test/tlc2/tool/suite/Test7.java b/tlatools/test/tlc2/tool/suite/Test7.java new file mode 100644 index 0000000000000000000000000000000000000000..054ba5fb9e9baaa4d44345108ad4d7aa0e1a2bfd --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test7.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test7 extends SuiteTestCase { +} diff --git a/tlatools/test/tlc2/tool/suite/Test8.java b/tlatools/test/tlc2/tool/suite/Test8.java new file mode 100644 index 0000000000000000000000000000000000000000..f134ac13a0730df24a2bd4c069b93eac92dc49d7 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test8.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test8 extends SuiteTestCase { +} diff --git a/tlatools/test/tlc2/tool/suite/Test9.java b/tlatools/test/tlc2/tool/suite/Test9.java new file mode 100644 index 0000000000000000000000000000000000000000..320f7f76442674748f0e30d584e9c7d22dfbc505 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test9.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test9 extends SuiteTestCase { +} diff --git a/tlatools/test/tlc2/tool/suite/Test99.java b/tlatools/test/tlc2/tool/suite/Test99.java new file mode 100644 index 0000000000000000000000000000000000000000..9c4a29f2a4ab10e808cbde2d6c017c2eb9a4d9e3 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test99.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test99 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/tool/suite/Test999.java b/tlatools/test/tlc2/tool/suite/Test999.java new file mode 100644 index 0000000000000000000000000000000000000000..aa282a7f681e137404bce82ce6fafdf4e650aa88 --- /dev/null +++ b/tlatools/test/tlc2/tool/suite/Test999.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.tool.suite; + +public class Test999 extends SuiteTestCase { + +} diff --git a/tlatools/test/tlc2/util/BitVectorTest.java b/tlatools/test/tlc2/util/BitVectorTest.java new file mode 100644 index 0000000000000000000000000000000000000000..a7015b015f340f25903a9b2a2b076af43ee0c665 --- /dev/null +++ b/tlatools/test/tlc2/util/BitVectorTest.java @@ -0,0 +1,67 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ + +package tlc2.util; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class BitVectorTest { + + /** + * Test method for {@link tlc2.util.BitVector#toString()}. + */ + @Test + public void testToString() { + final BitVector bitVector = new BitVector(8); + bitVector.set(0); + bitVector.set(1); + // unset + bitVector.set(3); + bitVector.set(4); + // unset + // unset + bitVector.set(7); + + assertEquals("[10011011]", bitVector.toString()); + } + + @Test + public void testToStringRange() { + final BitVector bitVector = new BitVector(8); + bitVector.set(0); + bitVector.set(1); + // unset + bitVector.set(3); + bitVector.set(4); + // unset + // unset + bitVector.set(7); + + assertEquals("[001]", bitVector.toString(4, 3)); + } +} diff --git a/tlatools/test/tlc2/util/BufferedRandomAccessFileTest.java b/tlatools/test/tlc2/util/BufferedRandomAccessFileTest.java new file mode 100644 index 0000000000000000000000000000000000000000..9221e6d54626cd6bf385a38f09fcb172d1792858 --- /dev/null +++ b/tlatools/test/tlc2/util/BufferedRandomAccessFileTest.java @@ -0,0 +1,136 @@ +/******************************************************************************* + * Copyright (c) 2016 Microsoft Research. All rights reserved. + * + * The MIT License (MIT) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Contributors: + * Markus Alexander Kuppe - initial API and implementation + ******************************************************************************/ +package tlc2.util; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import java.io.File; +import java.io.IOException; + +import org.junit.Test; + +public class BufferedRandomAccessFileTest { + + @Test + public void testWrite() throws IOException { + final File tmpFile = File.createTempFile("BufferedRandomAccessFileTest_testWrite", ".bin"); + tmpFile.deleteOnExit(); + final java.io.RandomAccessFile raf = new BufferedRandomAccessFile(tmpFile, "rw"); + for (long i = 0L; i < BufferedRandomAccessFile.BuffSz / 8; i++) { + raf.writeLong(i); + } + raf.close(); + } + + @Test + public void testWriteSeek() throws IOException { + final File tmpFile = File.createTempFile("BufferedRandomAccessFileTest_testWriteSeek", ".bin"); + tmpFile.deleteOnExit(); + final java.io.RandomAccessFile raf = new BufferedRandomAccessFile(tmpFile, "rw"); + + raf.setLength(BufferedRandomAccessFile.BuffSz + 1L); + raf.seek(1); + + for (long i = 0L; i < BufferedRandomAccessFile.BuffSz / 8; i++) { + raf.writeLong(i); + } + raf.close(); + } + + @Test + public void testWriteSeekNoLength() throws IOException { + final File tmpFile = File.createTempFile("BufferedRandomAccessFileTest_testWriteSeekNoLength", ".bin"); + tmpFile.deleteOnExit(); + final java.io.RandomAccessFile raf = new BufferedRandomAccessFile(tmpFile, "rw"); + + // Do not set length, expect meaningful exception + raf.seek(1); + try { + for (long i = 0L; i < BufferedRandomAccessFile.BuffSz / 8; i++) { + raf.writeLong(i); + } + } catch (IOException expected) { + return; + } catch (Exception e) { + fail(e.getMessage()); + } finally { + raf.close(); + } + } + + @Test + public void testRead() throws IOException { + final File tmpFile = File.createTempFile("BufferedRandomAccessFileTest_testRead", ".bin"); + tmpFile.deleteOnExit(); + final java.io.RandomAccessFile raf = new BufferedRandomAccessFile(tmpFile, "rw"); + for (long i = 0L; i < BufferedRandomAccessFile.BuffSz / 8; i++) { + raf.writeLong(i); + } + + raf.seek(0); + for (long i = 0l; i < BufferedRandomAccessFile.BuffSz / 8; i++) { + assertEquals(i, raf.readLong()); + } + raf.close(); + } + + @Test + public void testReadSeek() throws IOException { + final File tmpFile = File.createTempFile("BufferedRandomAccessFileTest_testReadSeek", ".bin"); + tmpFile.deleteOnExit(); + final java.io.RandomAccessFile raf = new BufferedRandomAccessFile(tmpFile, "rw"); + + raf.setLength(BufferedRandomAccessFile.BuffSz + 1L); + raf.seek(1); + + for (int i = 0; i < BufferedRandomAccessFile.BuffSz / 8; i++) { + assertEquals(0L, raf.readLong()); + } + raf.close(); + } + + @Test + public void testReadSeekNoLength() throws IOException { + final File tmpFile = File.createTempFile("BufferedRandomAccessFileTest_testReadSeekNoLength", ".bin"); + tmpFile.deleteOnExit(); + final java.io.RandomAccessFile raf = new BufferedRandomAccessFile(tmpFile, "rw"); + + // Do not set length, expect meaningful exception + raf.seek(1); + try { + for (int i = 0; i < BufferedRandomAccessFile.BuffSz / 8; i++) { + raf.readLong(); + } + } catch (IOException expected) { + return; + } catch (Exception e) { + fail(e.getMessage()); + } finally { + raf.close(); + } + } +} diff --git a/tlatools/test/tlc2/util/statistics/BucketStatisticsTest.java b/tlatools/test/tlc2/util/statistics/BucketStatisticsTest.java index 7f418e902dbdc01b94ef3053afec8502ae094918..245bd76005302333ff50430116a63c4bc8a32e66 100644 --- a/tlatools/test/tlc2/util/statistics/BucketStatisticsTest.java +++ b/tlatools/test/tlc2/util/statistics/BucketStatisticsTest.java @@ -27,6 +27,7 @@ package tlc2.util.statistics; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import org.junit.Test; @@ -48,35 +49,35 @@ public class BucketStatisticsTest { @Test public void testMean() { final IBucketStatistics gs = new BucketStatistics(); - assertEquals(-1.0d, gs.getMean(), 0); + assertTrue(Double.compare(-1.0d, gs.getMean()) == 0); gs.addSample(0); - assertEquals(0.0d, gs.getMean(), 0); + assertTrue(Double.compare(0.0d, gs.getMean()) == 0); gs.addSample(1); gs.addSample(2); - assertEquals(1.0d, gs.getMean(), 0); + assertTrue(Double.compare(1.0d, gs.getMean()) == 0); gs.addSample(2); gs.addSample(2); - assertEquals(1.4d, gs.getMean(), 0); + assertTrue(Double.compare(1.4d, gs.getMean()) == 0); } @Test public void testMedian() { final IBucketStatistics gs = new BucketStatistics(); - assertEquals(-1, gs.getMedian(), 0); + assertEquals(-1, gs.getMedian()); gs.addSample(0); - assertEquals(0, gs.getMedian(), 0); + assertEquals(0, gs.getMedian()); gs.addSample(1); gs.addSample(2); - assertEquals(1, gs.getMedian(), 0); + assertEquals(1, gs.getMedian()); gs.addSample(2); gs.addSample(2); - assertEquals(2, gs.getMedian(), 0); + assertEquals(2, gs.getMedian()); } @Test @@ -128,7 +129,7 @@ public class BucketStatisticsTest { gs.addSample(2); gs.addSample(2); gs.addSample(3); - assertEquals(1.005d, (Math.round(gs.getStdDev() * 10000d) / 10000d), 0); + assertTrue(Double.compare(1.005d, (Math.round(gs.getStdDev() * 10000d) / 10000d)) == 0); } @Test @@ -150,9 +151,10 @@ public class BucketStatisticsTest { gs.addSample(2); gs.addSample(2); gs.addSample(3); - assertEquals(2.0d, gs.getPercentile(0.5d), 0); - assertEquals(2.0d, gs.getPercentile(0.75d), 0); - assertEquals(3.0d, gs.getPercentile(0.999d), 0); + assertTrue(Double.compare(2.0d, gs.getPercentile(0.5d)) == 0); + assertTrue(Double.compare(2.0d, gs.getPercentile(0.5d)) == 0); + assertTrue(Double.compare(2.0d, gs.getPercentile(0.75d)) == 0); + assertTrue(Double.compare(3.0d, gs.getPercentile(0.999d)) == 0); } // NaN test @Test