This commit is contained in:
Smaug123
2021-12-24 19:56:46 +00:00
parent b1cb2992db
commit d45b72db01
7 changed files with 157 additions and 14 deletions

View File

@@ -5,12 +5,13 @@
</PropertyGroup>
<ItemGroup>
<Compile Include="UnitTest1.fs" />
<Compile Include="TestExamples.fs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="FsUnit" Version="4.1.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.0.0" />
</ItemGroup>

View File

@@ -0,0 +1,133 @@
namespace FicroKanSharp.Test
open FicroKanSharp
open Xunit
open FsUnitTyped
module TestThing =
[<Fact>]
let ``Example from the docs`` () : unit =
let aAndB =
Goal.conj
(Goal.callFresh (fun x -> Goal.equiv (Term.Variable x) (Term.Literal 7)))
(Goal.callFresh (fun x -> Goal.disj (Goal.equiv (Term.Variable x) (Term.Literal 5)) (Goal.equiv (Term.Variable x) (Term.Literal 6))))
let u = Goal.evaluate aAndB State.empty
match u |> Stream.peel with
| None -> failwith "oh no"
| Some (s, rest) ->
s
|> Map.toList
|> shouldEqual
[
Variable.VariableCount 0, Term.Literal 7
Variable.VariableCount 1, Term.Literal 5
]
match rest |> Stream.peel with
| None -> failwith "oh no"
| Some (s, rest) ->
s
|> Map.toList
|> shouldEqual
[
Variable.VariableCount 0, Term.Literal 7
Variable.VariableCount 1, Term.Literal 6
]
match rest |> Stream.peel with
| None -> ()
| Some s -> failwith $"{s}"
[<Fact>]
let ``Another example`` () =
let aAndB =
(Goal.callFresh (fun x -> Goal.equiv (Term.Variable x) (Term.Literal 5)))
let u = Goal.evaluate aAndB State.empty
match u |> Stream.peel with
| None -> failwith "oh no"
| Some (s, rest) ->
s
|> Map.toList
|> shouldEqual [Variable.VariableCount 0, Term.Literal 5]
match Stream.peel rest with
| None -> ()
| Some s -> failwithf $"{s}"
[<Fact>]
let ``Recursive example`` () =
let rec fives (x : Variable) =
(Goal.disj (Goal.equiv (Term.Variable x) (Term.Literal 5)) (Goal.delay (fun () -> fives x)))
let u = Goal.evaluate (Goal.callFresh fives) State.empty
match u |> Stream.peel with
| None -> failwith "oh no"
| Some (s, rest) ->
s
|> Map.toList
|> shouldEqual [Variable.VariableCount 0, Term.Literal 5]
match Stream.peel rest with
| None -> failwith "oh no"
| Some (s, rest) ->
s
|> Map.toList
|> shouldEqual [Variable.VariableCount 0, Term.Literal 5]
match Stream.peel rest with
| None -> failwith "oh no"
| Some (s, _rest) ->
s
|> Map.toList
|> shouldEqual [Variable.VariableCount 0, Term.Literal 5]
[<Fact>]
let ``Another recursive example`` () =
let rec fives (x : Variable) =
(Goal.disj (Goal.equiv (Term.Variable x) (Term.Literal 5)) (Goal.delay (fun () -> fives x)))
let rec sixes (x : Variable) =
(Goal.disj (Goal.equiv (Term.Variable x) (Term.Literal 6)) (Goal.delay (fun () -> sixes x)))
let fivesAndSixes =
Goal.callFresh (fun x -> Goal.disj (fives x) (sixes x))
let u = Goal.evaluate fivesAndSixes State.empty
match u |> Stream.peel with
| None -> failwith "oh no"
| Some (s, rest) ->
s
|> Map.toList
|> shouldEqual [Variable.VariableCount 0, Term.Literal 5]
match Stream.peel rest with
| None -> failwith "oh no"
| Some (s, rest) ->
s
|> Map.toList
|> shouldEqual [Variable.VariableCount 0, Term.Literal 6]
match Stream.peel rest with
| None -> failwith "oh no"
| Some (s, rest) ->
s
|> Map.toList
|> shouldEqual [Variable.VariableCount 0, Term.Literal 5]
match Stream.peel rest with
| None -> failwith "oh no"
| Some (s, _rest) ->
s
|> Map.toList
|> shouldEqual [Variable.VariableCount 0, Term.Literal 6]

View File

@@ -1,10 +0,0 @@
namespace FicroKanSharp.Test
open FicroKanSharp
open Xunit
module TestThing =
[<Fact>]
let ``Foo`` () : unit =
failwith "TODO!"