|  |  |  | @ -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); | 
			
		
	
		
			
				
					|  |  |  |  | } |