diff --git a/src/compiler/tests.rs b/src/compiler/tests.rs index c8012a1..2915262 100644 --- a/src/compiler/tests.rs +++ b/src/compiler/tests.rs @@ -1,8 +1,8 @@ use crate::parser::{tokenize, parse}; -use crate::compiler::meta_compile; #[test] fn test_compile() { + use crate::compiler::*; let src = " (module Shader Logical GLSL450) (import :std GLSL.std.450) @@ -19,7 +19,65 @@ fn test_compile() { 1.0))) "; let mut ast = parse(tokenize(src)); - println!("{:?}", ast); + println!("{:#?}", ast); let module = meta_compile(&mut ast); - println!("{:?}", module); + println!("{:#?}", module); + //let test_module: Module = Module { capabilities: [Shader], entry_points: [EntryPoint { execution_model: Fragment, execution_mode: OriginUpperLeft, name: "main", interface: [":frag-coord", ":out-color"] }], globals: [GlobalVariable { name: "frag-coord", typ: "*v4f32i", storage_class: Input, decorations: [Builtin(FragCoord)] }, GlobalVariable { name: "out-color", typ: "*v4f32o", storage_class: Output, decorations: [Location(0)] }], functions: [Function { name: "main", return_type: "void", arguments: [], body: Some([]), ast: Some(List([List([Symbol("store-ptr"), List([Symbol("out-color")]), List([Symbol("v4f32i"), List([Symbol("/"), List([Symbol(".xy"), List([Symbol("load-ptr"), Symbol("frag-coord")])]), List([Symbol("v2f32"), Symbol("1920.0"), Symbol("1080.0")])]), Symbol("1.0"), Symbol("1.0")])])])) }], memory_model: Memory { addressing_model: Logical, memory_model: GLSL450 }, imports: [Import { name: ":std", value: "GLSL.std.450" }] }; + let test_module = Module { + capabilities: vec![Capability::Shader], + entry_points: vec![EntryPoint { + execution_model: ExecutionModel::Fragment, + execution_mode: ExecutionMode::OriginUpperLeft, + name: "main".to_string(), + interface: vec![":frag-coord".to_string(), ":out-color".to_string()], + }], + globals: vec![ + GlobalVariable { + name: "frag-coord".to_string(), + typ: "*v4f32i".to_string(), + storage_class: StorageClass::Input, + decorations: vec![Decoration::Builtin(BuiltinDecoration::FragCoord)], + }, + GlobalVariable { + name: "out-color".to_string(), + typ: "*v4f32o".to_string(), + storage_class: StorageClass::Output, + decorations: vec![Decoration::Location(0)], + }, + ], + functions: vec![Function { + name: "main".to_string(), + return_type: "void".to_string(), + arguments: vec![], + body: Some(vec![]), + ast: Some(Ast::List(vec![ + Ast::List(vec![ + Ast::Symbol("store-ptr".to_string()), + Ast::List(vec![Ast::Symbol("out-color".to_string())]), + Ast::List(vec![ + Ast::Symbol("v4f32i".to_string()), + Ast::List(vec![ + Ast::Symbol("/".to_string()), + Ast::List(vec![ + Ast::Symbol(".xy".to_string()), + Ast::List(vec![Ast::Symbol("load-ptr".to_string()), Ast::Symbol("frag-coord".to_string())]), + ]), + Ast::List(vec![Ast::Symbol("v2f32".to_string()), Ast::Symbol("1920.0".to_string()), Ast::Symbol("1080.0".to_string())]), + ]), + Ast::Symbol("1.0".to_string()), + Ast::Symbol("1.0".to_string()), + ]), + ]), + ])), + }], + memory_model: Memory { + addressing_model: AddressingModel::Logical, + memory_model: MemoryModel::GLSL450, + }, + imports: vec![Import { + name: ":std".to_string(), + value: "GLSL.std.450".to_string(), + }], + }; + assert_eq!(module, test_module); } \ No newline at end of file