From 09453ccc85f3745e817fe454fa8b3c84be0bb3b9 Mon Sep 17 00:00:00 2001 From: Maximilian Stemmer-Grabow Date: Sun, 11 Nov 2018 23:26:16 +0100 Subject: [PATCH] Add test cases for semantic analysis --- semantic/array_access.java | 8 +++++ semantic/array_summation.mj | 30 +++++++++++++++++++ semantic/duplicate_class.invalid.mj | 2 ++ semantic/duplicate_field.invalid.mj | 7 +++++ semantic/empty_while.java | 5 ++++ semantic/field_shadowing.java | 11 +++++++ .../invalid_arithmetic_comparison.invalid.mj | 13 ++++++++ semantic/minimal_valid_program.java | 3 ++ semantic/mismatching_return_type.invalid.mj | 11 +++++++ .../mismatching_type_comparison.invalid.mj | 19 ++++++++++++ semantic/missing_static_method.invalid.java | 5 ++++ semantic/multiple_static_methods.invalid.java | 4 +++ semantic/redeclaration_parameter.invalid.mj | 7 +++++ semantic/redeclaration_same_scope.invalid.mj | 6 ++++ semantic/redeclaration_shadowing.invalid.mj | 13 ++++++++ semantic/renamed_main_method.invalid.java | 3 ++ semantic/simple_nested_if_else.java | 12 ++++++++ semantic/special_param_usage.invalid.mj | 5 ++++ semantic/standard_library_calls.mj | 11 +++++++ semantic/static_method_call.invalid.mj | 9 ++++++ semantic/static_method_throws.java | 3 ++ semantic/string_usage.invalid.mj | 4 +++ semantic/usage_before_declaration_field.java | 12 ++++++++ semantic/usage_before_declaration_method.java | 11 +++++++ 24 files changed, 214 insertions(+) create mode 100644 semantic/array_access.java create mode 100644 semantic/array_summation.mj create mode 100644 semantic/duplicate_class.invalid.mj create mode 100644 semantic/duplicate_field.invalid.mj create mode 100644 semantic/empty_while.java create mode 100644 semantic/field_shadowing.java create mode 100644 semantic/invalid_arithmetic_comparison.invalid.mj create mode 100644 semantic/minimal_valid_program.java create mode 100644 semantic/mismatching_return_type.invalid.mj create mode 100644 semantic/mismatching_type_comparison.invalid.mj create mode 100644 semantic/missing_static_method.invalid.java create mode 100644 semantic/multiple_static_methods.invalid.java create mode 100644 semantic/redeclaration_parameter.invalid.mj create mode 100644 semantic/redeclaration_same_scope.invalid.mj create mode 100644 semantic/redeclaration_shadowing.invalid.mj create mode 100644 semantic/renamed_main_method.invalid.java create mode 100644 semantic/simple_nested_if_else.java create mode 100644 semantic/special_param_usage.invalid.mj create mode 100644 semantic/standard_library_calls.mj create mode 100644 semantic/static_method_call.invalid.mj create mode 100644 semantic/static_method_throws.java create mode 100644 semantic/string_usage.invalid.mj create mode 100644 semantic/usage_before_declaration_field.java create mode 100644 semantic/usage_before_declaration_method.java diff --git a/semantic/array_access.java b/semantic/array_access.java new file mode 100644 index 0000000..71877cf --- /dev/null +++ b/semantic/array_access.java @@ -0,0 +1,8 @@ +class ArrayAccess { + + public static void main(String[] args) { + int[] array = new int[3]; + array[2] = 42; + int elem = array[2]; + } +} diff --git a/semantic/array_summation.mj b/semantic/array_summation.mj new file mode 100644 index 0000000..4a349f2 --- /dev/null +++ b/semantic/array_summation.mj @@ -0,0 +1,30 @@ +class Summator { + + public int sum(int[] array, int len) { + int sum = 0; + int i = 0; + while(i < len) { + sum = sum + array[i]; + i = i + 1; + } + return sum; + } + + public static void main(String[] args) { + + Summator acc = new Summator(); + + int arrayLen = System.in.read(); + int[] array = new int[arrayLen]; + + int i = 0; + while(i < arrayLen) { + array[i] = System.in.read(); + i = i + 1; + } + + int arraySum = acc.sum(array, arrayLen); + System.out.write(arraySum); + System.out.flush(); + } +} diff --git a/semantic/duplicate_class.invalid.mj b/semantic/duplicate_class.invalid.mj new file mode 100644 index 0000000..7aaedc1 --- /dev/null +++ b/semantic/duplicate_class.invalid.mj @@ -0,0 +1,2 @@ +class DuplicateClass {} +class DuplicateClass {} diff --git a/semantic/duplicate_field.invalid.mj b/semantic/duplicate_field.invalid.mj new file mode 100644 index 0000000..77529ad --- /dev/null +++ b/semantic/duplicate_field.invalid.mj @@ -0,0 +1,7 @@ +class DuplicateField { + + public int duplicate; + public int duplicate; + + public static void main(String[] args) {} +} diff --git a/semantic/empty_while.java b/semantic/empty_while.java new file mode 100644 index 0000000..6902329 --- /dev/null +++ b/semantic/empty_while.java @@ -0,0 +1,5 @@ +class EmptyWhile { + public static void main(String[] args) { + while(true); + } +} diff --git a/semantic/field_shadowing.java b/semantic/field_shadowing.java new file mode 100644 index 0000000..21cd20f --- /dev/null +++ b/semantic/field_shadowing.java @@ -0,0 +1,11 @@ +class FieldShadowing { + + public int x; + + public static void main(String[] args) {} + + public void test() { + int x = 42; + this.x = x; + } +} diff --git a/semantic/invalid_arithmetic_comparison.invalid.mj b/semantic/invalid_arithmetic_comparison.invalid.mj new file mode 100644 index 0000000..52193b3 --- /dev/null +++ b/semantic/invalid_arithmetic_comparison.invalid.mj @@ -0,0 +1,13 @@ +class MismatchingTypeComparison { + public static void main(String[] args) { + boolean x = false; + boolean y = true; + + boolean a; + + a = x < y; + a = x <= y; + a = x > y; + a = x >= y; + } +} diff --git a/semantic/minimal_valid_program.java b/semantic/minimal_valid_program.java new file mode 100644 index 0000000..f2ae6a8 --- /dev/null +++ b/semantic/minimal_valid_program.java @@ -0,0 +1,3 @@ +class MyClass { + public static void main(String[] args) {} +} diff --git a/semantic/mismatching_return_type.invalid.mj b/semantic/mismatching_return_type.invalid.mj new file mode 100644 index 0000000..46cde72 --- /dev/null +++ b/semantic/mismatching_return_type.invalid.mj @@ -0,0 +1,11 @@ +class DeepThought { + public static void main(String[] args) { + DeepThought a = new DeepThought(); + + boolean b = a.returnTheAnswer(); + } + + public int returnTheAnswer() { + return 42; + } +} diff --git a/semantic/mismatching_type_comparison.invalid.mj b/semantic/mismatching_type_comparison.invalid.mj new file mode 100644 index 0000000..4b68cfb --- /dev/null +++ b/semantic/mismatching_type_comparison.invalid.mj @@ -0,0 +1,19 @@ +class MismatchingTypeComparison { + public static void main(String[] args) { + int a = 10; + int b = 42; + + boolean x = false; + boolean y = true; + + boolean z; + + z = a < x; + z = a <= x; + z = a > x; + z = a >= x; + + z = a != x; + z = b != y; + } +} diff --git a/semantic/missing_static_method.invalid.java b/semantic/missing_static_method.invalid.java new file mode 100644 index 0000000..b90fb9a --- /dev/null +++ b/semantic/missing_static_method.invalid.java @@ -0,0 +1,5 @@ +class MissingStaticMethod { + public void test() { + int a = 42; + } +} diff --git a/semantic/multiple_static_methods.invalid.java b/semantic/multiple_static_methods.invalid.java new file mode 100644 index 0000000..0c1742b --- /dev/null +++ b/semantic/multiple_static_methods.invalid.java @@ -0,0 +1,4 @@ +class MultipleStaticMethods { + public static void main(String[] args) {} + public static void test(String[] args) {} +} diff --git a/semantic/redeclaration_parameter.invalid.mj b/semantic/redeclaration_parameter.invalid.mj new file mode 100644 index 0000000..0ef0d81 --- /dev/null +++ b/semantic/redeclaration_parameter.invalid.mj @@ -0,0 +1,7 @@ +class Test { + public static void main(String[] args) { } + + public void test(int a) { + int a = 23; + } +} diff --git a/semantic/redeclaration_same_scope.invalid.mj b/semantic/redeclaration_same_scope.invalid.mj new file mode 100644 index 0000000..5118b61 --- /dev/null +++ b/semantic/redeclaration_same_scope.invalid.mj @@ -0,0 +1,6 @@ +class RedeclarationSameScope { + public static void main(String[] args) { + int a = 0; + int a = 42; + } +} diff --git a/semantic/redeclaration_shadowing.invalid.mj b/semantic/redeclaration_shadowing.invalid.mj new file mode 100644 index 0000000..0afb9d5 --- /dev/null +++ b/semantic/redeclaration_shadowing.invalid.mj @@ -0,0 +1,13 @@ +class Test { + public static void main(String[] args) { + + } + + public void test() { + int a = 0; + + { + int a = 42; + } + } +} diff --git a/semantic/renamed_main_method.invalid.java b/semantic/renamed_main_method.invalid.java new file mode 100644 index 0000000..7f60a57 --- /dev/null +++ b/semantic/renamed_main_method.invalid.java @@ -0,0 +1,3 @@ +class Test { + public static void test(String[] params) {} +} diff --git a/semantic/simple_nested_if_else.java b/semantic/simple_nested_if_else.java new file mode 100644 index 0000000..20f5a44 --- /dev/null +++ b/semantic/simple_nested_if_else.java @@ -0,0 +1,12 @@ +class Test { + public static void main(String[] args) {} + + public boolean test() { + int a = 10; + if(a > 0) + if(a > 5) + return true; + else return false; + else return true; + } +} diff --git a/semantic/special_param_usage.invalid.mj b/semantic/special_param_usage.invalid.mj new file mode 100644 index 0000000..4f08ced --- /dev/null +++ b/semantic/special_param_usage.invalid.mj @@ -0,0 +1,5 @@ +class SpecialParamUsage { + public static void main(String[] args) { + String[] myArgs = args; + } +} diff --git a/semantic/standard_library_calls.mj b/semantic/standard_library_calls.mj new file mode 100644 index 0000000..70e5580 --- /dev/null +++ b/semantic/standard_library_calls.mj @@ -0,0 +1,11 @@ +class StandardLibraryCalls { + public static void main(String[] args) { + int a = 42; + + int b = System.in.read(); + + System.out.println(a); + System.out.write(a); + System.out.flush(); + } +} diff --git a/semantic/static_method_call.invalid.mj b/semantic/static_method_call.invalid.mj new file mode 100644 index 0000000..cc5694c --- /dev/null +++ b/semantic/static_method_call.invalid.mj @@ -0,0 +1,9 @@ +class StaticMethodCall { + public static void main(String[] args) {} + + public void test() { + int arg = 10; + main(arg); + } +} + diff --git a/semantic/static_method_throws.java b/semantic/static_method_throws.java new file mode 100644 index 0000000..16d76ae --- /dev/null +++ b/semantic/static_method_throws.java @@ -0,0 +1,3 @@ +class StaticMethodThrows { + public static void main(String[] args) throws RuntimeException {} +} diff --git a/semantic/string_usage.invalid.mj b/semantic/string_usage.invalid.mj new file mode 100644 index 0000000..be458c8 --- /dev/null +++ b/semantic/string_usage.invalid.mj @@ -0,0 +1,4 @@ +class StringUsage { + public String test; + public static void main(String[] args) {} +} diff --git a/semantic/usage_before_declaration_field.java b/semantic/usage_before_declaration_field.java new file mode 100644 index 0000000..406b1a0 --- /dev/null +++ b/semantic/usage_before_declaration_field.java @@ -0,0 +1,12 @@ +class UsageBeforeDeclarationField { + public static void main(String[] args) { + UsageBeforeDeclarationField x = new UsageBeforeDeclarationField(); + x.test(); + } + + public void test() { + a = 42; + } + + public int a; +} diff --git a/semantic/usage_before_declaration_method.java b/semantic/usage_before_declaration_method.java new file mode 100644 index 0000000..8ae1d96 --- /dev/null +++ b/semantic/usage_before_declaration_method.java @@ -0,0 +1,11 @@ +class UsageBeforeDeclarationMethod { + public static void main(String[] args) {} + + public void methodA() { + methodB(); + } + + public void methodB() { + methodA(); + } +} -- GitLab