diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index c5a07289f4b38cc..7176912e1fd2778 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -9,6 +9,7 @@ add_subdirectory(LibEDID) add_subdirectory(LibELF) add_subdirectory(LibGfx) add_subdirectory(LibGL) +add_subdirectory(LibGLSL) add_subdirectory(LibIMAP) add_subdirectory(LibJS) add_subdirectory(LibLocale) diff --git a/Userland/Libraries/LibGLSL/CMakeLists.txt b/Userland/Libraries/LibGLSL/CMakeLists.txt index 0e98f691c8f5fb5..ec4a4daa739081e 100644 --- a/Userland/Libraries/LibGLSL/CMakeLists.txt +++ b/Userland/Libraries/LibGLSL/CMakeLists.txt @@ -10,3 +10,5 @@ set(SOURCES serenity_lib(LibGLSL glsl) target_link_libraries(LibGLSL PRIVATE LibGPU) + +install(DIRECTORY Tests/ DESTINATION home/anon/Tests/glsl-tests) diff --git a/Userland/Libraries/LibGLSL/Tests/parser/discard.ast b/Userland/Libraries/LibGLSL/Tests/parser/discard.ast new file mode 100644 index 000000000000000..40b6b04956879e4 --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/discard.ast @@ -0,0 +1,11 @@ +TranslationUnit[0:0->3:0] + FunctionDeclaration[0:0->3:0] + Type[0:0->0:3] + void + foo + ( + ) + FunctionDefinition[1:0->3:0] + { + DiscardStatement[2:4->2:11] + } diff --git a/Userland/Libraries/LibGLSL/Tests/parser/discard.glsl b/Userland/Libraries/LibGLSL/Tests/parser/discard.glsl new file mode 100644 index 000000000000000..b46c6fb64a17767 --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/discard.glsl @@ -0,0 +1,4 @@ +void foo() +{ + discard; +} \ No newline at end of file diff --git a/Userland/Libraries/LibGLSL/Tests/parser/expression.ast b/Userland/Libraries/LibGLSL/Tests/parser/expression.ast new file mode 100644 index 000000000000000..7f0b8fa60b140e9 --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/expression.ast @@ -0,0 +1,63 @@ +TranslationUnit[0:0->3:0] + FunctionDeclaration[0:0->3:0] + Type[0:0->0:3] + void + foo + ( + ) + FunctionDefinition[1:0->3:0] + { + VariableDeclaration[2:4->2:66] + Type[2:4->2:6] + int + a + BinaryExpression[2:12->2:66] + BinaryExpression[2:12->2:57] + BinaryExpression[2:12->2:48] + BinaryExpression[2:12->2:36] + BinaryExpression[2:12->2:22] + NumericLiteral[2:12->2:12] + 1 + + + BinaryExpression[2:16->2:22] + NumericLiteral[2:16->2:16] + 2 + * + NumericLiteral[2:20->2:20] + 3 + + + BinaryExpression[2:24->2:36] + BinaryExpression[2:25->2:30] + NumericLiteral[2:25->2:25] + 4 + - + NumericLiteral[2:29->2:29] + 2 + / + NumericLiteral[2:34->2:34] + 2 + + + FunctionCall[2:38->2:48] + Name[2:38->2:40] + max + ( + NumericLiteral[2:42->2:42] + 7 + NumericLiteral[2:45->2:45] + 8 + ) + - + MemberExpression[2:50->2:57] + Name[2:50->2:52] + bar + Name[2:54->2:55] + xy + + + ArrayElementExpression[2:59->2:66] + Name[2:59->2:61] + abc + [ + NumericLiteral[2:63->2:64] + 13 + ] + } diff --git a/Userland/Libraries/LibGLSL/Tests/parser/expression.ast.1 b/Userland/Libraries/LibGLSL/Tests/parser/expression.ast.1 new file mode 100644 index 000000000000000..7f0b8fa60b140e9 --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/expression.ast.1 @@ -0,0 +1,63 @@ +TranslationUnit[0:0->3:0] + FunctionDeclaration[0:0->3:0] + Type[0:0->0:3] + void + foo + ( + ) + FunctionDefinition[1:0->3:0] + { + VariableDeclaration[2:4->2:66] + Type[2:4->2:6] + int + a + BinaryExpression[2:12->2:66] + BinaryExpression[2:12->2:57] + BinaryExpression[2:12->2:48] + BinaryExpression[2:12->2:36] + BinaryExpression[2:12->2:22] + NumericLiteral[2:12->2:12] + 1 + + + BinaryExpression[2:16->2:22] + NumericLiteral[2:16->2:16] + 2 + * + NumericLiteral[2:20->2:20] + 3 + + + BinaryExpression[2:24->2:36] + BinaryExpression[2:25->2:30] + NumericLiteral[2:25->2:25] + 4 + - + NumericLiteral[2:29->2:29] + 2 + / + NumericLiteral[2:34->2:34] + 2 + + + FunctionCall[2:38->2:48] + Name[2:38->2:40] + max + ( + NumericLiteral[2:42->2:42] + 7 + NumericLiteral[2:45->2:45] + 8 + ) + - + MemberExpression[2:50->2:57] + Name[2:50->2:52] + bar + Name[2:54->2:55] + xy + + + ArrayElementExpression[2:59->2:66] + Name[2:59->2:61] + abc + [ + NumericLiteral[2:63->2:64] + 13 + ] + } diff --git a/Userland/Libraries/LibGLSL/Tests/parser/expression.glsl b/Userland/Libraries/LibGLSL/Tests/parser/expression.glsl new file mode 100644 index 000000000000000..3c30520f2b4a3e0 --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/expression.glsl @@ -0,0 +1,4 @@ +void foo() +{ + int a = 1 + 2 * 3 + (4 - 2) / 2 + max(7, 8) - bar.xy + abc[13]; +} \ No newline at end of file diff --git a/Userland/Libraries/LibGLSL/Tests/parser/for-statement.ast b/Userland/Libraries/LibGLSL/Tests/parser/for-statement.ast new file mode 100644 index 000000000000000..8550eda3a983598 --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/for-statement.ast @@ -0,0 +1,37 @@ +TranslationUnit[0:0->5:0] + FunctionDeclaration[0:0->5:0] + Type[0:0->0:3] + void + main + ( + ) + FunctionDefinition[1:0->5:0] + { + VariableDeclaration[2:4->2:13] + Type[2:4->2:6] + int + b + NumericLiteral[2:12->2:12] + 0 + ForStatement[3:4->4:11] + Initializer: + VariableDeclaration[3:9->3:18] + Type[3:9->3:11] + int + a + NumericLiteral[3:17->3:17] + 0 + Test expression: + BooleanLiteral[3:20->3:23] + true + Update expression: + UnaryExpression[3:26->3:29] + postfix ++ + Name[3:26->3:26] + a + Body: + UnaryExpression[4:8->4:11] + postfix ++ + Name[4:8->4:8] + b + } diff --git a/Userland/Libraries/LibGLSL/Tests/parser/for-statement.glsl b/Userland/Libraries/LibGLSL/Tests/parser/for-statement.glsl new file mode 100644 index 000000000000000..c4407621ca40854 --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/for-statement.glsl @@ -0,0 +1,7 @@ +void main() +{ + int b = 0; + for (int a = 0; true; a++) + b++; +} + diff --git a/Userland/Libraries/LibGLSL/Tests/parser/function-declaration.ast b/Userland/Libraries/LibGLSL/Tests/parser/function-declaration.ast new file mode 100644 index 000000000000000..1a4146188a9621c --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/function-declaration.ast @@ -0,0 +1,15 @@ +TranslationUnit[0:0->0:24] + FunctionDeclaration[0:0->0:24] + Type[0:0->0:2] + int + main + ( + Parameter[0:9->0:13] + a + Type[0:9->0:11] + int + Parameter[0:16->0:22] + b + Type[0:16->0:20] + float + ) diff --git a/Userland/Libraries/LibGLSL/Tests/parser/function-declaration.glsl b/Userland/Libraries/LibGLSL/Tests/parser/function-declaration.glsl new file mode 100644 index 000000000000000..8faf42093ad33e6 --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/function-declaration.glsl @@ -0,0 +1,2 @@ +int main(int a, float b); + diff --git a/Userland/Libraries/LibGLSL/Tests/parser/function-definition.ast b/Userland/Libraries/LibGLSL/Tests/parser/function-definition.ast new file mode 100644 index 000000000000000..95ea1ed6aee01f9 --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/function-definition.ast @@ -0,0 +1,13 @@ +TranslationUnit[0:0->3:0] + FunctionDeclaration[0:0->3:0] + Type[0:0->0:2] + int + main + ( + ) + FunctionDefinition[1:0->3:0] + { + ReturnStatement[2:1->2:9] + NumericLiteral[2:8->2:8] + 1 + } diff --git a/Userland/Libraries/LibGLSL/Tests/parser/function-definition.glsl b/Userland/Libraries/LibGLSL/Tests/parser/function-definition.glsl new file mode 100644 index 000000000000000..89e00ff1cca650c --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/function-definition.glsl @@ -0,0 +1,5 @@ +int main() +{ + return 1; +} + diff --git a/Userland/Libraries/LibGLSL/Tests/parser/if-else.ast b/Userland/Libraries/LibGLSL/Tests/parser/if-else.ast new file mode 100644 index 000000000000000..b3b6cc9abfcf1ea --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/if-else.ast @@ -0,0 +1,26 @@ +TranslationUnit[0:0->6:0] + FunctionDeclaration[0:0->6:0] + Type[0:0->0:3] + bool + foo + ( + ) + FunctionDefinition[1:0->6:0] + { + IfStatement[2:4->5:20] + Predicate: + BinaryExpression[2:8->2:14] + NumericLiteral[2:8->2:8] + 1 + == + NumericLiteral[2:13->2:13] + 2 + Then: + ReturnStatement[3:8->3:19] + BooleanLiteral[3:15->3:18] + true + Else: + ReturnStatement[5:8->5:20] + BooleanLiteral[5:15->5:19] + false + } diff --git a/Userland/Libraries/LibGLSL/Tests/parser/if-else.glsl b/Userland/Libraries/LibGLSL/Tests/parser/if-else.glsl new file mode 100644 index 000000000000000..86f6f17d7d5b1c1 --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/if-else.glsl @@ -0,0 +1,7 @@ +bool foo() +{ + if (1 == 2) + return true; + else + return false; +} \ No newline at end of file diff --git a/Userland/Libraries/LibGLSL/Tests/parser/return.ast b/Userland/Libraries/LibGLSL/Tests/parser/return.ast new file mode 100644 index 000000000000000..03b525274dcdf94 --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/return.ast @@ -0,0 +1,23 @@ +TranslationUnit[0:0->8:0] + FunctionDeclaration[0:0->3:0] + Type[0:0->0:3] + void + foo + ( + ) + FunctionDefinition[1:0->3:0] + { + ReturnStatement[2:4->2:10] + } + FunctionDeclaration[5:0->8:0] + Type[5:0->5:2] + int + bar + ( + ) + FunctionDefinition[6:0->8:0] + { + ReturnStatement[7:4->7:12] + NumericLiteral[7:11->7:11] + 3 + } diff --git a/Userland/Libraries/LibGLSL/Tests/parser/return.glsl b/Userland/Libraries/LibGLSL/Tests/parser/return.glsl new file mode 100644 index 000000000000000..82238284f1ed63c --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/return.glsl @@ -0,0 +1,9 @@ +void foo() +{ + return; +} + +int bar() +{ + return 3; +} \ No newline at end of file diff --git a/Userland/Libraries/LibGLSL/Tests/parser/struct.ast b/Userland/Libraries/LibGLSL/Tests/parser/struct.ast new file mode 100644 index 000000000000000..ae29921d1bf2e84 --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/struct.ast @@ -0,0 +1,7 @@ +TranslationUnit[0:0->3:1] + StructOrClassDeclaration[0:7->3:1] + foo + VariableDeclaration[2:4->3:0] + Type[2:4->2:6] + int + bar diff --git a/Userland/Libraries/LibGLSL/Tests/parser/struct.glsl b/Userland/Libraries/LibGLSL/Tests/parser/struct.glsl new file mode 100644 index 000000000000000..eae7f9dac5a3197 --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/struct.glsl @@ -0,0 +1,4 @@ +struct foo +{ + int bar; +}; \ No newline at end of file diff --git a/Userland/Libraries/LibGLSL/Tests/parser/unary-expression.ast b/Userland/Libraries/LibGLSL/Tests/parser/unary-expression.ast new file mode 100644 index 000000000000000..9b15b2063115ebf --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/unary-expression.ast @@ -0,0 +1,32 @@ +TranslationUnit[0:0->4:0] + FunctionDeclaration[0:0->4:0] + Type[0:0->0:3] + void + foo + ( + ) + FunctionDefinition[1:0->4:0] + { + VariableDeclaration[2:4->2:13] + Type[2:4->2:6] + int + a + NumericLiteral[2:12->2:12] + 7 + VariableDeclaration[3:4->3:22] + Type[3:4->3:6] + int + b + UnaryExpression[3:12->3:22] + prefix ~ + UnaryExpression[3:14->3:21] + prefix ! + UnaryExpression[3:15->3:21] + prefix ~ + UnaryExpression[3:16->3:21] + prefix ++ + UnaryExpression[3:18->3:21] + postfix ++ + Name[3:18->3:18] + a + } diff --git a/Userland/Libraries/LibGLSL/Tests/parser/unary-expression.glsl b/Userland/Libraries/LibGLSL/Tests/parser/unary-expression.glsl new file mode 100644 index 000000000000000..307a0bd45aa4a08 --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/unary-expression.glsl @@ -0,0 +1,5 @@ +void foo() +{ + int a = 7; + int b = ~(!~++a++); +} \ No newline at end of file diff --git a/Userland/Libraries/LibGLSL/Tests/parser/variable-declaration.ast b/Userland/Libraries/LibGLSL/Tests/parser/variable-declaration.ast new file mode 100644 index 000000000000000..1bc106a3b04f26a --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/variable-declaration.ast @@ -0,0 +1,13 @@ +TranslationUnit[0:0->2:16] + VariableDeclaration[0:0->1:0] + Type[0:0->0:11] + uniform vec3 + u_Color + VariableDeclaration[1:0->2:0] + Type[1:0->1:6] + in vec3 + i_VertexColor + VariableDeclaration[2:0->2:16] + Type[2:0->2:7] + out vec4 + o_Color diff --git a/Userland/Libraries/LibGLSL/Tests/parser/variable-declaration.glsl b/Userland/Libraries/LibGLSL/Tests/parser/variable-declaration.glsl new file mode 100644 index 000000000000000..74c571035649920 --- /dev/null +++ b/Userland/Libraries/LibGLSL/Tests/parser/variable-declaration.glsl @@ -0,0 +1,4 @@ +uniform vec3 u_Color; +in vec3 i_VertexColor; +out vec4 o_Color; +