mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			207 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Forth
		
	
	
	
	
	
			
		
		
	
	
			207 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Forth
		
	
	
	
	
	
namespace Nessos.FsPickler.Tests
 | 
						|
 | 
						|
    open System
 | 
						|
    open System.Collections.Generic
 | 
						|
 | 
						|
    open PerfUtil
 | 
						|
 | 
						|
    open Nessos.FsPickler
 | 
						|
    open Nessos.FsPickler.Tests.Serializer
 | 
						|
    open Nessos.FsPickler.Tests.TestTypes
 | 
						|
 | 
						|
    module PerformanceTests =
 | 
						|
 | 
						|
        type Marker = class end
 | 
						|
 | 
						|
        let guid = Guid.NewGuid()
 | 
						|
 | 
						|
        [<PerfTest(1000)>]
 | 
						|
        let ``Value: Guid`` s = roundtrip guid s
 | 
						|
 | 
						|
        let date = DateTime.Now
 | 
						|
 | 
						|
        [<PerfTest(1000)>]
 | 
						|
        let ``Value: DateTime`` s = roundtrip date s
 | 
						|
 | 
						|
        [<PerfTest(10000)>]
 | 
						|
        let ``Value: String`` s = roundtrip stringValue s
 | 
						|
 | 
						|
 | 
						|
        let boxed = box ([| 1 .. 1000 |], "lorem ipsum")
 | 
						|
 | 
						|
        [<PerfTest(1000)>]
 | 
						|
        let ``Boxed Object`` s = roundtrip boxed s
 | 
						|
 | 
						|
        let fsClass = new Class(42, stringValue)
 | 
						|
 | 
						|
        [<PerfTest(10000)>]
 | 
						|
        let ``Class: Simple F# Class`` s = roundtrip fsClass s
 | 
						|
 | 
						|
        let serializableClass = new SerializableClass<_>(42, stringValue, [|1..1000|])
 | 
						|
 | 
						|
        [<PerfTest(10000)>]
 | 
						|
        let ``Class: ISerializable`` s = roundtrip serializableClass s
 | 
						|
 | 
						|
        let boxedClass = box(Some 42)
 | 
						|
 | 
						|
        [<PerfTest(10000)>]
 | 
						|
        let ``Subtype Resolution`` s = roundtrip boxedClass s
 | 
						|
 | 
						|
        let floatArray = Array.init 100000 (fun i -> float i)
 | 
						|
 | 
						|
        [<PerfTest(10)>]
 | 
						|
        let ``Array: Float`` s = roundtrip floatArray s
 | 
						|
 | 
						|
        let intArray = Array.init 100000 id
 | 
						|
 | 
						|
        [<PerfTest(10)>]
 | 
						|
        let ``Array: Int`` s = roundtrip intArray s
 | 
						|
 | 
						|
        let stringArray = Array.init 10000 (fun i -> stringValue + string i)
 | 
						|
        
 | 
						|
        [<PerfTest(100)>]
 | 
						|
        let ``Array: String`` s = roundtrip stringArray s
 | 
						|
 | 
						|
        let kvarr = [|1..10000|] |> Array.map (fun i -> i, string i)
 | 
						|
 | 
						|
        [<PerfTest(100)>]
 | 
						|
        let ``Array: Key-Value Pairs`` s = roundtrip kvarr s
 | 
						|
 | 
						|
        let duArray = [| for i in 1 .. 10000 -> (Something ("asdasdasdas", i)) |]
 | 
						|
 | 
						|
        [<PerfTest(100)>]
 | 
						|
        let ``Array: Discriminated Unions`` s = roundtrip duArray s
 | 
						|
 | 
						|
        let objArray = 
 | 
						|
            [| 
 | 
						|
                box 2; box 3; box "hello" ; box <| Some 3; box(2,3) ; 
 | 
						|
                box <| new Class(2, stringValue) ; box <| new SerializableClass<int option>(2, stringValue, Some 12); 
 | 
						|
                box stringValue 
 | 
						|
            |]
 | 
						|
 | 
						|
        [<PerfTest(1000)>]
 | 
						|
        let ``Array: Objects`` s = roundtrip objArray s
 | 
						|
 | 
						|
 | 
						|
        let array3D = Array3D.init 100 100 100 (fun i j k -> float (i * j + k))
 | 
						|
 | 
						|
        [<PerfTest(10)>]
 | 
						|
        let ``Array: Rank-3 Float`` s = roundtrip array3D s
 | 
						|
 | 
						|
        let bclDict = dict [ for i in 1 .. 1000 -> (string i, i)]
 | 
						|
 | 
						|
        [<PerfTest(100)>]
 | 
						|
        let ``.NET Dictionary`` s = roundtrip bclDict s
 | 
						|
 | 
						|
        let bclStack = new Stack<string>([for i in 1 .. 1000 -> string i])
 | 
						|
 | 
						|
        [<PerfTest(100)>]
 | 
						|
        let ``.NET Stack`` s = roundtrip bclStack s
 | 
						|
 | 
						|
        let bclList = new List<string * int>([for i in 1 .. 1000 -> string i, i])
 | 
						|
 | 
						|
        [<PerfTest(100)>]
 | 
						|
        let ``.NET List`` s = roundtrip bclList s
 | 
						|
 | 
						|
        let bclSet = new SortedSet<_>([for i in 1 .. 1000 -> string i])
 | 
						|
 | 
						|
        [<PerfTest(100)>]
 | 
						|
        let ``.NET Set`` s = roundtrip bclSet s
 | 
						|
 | 
						|
        let smallTuple = (1, DateTime.Now,"hello")
 | 
						|
 | 
						|
        [<PerfTest(10000)>]
 | 
						|
        let ``FSharp: Tuple Small`` s = roundtrip smallTuple s
 | 
						|
 | 
						|
        let largeTuple = (stringValue, 1, 2, 3, true, "", Some(3.14, [2]), 3, 2, 1, stringValue)
 | 
						|
 | 
						|
        [<PerfTest(10000)>]
 | 
						|
        let ``FSharp: Tuple Large`` s =
 | 
						|
            roundtrip largeTuple s
 | 
						|
 | 
						|
        let intList = [1..1000]
 | 
						|
 | 
						|
        [<PerfTest(1000)>]
 | 
						|
        let ``FSharp: List Int`` s = roundtrip intList s
 | 
						|
 | 
						|
        let stringList = [ for i in 1 .. 1000 -> stringValue + string i ]
 | 
						|
 | 
						|
        [<PerfTest(1000)>]
 | 
						|
        let ``FSharp: List String`` s = roundtrip stringList s
 | 
						|
 | 
						|
        let pairList = [ for i in 1 .. 1000 -> (string i, i) ]
 | 
						|
 | 
						|
        [<PerfTest(1000)>]
 | 
						|
        let ``FSharp: List Key-Value`` s = roundtrip pairList s
 | 
						|
 | 
						|
        let nestedLst = let n = [1..1000] in [for _ in 1 .. 100 -> n]
 | 
						|
 | 
						|
        [<PerfTest(1000)>]
 | 
						|
        let ``FSharp: List Nested`` s = roundtrip nestedLst s
 | 
						|
 | 
						|
        let union = SomethingElse(stringValue, 42, box (Some 42))
 | 
						|
 | 
						|
        [<PerfTest(10000)>]
 | 
						|
        let ``FSharp: Union`` s = roundtrip union s
 | 
						|
 | 
						|
        let record = { Int = 42 ; String = stringValue ; Tuple = (13, "") }
 | 
						|
 | 
						|
        [<PerfTest(10000)>]
 | 
						|
        let ``FSharp: Record`` s = roundtrip record s
 | 
						|
 | 
						|
        let peano = int2Peano 100
 | 
						|
 | 
						|
        [<PerfTest(100)>]
 | 
						|
        let ``FSharp: Peano Rectype`` s = roundtrip peano s
 | 
						|
 | 
						|
        let closure = (@) [ Some([1..100], Set.ofList [1..100]) ]
 | 
						|
 | 
						|
        [<PerfTest(1000)>]
 | 
						|
        let ``FSharp: Curried Function`` s = roundtrip closure s
 | 
						|
 | 
						|
        let binTree = mkTree 10
 | 
						|
 | 
						|
        [<PerfTest(100)>]
 | 
						|
        let ``FSharp: Binary Tree`` s = roundtrip binTree s
 | 
						|
 | 
						|
        let intSet = [1..1000] |> List.map string |> set
 | 
						|
 | 
						|
        [<PerfTest(1000)>]
 | 
						|
        let ``FSharp: Set`` s = roundtrip intSet s
 | 
						|
 | 
						|
        let fsMap = [1..1000] |> Seq.map (fun i -> (string i,i)) |> Map.ofSeq
 | 
						|
 | 
						|
        [<PerfTest(1000)>]
 | 
						|
        let ``FSharp: Map`` s = roundtrip fsMap s
 | 
						|
 | 
						|
        let testType = typeof<int * string option * Map<int * string [], string ref option>>
 | 
						|
 | 
						|
        [<PerfTest(1000)>]
 | 
						|
        let ``Reflection: Type`` s = roundtrip testType s
 | 
						|
 | 
						|
        let quotationSmall = <@ fun x -> pown 2 x @>
 | 
						|
 | 
						|
        let quotationLarge =
 | 
						|
            <@
 | 
						|
                async {
 | 
						|
                    let rec fibAsync n =
 | 
						|
                        async {
 | 
						|
                            match n with
 | 
						|
                            | _ when n < 0 -> return invalidArg "negative" "n"
 | 
						|
                            | _ when n < 2 -> return n
 | 
						|
                            | n ->
 | 
						|
                                let! fn = fibAsync (n-1)
 | 
						|
                                let! fnn = fibAsync (n-2)
 | 
						|
                                return fn + fnn
 | 
						|
                        }
 | 
						|
 | 
						|
                    let! values = [1..100] |> Seq.map fibAsync |> Async.Parallel
 | 
						|
                    return Seq.sum values
 | 
						|
                }
 | 
						|
            @>
 | 
						|
 | 
						|
        [<PerfTest(10000)>]
 | 
						|
        let ``FSharp: Quotation Small`` s = roundtrip quotationSmall s
 | 
						|
 | 
						|
        [<PerfTest(1000)>]
 | 
						|
        let ``FSharp: Quotation Large`` s = roundtrip quotationLarge s |