public void Test5_1_Collections() { var m1 = new MegaType( new[] { 0, 1 }, new FSharpMap <string, int>(new List <Tuple <string, int> > { new Tuple <string, int>("key", 10) }), new FSharpSet <int>(new[] { 1 }), new FSharpList <FSharpOption <int> >(new FSharpOption <int>(22), FSharpList <FSharpOption <int> > .Empty), new[] { new[] { 0, 1 } }, new int[, ] { } ); Assert.True(MapModule.ContainsKey("key", m1.Maps)); var newSet = SetModule.Add(2, m1.Sets); //does not mutate set Assert.NotEqual(newSet, m1.Sets); if (OptionModule.IsSome(ListModule.Head(m1.Lists))) { Assert.Equal(22, ListModule.Head(m1.Lists).Value); } //Lists are linked lists, immutable and have structural equality Assert.Equal(m1.Arrays, m1.ArrayofArrays[0]); //Structural equality m1.Arrays[0] = 1; Assert.Equal(m1.Arrays, new[] { 1, 1 }); //Arrays are mutable }
Tuple <IIndex <K>, VectorConstruction> IIndexBuilder.Merge <K>(FSharpList <Tuple <IIndex <K>, VectorConstruction> > constructions, VectorListTransform transform) { bool flag = ListModule.ForAll <Tuple <IIndex <K>, VectorConstruction> >((Func <M0, bool>) new LinearIndex.allOrdered <K>(), (FSharpList <M0>)constructions); Func <IComparer <K>, Tuple <Tuple <K[], FSharpList <Tuple <long, long>[]> >, FSharpOption <bool> > > Func1 = (Func <IComparer <K>, Tuple <Tuple <K[], FSharpList <Tuple <long, long>[]> >, FSharpOption <bool> > >) new LinearIndex.mergeOrdered <K>(constructions); Func <Unit, Tuple <Tuple <K[], FSharpList <Tuple <long, long>[]> >, FSharpOption <bool> > > Func2 = (Func <Unit, Tuple <Tuple <K[], FSharpList <Tuple <long, long>[]> >, FSharpOption <bool> > >) new LinearIndex.mergeUnordered <K>(constructions); Tuple <Tuple <K[], FSharpList <Tuple <long, long>[]> >, FSharpOption <bool> > tuple1; if (flag) { Comparer <K> comparer = ((Tuple <IIndex <K>, VectorConstruction>)ListModule.Head <Tuple <IIndex <K>, VectorConstruction> >((FSharpList <M0>)constructions)).Item1.Comparer; Tuple <Tuple <K[], FSharpList <Tuple <long, long>[]> >, FSharpOption <bool> > tuple2; try { tuple2 = Func1.Invoke((IComparer <K>)comparer); } catch (object ex) { if ((Exception)ex is ComparisonFailedException) { tuple2 = Func2.Invoke((Unit)null); } else { throw; } } tuple1 = tuple2; } else { tuple1 = Func2.Invoke((Unit)null); } Tuple <Tuple <K[], FSharpList <Tuple <long, long>[]> >, FSharpOption <bool> > tuple3 = tuple1; FSharpOption <bool> fsharpOption = tuple3.Item2; Tuple <K[], FSharpList <Tuple <long, long>[]> > tuple4 = tuple3.Item1; IEnumerable <VectorConstruction> fsharpList1 = (IEnumerable <VectorConstruction>)ListModule.Map <Tuple <IIndex <K>, VectorConstruction>, VectorConstruction>((Func <M0, M1>) new LinearIndex.vectors <K>(), (FSharpList <M0>)constructions); LinearIndexBuilder linearIndexBuilder = this; Tuple <K[], FSharpList <Tuple <long, long>[]> > tuple5 = tuple4; IEnumerable <VectorConstruction> vectors = fsharpList1; FSharpOption <bool> ordered = fsharpOption; K[] keys = tuple5.Item1; FSharpList <Tuple <long, long>[]> relocations = tuple5.Item2; Tuple <IIndex <K>, IEnumerable <VectorConstruction> > tuple6 = linearIndexBuilder.makeSeriesConstructions <K>(keys, relocations, vectors, ordered); IEnumerable <VectorConstruction> fsharpList2 = tuple6.Item2; IIndex <K> newIndex = tuple6.Item1; return(new Tuple <IIndex <K>, VectorConstruction>(newIndex, VectorConstruction.NewCombine((Lazy <long>)LazyExtensions.Create <long>((Func <Unit, M0>) new LinearIndex.DeedleIndicesIIndexBuilderMerge <K>(newIndex)), fsharpList2, transform))); }
//[Test, TestCaseSource("split_token_tests")] public void TestSplitContent(StringTest test) { Func <string[], FSStringList> of_array = (array) => ListModule.OfArray <string>(array); Func <FSStringList, string[]> to_string_array = (string_list) => { var tl = string_list; var res = new StringList(); while (ListModule.Length <string>(tl) > 0) { res.Add(ListModule.Head <string>(tl)); tl = ListModule.Tail <string>(tl); } return(res.ToArray()); }; //Assert.AreEqual(to_string_array(of_array(test.expected)), to_string_array(OutputHandling.split_token_contents(test.provided))); }
/// <summary> /// <see cref=""/> /// </summary> /// <param name="test"></param> //[Test, TestCaseSource("smart_split_tests")] public void TestSmartSplit(StringTest test) { Regex r = new Regex(@"(""(?:[^""\\]*(?:\\.[^""\\]*)*)""|'(?:[^'\\]*(?:\\.[^'\\]*)*)'|[^\s]+)", RegexOptions.Compiled); MatchCollection m = r.Matches(@"'\'funky\' style'"); Func <string[], FSStringList> of_array = (array) => ListModule.OfArray <string>(array); Func <FSStringList, string[]> to_string_array = (string_list) => { var tl = string_list; var res = new StringList(); while (ListModule.Length <string>(tl) > 0) { res.Add(ListModule.Head <string>(tl)); tl = ListModule.Tail <string>(tl); } return(res.ToArray()); }; // Assert.AreEqual(to_string_array(of_array(test.expected)), to_string_array(OutputHandling.smart_split(test.provided))); }
public Deedle.Ranges.Ranges <T> MergeWith(IEnumerable <Deedle.Ranges.Ranges <T> > ranges) { IEnumerable <Deedle.Ranges.Ranges <T> > list = (IEnumerable <Deedle.Ranges.Ranges <T> >)SeqModule.ToList <Deedle.Ranges.Ranges <T> >((IEnumerable <M0>) new Ranges.MergeWith <T>(this, ranges, 0, (Deedle.Ranges.Ranges <T>)null)); if (SeqModule.IsEmpty <Deedle.Ranges.Ranges <T> >((IEnumerable <M0>)list)) { throw new ArgumentException("Range cannot be empty", nameof(ranges)); } IRangeKeyOperations <T> operations = ((Deedle.Ranges.Ranges <T>)SeqModule.Head <Deedle.Ranges.Ranges <T> >((IEnumerable <M0>)list)).Operations; FSharpList <Tuple <T, T> > fsharpList = (FSharpList <Tuple <T, T> >)ListModule.SortWith <Tuple <T, T> >((FSharpFunc <M0, FSharpFunc <M0, int> >) new Ranges.MergeWith <T>(operations), SeqModule.ToList <Tuple <T, T> >((IEnumerable <M0>) new Ranges.MergeWith <T>(list, (Deedle.Ranges.Ranges <T>)null, (IEnumerator <Deedle.Ranges.Ranges <T> >)null, (Tuple <T, T>)null, (IEnumerator <Tuple <T, T> >)null, 0, (Tuple <T, T>)null))); FSharpFunc <Tuple <T, T>, FSharpFunc <FSharpList <Tuple <T, T> >, IEnumerable <Tuple <T, T> > > > fsharpFunc = (FSharpFunc <Tuple <T, T>, FSharpFunc <FSharpList <Tuple <T, T> >, IEnumerable <Tuple <T, T> > > >) new Ranges.MergeWith <T>(operations); IRangeKeyOperations <T> ops = operations; return(new Deedle.Ranges.Ranges <T>((IEnumerable <Tuple <T, T> >)FSharpFunc <Tuple <T, T>, FSharpList <Tuple <T, T> > > .InvokeFast <IEnumerable <Tuple <T, T> > >((FSharpFunc <Tuple <T, T>, FSharpFunc <FSharpList <Tuple <T, T> >, M0> >)fsharpFunc, (Tuple <T, T>)ListModule.Head <Tuple <T, T> >((FSharpList <M0>)fsharpList), (FSharpList <Tuple <T, T> >)ListModule.Tail <Tuple <T, T> >((FSharpList <M0>)fsharpList)), ops)); }