module WordyTest

open Xunit
open FsUnit.Xunit
open Wordy

[<Fact>]
let ``Can parse and solve addition problems`` () =
    solve "What is 1 plus 1?" |> should equal <| Some 2
    
[<Fact(Skip = "Remove to run test")>]
let ``Can add double digit numbers`` () =
    solve "What is 53 plus 2?" |> should equal <| Some 55
    
[<Fact(Skip = "Remove to run test")>]
let ``Can add negative numbers`` () =
    solve "What is -1 plus -10?" |> should equal <| Some -11
    
[<Fact(Skip = "Remove to run test")>]
let ``Can add large numbers`` () =
    solve "What is 123 plus 45678?" |> should equal <| Some 45801
    
[<Fact(Skip = "Remove to run test")>]
let ``Can parse and solve subtraction problems`` () =
    solve "What is 4 minus -12?" |> should equal <| Some 16
    
[<Fact(Skip = "Remove to run test")>]
let ``Can parse and solve multiplication problems`` () =
    solve "What is -3 multiplied by 25?" |> should equal <| Some -75
    
[<Fact(Skip = "Remove to run test")>]
let ``Can parse and solve division problems`` () =
    solve "What is 33 divided by -3?" |> should equal <| Some -11
    
[<Fact(Skip = "Remove to run test")>]
let ``Can add twice`` () =
    solve "What is 1 plus 1 plus 1?" |> should equal <| Some 3
    
[<Fact(Skip = "Remove to run test")>]
let ``Can add then subtract`` () =
    solve "What is 1 plus 5 minus -2?" |> should equal <| Some 8
    
[<Fact(Skip = "Remove to run test")>]
let ``Can subtract twice`` () =
    solve "What is 20 minus 4 minus 13?" |> should equal <| Some 3
    
[<Fact(Skip = "Remove to run test")>]
let ``Can subtract then add`` () =
    solve "What is 17 minus 6 plus 3?" |> should equal <| Some 14
    
[<Fact(Skip = "Remove to run test")>]
let ``Can multiply twice`` () =
    solve "What is 2 multiplied by -2 multiplied by 3?" |> should equal <| Some -12
    
[<Fact(Skip = "Remove to run test")>]
let ``Can add then multiply`` () =
    solve "What is -3 plus 7 multiplied by -2?" |> should equal <| Some -8
    
[<Fact(Skip = "Remove to run test")>]
let ``Can divide twice`` () =
    solve "What is -12 divided by 2 divided by -3?" |> should equal <| Some 2
    
[<Fact(Skip = "Remove to run test")>]
let ``Cubed is too advanced`` () =
    solve "What is 53 cubed?" |> should equal None
    
[<Fact(Skip = "Remove to run test")>]
let ``Irrelevant problems are not valid`` () =
    solve "Who is the president of the United States?" |> should equal None