public void TryFind() { var map = FSharpMap.Create(Tuple.Create(1, "one"), Tuple.Create(2, "two")); var r = map.TryFind(2).Match(x => x, () => "not found"); Assert.AreEqual("two", r); }
private void MakeAIMove(NextMove nextMove) { ThreadPool.QueueUserWorkItem(_ => { while (_CurrentPlayer.IsRed) { Thread.Sleep(750); var move = Board.moveOfTheComputer(_State, nextMove); var moveResult = Board.applyMove(move.Item1, move.Item2, _State); _State = moveResult.Item1; _CurrentPlayer = GetNextPlayer(moveResult.Item2); visualState1.CurrentPlayer = _CurrentPlayer; var validMoves = Board.allValidMoves(moveResult.Item2, moveResult.Item1); visualState1.Draw(moveResult.Item1, validMoves); if (CheckAndDisplayWinner()) { this.Invoke(new MethodInvoker(() => { this.Enabled = true; visualState1.Enabled = false; })); return; } } this.Invoke(new MethodInvoker(() => { this.Enabled = true; })); }); }
public RecordedMapModel(IEnumerable <KeyValuePair <TKeyType, TValueType> > keyValuePairs) : this() { Contract.Requires <ArgumentNullException>(keyValuePairs != null); foreach (var e in keyValuePairs) { Map = Map.Add(e.Key, e.Value); } }
private void StartNewGame() { visualState1.Enabled = true; _State = Board.defaultBoardState; _CurrentPlayer = Player.Black; var moves = Board.validMovesForColor(FieldState.NewColor(Player.Black), _State); visualState1.CurrentPlayer = Player.Black; visualState1.Draw(_State, moves); }
public override void Write(Utf8JsonWriter writer, FSharpMap <string, T> value, JsonSerializerOptions options) { writer.WriteStartObject(); foreach (var item in value) { writer.WritePropertyName(options.DictionaryKeyPolicy.ConvertName(item.Key)); JsonSerializer.Serialize(writer, item.Value, options); } writer.WriteEndObject(); }
public static FSharpMap<string, string> ConvertCsMapToFSharpMap(Dictionary<string, string> data) { var map = new FSharpMap<string, string>(new List<Tuple<string, string>>()); foreach (var elem in data) { map = map.Add(elem.Key, elem.Value); } return map; }
private static void FSharpMap_Get(long count, FSharpMap <long, long> im) { using (Benchmark.Run("Get", count)) { var sum = 0L; for (int i = 0; i < count; i++) { sum += im[i]; } } }
public static FSharpMap <TKey, TValue> WithGuaranteedEntry <TKey, TValue>(this FSharpMap <TKey, TValue> map, TKey key, Func <TValue> toAddIfNotPresent) { if (map.ContainsKey(key)) { return(map); } else { return(map.Add(key, toAddIfNotPresent())); } }
public void New() { FSharpMap<int, string> m1 = FSharpMap.Create(Tuple.Create(1, "one"), Tuple.Create(2, "two")); FSharpMap<int, string> m2 = new FSharpMap<int, string>(new[] { Tuple.Create(1, "one"), Tuple.Create(2, "two"), }); FSharpMap<int, string> m3 = new FSharpMap<int, string>(Enumerable.Empty<Tuple<int, string>>()) { { 1, "one" }, { 2, "two" }, }; Assert.AreEqual(m1, m2); }
public void FSharpMapTest_0_Success() { var collection = new FSharpMap <int, int>(Enumerable.Empty <Tuple <int, int> >()); var target = this.CreateTarget <FSharpMap <int, int> >(); using (var buffer = new MemoryStream()) { target.Pack(buffer, collection); buffer.Position = 0; var unpacked = target.Unpack(buffer); buffer.Position = 0; Assert.That(unpacked.ToArray(), Is.EqualTo(collection.ToArray())); } }
public void DeepCopyTests_FSharp_Collections() { // F# list { var original = FSharpList <int> .Empty; var copy = (FSharpList <int>) this.fixture.SerializationManager.DeepCopy(original); Assert.Equal(original, copy); } { var original = ListModule.OfSeq(new List <int> { 0, 1, 2 }); var copy = (FSharpList <int>) this.fixture.SerializationManager.DeepCopy(original); Assert.Equal(original, copy); } // F# set { var original = new FSharpSet <int>(new List <int>()); var copy = (FSharpSet <int>) this.fixture.SerializationManager.DeepCopy(original); Assert.Equal(original, copy); } { var elements = new List <int>() { 0, 1, 2 }; var original = SetModule.OfSeq(elements); var copy = (FSharpSet <int>) this.fixture.SerializationManager.DeepCopy(original); Assert.Equal(original, copy); } // F# map { var original = new FSharpMap <int, string>(new List <Tuple <int, string> >()); var copy = (FSharpMap <int, string>) this.fixture.SerializationManager.DeepCopy(original); Assert.Equal(original, copy); } { var elements = new List <Tuple <int, string> >() { new Tuple <int, string>(0, "zero"), new Tuple <int, string>(1, "one") }; var original = MapModule.OfSeq(elements); var copy = (FSharpMap <int, string>) this.fixture.SerializationManager.DeepCopy(original); Assert.Equal(original, copy); } }
public void Map() { FSharpMap <string, int> m1 = MapModule.OfSeq(new List <Tuple <string, int> > { Tuple.Create("one", 1), Tuple.Create("II", 2), Tuple.Create("3", 3) }); string json = JsonConvert.SerializeObject(m1, Formatting.Indented); FSharpMap <string, int> m2 = JsonConvert.DeserializeObject <FSharpMap <string, int> >(json); Assert.AreEqual(m1.Count, m2.Count); Assert.AreEqual(1, m2["one"]); Assert.AreEqual(2, m2["II"]); Assert.AreEqual(3, m2["3"]); }
public void New() { FSharpMap <int, string> m1 = FSharpMap.Create(Tuple.Create(1, "one"), Tuple.Create(2, "two")); FSharpMap <int, string> m2 = new FSharpMap <int, string>(new[] { Tuple.Create(1, "one"), Tuple.Create(2, "two"), }); FSharpMap <int, string> m3 = new FSharpMap <int, string>(Enumerable.Empty <Tuple <int, string> >()) { { 1, "one" }, { 2, "two" }, }; Assert.AreEqual(m1, m2); }
private static FSharpMap <long, long> FSharpMap_Add(long count) { FSharpMap <long, long> im; im = new FSharpMap <long, long>(Enumerable.Empty <Tuple <long, long> >()); using (Benchmark.Run("Add", count)) { for (int i = 0; i < count; i++) { im = im.Add(i, i); } } return(im); }
public WorldModel( FSharpMap<int, EntityModel> entity, FSharpMap<int, TaskModel> task, FSharpMap<int, PlanModel> plan, FSharpMap<EntityModel, FSharpSet<EntityModel>> holding, FSharpMap<EntityModel, FSharpSet<TaskModel>> doing, FSharpMap<TaskModel, FSharpSet<PlanModel>> belongsTo) { Entity = entity; Task = task; Plan = plan; Holding = holding; Doing = doing; BelongsTo = belongsTo; }
public WorldModel( FSharpMap <int, EntityModel> entity, FSharpMap <int, TaskModel> task, FSharpMap <int, PlanModel> plan, FSharpMap <EntityModel, FSharpSet <EntityModel> > holding, FSharpMap <EntityModel, FSharpSet <TaskModel> > doing, FSharpMap <TaskModel, FSharpSet <PlanModel> > belongsTo) { Entity = entity; Task = task; Plan = plan; Holding = holding; Doing = doing; BelongsTo = belongsTo; }
public void Draw(FSharpMap <FieldCoords, FieldState> state, FSharpList <Tuple <FieldCoords, FSharpOption <FieldCoords>, FieldCoords> > validMoves) { State = state; _ValidMoves = validMoves; Bitmap bmp = new Bitmap(_CanvasSize, _CanvasSize); Graphics canvas = Graphics.FromImage(bmp); DrawGrid(canvas); DrawFields(canvas); //DrawPossibleMoves(canvas); //DrawCoords(canvas); canvas.Flush(); canvas.Dispose(); _MainPictureBox.Image = bmp; }
public override int Serialize(ref byte[] bytes, int offset, FSharpMap <TKey, TValue> value) { if (value == null) { BinaryUtil.WriteInt32(ref bytes, offset, -1); return(4); } var startOffset = offset; offset += BinaryUtil.WriteInt32(ref bytes, offset, value.Count); foreach (var item in value) { offset += kvpFormatter.Serialize(ref bytes, offset, item); } return(offset - startOffset); }
public void FSharpMap() { var count = TestUtils.GetBenchCount(1_000_000); var rounds = 200; var im = new FSharpMap <long, long>(Enumerable.Empty <Tuple <long, long> >()); for (int r = 0; r < rounds; r++) { im = FSharpMap_Add(count); FSharpMap_Get(count, im); } Benchmark.Dump(); // After more correct benchmark (separate methods) // Case | MOPS | Elapsed | GC0 | GC1 | GC2 | Memory //---- |--------:|---------:|------:|------:|------:|--------: //Get | 6.76 | 148 ms | 0.0 | 0.0 | 0.0 | 0.000 MB //Add | 1.01 | 990 ms | 146.2 | 6.5 | 1.8 | 46.226 MB }
private void VisualState1OnMoveRequested(object sender, Tuple <FieldCoords, FieldCoords> tuple) { var moveResult = Board.applyMove(tuple.Item1, tuple.Item2, _State); _State = moveResult.Item1; var validMoves = Board.allValidMoves(moveResult.Item2, moveResult.Item1); _CurrentPlayer = GetNextPlayer(moveResult.Item2); visualState1.CurrentPlayer = _CurrentPlayer; visualState1.Draw(_State, validMoves); if (CheckAndDisplayWinner()) { visualState1.Enabled = false; return; } if (_CurrentPlayer.IsRed && _EnableAI) { this.Enabled = false; MakeAIMove(moveResult.Item2); } }
public ImmutableMap(IEnumerable <Tuple <TKey, TValue> > pairs) { innerMap = new FSharpMap <TKey, TValue>(pairs); }
private static void SaveWorkbook(FSharpMap<string, QT4.qt4<CellContent>> workbook) { HttpContext.Current.Session["Workbook"] = workbook; }
private ImmutableMap(FSharpMap <TKey, TValue> innerMap) { this.innerMap = innerMap; }
/// <summary> /// Convert an F# Map into a LanguageExt Map (Map K V) /// </summary> public static Map <K, V> fs <K, V>(FSharpMap <K, V> fsMap) => Map.addRange(Map <K, V>(), List.map(fsMap, identity));
public WorldModel(FSharpMap<string, SpatialEntity> entities) { Entities = entities; }
protected override IEnumerator <KeyValuePair <TKey, TValue> > GetSourceEnumerator(FSharpMap <TKey, TValue> source) { return(((IEnumerable <KeyValuePair <TKey, TValue> >)source).GetEnumerator()); }
public void Performance() { //Var.pushThreadBindings(RT.map(RT.CURRENT_NS, RT.CURRENT_NS.deref())); var m1 = new RecordedMapModel <string, Item>(); //var m2 = new ClojureRecordedMapModel<string, Item>(); var m3 = new Dictionary <string, Item>(); var m4 = new FSharpMap <string, Item>(Enumerable.Empty <Tuple <string, Item> >()); //var m5 = new PersistentTreeMap(); const int size = 10000; var s = new Stopwatch(); s.Start(); for (var i = 0; i < size; i++) { m1.Set(i.ToString(), new Item(i, i.ToString())); } for (var i = 0; i < size * 100; i++) { m1.Get((i % size).ToString()); } for (var i = 0; i < size; i++) { m1.Remove(i.ToString()); } s.Stop(); Console.WriteLine("RecordedMapModel took " + s.Elapsed); /* * s.Restart(); * for (var i = 0; i < size; i++) * m2.Set(i.ToString(), new Item(i, i.ToString())); * for (var i = 0; i < size * 100; i++) * m2.Get((i % size).ToString()); * for (var i = 0; i < size; i++) * m2.Remove(i.ToString()); * s.Stop(); * Console.WriteLine("ClojureRecordedMapModel took " + s.Elapsed); */ s.Restart(); for (var i = 0; i < size; i++) { m3[i.ToString()] = new Item(i, i.ToString()); } Item o; for (var i = 0; i < size * 100; i++) { m3.TryGetValue((i % size).ToString(), out o); } for (var i = 0; i < size; i++) { m3.Remove(i.ToString()); } s.Stop(); Console.WriteLine("Dictionary took " + s.Elapsed); m3.Clear(); s.Restart(); for (var i = 0; i < size; i++) { var tmp = new Dictionary <string, Item>(m3); tmp[i.ToString()] = new Item(i, i.ToString()); m3 = tmp; } for (var i = 0; i < size * 100; i++) { m3.TryGetValue((i % size).ToString(), out o); } for (var i = 0; i < size; i++) { var tmp = new Dictionary <string, Item>(m3); tmp.Remove(i.ToString()); m3 = tmp; } s.Stop(); Console.WriteLine("Copy Dictionary took " + s.Elapsed); s.Restart(); for (var i = 0; i < size; i++) { m4 = m4.Add(i.ToString(), new Item(i, i.ToString())); } for (var i = 0; i < size * 100; i++) { m4.TryFind((i % size).ToString()); } for (var i = 0; i < size; i++) { m4 = m4.Remove(i.ToString()); } s.Stop(); Console.WriteLine("FSharpMap took " + s.Elapsed); /* * s.Restart(); * for (var i = 0; i < size; i++) * m5 = (PersistentTreeMap)m5.assoc(i.ToString(), new Item(i, i.ToString())); * object obj; * for (var i = 0; i < size * 100; i++) * m5.TryGetValue((i % size).ToString(), out obj); * for (var i = 0; i < size; i++) * m5 = (PersistentTreeMap)RT.dissoc(m5, i.ToString()); * s.Stop(); * Console.WriteLine("PersistentTreeMap took " + s.Elapsed); */ }
private void VisualState1OnMoveRequested(object sender, Tuple<FieldCoords, FieldCoords> tuple) { var moveResult = Board.applyMove(tuple.Item1, tuple.Item2, _State); _State = moveResult.Item1; var validMoves = Board.allValidMoves(moveResult.Item2, moveResult.Item1); _CurrentPlayer = GetNextPlayer(moveResult.Item2); visualState1.CurrentPlayer = _CurrentPlayer; visualState1.Draw(_State, validMoves); if (CheckAndDisplayWinner()) { visualState1.Enabled = false; return; } if (_CurrentPlayer.IsRed && _EnableAI) { this.Enabled = false; MakeAIMove(moveResult.Item2); } }
public async Task <ActionResult> Action() { var action = Request["Action"]; var args = new Dictionary <string, string>(); byte opcode = 0x01; var address = Request["Address"]; var contractHash = new Address(address).Bytes; string key = HttpServerUtility.UrlTokenEncode(contractHash); var file = $"{key}"; string contractCode = null; var codeFile = Path.ChangeExtension(Path.Combine("db", "contracts", file), ".txt"); if (System.IO.File.Exists(codeFile)) { contractCode = System.IO.File.ReadAllText(codeFile); } var contractInteraction = new ContractInteraction() { Action = action, Address = new Address(contractHash, AddressType.Contract).ToString() }; ContractMetadata contractMetadata = null; try { var _metadata = ContractExamples.Execution.metadata(contractCode); if (FSharpOption <ContractMetadata> .get_IsNone(_metadata)) { contractInteraction.Message = "No metadata"; } else { contractMetadata = _metadata.Value; } } catch { contractInteraction.Message = "Error getting metadata"; return(View(contractInteraction)); } if (contractMetadata.IsCallOption) { var callOptionParameters = (ContractExamples.Execution.ContractMetadata.CallOption)contractMetadata; switch (action) { case "Collateralize": //var pkAddress = new PKAddressField(); //pkAddress.SetValue(Request["return-address"]); //if (pkAddress.Invalid) //{ // contractInteraction.Message = "Invalid return address"; // return View(contractInteraction); //} //args.Add("returnPubKeyAddress", pkAddress.Value); opcode = OPCODE_COLLATERALIZE; break; case "Exercise": var pkExerciseReturnAddress = new PKAddressField(); pkExerciseReturnAddress.SetValue(Request["exercise-return-address"]); if (pkExerciseReturnAddress.Invalid) { contractInteraction.Message = "Invalid send address"; return(View(contractInteraction)); } args.Add("returnPubKeyAddress", pkExerciseReturnAddress.Value); string oracleData; //GetOracleCommitmentData(callOptionParameters.Item.underlying, DateTime.Now.ToUniversalTime()).Result; if (GetLastData(callOptionParameters.Item.underlying, out oracleData)) { args.Add("oracleRawData", oracleData); } else { contractInteraction.Message = "Error getting oracle data"; return(View(contractInteraction)); } opcode = OPCODE_EXERCISE; break; case "Buy": var pkSendAddress = new PKAddressField(); pkSendAddress.SetValue(Request["buy-send-address"]); if (pkSendAddress.Invalid) { contractInteraction.Message = "Invalid send address"; return(View(contractInteraction)); } args.Add("returnPubKeyAddress", pkSendAddress.Value); opcode = OPCODE_BUY; break; //case "Close": // opcode = OPCODE_CLOSE; // break; } } var argsMap = new FSharpMap <string, string>(args.Select(t => new Tuple <string, string>(t.Key, t.Value))); var result = await Client.Send <GetContractPointedOutputsResultPayload>(_address, new GetContractPointedOutputsPayload() { ContractHash = contractHash }); var utxos = GetContractPointedOutputsResultPayload.Unpack(result.PointedOutputs); var data = ContractUtilities.DataGenerator.makeJson(contractMetadata, utxos, opcode, argsMap); if (data.IsError) { contractInteraction.Message = data.ErrorValue.ToString(); } else { contractInteraction.Data = data.ResultValue.JsonValue.ToString(); } return(View(contractInteraction)); }
public static FSharpMap <U, V> MapKey <K, V, U>(this FSharpMap <K, V> d, Func <K, U> f) => MapModule.OfSeq(d.Select(kv => Tuple.Create(f(kv.Key), kv.Value)));
public static FSharpMap <K, V> WhereKV <K, V>(this FSharpMap <K, V> d, Func <KeyValuePair <K, V>, bool> keep) => d.Where(kv => !keep(kv)).Aggregate(d, (s, n) => s.Remove(n.Key));
public void Set(TKeyType key, TValueType value) { _indHistory.OnSet(); Map = Map.Add(key, value); }
public void Clear() { _indHistory.OnSet(); Map = new FSharpMap <TKeyType, TValueType>(Enumerable.Empty <Tuple <TKeyType, TValueType> >()); }
public void Draw(FSharpMap<FieldCoords, FieldState> state, FSharpList<Tuple<FieldCoords, FSharpOption<FieldCoords>, FieldCoords>> validMoves) { State = state; _ValidMoves = validMoves; Bitmap bmp = new Bitmap(_CanvasSize, _CanvasSize); Graphics canvas = Graphics.FromImage(bmp); DrawGrid(canvas); DrawFields(canvas); //DrawPossibleMoves(canvas); //DrawCoords(canvas); canvas.Flush(); canvas.Dispose(); _MainPictureBox.Image = bmp; }
public void Remove(TKeyType key) { _indHistory.OnSet(); Map = Map.Remove(key); }
public static async Task <Http.HttpContext> ToSuaveHttpContext( this HttpContext context, bool preserveHttpHeaderCasing) { var request = context.Request; // Get HTTP headers var headers = ListModule.OfSeq( request.Headers .Select(h => new Tuple <string, string>( preserveHttpHeaderCasing ? h.Key : h.Key.ToLower(), h.Value)) .ToList()); // Get the absolute URL var host = request.Host.Value; var absoluteUrl = $"{request.Scheme}://{host}{request.Path}{request.QueryString.Value}"; // Get the raw query string (Suave doesn't include the ? in the beginning) var rawQuery = request.QueryString.Value.Substring(Math.Min(request.QueryString.Value.Length, 1)); // Get files and multipart fields from a form request var files = new List <Http.HttpUpload>(); var multipartFields = new List <Tuple <string, string> >(); if (request.HasFormContentType && request.Form != null && request.Form.Count > 0) { multipartFields.AddRange( request.Form.Select(field => new Tuple <string, string>(field.Key, field.Value))); if (request.Form.Files != null && request.Form.Files.Count > 0) { foreach (var file in request.Form.Files) { var tempFileName = Path.GetTempFileName(); using (var fileStream = File.Open(tempFileName, FileMode.OpenOrCreate)) await file.OpenReadStream().CopyToAsync(fileStream); files.Add( new Http.HttpUpload( file.Name, file.FileName, file.ContentType, tempFileName)); } } } // Get the raw body // (This will be an empty byte array if the stream has already been // read during the form upload) var rawForm = await request.Body.ReadAllBytesAsync(); var suaveRequest = new Http.HttpRequest( request.Protocol, new Uri(absoluteUrl), request.Host.Host, HttpMethodFromString(request.Method), headers, rawForm, rawQuery, ListModule.OfSeq(files), ListModule.OfSeq(multipartFields), TraceHeader.parseTraceHeaders(headers)); var suaveRuntime = Http.HttpRuntimeModule.empty; var suaveSocketConnection = ConnectionModule.empty; FSharpMap <string, object> userState = MapModule.Empty <string, object>().Add("WebSockets", context.WebSockets); Http.HttpCode hTTP_ = Http.HttpCode.HTTP_404; var suaveResult = new Http.HttpResult(new Http.HttpStatus(hTTP_.code, hTTP_.reason), FSharpList <Tuple <string, string> > .Empty, Http.HttpContent.NullContent, false); return(new Http.HttpContext(suaveRequest, suaveRuntime, suaveSocketConnection, userState, new Http.HttpResult(new Http.HttpStatus(hTTP_.code, hTTP_.reason), FSharpList <Tuple <string, string> > .Empty, Http.HttpContent.NullContent, false))); }
/// <summary> /// Convert an F# Map into a LanguageExt Map /// </summary> public static IImmutableDictionary <K, V> fs <K, V>(FSharpMap <K, V> fsMap) => Map.addRange(map <K, V>(), List.map(fsMap, identity));
public MetaData[] Convert(FSharpMap<string, ProductTypes.Meta> meta) { if (meta == null || meta.Count == 0) return null; return _h.Map(meta, pair => Convert(pair.Value)); }
public FSharpMap<string, ProductTypes.Meta> Merge(FSharpMap<string, ProductTypes.Meta> src, MetaData[] update) { if (src == null) return Convert(update); if (update == null) return src; foreach (MetaData m in update) { if(m == null) continue; if (src.ContainsKey(m.name)) { var converted = Merge(src[m.name], m); src = src.Add(converted.key, converted); } else src = src.Add(m.name, Convert(m)); } return src; }
public void Performance() { //Var.pushThreadBindings(RT.map(RT.CURRENT_NS, RT.CURRENT_NS.deref())); var m1 = new RecordedMapModel<string, Item>(); //var m2 = new ClojureRecordedMapModel<string, Item>(); var m3 = new Dictionary<string, Item>(); var m4 = new FSharpMap<string, Item>(Enumerable.Empty<Tuple<string, Item>>()); //var m5 = new PersistentTreeMap(); const int size = 10000; var s = new Stopwatch(); s.Start(); for (var i = 0; i < size; i++) m1.Set(i.ToString(), new Item(i, i.ToString())); for (var i = 0; i < size * 100; i++) m1.Get((i % size).ToString()); for (var i = 0; i < size; i++) m1.Remove(i.ToString()); s.Stop(); Console.WriteLine("RecordedMapModel took " + s.Elapsed); /* s.Restart(); for (var i = 0; i < size; i++) m2.Set(i.ToString(), new Item(i, i.ToString())); for (var i = 0; i < size * 100; i++) m2.Get((i % size).ToString()); for (var i = 0; i < size; i++) m2.Remove(i.ToString()); s.Stop(); Console.WriteLine("ClojureRecordedMapModel took " + s.Elapsed); */ s.Restart(); for (var i = 0; i < size; i++) m3[i.ToString()] = new Item(i, i.ToString()); Item o; for (var i = 0; i < size * 100; i++) m3.TryGetValue((i % size).ToString(), out o); for (var i = 0; i < size; i++) m3.Remove(i.ToString()); s.Stop(); Console.WriteLine("Dictionary took " + s.Elapsed); m3.Clear(); s.Restart(); for (var i = 0; i < size; i++) { var tmp = new Dictionary<string, Item>(m3); tmp[i.ToString()] = new Item(i, i.ToString()); m3 = tmp; } for (var i = 0; i < size * 100; i++) m3.TryGetValue((i % size).ToString(), out o); for (var i = 0; i < size; i++) { var tmp = new Dictionary<string, Item>(m3); tmp.Remove(i.ToString()); m3 = tmp; } s.Stop(); Console.WriteLine("Copy Dictionary took " + s.Elapsed); s.Restart(); for (var i = 0; i < size; i++) m4 = m4.Add(i.ToString(), new Item(i, i.ToString())); for (var i = 0; i < size * 100; i++) m4.TryFind((i % size).ToString()); for (var i = 0; i < size; i++) m4 = m4.Remove(i.ToString()); s.Stop(); Console.WriteLine("FSharpMap took " + s.Elapsed); /* s.Restart(); for (var i = 0; i < size; i++) m5 = (PersistentTreeMap)m5.assoc(i.ToString(), new Item(i, i.ToString())); object obj; for (var i = 0; i < size * 100; i++) m5.TryGetValue((i % size).ToString(), out obj); for (var i = 0; i < size; i++) m5 = (PersistentTreeMap)RT.dissoc(m5, i.ToString()); s.Stop(); Console.WriteLine("PersistentTreeMap took " + s.Elapsed); */ }