diff options
Diffstat (limited to 'ql/test/semantic_analysis')
55 files changed, 380 insertions, 0 deletions
diff --git a/ql/test/semantic_analysis/__pycache__/test_semantic_analysis.cpython-35.pyc b/ql/test/semantic_analysis/__pycache__/test_semantic_analysis.cpython-35.pyc Binary files differnew file mode 100644 index 0000000..5b92465 --- /dev/null +++ b/ql/test/semantic_analysis/__pycache__/test_semantic_analysis.cpython-35.pyc diff --git a/ql/test/semantic_analysis/invalid/test001.ql b/ql/test/semantic_analysis/invalid/test001.ql new file mode 100644 index 0000000..42b1b41 --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test001.ql @@ -0,0 +1,9 @@ +// Reference to unknown identifier in condition +form testForm { + if (unknownIdentifier) { + "First Question" + anotherIdentifier : integer + } + "Second Question" + testIdentifier : boolean +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test002.ql b/ql/test/semantic_analysis/invalid/test002.ql new file mode 100644 index 0000000..856447d --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test002.ql @@ -0,0 +1,9 @@ +// Reference to unknown identifier in computed question +form testForm { + "First Question" + testIdentifier : integer + "Second Question" + anotherIdentifier : integer = testIdentifier + unknownIdentifier +} + + diff --git a/ql/test/semantic_analysis/invalid/test003.ql b/ql/test/semantic_analysis/invalid/test003.ql new file mode 100644 index 0000000..1491a85 --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test003.ql @@ -0,0 +1,13 @@ +// Reference to identifier in condition out of scope +form testForm { + "First Question" + testIdentifier : boolean + if (testIdentifier) { + "Second Question" + anotherIdentifier : integer + } + if (anotherIdentifier) { + "Unreachable Question" + unreachableIdentifier : integer + } +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test004.ql b/ql/test/semantic_analysis/invalid/test004.ql new file mode 100644 index 0000000..5ae3e94 --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test004.ql @@ -0,0 +1,11 @@ +// Reference to identifier in computed question out of scope +form testForm { + "First Question" + testIdentifier : boolean + if (testIdentifier) { + "Second Question" + anotherIdentifier : integer + } + "Third Question" + unknownIdentifier : integer = anotherIdentifier + 1 +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test005.ql b/ql/test/semantic_analysis/invalid/test005.ql new file mode 100644 index 0000000..de066f2 --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test005.ql @@ -0,0 +1,5 @@ +// Identifier dependent on itself (reflexive) +form testForm { + "First Question" + firstIdentifier : integer = firstIdentifier + 1 +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test006.ql b/ql/test/semantic_analysis/invalid/test006.ql new file mode 100644 index 0000000..12cf8f0 --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test006.ql @@ -0,0 +1,7 @@ +// Identifiers dependent on each other (symmetric) +form testForm { + "First Question" + firstIdentifier : integer = secondIdentifier + 1 + "Second Question" + secondIdentifier : integer = firstIdentifier + 1 +} diff --git a/ql/test/semantic_analysis/invalid/test007.ql b/ql/test/semantic_analysis/invalid/test007.ql new file mode 100644 index 0000000..08f4f5f --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test007.ql @@ -0,0 +1,9 @@ +// Identifiers dependent on each other (transitive) +form testForm { + "First Question" + firstIdentifier : integer = secondIdentifier + 1 + "Second Question" + secondIdentifier : integer = thirdIdentifier + 1 + "Third Question" + thirdIdentifier : integer = firstIdentifier + 1 +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test008.ql b/ql/test/semantic_analysis/invalid/test008.ql new file mode 100644 index 0000000..6c8a660 --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test008.ql @@ -0,0 +1,7 @@ +// Different questions with equal identifier +form testForm { + "First Question" + someIdentifier : integer + "Second Question" + someIdentifier : decimal +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test009.ql b/ql/test/semantic_analysis/invalid/test009.ql new file mode 100644 index 0000000..362a2b1 --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test009.ql @@ -0,0 +1,7 @@ +// Equal questions with different types +form testForm { + "First Question" + someIdentifier : integer + "First Question" + someIdentifier : decimal +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test010.ql b/ql/test/semantic_analysis/invalid/test010.ql new file mode 100644 index 0000000..30a03e2 --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test010.ql @@ -0,0 +1,5 @@ +// Incompatible types for addition operation +form testForm { + "First Question" + someIdentifier : decimal = 10.0 + True +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test011.ql b/ql/test/semantic_analysis/invalid/test011.ql new file mode 100644 index 0000000..de59f13 --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test011.ql @@ -0,0 +1,5 @@ +// Incompatible types for subtraction operation +form testForm { + "First Question" + someIdentifier : decimal = 10.0 - True +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test012.ql b/ql/test/semantic_analysis/invalid/test012.ql new file mode 100644 index 0000000..006bd0c --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test012.ql @@ -0,0 +1,5 @@ +// Incompatible types for greater equals operation +form testForm { + "First Question" + someIdentifier : boolean = 10.0 >= True +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test013.ql b/ql/test/semantic_analysis/invalid/test013.ql new file mode 100644 index 0000000..2896f80 --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test013.ql @@ -0,0 +1,5 @@ +// Incompatible types for greater than operation +form testForm { + "First Question" + someIdentifier : boolean = 10.0 > True +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test014.ql b/ql/test/semantic_analysis/invalid/test014.ql new file mode 100644 index 0000000..b5b7774 --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test014.ql @@ -0,0 +1,5 @@ +// Incompatible types for less equals operation +form testForm { + "First Question" + someIdentifier : boolean = 10.0 <= True +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test015.ql b/ql/test/semantic_analysis/invalid/test015.ql new file mode 100644 index 0000000..6c52b37 --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test015.ql @@ -0,0 +1,5 @@ +// Incompatible types for less than operation +form testForm { + "First Question" + someIdentifier : boolean = 10.0 < True +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test016.ql b/ql/test/semantic_analysis/invalid/test016.ql new file mode 100644 index 0000000..dcf98ea --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test016.ql @@ -0,0 +1,5 @@ +// Incompatible types for and operation +form testForm { + "First Question" + someIdentifier : boolean = 10.0 && True +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test017.ql b/ql/test/semantic_analysis/invalid/test017.ql new file mode 100644 index 0000000..9eef105 --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test017.ql @@ -0,0 +1,5 @@ +// Incompatible types for or operation +form testForm { + "First Question" + someIdentifier : boolean = 10.0 || True +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test018.ql b/ql/test/semantic_analysis/invalid/test018.ql new file mode 100644 index 0000000..bd18cf9 --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test018.ql @@ -0,0 +1,5 @@ +// Incompatible types for multiplication operation +form testForm { + "First Question" + someIdentifier : decimal = 10.0 * True +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test019.ql b/ql/test/semantic_analysis/invalid/test019.ql new file mode 100644 index 0000000..69a2c38 --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test019.ql @@ -0,0 +1,5 @@ +// Incompatible types for division operation +form testForm { + "First Question" + someIdentifier : decimal = 10.0 / True +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test020.ql b/ql/test/semantic_analysis/invalid/test020.ql new file mode 100644 index 0000000..538bdf9 --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test020.ql @@ -0,0 +1,5 @@ +// Incompatible result type for addition operation +form testForm { + "First Question" + someIdentifier : integer = 10.1 + 10 +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test021.ql b/ql/test/semantic_analysis/invalid/test021.ql new file mode 100644 index 0000000..74e596d --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test021.ql @@ -0,0 +1,5 @@ +// Incompatible result type for subtraction operation +form testForm { + "First Question" + someIdentifier : integer = 10.1 - 10 +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test022.ql b/ql/test/semantic_analysis/invalid/test022.ql new file mode 100644 index 0000000..9cf774a --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test022.ql @@ -0,0 +1,5 @@ +// Incompatible result type for greater equals operation +form testForm { + "First Question" + someIdentifier : integer = 10.0 >= 10 +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test023.ql b/ql/test/semantic_analysis/invalid/test023.ql new file mode 100644 index 0000000..f7d674b --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test023.ql @@ -0,0 +1,5 @@ +// Incompatible result type for greater than operation +form testForm { + "First Question" + someIdentifier : integer = 10.0 > 10 +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test024.ql b/ql/test/semantic_analysis/invalid/test024.ql new file mode 100644 index 0000000..f262f5c --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test024.ql @@ -0,0 +1,5 @@ +// Incompatible result type for less equals operation +form testForm { + "First Question" + someIdentifier : integer = 10.0 <= 10 +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test025.ql b/ql/test/semantic_analysis/invalid/test025.ql new file mode 100644 index 0000000..ef823b5 --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test025.ql @@ -0,0 +1,5 @@ +// Incompatible result type for less than operation +form testForm { + "First Question" + someIdentifier : integer = 10.0 < 10 +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test026.ql b/ql/test/semantic_analysis/invalid/test026.ql new file mode 100644 index 0000000..b1e8a5b --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test026.ql @@ -0,0 +1,5 @@ +// Incompatible result type for and operation +form testForm { + "First Question" + someIdentifier : integer = True && True +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test027.ql b/ql/test/semantic_analysis/invalid/test027.ql new file mode 100644 index 0000000..262aa0e --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test027.ql @@ -0,0 +1,5 @@ +// Incompatible result type for or operation +form testForm { + "First Question" + someIdentifier : integer = False || True +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test028.ql b/ql/test/semantic_analysis/invalid/test028.ql new file mode 100644 index 0000000..ea02ccd --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test028.ql @@ -0,0 +1,5 @@ +// Incompatible result type for multiplication operation +form testForm { + "First Question" + someIdentifier : integer = 10.1 * 10 +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test029.ql b/ql/test/semantic_analysis/invalid/test029.ql new file mode 100644 index 0000000..23f3c78 --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test029.ql @@ -0,0 +1,5 @@ +// Incompatible result type for division operation +form testForm { + "First Question" + someIdentifier : integer = 10.1 / 10 +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test030.ql b/ql/test/semantic_analysis/invalid/test030.ql new file mode 100644 index 0000000..3de208c --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test030.ql @@ -0,0 +1,7 @@ +// Complex condition with incompatible types +form testForm { + if ((15.5 >= 15) && ((3.0 * True) - 15 > -10 / 2)) { + "First Question" + someIdentifier : integer + } +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test031.ql b/ql/test/semantic_analysis/invalid/test031.ql new file mode 100644 index 0000000..0d6f75c --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test031.ql @@ -0,0 +1,5 @@ +// Complex computed question with incompatible types +form testForm { + "First Question" + someIdentifier : boolean = (25.5 >= True) && ((10.0 / 3) - 15 < -10 * 2) +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/invalid/test032.ql b/ql/test/semantic_analysis/invalid/test032.ql new file mode 100644 index 0000000..9de5ff2 --- /dev/null +++ b/ql/test/semantic_analysis/invalid/test032.ql @@ -0,0 +1,5 @@ +// Complex computed question with incompatible result type +form testForm { + "First Question" + someIdentifier : integer = (25.5 >= 10) && ((10.0 / 3) - 15 < -10 * 2) +} diff --git a/ql/test/semantic_analysis/test_semantic_analysis.py b/ql/test/semantic_analysis/test_semantic_analysis.py new file mode 100644 index 0000000..ca01231 --- /dev/null +++ b/ql/test/semantic_analysis/test_semantic_analysis.py @@ -0,0 +1,39 @@ +from ql.ast.checkers.dependency_checker import DependencyChecker +from ql.ast.checkers.question_checker import QuestionChecker +from ql.ast.checkers.reference_checker import ReferenceChecker +from ql.ast.extractors.extractor import extract_identifier_dependencies +from ql.ast.extractors.extractor import extract_identifier_scopes +from ql.ast.extractors.extractor import extract_identifier_types +from ql.ast.extractors.extractor import extract_questions +from ql.ast.visitors.type_visitor import TypeVisitor +from ql.test.test import Test + + +class TestSemanticAnalysis(Test): + def __init__(self, directory, lexer, parser): + super(TestSemanticAnalysis, self).__init__('semantic analysis', directory) + self.__lexer = lexer + self.__parser = parser + + def test_file(self, file): + ast = self.__parser.parse(file, self.__lexer.lexer) + + reference_errors = ReferenceChecker(extract_identifier_scopes(ast)).errors + if reference_errors: + return False + + dependency_errors = DependencyChecker(extract_identifier_dependencies(ast)).errors + if dependency_errors: + return False + + question_errors = QuestionChecker(extract_questions(ast)).errors + if question_errors: + return False + + type_visitor = TypeVisitor(extract_identifier_types(ast)) + type_visitor.visit(ast) + type_errors = type_visitor.errors + if type_errors: + return False + + return True diff --git a/ql/test/semantic_analysis/valid/test001.ql b/ql/test/semantic_analysis/valid/test001.ql new file mode 100644 index 0000000..d9d037f --- /dev/null +++ b/ql/test/semantic_analysis/valid/test001.ql @@ -0,0 +1,9 @@ +// Identifier reference in condition +form testForm { + "First Question" + testIdentifier : boolean + if (testIdentifier) { + "Second Question" + anotherIdentifier : integer + } +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/valid/test002.ql b/ql/test/semantic_analysis/valid/test002.ql new file mode 100644 index 0000000..afe1f5c --- /dev/null +++ b/ql/test/semantic_analysis/valid/test002.ql @@ -0,0 +1,7 @@ +// Identifier reference in computed question +form testForm { + "First Question" + testIdentifier : integer + "Second Question" + anotherIdentifier : integer = testIdentifier +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/valid/test003.ql b/ql/test/semantic_analysis/valid/test003.ql new file mode 100644 index 0000000..b89d0c1 --- /dev/null +++ b/ql/test/semantic_analysis/valid/test003.ql @@ -0,0 +1,9 @@ +// Identifier declared after reference in condition +form testForm { + if (testIdentifier) { + "First Question" + anotherIdentifier : integer + } + "Second Question" + testIdentifier : boolean +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/valid/test004.ql b/ql/test/semantic_analysis/valid/test004.ql new file mode 100644 index 0000000..8f4feb0 --- /dev/null +++ b/ql/test/semantic_analysis/valid/test004.ql @@ -0,0 +1,7 @@ +// Identifier declared after reference in computed question +form testForm { + "First Question" + anotherIdentifier : integer = testIdentifier + 1 + "Second Question" + testIdentifier : integer +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/valid/test005.ql b/ql/test/semantic_analysis/valid/test005.ql new file mode 100644 index 0000000..8620dc9 --- /dev/null +++ b/ql/test/semantic_analysis/valid/test005.ql @@ -0,0 +1,15 @@ +// Identifier reference in nested condition +form testForm { + "First Question" + firstCondition : boolean + "Second Question" + secondCondition : boolean + if (firstCondition) { + "Third Question" + anotherIdentifier : integer + if (secondCondition) { + "Fourth Question" + yetAnotherIdentifier : decimal + } + } +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/valid/test006.ql b/ql/test/semantic_analysis/valid/test006.ql new file mode 100644 index 0000000..855332e --- /dev/null +++ b/ql/test/semantic_analysis/valid/test006.ql @@ -0,0 +1,13 @@ +// Identifier reference in nested computed question +form testForm { + "First Question" + firstCondition : boolean + "Second Question" + firstInteger : integer + if (firstCondition) { + "Third Question" + anotherIdentifier : integer + "Fourth Question" + yetAnotherIdentifier : integer = firstInteger + 1 + } +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/valid/test007.ql b/ql/test/semantic_analysis/valid/test007.ql new file mode 100644 index 0000000..1338a82 --- /dev/null +++ b/ql/test/semantic_analysis/valid/test007.ql @@ -0,0 +1,9 @@ +// Identifier reference in both condition and computed question +form testForm { + "First Question" + someInteger : integer + if (someInteger > 10) { + "Second Question" + computedInteger : integer = someInteger - 10 + } +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/valid/test008.ql b/ql/test/semantic_analysis/valid/test008.ql new file mode 100644 index 0000000..80205a5 --- /dev/null +++ b/ql/test/semantic_analysis/valid/test008.ql @@ -0,0 +1,9 @@ +// Identifier dependant on second, second dependant on third +form testForm { + "First Question" + firstIdentifier : integer = secondIdentifier + 1 + "Second Question" + secondIdentifier : integer = thirdIdentifier + 1 + "Third Question" + thirdIdentifier : integer +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/valid/test009.ql b/ql/test/semantic_analysis/valid/test009.ql new file mode 100644 index 0000000..7e92ad7 --- /dev/null +++ b/ql/test/semantic_analysis/valid/test009.ql @@ -0,0 +1,7 @@ +// Different questions with equal labels +form testForm { + "First Question" + someIdentifier : integer + "First Question" + anotherIdentifier : decimal +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/valid/test010.ql b/ql/test/semantic_analysis/valid/test010.ql new file mode 100644 index 0000000..eca4ad4 --- /dev/null +++ b/ql/test/semantic_analysis/valid/test010.ql @@ -0,0 +1,5 @@ +// Compatible types for addition operation +form testForm { + "First Question" + someIdentifier : decimal = 10.0 + 10 +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/valid/test011.ql b/ql/test/semantic_analysis/valid/test011.ql new file mode 100644 index 0000000..f47b435 --- /dev/null +++ b/ql/test/semantic_analysis/valid/test011.ql @@ -0,0 +1,5 @@ +// Compatible types for subtraction operation +form testForm { + "First Question" + someIdentifier : decimal = 10.0 - 10 +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/valid/test012.ql b/ql/test/semantic_analysis/valid/test012.ql new file mode 100644 index 0000000..2e7e278 --- /dev/null +++ b/ql/test/semantic_analysis/valid/test012.ql @@ -0,0 +1,5 @@ +// Compatible types for greater equals operation +form testForm { + "First Question" + someIdentifier : boolean = 10.0 == 10 +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/valid/test013.ql b/ql/test/semantic_analysis/valid/test013.ql new file mode 100644 index 0000000..a34566c --- /dev/null +++ b/ql/test/semantic_analysis/valid/test013.ql @@ -0,0 +1,5 @@ +// Compatible types for greater than operation +form testForm { + "First Question" + someIdentifier : boolean = 10.0 > 10 +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/valid/test014.ql b/ql/test/semantic_analysis/valid/test014.ql new file mode 100644 index 0000000..7ee1b86 --- /dev/null +++ b/ql/test/semantic_analysis/valid/test014.ql @@ -0,0 +1,5 @@ +// Compatible types for less equals operation +form testForm { + "First Question" + someIdentifier : boolean = 10.0 <= 10 +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/valid/test015.ql b/ql/test/semantic_analysis/valid/test015.ql new file mode 100644 index 0000000..431c1f0 --- /dev/null +++ b/ql/test/semantic_analysis/valid/test015.ql @@ -0,0 +1,5 @@ +// Compatible types for less than operation +form testForm { + "First Question" + someIdentifier : boolean = 10.0 < 10 +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/valid/test016.ql b/ql/test/semantic_analysis/valid/test016.ql new file mode 100644 index 0000000..8b0bdde --- /dev/null +++ b/ql/test/semantic_analysis/valid/test016.ql @@ -0,0 +1,5 @@ +// Compatible types for and operation +form testForm { + "First Question" + someIdentifier : boolean = True && False +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/valid/test017.ql b/ql/test/semantic_analysis/valid/test017.ql new file mode 100644 index 0000000..851e5ff --- /dev/null +++ b/ql/test/semantic_analysis/valid/test017.ql @@ -0,0 +1,5 @@ +// Compatible types for or operation +form testForm { + "First Question" + someIdentifier : boolean = False || True +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/valid/test018.ql b/ql/test/semantic_analysis/valid/test018.ql new file mode 100644 index 0000000..41d439f --- /dev/null +++ b/ql/test/semantic_analysis/valid/test018.ql @@ -0,0 +1,5 @@ +// Compatible types for multiplication operation +form testForm { + "First Question" + someIdentifier : decimal = 10.0 * 10 +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/valid/test019.ql b/ql/test/semantic_analysis/valid/test019.ql new file mode 100644 index 0000000..36ba458 --- /dev/null +++ b/ql/test/semantic_analysis/valid/test019.ql @@ -0,0 +1,5 @@ +// Compatible types for division operation +form testForm { + "First Question" + someIdentifier : decimal = 10.0 / 10 +} diff --git a/ql/test/semantic_analysis/valid/test020.ql b/ql/test/semantic_analysis/valid/test020.ql new file mode 100644 index 0000000..9fff193 --- /dev/null +++ b/ql/test/semantic_analysis/valid/test020.ql @@ -0,0 +1,7 @@ +// Complex condition with mixed types +form testForm { + if ((15.5 >= 15) && ((3.0 * 3) - 15 > -10 / 2)) { + "First Question" + someIdentifier : integer + } +}
\ No newline at end of file diff --git a/ql/test/semantic_analysis/valid/test021.ql b/ql/test/semantic_analysis/valid/test021.ql new file mode 100644 index 0000000..01ec35c --- /dev/null +++ b/ql/test/semantic_analysis/valid/test021.ql @@ -0,0 +1,5 @@ +// Complex computed question with mixed types +form testForm { + "First Question" + someIdentifier : boolean = (25.5 >= 10) && ((10.0 / 3) - 15 < -10 * 2) +}
\ No newline at end of file |