Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions tests/FSharp.Data.Core.Tests/FSharp.Data.Core.Tests.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
<Compile Include="StructuralTypes.fs" />
<Compile Include="BaseTypesHtmlDocument.fs" />
<Compile Include="XmlExtensions.fs" />
<Compile Include="InferenceEngines.fs" />
<Compile Include="WorldBankRuntime.fs" />
<Compile Include="Program.fs" />
</ItemGroup>
Expand Down
208 changes: 208 additions & 0 deletions tests/FSharp.Data.Core.Tests/InferenceEngines.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
module FSharp.Data.Tests.InferenceEngines

open NUnit.Framework
open FsUnit
open System
open System.Globalization
open System.Xml.Linq
open System.Reflection
open FSharp.Data
open FSharp.Data.Runtime
open FSharp.Data.Runtime.StructuralTypes
open FSharp.Data.Runtime.StructuralInference

// Test JsonInference functionality through reflection since it's an internal module
[<Test>]
let ``JsonInference.inferType handles null values correctly`` () =
let jsonInferenceModule =
typeof<JsonValue>.Assembly.GetType("ProviderImplementation.JsonInference")
jsonInferenceModule |> should not' (be null)

let inferTypeMethod =
jsonInferenceModule.GetMethod("inferType", BindingFlags.Static ||| BindingFlags.Public ||| BindingFlags.NonPublic)
inferTypeMethod |> should not' (be null)

let unitsOfMeasureProvider = null
let inferenceMode = InferenceMode'.ValuesOnly
let cultureInfo = CultureInfo.InvariantCulture
let parentName = "test"
let jsonNull = JsonValue.Null

let result = inferTypeMethod.Invoke(null, [| unitsOfMeasureProvider; inferenceMode; cultureInfo; parentName; jsonNull |])
result |> should not' (be null)

[<Test>]
let ``JsonInference.inferType handles boolean values correctly`` () =
let jsonInferenceModule =
typeof<JsonValue>.Assembly.GetType("ProviderImplementation.JsonInference")
let inferTypeMethod =
jsonInferenceModule.GetMethod("inferType", BindingFlags.Static ||| BindingFlags.Public ||| BindingFlags.NonPublic)

let unitsOfMeasureProvider = null
let inferenceMode = InferenceMode'.ValuesOnly
let cultureInfo = CultureInfo.InvariantCulture
let parentName = "test"
let jsonBool = JsonValue.Boolean true

let result = inferTypeMethod.Invoke(null, [| unitsOfMeasureProvider; inferenceMode; cultureInfo; parentName; jsonBool |])
result |> should not' (be null)

[<Test>]
let ``JsonInference.inferType handles string values correctly`` () =
let jsonInferenceModule =
typeof<JsonValue>.Assembly.GetType("ProviderImplementation.JsonInference")
let inferTypeMethod =
jsonInferenceModule.GetMethod("inferType", BindingFlags.Static ||| BindingFlags.Public ||| BindingFlags.NonPublic)

let unitsOfMeasureProvider = null
let inferenceMode = InferenceMode'.ValuesOnly
let cultureInfo = CultureInfo.InvariantCulture
let parentName = "test"
let jsonString = JsonValue.String "hello"

let result = inferTypeMethod.Invoke(null, [| unitsOfMeasureProvider; inferenceMode; cultureInfo; parentName; jsonString |])
result |> should not' (be null)

[<Test>]
let ``JsonInference.inferType handles integer number values correctly`` () =
let jsonInferenceModule =
typeof<JsonValue>.Assembly.GetType("ProviderImplementation.JsonInference")
let inferTypeMethod =
jsonInferenceModule.GetMethod("inferType", BindingFlags.Static ||| BindingFlags.Public ||| BindingFlags.NonPublic)

let unitsOfMeasureProvider = null
let inferenceMode = InferenceMode'.ValuesOnly
let cultureInfo = CultureInfo.InvariantCulture
let parentName = "test"
let jsonNumber = JsonValue.Number 42M

let result = inferTypeMethod.Invoke(null, [| unitsOfMeasureProvider; inferenceMode; cultureInfo; parentName; jsonNumber |])
result |> should not' (be null)

[<Test>]
let ``JsonInference.inferType handles decimal number values correctly`` () =
let jsonInferenceModule =
typeof<JsonValue>.Assembly.GetType("ProviderImplementation.JsonInference")
let inferTypeMethod =
jsonInferenceModule.GetMethod("inferType", BindingFlags.Static ||| BindingFlags.Public ||| BindingFlags.NonPublic)

let unitsOfMeasureProvider = null
let inferenceMode = InferenceMode'.ValuesOnly
let cultureInfo = CultureInfo.InvariantCulture
let parentName = "test"
let jsonNumber = JsonValue.Number 42.5M

let result = inferTypeMethod.Invoke(null, [| unitsOfMeasureProvider; inferenceMode; cultureInfo; parentName; jsonNumber |])
result |> should not' (be null)

[<Test>]
let ``JsonInference.inferType handles float values correctly`` () =
let jsonInferenceModule =
typeof<JsonValue>.Assembly.GetType("ProviderImplementation.JsonInference")
let inferTypeMethod =
jsonInferenceModule.GetMethod("inferType", BindingFlags.Static ||| BindingFlags.Public ||| BindingFlags.NonPublic)

let unitsOfMeasureProvider = null
let inferenceMode = InferenceMode'.ValuesOnly
let cultureInfo = CultureInfo.InvariantCulture
let parentName = "test"
let jsonFloat = JsonValue.Float 3.14

let result = inferTypeMethod.Invoke(null, [| unitsOfMeasureProvider; inferenceMode; cultureInfo; parentName; jsonFloat |])
result |> should not' (be null)

[<Test>]
let ``JsonInference.inferType handles Bit0 special case correctly`` () =
let jsonInferenceModule =
typeof<JsonValue>.Assembly.GetType("ProviderImplementation.JsonInference")
let inferTypeMethod =
jsonInferenceModule.GetMethod("inferType", BindingFlags.Static ||| BindingFlags.Public ||| BindingFlags.NonPublic)

let unitsOfMeasureProvider = null
let inferenceMode = InferenceMode'.ValuesOnly
let cultureInfo = CultureInfo.InvariantCulture
let parentName = "test"
let jsonZero = JsonValue.Number 0M

let result = inferTypeMethod.Invoke(null, [| unitsOfMeasureProvider; inferenceMode; cultureInfo; parentName; jsonZero |])
result |> should not' (be null)

[<Test>]
let ``JsonInference.inferType handles Bit1 special case correctly`` () =
let jsonInferenceModule =
typeof<JsonValue>.Assembly.GetType("ProviderImplementation.JsonInference")
let inferTypeMethod =
jsonInferenceModule.GetMethod("inferType", BindingFlags.Static ||| BindingFlags.Public ||| BindingFlags.NonPublic)

let unitsOfMeasureProvider = null
let inferenceMode = InferenceMode'.ValuesOnly
let cultureInfo = CultureInfo.InvariantCulture
let parentName = "test"
let jsonOne = JsonValue.Number 1M

let result = inferTypeMethod.Invoke(null, [| unitsOfMeasureProvider; inferenceMode; cultureInfo; parentName; jsonOne |])
result |> should not' (be null)

[<Test>]
let ``JsonInference.inferType handles array values correctly`` () =
let jsonInferenceModule =
typeof<JsonValue>.Assembly.GetType("ProviderImplementation.JsonInference")
let inferTypeMethod =
jsonInferenceModule.GetMethod("inferType", BindingFlags.Static ||| BindingFlags.Public ||| BindingFlags.NonPublic)

let unitsOfMeasureProvider = null
let inferenceMode = InferenceMode'.ValuesOnly
let cultureInfo = CultureInfo.InvariantCulture
let parentName = "test"
let jsonArray = JsonValue.Array [| JsonValue.Number 1M; JsonValue.Number 2M |]

let result = inferTypeMethod.Invoke(null, [| unitsOfMeasureProvider; inferenceMode; cultureInfo; parentName; jsonArray |])
result |> should not' (be null)

[<Test>]
let ``JsonInference.inferType handles record values correctly`` () =
let jsonInferenceModule =
typeof<JsonValue>.Assembly.GetType("ProviderImplementation.JsonInference")
let inferTypeMethod =
jsonInferenceModule.GetMethod("inferType", BindingFlags.Static ||| BindingFlags.Public ||| BindingFlags.NonPublic)

let unitsOfMeasureProvider = null
let inferenceMode = InferenceMode'.ValuesOnly
let cultureInfo = CultureInfo.InvariantCulture
let parentName = "test"
let jsonRecord = JsonValue.Record [| ("name", JsonValue.String "John"); ("age", JsonValue.Number 30M) |]

let result = inferTypeMethod.Invoke(null, [| unitsOfMeasureProvider; inferenceMode; cultureInfo; parentName; jsonRecord |])
result |> should not' (be null)

[<Test>]
let ``JsonInference.inferType handles NoInference mode correctly`` () =
let jsonInferenceModule =
typeof<JsonValue>.Assembly.GetType("ProviderImplementation.JsonInference")
let inferTypeMethod =
jsonInferenceModule.GetMethod("inferType", BindingFlags.Static ||| BindingFlags.Public ||| BindingFlags.NonPublic)

let unitsOfMeasureProvider = null
let inferenceMode = InferenceMode'.NoInference
let cultureInfo = CultureInfo.InvariantCulture
let parentName = "test"
let jsonNumber = JsonValue.Number 0M // Should not infer Bit0 in NoInference mode

let result = inferTypeMethod.Invoke(null, [| unitsOfMeasureProvider; inferenceMode; cultureInfo; parentName; jsonNumber |])
result |> should not' (be null)

[<Test>]
let ``JsonInference.inferType handles large integer values correctly`` () =
let jsonInferenceModule =
typeof<JsonValue>.Assembly.GetType("ProviderImplementation.JsonInference")
let inferTypeMethod =
jsonInferenceModule.GetMethod("inferType", BindingFlags.Static ||| BindingFlags.Public ||| BindingFlags.NonPublic)

let unitsOfMeasureProvider = null
let inferenceMode = InferenceMode'.ValuesOnly
let cultureInfo = CultureInfo.InvariantCulture
let parentName = "test"
let largeNumber = JsonValue.Number (decimal Int64.MaxValue)

let result = inferTypeMethod.Invoke(null, [| unitsOfMeasureProvider; inferenceMode; cultureInfo; parentName; largeNumber |])
result |> should not' (be null)
Loading