module Tests
open FunctionDatastructures.LazyQueue
open Xunit
[<Fact>]
let ``Test isEmpty with empty queue`` () =
let q = empty ()
let actual = isEmpty q
Assert.True actual
[<Fact>]
let ``Test isEmpty with non-empty queue`` () =
let q = cons 1 (empty ())
let actual = isEmpty q
Assert.False actual
[<Fact>]
let ``Test cons`` () =
let q1 = empty ()
let q2 = cons 1 q1
let actual1 = isEmpty q1
let actual2 = isEmpty q2
Assert.True actual1
Assert.False actual2
[<Fact>]
let ``empty queue should be empty``() =
let queue = empty ()
Assert.True (isEmpty queue)
[<Fact>]
let ``cons should add an element to the queue``() =
let queue = empty () |> cons 1
Assert.False (isEmpty queue)
[<Fact>]
let ``head should return the first element of the queue``() =
let queue = empty () |> cons 1 |> cons 2
Assert.Equal (head queue, 2)
[<Fact>]
let ``tail should return a new queue with the first element removed``() =
let queue = empty () |> cons 1 |> cons 2
let newQueue = tail queue
Assert.False (isEmpty newQueue)
Assert.Equal (head newQueue, 1)
//[<Fact>]
//let ``head should throw an exception if the queue is empty``() =
// let queue = empty ()
// Assert.Throws (fun () -> head queue) |> ignore
//[<Fact>]
//let ``tail should throw an exception if the queue has only one element``() =
// let queue = empty () |> cons 1
// Assert.Throws (fun () -> tail queue) |> ignore