Skip to content

Commit 49eb022

Browse files
committed
Benchmarks and tests synchronized with code API changes.
1 parent 1a158af commit 49eb022

File tree

3 files changed

+89
-9
lines changed

3 files changed

+89
-9
lines changed

Benchmarks/Program.fs

Lines changed: 85 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
open System.Collections.Generic
2+
open System.Xml.Schema
23
open Argu
34
open CFPQ_GLL
45
open CFPQ_GLL.GLL
@@ -23,6 +24,7 @@ type ArgQuery =
2324
| Geo = 2
2425
| Andersen = 3
2526
| Java = 4
27+
| VSharp = 5
2628

2729
type Arguments =
2830
| [<Mandatory>] Graph of string
@@ -116,7 +118,7 @@ let example10_go_hierarchy () =
116118
let nodes = loadNodesFormCSV "/home/gsv/Downloads/go_hierarchy_nodes.csv"
117119
nodes
118120
|> Array.iter (fun n ->
119-
let reachable = GLL.eval graph [|n|] g1
121+
let reachable = GLL.eval graph (HashSet [|n|]) g1
120122
printfn $"Reachable: %A{reachable}")
121123

122124
type LoadStorePairsInfo =
@@ -131,6 +133,80 @@ type LoadStorePairsInfo =
131133
StoreTerminalId = fst storeTerminalInfo
132134
StoreTerminalReversedId = snd storeTerminalInfo
133135
}
136+
137+
let vSharRSM maxCallSymbol =
138+
let firstFreeCallTerminalId = maxCallSymbol + 1<terminalSymbol>
139+
let terminalForCFGEdge = 0<terminalSymbol>
140+
let startBox =
141+
RSMBox(
142+
0<rsmState>,
143+
HashSet [|0<rsmState>; 1<rsmState>|],
144+
[|
145+
yield RSMEdges.NonTerminalEdge(0<rsmState>, 2<rsmState>, 1<rsmState>)
146+
for callSymbol in 2<terminalSymbol> .. 2<terminalSymbol> .. firstFreeCallTerminalId - 1<terminalSymbol> do
147+
yield RSMEdges.TerminalEdge(1<rsmState>, callSymbol, 0<rsmState>)
148+
|]
149+
)
150+
let balancedBracketsBox =
151+
let mutable firstFreeRsmState = 3<rsmState>
152+
RSMBox(
153+
2<rsmState>,
154+
HashSet [|2<rsmState>|],
155+
[|
156+
yield RSMEdges.TerminalEdge (2<rsmState>, terminalForCFGEdge, 2<rsmState>)
157+
for callSymbol in 1<terminalSymbol> .. 2<terminalSymbol> .. firstFreeCallTerminalId - 1<terminalSymbol> do
158+
yield RSMEdges.TerminalEdge(2<rsmState>, callSymbol, firstFreeRsmState)
159+
yield RSMEdges.NonTerminalEdge(firstFreeRsmState, 2<rsmState>, firstFreeRsmState + 1<rsmState>)
160+
yield RSMEdges.TerminalEdge(firstFreeRsmState + 1<rsmState>, callSymbol + 1<terminalSymbol>, 2<rsmState>)
161+
firstFreeRsmState <- firstFreeRsmState + 2<rsmState>
162+
|])
163+
(*let startBox =
164+
RSMBox(
165+
0<rsmState>,
166+
HashSet [|0<rsmState>|],
167+
[|
168+
yield RSMEdges.TerminalEdge(0<rsmState>, terminalForCFGEdge, 0<rsmState>)
169+
yield RSMEdges.NonTerminalEdge(0<rsmState>, 1<rsmState>, 0<rsmState>)
170+
//for callSymbol in 1<terminalSymbol> .. 2<terminalSymbol> .. firstFreeCallTerminalId - 1<terminalSymbol> do
171+
for callSymbol in 2<terminalSymbol> .. 2<terminalSymbol> .. firstFreeCallTerminalId - 1<terminalSymbol> do
172+
yield RSMEdges.TerminalEdge(0<rsmState>, callSymbol, 0<rsmState>)
173+
|]
174+
)
175+
let balancedBracketsBox =
176+
let mutable firstFreeRsmState = 3<rsmState>
177+
RSMBox(
178+
1<rsmState>,
179+
HashSet [|1<rsmState>; 2<rsmState>|],
180+
[|
181+
for callSymbol in 1<terminalSymbol> .. 2<terminalSymbol> .. firstFreeCallTerminalId - 1<terminalSymbol> do
182+
yield RSMEdges.TerminalEdge(1<rsmState>, callSymbol, firstFreeRsmState)
183+
yield RSMEdges.NonTerminalEdge(firstFreeRsmState, 0<rsmState>, firstFreeRsmState + 1<rsmState>)
184+
yield RSMEdges.TerminalEdge(firstFreeRsmState + 1<rsmState>, callSymbol + 1<terminalSymbol>, 2<rsmState>)
185+
yield RSMEdges.TerminalEdge(firstFreeRsmState, terminalForCFGEdge, firstFreeRsmState)
186+
yield RSMEdges.TerminalEdge(firstFreeRsmState + 1<rsmState>, terminalForCFGEdge, firstFreeRsmState + 1<rsmState>)
187+
firstFreeRsmState <- firstFreeRsmState + 2<rsmState>
188+
|])
189+
*)
190+
RSM([|startBox; balancedBracketsBox|], startBox)
191+
192+
let loadVSharpGraphFromCSV filePath =
193+
let mutable maxTerminal = 0<terminalSymbol>
194+
let edges = ResizeArray<_>()
195+
System.IO.File.ReadLines filePath
196+
|> Seq.map (fun s -> s.Split " ")
197+
|> Seq.iter (fun a ->
198+
let terminal = int a.[2] * 1<terminalSymbol>
199+
200+
if terminal > maxTerminal then maxTerminal <- terminal
201+
202+
edges.Add (Tests.InputGraph.TerminalEdge(a.[0] |> int |> LanguagePrimitives.Int32WithMeasure
203+
, terminal
204+
, a.[1] |> int |> LanguagePrimitives.Int32WithMeasure))
205+
206+
)
207+
InputGraph <| edges.ToArray()
208+
, maxTerminal
209+
134210
let javaRsm (terminalSymbolsMapping:SortedDictionary<string,_>) =
135211

136212
let alloc = fst terminalSymbolsMapping.["alloc"]
@@ -197,7 +273,7 @@ let javaRsm (terminalSymbolsMapping:SortedDictionary<string,_>) =
197273
let runAllPairs parallelBlocks (graph:InputGraph) q mode =
198274
let start = System.DateTime.Now
199275
match parallelBlocks with
200-
| None -> eval graph (graph.AllVertices()) q mode
276+
| None -> eval graph (HashSet (graph.AllVertices())) q mode
201277
| Some blockSize -> evalParallel blockSize graph (graph.AllVertices()) q mode
202278
|> ignore
203279
printfn $"Total processing time: %A{(System.DateTime.Now - start).TotalMilliseconds} milliseconds"
@@ -216,16 +292,16 @@ let singleSourceForAllContinuously (graph:InputGraph) q mode =
216292
startVertices
217293
|> Array.iter (fun v -> d.Add(v, HashSet<_>()))
218294
d
219-
let res, newGss = evalFromState reachableVertices gss matchedRanges graph startVertices q mode
220-
gss <-newGss
295+
let res = evalFromState reachableVertices gss matchedRanges graph (HashSet startVertices) q mode
221296
match res with
222297
| QueryResult.MatchedRanges ranges -> matchedRanges <- ranges
223298
| _ -> ()
224299

225300
let singleSourceForAll (graph:InputGraph) q mode =
226301
for n in graph.AllVertices() do
227-
let startVertices = [|n|]
228-
eval graph startVertices q mode |> ignore
302+
let startVertices = HashSet [|n|]
303+
let res = eval graph startVertices q mode |> ignore
304+
printfn $"%A{res}"
229305

230306
[<EntryPoint>]
231307
let main argv =
@@ -240,6 +316,9 @@ let main argv =
240316
| ArgQuery.Java ->
241317
let graph,mapping = loadJavaGraphFromCSV (args.GetResult Graph)
242318
graph, javaRsm mapping
319+
| ArgQuery.VSharp ->
320+
let graph,maxTerminal = loadVSharpGraphFromCSV (args.GetResult Graph)
321+
graph, vSharRSM maxTerminal
243322
| x -> failwithf $"Unexpected query: %A{x}."
244323

245324
printfn "Data loaded."

Tests/GLLTests.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ let dumpResultToConsole (sppf:TriplesStoredSPPF) =
2323
)
2424
*)
2525

26-
let runGLLAndCheckResult graph startV q expected =
27-
let result = eval graph startV q AllPaths
26+
let runGLLAndCheckResult graph (startV:array<_>) q expected =
27+
let result = eval graph (HashSet startV) q AllPaths
2828
match result with
2929
| QueryResult.MatchedRanges ranges ->
3030
let sppf = ranges.ToSPPF startV

Tests/Program.fs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11

2+
open System.Collections.Generic
23
open CFPQ_GLL
34
open CFPQ_GLL.GLL
45
open CFPQ_GLL.InputGraph
@@ -17,7 +18,7 @@ let go() =
1718
let startV = [|0<inputGraphVertex>|]
1819
let q = Tests.GLLTests.simpleLoopRSMForDyckLanguage
1920

20-
let result = GLL.eval graph startV q GLL.AllPaths
21+
let result = GLL.eval graph (HashSet startV) q GLL.AllPaths
2122

2223
match result with
2324
| QueryResult.MatchedRanges ranges ->

0 commit comments

Comments
 (0)