1#![doc = include_str!("readme.md")]
2#![feature(new_range_api)]
3#![doc(html_logo_url = "https://raw.githubusercontent.com/ygg-lang/oaks/refs/heads/dev/documents/logo.svg")]
4#![doc(html_favicon_url = "https://raw.githubusercontent.com/ygg-lang/oaks/refs/heads/dev/documents/logo.svg")]
5#![warn(missing_docs)]
6pub mod ast;
9mod builder;
10pub mod language;
11pub mod lexer;
12#[cfg(any(feature = "lsp", feature = "oak-highlight", feature = "oak-pretty-print"))]
13pub mod lsp;
14pub mod parser;
15
16pub use crate::{builder::WolframBuilder, language::WolframLanguage, lexer::WolframLexer, parser::WolframParser};
17pub use lexer::token_type::WolframTokenType;
18pub use oak_core::{ElementType, TokenType};
19pub use parser::element_type::WolframElementType;
20
21#[cfg(test)]
22mod tests {
23 use super::*;
24 use oak_core::{Builder, SourceText, parser::ParseSession};
25
26 #[test]
27 fn test_functional_parsing() {
28 let language = WolframLanguage::default();
29 let builder = WolframBuilder::new(&language);
30 let mut session = ParseSession::<WolframLanguage>::default();
31
32 let code = "f @ x + g /@ list // h";
33 let source = SourceText::new(code);
34 let output = builder.build(&source, &[], &mut session);
35
36 assert!(output.result.is_ok());
37 }
39
40 #[test]
41 fn test_pure_function() {
42 let language = WolframLanguage::default();
43 let builder = WolframBuilder::new(&language);
44 let mut session = ParseSession::<WolframLanguage>::default();
45
46 let code = "# + 1 &";
47 let source = SourceText::new(code);
48 let output = builder.build(&source, &[], &mut session);
49
50 assert!(output.result.is_ok());
51 }
52
53 #[test]
54 fn test_apply_level_and_map_all() {
55 let language = WolframLanguage::default();
56 let builder = WolframBuilder::new(&language);
57 let mut session = ParseSession::<WolframLanguage>::default();
58
59 let code = "f @@@ expr + g //@ list";
60 let source = SourceText::new(code);
61 let output = builder.build(&source, &[], &mut session);
62
63 assert!(output.result.is_ok());
64 }
65
66 #[test]
67 fn test_nested_calls() {
68 let language = WolframLanguage::default();
69 let builder = WolframBuilder::new(&language);
70 let mut session = ParseSession::<WolframLanguage>::default();
71
72 let code = "f[x][y][z]";
73 let source = SourceText::new(code);
74 let output = builder.build(&source, &[], &mut session);
75
76 assert!(output.result.is_ok());
77 }
78}