this repo has no description
www.jonmsterling.com/01HC/
1// SPDX-FileCopyrightText: 2025 The Project Pterodactyl Developers
2//
3// SPDX-License-Identifier: MPL-2.0
4
5import Testing
6
7@testable import PterodactylBuild
8@testable import PterodactylSyntax
9@testable import llbuild2fx
10
11struct BuildTests {
12 @Test
13 func testBlockLayout() async throws {
14 let code = """
15 theory Foo where
16 foo : bar
17 baz : sdf
18 """
19
20 var lexer = PterodactylSyntax.Lexer(input: code)
21 let flatTokens = lexer.tokenize()
22 let blockTokens = BlockLayoutProcessor(tokens: flatTokens).layout()
23
24 #expect(
25 blockTokens.map(\.kind) == [
26 .keyword(.theory), .whitespace, .identifier, .whitespace, .keyword(.where), .blockBegin, .newline, .whitespace, .blockSep, .identifier, .whitespace,
27 .punctuation(.colon),
28 .whitespace, .identifier, .newline, .whitespace, .blockSep, .identifier, .whitespace, .punctuation(.colon), .whitespace, .identifier, .blockEnd, .eof
29 ])
30 }
31
32 @Test
33 func testParse() async throws {
34 let code = """
35 theory Foo where
36 asdf : asdf
37 """
38
39 var lexer = PterodactylSyntax.Lexer(input: code)
40 let flatTokens = lexer.tokenize()
41 let blockTokens = BlockLayoutProcessor(tokens: flatTokens).layout()
42 var parser = Parser(source: code, tokens: blockTokens)
43 Document.parse(&parser, recovery: [])
44
45 #expect(parser.diagnostics.isEmpty)
46 }
47
48 @Test
49 func testImports() async throws {
50 let group = LLBMakeDefaultDispatchGroup()
51 let db = LLBInMemoryCASDatabase(group: group)
52 let functionCache = FXInMemoryFunctionCache(group: group)
53 let executor = FXLocalExecutor()
54 let engine = FXEngine(group: group, db: db, functionCache: functionCache, executor: executor)
55 let client = LLBCASFSClient(db)
56 let ctx = Context()
57
58 let declTree = LLBDeclFileTree.dir(
59 [
60 "src": .dir([
61 "bar.ext": .file(contents: Array("hello world".utf8)),
62 "foo.ext": .file(contents: Array("import bar".utf8)),
63 "baz.ext": .file(contents: Array("import foo".utf8))
64 ])
65 ]
66 )
67
68 let treeID: LLBDataID = try await client.store(declTree, ctx).get()
69 let dependencyGraph = try await engine.build(key: Keys.SourceTree.GetDependencyGraph(sourceTreeId: treeID), ctx).get()
70 let foo = UnitName(basename: "foo")
71 let bar = UnitName(basename: "bar")
72 let baz = UnitName(basename: "baz")
73
74 #expect(
75 dependencyGraph.edges == [
76 bar: [],
77 foo: [bar],
78 baz: [foo]
79 ]
80 )
81
82 let dependenciesOfBaz = try await engine.build(key: Keys.SourceTree.GetDependencies(sourceTreeId: treeID, unitName: baz), ctx).get()
83 #expect(dependenciesOfBaz == [foo, bar])
84 return
85 }
86}