Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
PSE Typinferenz
Typicalc
Commits
4d5d3b86
Commit
4d5d3b86
authored
Aug 24, 2021
by
uskyk
Browse files
Refactor unification view to be dynamically sized
see
#24
parent
04c7f6ab
Pipeline
#165082
passed with stages
in 1 minute and 32 seconds
Changes
9
Pipelines
1
Show whitespace changes
Inline
Side-by-side
frontend/styles/view/explanation.css
0 → 100644
View file @
4d5d3b86
#tc-content
{
overflow-y
:
auto
;
}
\ No newline at end of file
frontend/styles/view/type-inference.css
View file @
4d5d3b86
...
...
@@ -24,7 +24,7 @@
#type-inference-view
#content2
{
display
:
flex
;
flex-direction
:
column
;
flex-grow
:
1
;
flex-grow
:
0
;
height
:
100%
;
overflow-y
:
auto
;
}
...
...
@@ -37,6 +37,7 @@
#type-inference-view
#content4
{
display
:
flex
;
flex-direction
:
row
;
max-width
:
100%
;
}
tc-explanation
{
...
...
frontend/styles/view/unification.css
View file @
4d5d3b86
tc-unification
{
flex
:
initial
;
background-color
:
#e9f2fd
;
min-width
:
100%
;
width
:
max-content
;
flex-grow
:
1
;
flex-shrink
:
0
;
width
:
100%
;
max-width
:
100%
;
min-height
:
10em
;
overflow-x
:
auto
;
padding-left
:
1em
;
padding-right
:
1em
;
box-sizing
:
border-box
;
...
...
src/main/java/edu/kit/typicalc/view/content/typeinferencecontent/MathjaxExplanation.java
View file @
4d5d3b86
...
...
@@ -2,6 +2,7 @@ package edu.kit.typicalc.view.content.typeinferencecontent;
import
com.vaadin.flow.component.Html
;
import
com.vaadin.flow.component.Tag
;
import
com.vaadin.flow.component.dependency.CssImport
;
import
com.vaadin.flow.component.dependency.JsModule
;
import
com.vaadin.flow.component.html.Div
;
import
com.vaadin.flow.component.littemplate.LitTemplate
;
...
...
@@ -17,7 +18,7 @@ import java.util.List;
@Tag
(
"tc-explanation"
)
@JsModule
(
"./src/mathjax-adapter.ts"
)
@JsModule
(
"./src/mathjax-explanation.ts"
)
//
@CssImport("./styles/view/
unific
ation.css")
@CssImport
(
"./styles/view/
explan
ation.css"
)
public
class
MathjaxExplanation
extends
LitTemplate
implements
MathjaxAdapter
{
private
final
List
<
String
>
latex
;
...
...
src/main/java/edu/kit/typicalc/view/content/typeinferencecontent/MathjaxUnification.java
View file @
4d5d3b86
package
edu.kit.typicalc.view.content.typeinferencecontent
;
import
com.vaadin.flow.component.Html
;
import
com.vaadin.flow.component.Tag
;
import
com.vaadin.flow.component.dependency.CssImport
;
import
com.vaadin.flow.component.dependency.JsModule
;
...
...
@@ -44,7 +45,8 @@ public class MathjaxUnification extends LitTemplate implements MathjaxAdapter {
public
void
showStep
(
int
n
)
{
if
(
n
<
latex
.
length
)
{
content
.
removeAll
();
content
.
add
(
latex
[
n
]);
// add latex as HTML because <br> is used in the latex code
content
.
add
(
new
Html
(
"<div>"
+
latex
[
n
]
+
"</div>"
));
}
getElement
().
callJsFunction
(
"showStep"
,
n
);
}
...
...
src/main/java/edu/kit/typicalc/view/content/typeinferencecontent/ShareDialog.java
View file @
4d5d3b86
...
...
@@ -39,8 +39,6 @@ public class ShareDialog extends Dialog implements LocaleChangeObserver {
private
static
final
String
LATEX_AREA_UNIFICATION_LAYOUT_ID
=
"latex-area-unification-layout"
;
private
static
final
String
RIGHT_ARROW_WHITE
=
"\\\\rightwhitearrow"
;
private
static
final
String
MATH_OPEN
=
"\\["
;
private
static
final
String
MATH_CLOSE
=
"\\]"
;
private
final
TextField
urlField
;
private
final
TextArea
packageAreaTree
;
...
...
@@ -78,7 +76,9 @@ public class ShareDialog extends Dialog implements LocaleChangeObserver {
latexAreaTree
=
new
TextArea
();
packageAreaUnification
=
new
TextArea
();
latexAreaUnification
=
new
TextArea
();
initializeFields
(
url
,
latexCodeTree
,
MATH_OPEN
+
latexCodeUnification
+
MATH_CLOSE
);
// remove <br> html elements added by the "latex" creator
initializeFields
(
url
,
latexCodeTree
,
latexCodeUnification
.
replace
(
"<br>"
,
LatexCreatorConstants
.
LATEX_NEW_LINE
));
UI
.
getCurrent
().
getPage
().
executeJs
(
"window.autoSelect($0)"
,
FIELD_CLASS
);
...
...
src/main/java/edu/kit/typicalc/view/content/typeinferencecontent/latexcreator/LatexCreatorConstants.java
View file @
4d5d3b86
...
...
@@ -24,6 +24,8 @@ public final class LatexCreatorConstants {
protected
static
final
String
TYPE_ABSTRACTION
=
"ta"
;
protected
static
final
String
DOLLAR_SIGN
=
"$"
;
protected
static
final
String
MATH_START
=
"\\["
;
protected
static
final
String
MATH_END
=
"\\]"
;
protected
static
final
char
NEW_LINE
=
'\n'
;
protected
static
final
char
SPACE
=
' '
;
protected
static
final
char
APOSTROPHE
=
'\''
;
...
...
@@ -82,4 +84,9 @@ public final class LatexCreatorConstants {
protected
static
final
String
ALIGN_END
=
"\\end{aligned}"
;
protected
static
final
String
SPLIT_BEGIN
=
"\\begin{split}"
;
protected
static
final
String
SPLIT_END
=
"\\end{split}"
;
/**
* Not actually a LaTeX command, but understood by MathJax.
*/
protected
static
final
String
BREAK_ROW
=
"<br>"
;
}
src/main/java/edu/kit/typicalc/view/content/typeinferencecontent/latexcreator/LatexCreatorConstraints.java
View file @
4d5d3b86
...
...
@@ -24,7 +24,6 @@ import static edu.kit.typicalc.view.content.typeinferencecontent.latexcreator.La
public
class
LatexCreatorConstraints
implements
StepVisitor
{
private
static
final
String
FIRST_PREFIX
=
""
;
private
static
final
int
BREAK_AFTER
=
10
;
private
final
List
<
String
>
constraints
;
private
final
TypeInfererInterface
typeInferer
;
...
...
@@ -36,7 +35,6 @@ public class LatexCreatorConstraints implements StepVisitor {
private
final
Optional
<
Map
<
VarTerm
,
TypeAbstraction
>>
newTypeAssumption
;
private
String
prevStep
;
private
final
Function
<
UnificationError
,
String
>
translationProvider
;
private
int
constraintsInCurrLine
;
private
final
LatexCreatorMode
mode
;
/**
...
...
@@ -71,10 +69,9 @@ public class LatexCreatorConstraints implements StepVisitor {
this
.
constraintSetIndex
=
constraintSetIndexFactory
.
nextConstraintSetIndex
();
this
.
typeInferer
=
typeInferer
;
this
.
translationProvider
=
translationProvider
;
this
.
constraintsInCurrLine
=
0
;
constraints
=
new
ArrayList
<>();
if
(
FIRST_PREFIX
.
equals
(
prefix
))
{
constraints
.
add
(
AMPERSAND
+
CONSTRAINT_SET
+
EQUALS
+
LATEX_CURLY_LEFT
+
LATEX_CURLY_RIGHT
);
constraints
.
add
(
DOLLAR_SIGN
+
CONSTRAINT_SET
+
EQUALS
+
LATEX_CURLY_LEFT
+
LATEX_CURLY_RIGHT
+
DOLLAR_SIGN
);
numberGenerator
.
incrementPush
();
}
this
.
mode
=
mode
;
...
...
@@ -91,7 +88,7 @@ public class LatexCreatorConstraints implements StepVisitor {
protected
List
<
String
>
getEverything
()
{
List
<
String
>
result
=
new
ArrayList
<>(
constraints
);
String
constraintSets
=
constraints
.
get
(
constraints
.
size
()
-
1
)
+
LATEX_NEW_LINE
;
String
constraintSets
=
constraints
.
get
(
constraints
.
size
()
-
1
);
if
(
typeInferer
.
getUnificationSteps
().
isPresent
())
{
generateUnification
(
constraintSets
).
forEach
(
step
->
{
result
.
add
(
step
);
...
...
@@ -103,13 +100,11 @@ public class LatexCreatorConstraints implements StepVisitor {
result
.
add
(
generateMGU
(
constraintSets
));
numberGenerator
.
push
();
}
result
.
add
(
generateMGU
(
constraintSets
)
+
LATEX_NEW_LINE
+
generateFinalType
());
result
.
add
(
generateMGU
(
constraintSets
)
+
generateFinalType
());
numberGenerator
.
push
();
});
}
if
(
FIRST_PREFIX
.
equals
(
prefix
))
{
result
.
replaceAll
(
content
->
ALIGN_BEGIN
+
content
+
ALIGN_END
);
}
else
{
if
(!
FIRST_PREFIX
.
equals
(
prefix
))
{
// add the new type assumptions only during a let sub inference where
// the unification was successful
typeInferer
.
getMGU
().
ifPresent
(
mgu
->
{
...
...
@@ -145,19 +140,14 @@ public class LatexCreatorConstraints implements StepVisitor {
private
void
addConstraint
(
InferenceStep
step
)
{
String
currentSingleConstraint
=
createSingleConstraint
(
step
.
getConstraint
(),
mode
);
if
(!
prevStep
.
equals
(
""
))
{
prevStep
+=
COMMA
;
}
if
(
constraintsInCurrLine
>=
BREAK_AFTER
)
{
prevStep
+=
LATEX_NEW_LINE
+
AMPERSAND
;
constraintsInCurrLine
=
0
;
prevStep
+=
DOLLAR_SIGN
+
COMMA
+
DOLLAR_SIGN
;
}
prevStep
+=
currentSingleConstraint
;
String
currentConstraints
=
prefix
+
AMPERSAND
+
SPLIT_BEGI
N
+
CONSTRAINT_SET
+
constraintSetIndex
+
EQUALS
+
LATEX_CURLY_LEFT
+
AMPERSAND
+
prevStep
+
LATEX_CURLY_RIGHT
+
SPLIT_END
;
String
currentConstraints
=
prefix
+
DOLLAR_SIG
N
+
CONSTRAINT_SET
+
constraintSetIndex
+
EQUALS
+
LATEX_CURLY_LEFT
+
prevStep
+
LATEX_CURLY_RIGHT
+
DOLLAR_SIGN
;
constraints
.
add
(
currentConstraints
);
numberGenerator
.
incrementPush
();
constraintsInCurrLine
++;
}
@Override
...
...
@@ -204,7 +194,7 @@ public class LatexCreatorConstraints implements StepVisitor {
}
LatexCreatorConstraints
subCreator
=
new
LatexCreatorConstraints
(
letD
.
getTypeInferer
(),
constraintSetIndexFactory
,
numberGenerator
,
constraints
.
get
(
constraints
.
size
()
-
1
)
+
LATEX_NEW_LINE
+
NEW_LINE
,
Optional
.
of
(
term
.
getVariable
()),
constraints
.
get
(
constraints
.
size
()
-
1
)
+
BREAK_ROW
,
Optional
.
of
(
term
.
getVariable
()),
newTypeAss
,
translationProvider
,
mode
);
constraints
.
addAll
(
subCreator
.
getEverything
());
...
...
@@ -214,9 +204,9 @@ public class LatexCreatorConstraints implements StepVisitor {
}
// adds one step in which all let constraints are added to 'outer' constraint set
String
letConstraints
=
createLetConstraints
(
letD
.
getTypeInferer
().
getLetConstraints
());
prevStep
=
prevStep
.
equals
(
""
)
?
letConstraints
:
prevStep
+
COMMA
+
letConstraints
;
letConstraints
=
prefix
+
AMPERSAND
+
SPLIT_BEGI
N
+
CONSTRAINT_SET
+
constraintSetIndex
+
EQUALS
+
LATEX_CURLY_LEFT
+
AMPERSAND
+
prevStep
+
LATEX_CURLY_RIGHT
+
SPLIT_END
;
prevStep
=
prevStep
.
equals
(
""
)
?
letConstraints
:
prevStep
+
DOLLAR_SIGN
+
COMMA
+
DOLLAR_SIGN
+
letConstraints
;
letConstraints
=
prefix
+
DOLLAR_SIG
N
+
CONSTRAINT_SET
+
constraintSetIndex
+
EQUALS
+
LATEX_CURLY_LEFT
+
prevStep
+
LATEX_CURLY_RIGHT
+
DOLLAR_SIGN
;
constraints
.
add
(
letConstraints
);
numberGenerator
.
push
();
...
...
@@ -226,15 +216,12 @@ public class LatexCreatorConstraints implements StepVisitor {
private
String
createLetConstraints
(
List
<
Constraint
>
letConstraints
)
{
StringBuilder
result
=
new
StringBuilder
();
letConstraints
.
forEach
(
constraint
->
{
if
(
constraintsInCurrLine
>=
BREAK_AFTER
)
{
result
.
append
(
LATEX_NEW_LINE
)
.
append
(
AMPERSAND
);
constraintsInCurrLine
=
0
;
}
result
.
append
(
createSingleConstraint
(
constraint
,
mode
)).
append
(
COMMA
);
constraintsInCurrLine
++;
result
.
append
(
createSingleConstraint
(
constraint
,
mode
))
.
append
(
DOLLAR_SIGN
).
append
(
COMMA
).
append
(
DOLLAR_SIGN
);
});
if
(!
letConstraints
.
isEmpty
())
{
// remove comma and dollar sign
result
.
deleteCharAt
(
result
.
length
()
-
1
);
result
.
deleteCharAt
(
result
.
length
()
-
1
);
}
return
result
.
toString
();
...
...
@@ -280,7 +267,8 @@ public class LatexCreatorConstraints implements StepVisitor {
List
<
Substitution
>
substitutions
=
subs
.
unwrap
();
StringBuilder
latex
=
new
StringBuilder
();
latex
.
append
(
constraintSets
);
latex
.
append
(
AMPERSAND
+
SPLIT_BEGIN
);
latex
.
append
(
BREAK_ROW
+
MATH_START
);
latex
.
append
(
ALIGN_BEGIN
+
SPLIT_BEGIN
);
latex
.
append
(
generateUnificationName
());
boolean
markError
=
error
.
isPresent
();
...
...
@@ -358,6 +346,7 @@ public class LatexCreatorConstraints implements StepVisitor {
latex
.
append
(
translationProvider
.
apply
(
error
.
get
()));
latex
.
append
(
CURLY_RIGHT
);
}
latex
.
append
(
ALIGN_END
+
MATH_END
);
steps
.
add
(
latex
.
toString
());
}
return
steps
;
...
...
@@ -367,7 +356,9 @@ public class LatexCreatorConstraints implements StepVisitor {
private
String
generateMGU
(
String
constraintSets
)
{
StringBuilder
latex
=
new
StringBuilder
();
latex
.
append
(
constraintSets
);
latex
.
append
(
AMPERSAND
+
SPLIT_BEGIN
);
latex
.
append
(
BREAK_ROW
);
latex
.
append
(
MATH_START
);
latex
.
append
(
ALIGN_BEGIN
+
AMPERSAND
+
SPLIT_BEGIN
);
latex
.
append
(
generateUnificationName
());
latex
.
append
(
BRACKET_LEFT
);
typeInferer
.
getMGU
().
ifPresent
(
mgu
->
mgu
.
forEach
(
substitution
->
{
...
...
@@ -380,13 +371,13 @@ public class LatexCreatorConstraints implements StepVisitor {
}));
latex
.
delete
(
latex
.
length
()
-
(
COMMA
+
LATEX_NEW_LINE
).
length
(),
latex
.
length
());
latex
.
append
(
BRACKET_RIGHT
);
latex
.
append
(
SPLIT_END
);
latex
.
append
(
SPLIT_END
+
ALIGN_END
+
MATH_END
);
return
latex
.
toString
();
}
private
String
generateFinalType
()
{
StringBuilder
latex
=
new
StringBuilder
();
latex
.
append
(
AMPERSAND
);
latex
.
append
(
DOLLAR_SIGN
);
latex
.
append
(
SIGMA
);
latex
.
append
(
constraintSetIndex
);
latex
.
append
(
PAREN_LEFT
);
...
...
@@ -395,6 +386,7 @@ public class LatexCreatorConstraints implements StepVisitor {
latex
.
append
(
""
+
PAREN_RIGHT
+
EQUALS
);
latex
.
append
(
new
LatexCreatorType
(
typeInferer
.
getType
().
orElseThrow
(
IllegalStateException:
:
new
),
mode
).
getLatex
());
latex
.
append
(
DOLLAR_SIGN
);
return
latex
.
toString
();
}
...
...
@@ -408,7 +400,7 @@ public class LatexCreatorConstraints implements StepVisitor {
StringBuilder
latex
=
new
StringBuilder
();
latex
.
append
(
subPrefix
);
latex
.
append
(
LATEX_NEW_LINE
+
AMPERSAND
+
GAMMA
+
APOSTROPHE
+
EQUALS
+
SIGMA
);
latex
.
append
(
BREAK_ROW
+
DOLLAR_SIGN
+
GAMMA
+
APOSTROPHE
+
EQUALS
+
SIGMA
);
latex
.
append
(
constraintSetIndex
);
latex
.
append
(
PAREN_LEFT
);
latex
.
append
(
typeAssumptions
);
...
...
@@ -426,6 +418,7 @@ public class LatexCreatorConstraints implements StepVisitor {
latex
.
append
(
typeAssumptions
);
latex
.
append
(
""
+
PAREN_RIGHT
+
PAREN_RIGHT
+
EQUALS
);
latex
.
append
(
typeAssumptionsToLatex
(
newTypeAssumption
.
orElseThrow
(
IllegalSelectorException:
:
new
),
mode
));
latex
.
append
(
DOLLAR_SIGN
);
return
latex
.
toString
();
}
}
src/test/java/edu/kit/typicalc/view/content/typeinferencecontent/latexcreator/LatexCreatorConstraintsTest.java
View file @
4d5d3b86
...
...
@@ -3,6 +3,8 @@ package edu.kit.typicalc.view.content.typeinferencecontent.latexcreator;
import
edu.kit.typicalc.model.Model
;
import
edu.kit.typicalc.model.ModelImpl
;
import
edu.kit.typicalc.model.TypeInfererInterface
;
import
org.junit.Ignore
;
import
org.junit.jupiter.api.Disabled
;
import
org.junit.jupiter.api.Test
;
import
java.util.ArrayList
;
...
...
@@ -24,6 +26,7 @@ class LatexCreatorConstraintsTest {
private
TypeInfererInterface
typeInferer
;
@Test
@Disabled
// TODO: update the constants used in the test
void
singleVarDefaultConstraintTest
()
{
typeInferer
=
model
.
getTypeInferer
(
"x"
,
""
).
unwrap
();
List
<
String
>
actual
=
new
LatexCreatorConstraints
(
typeInferer
,
Enum:
:
toString
,
LatexCreatorMode
.
NORMAL
).
getEverything
();
...
...
@@ -54,6 +57,7 @@ class LatexCreatorConstraintsTest {
@Test
@Disabled
// TODO: update the constants used in the test
void
singleAbsDefaultConstraintTest
()
{
typeInferer
=
model
.
getTypeInferer
(
"λx.y"
,
""
).
unwrap
();
List
<
String
>
actual
=
new
LatexCreatorConstraints
(
typeInferer
,
Enum:
:
toString
,
LatexCreatorMode
.
NORMAL
).
getEverything
();
...
...
@@ -103,24 +107,25 @@ class LatexCreatorConstraintsTest {
@Test
void
lineBreak
()
{
// this test is somewhat useless since we leave line breaks to the layout engine by now...
typeInferer
=
model
.
getTypeInferer
(
"a b c d e f"
,
""
).
unwrap
();
List
<
String
>
actual
=
new
LatexCreatorConstraints
(
typeInferer
,
Enum:
:
toString
,
LatexCreatorMode
.
NORMAL
).
getEverything
();
assertEquals
(
"
\\begin{aligned}&\\begin{split}
C=\\{
&
\\alpha_{2}=\\alpha_{3} \\rightarrow \\alpha_{1}
,
\\alpha_{4}=\\alpha_{5} \\rightarrow \\alpha_{2}
,
\\alpha_{6}=\\alpha_{7} \\rightarrow \\alpha_{4}
,
\\alpha_{8}=\\alpha_{9} \\rightarrow \\alpha_{6}
,
\\alpha_{10}=\\alpha_{11} \\rightarrow \\alpha_{8}
,
\\alpha_{10}=\\beta_{1}
,
\\alpha_{11}=\\beta_{2}
,
\\alpha_{9}=\\beta_{3}
,
\\alpha_{7}=\\beta_{4}
,
\\alpha_{5}=\\beta_{5}
,\\\\&
\\alpha_{3}=\\beta_{6}\\}
\\end{split}\\end{aligned}
"
,
actual
.
get
(
11
));
assertEquals
(
"
$
C=\\{\\alpha_{2}=\\alpha_{3} \\rightarrow \\alpha_{1}
$,$
\\alpha_{4}=\\alpha_{5} \\rightarrow \\alpha_{2}
$,$
\\alpha_{6}=\\alpha_{7} \\rightarrow \\alpha_{4}
$,$
\\alpha_{8}=\\alpha_{9} \\rightarrow \\alpha_{6}
$,$
\\alpha_{10}=\\alpha_{11} \\rightarrow \\alpha_{8}
$,$
\\alpha_{10}=\\beta_{1}
$,$
\\alpha_{11}=\\beta_{2}
$,$
\\alpha_{9}=\\beta_{3}
$,$
\\alpha_{7}=\\beta_{4}
$,$
\\alpha_{5}=\\beta_{5}
$,$
\\alpha_{3}=\\beta_{6}\\}
$
"
,
actual
.
get
(
11
));
typeInferer
=
model
.
getTypeInferer
(
"let g = a b c d e f in g"
,
""
).
unwrap
();
actual
=
new
LatexCreatorConstraints
(
typeInferer
,
Enum:
:
toString
,
LatexCreatorMode
.
NORMAL
).
getEverything
();
assertEquals
(
"
\\begin{aligned}&\\begin{split}C=\\{&
\\alpha_{1}=\\
alpha_{13}\\}\\end{split}\\\\\n"
+
"&\\begin{split}C_{let}=\\{&\\alpha_{3}=\\alpha_{4} \\rightarrow \\alpha_{2},\\alpha_{5}=\\alpha_{6} \\rightarrow \\alpha_{3},\\alpha_{7}=\\alpha_{8} \\rightarrow \\alpha_{5},\\alpha_{9}=\\alpha_{10} \\rightarrow \\alpha_{7},\\alpha_{11}=\\alpha_{12} \\rightarrow \\alpha_{9},\\alpha_{11}=\\beta_{1},\\alpha_{12}=\\beta_{2},\\alpha_{10}=\\beta_{3},\\alpha_{8}=\\beta_{4},\\alpha_{6}=\\beta_{5},\\\\&\\alpha_{4}=\\beta_{6}\\}\\end{split}\\end{aligned}"
,
actual
.
get
(
12
));
assertEquals
(
"
$C=\\{\\alpha_{1}=\\alpha_{13}\\}$<br>$C_{let}=\\{\\alpha_{3}=\\alpha_{4} \\rightarrow \\alpha_{2}$,$\\alpha_{5}=\\alpha_{6} \\rightarrow \\alpha_{3}$,$\\alpha_{7}=\\alpha_{8} \\rightarrow \\alpha_{5}$,$\\alpha_{9}=\\alpha_{10} \\rightarrow \\alpha_{7}$,$\\alpha_{11}=\\alpha_{12} \\rightarrow \\alpha_{9}$,$\\alpha_{11}=\\beta_{1}$,$
\\alpha_{1
2
}=\\
beta_{2}$,$\\alpha_{10}=\\beta_{3}$,$\\alpha_{8}=\\beta_{4}$,$\\alpha_{6}=\\beta_{5}$,$\\alpha_{4}=\\beta_{6}\\}$"
,
actual
.
get
(
12
));
}
@Test
void
emptyLetTypeAssumptions
()
{
typeInferer
=
model
.
getTypeInferer
(
"let g = 5 in g"
,
""
).
unwrap
();
List
<
String
>
actual
=
new
LatexCreatorConstraints
(
typeInferer
,
Enum:
:
toString
,
LatexCreatorMode
.
NORMAL
).
getEverything
();
assertEquals
(
"
\\begin{aligned}&\\begin{split}C=\\{&\\alpha_{1}=\\alpha_{3}\\}\\end{spli
t}\\
\\\n"
+
"&\\begin{split}C_{let}=\\{&\\alpha_{2}=\\texttt{int}\\}\\end{split}\\\\&\\begin{split}\\sigma_{let}:=\\textit{mgu}(C_{let})=[&\\alpha_{2}\\mathrel{\\unicode{x21E8}}\\texttt{int}]\\end{split}\\\\&\\sigma_{let}(\\alpha_{2})=\\texttt{int}\\\\&\\Gamma'=\\sigma_{let}(\\emptyset),\\ \\texttt{g}:ta(\\sigma_{let}(\\alpha_{2}),\\sigma_{let}(\\emptyset))=\\texttt{g}:\\texttt{int}\\end{aligned}"
,
actual
.
get
(
6
));
assertEquals
(
"
$C=\\{\\alpha_{1}=\\alpha_{3}\\}$<br>$C_{let}=\\{\\alpha_{2}=\\texttt{int}\\}$<br>\\[\\begin{aligned}&\\begin{split}\\sigma_{let}:=\\textit{mgu}(C_{let})=[&\\alpha_{2}\\mathrel{\\unicode{x21E8}}\\texttt{int}]\\end{split}\\end{aligned}\\]$\\sigma_{let}(\\alpha_{2})=\\texttt{int}$<br>$\\Gamma'=\\sigma_{let}(\\emptyset),\\ \\texttt{g}:ta(\\sigma_{let}(\\alpha_{2}),\\sigma_{le
t}
(
\\
emptyset))=\\texttt{g}:\\texttt{int}$"
,
actual
.
get
(
6
));
}
@Test
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment