Untitled

 avatar
unknown
fsharp
2 years ago
1.5 kB
2
Indexable
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