diff --git a/BDD/BerlinClockFeatureSteps.feature.cs b/BDD/BerlinClockFeatureSteps.feature.cs
deleted file mode 100644
index 643d6539..00000000
--- a/BDD/BerlinClockFeatureSteps.feature.cs
+++ /dev/null
@@ -1,142 +0,0 @@
-// ------------------------------------------------------------------------------
-//
-// This code was generated by SpecFlow (http://www.specflow.org/).
-// SpecFlow Version:1.9.0.77
-// SpecFlow Generator Version:1.9.0.0
-// Runtime Version:4.0.30319.34209
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-// ------------------------------------------------------------------------------
-#region Designer generated code
-#pragma warning disable
-namespace BerlinClock.BDD
-{
- using TechTalk.SpecFlow;
-
-
- [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "1.9.0.77")]
- [System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute()]
- public partial class TheBerlinClockFeature
- {
-
- private static TechTalk.SpecFlow.ITestRunner testRunner;
-
-#line 1 "BerlinClockFeatureSteps.feature"
-#line hidden
-
- [Microsoft.VisualStudio.TestTools.UnitTesting.ClassInitializeAttribute()]
- public static void FeatureSetup(Microsoft.VisualStudio.TestTools.UnitTesting.TestContext testContext)
- {
- testRunner = TechTalk.SpecFlow.TestRunnerManager.GetTestRunner();
- TechTalk.SpecFlow.FeatureInfo featureInfo = new TechTalk.SpecFlow.FeatureInfo(new System.Globalization.CultureInfo("en-US"), "The Berlin Clock", "As a clock enthusiast\r\n I want to tell the time using the Berlin Clock\r\n So tha" +
- "t I can increase the number of ways that I can read the time", ProgrammingLanguage.CSharp, ((string[])(null)));
- testRunner.OnFeatureStart(featureInfo);
- }
-
- [Microsoft.VisualStudio.TestTools.UnitTesting.ClassCleanupAttribute()]
- public static void FeatureTearDown()
- {
- testRunner.OnFeatureEnd();
- testRunner = null;
- }
-
- [Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute()]
- public virtual void TestInitialize()
- {
- if (((TechTalk.SpecFlow.FeatureContext.Current != null)
- && (TechTalk.SpecFlow.FeatureContext.Current.FeatureInfo.Title != "The Berlin Clock")))
- {
- BerlinClock.BDD.TheBerlinClockFeature.FeatureSetup(null);
- }
- }
-
- [Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute()]
- public virtual void ScenarioTearDown()
- {
- testRunner.OnScenarioEnd();
- }
-
- public virtual void ScenarioSetup(TechTalk.SpecFlow.ScenarioInfo scenarioInfo)
- {
- testRunner.OnScenarioStart(scenarioInfo);
- }
-
- public virtual void ScenarioCleanup()
- {
- testRunner.CollectScenarioErrors();
- }
-
- [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
- [Microsoft.VisualStudio.TestTools.UnitTesting.DescriptionAttribute("Midnight 00:00")]
- [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "The Berlin Clock")]
- public virtual void Midnight0000()
- {
- TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Midnight 00:00", ((string[])(null)));
-#line 8
-this.ScenarioSetup(scenarioInfo);
-#line 9
-testRunner.When("the time is \"00:00:00\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
-#line hidden
-#line 10
-testRunner.Then("the clock should look like", "Y\r\nOOOO\r\nOOOO\r\nOOOOOOOOOOO\r\nOOOO", ((TechTalk.SpecFlow.Table)(null)), "Then ");
-#line hidden
- this.ScenarioCleanup();
- }
-
- [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
- [Microsoft.VisualStudio.TestTools.UnitTesting.DescriptionAttribute("Middle of the afternoon")]
- [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "The Berlin Clock")]
- public virtual void MiddleOfTheAfternoon()
- {
- TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Middle of the afternoon", ((string[])(null)));
-#line 20
-this.ScenarioSetup(scenarioInfo);
-#line 21
-testRunner.When("the time is \"13:17:01\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
-#line hidden
-#line 22
-testRunner.Then("the clock should look like", "O\r\nRROO\r\nRRRO\r\nYYROOOOOOOO\r\nYYOO", ((TechTalk.SpecFlow.Table)(null)), "Then ");
-#line hidden
- this.ScenarioCleanup();
- }
-
- [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
- [Microsoft.VisualStudio.TestTools.UnitTesting.DescriptionAttribute("Just before midnight")]
- [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "The Berlin Clock")]
- public virtual void JustBeforeMidnight()
- {
- TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Just before midnight", ((string[])(null)));
-#line 31
-this.ScenarioSetup(scenarioInfo);
-#line 32
-testRunner.When("the time is \"23:59:59\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
-#line hidden
-#line 33
-testRunner.Then("the clock should look like", "O\r\nRRRR\r\nRRRO\r\nYYRYYRYYRYY\r\nYYYY", ((TechTalk.SpecFlow.Table)(null)), "Then ");
-#line hidden
- this.ScenarioCleanup();
- }
-
- [Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute()]
- [Microsoft.VisualStudio.TestTools.UnitTesting.DescriptionAttribute("Midnight 24:00")]
- [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "The Berlin Clock")]
- public virtual void Midnight2400()
- {
- TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Midnight 24:00", ((string[])(null)));
-#line 42
-this.ScenarioSetup(scenarioInfo);
-#line 43
-testRunner.When("the time is \"24:00:00\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
-#line hidden
-#line 44
-testRunner.Then("the clock should look like", "Y\r\nRRRR\r\nRRRR\r\nOOOOOOOOOOO\r\nOOOO", ((TechTalk.SpecFlow.Table)(null)), "Then ");
-#line hidden
- this.ScenarioCleanup();
- }
- }
-}
-#pragma warning restore
-#endregion
diff --git a/BerlinClock.csproj b/BerlinClock.csproj
index ac8af99d..17c3d169 100644
--- a/BerlinClock.csproj
+++ b/BerlinClock.csproj
@@ -38,6 +38,9 @@
+
+ packages\System.ValueTuple.4.5.0\lib\netstandard1.0\System.ValueTuple.dll
+
@@ -49,23 +52,23 @@
-
+
+
+
+
+
+
+
+
+
+
-
- True
- True
- BerlinClockFeatureSteps.feature
-
-
- SpecFlowSingleFileGenerator
- BerlinClockFeatureSteps.feature.cs
-
diff --git a/BerlinClock.sln b/BerlinClock.sln
index 082911a2..20a8514f 100644
--- a/BerlinClock.sln
+++ b/BerlinClock.sln
@@ -1,10 +1,14 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0.21005.1
+# Visual Studio 15
+VisualStudioVersion = 15.0.28307.102
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BerlinClock", "BerlinClock.csproj", "{0451204D-BF86-43E1-B560-FC9AC830B9A9}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XUnitTestProject1", "XUnitTestProject1\XUnitTestProject1.csproj", "{F4BC5FB1-CE92-4B5E-934A-328913E1DD87}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpectFlowTest", "SpectFlowTest\SpectFlowTest.csproj", "{E93FC768-1722-4176-B26E-929A91707C31}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -15,8 +19,19 @@ Global
{0451204D-BF86-43E1-B560-FC9AC830B9A9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0451204D-BF86-43E1-B560-FC9AC830B9A9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0451204D-BF86-43E1-B560-FC9AC830B9A9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F4BC5FB1-CE92-4B5E-934A-328913E1DD87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F4BC5FB1-CE92-4B5E-934A-328913E1DD87}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F4BC5FB1-CE92-4B5E-934A-328913E1DD87}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F4BC5FB1-CE92-4B5E-934A-328913E1DD87}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E93FC768-1722-4176-B26E-929A91707C31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E93FC768-1722-4176-B26E-929A91707C31}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E93FC768-1722-4176-B26E-929A91707C31}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E93FC768-1722-4176-B26E-929A91707C31}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {84812F61-B50B-45FB-8C7B-F183CDD3D315}
+ EndGlobalSection
EndGlobal
diff --git a/Classes/LevelsFactory.cs b/Classes/LevelsFactory.cs
new file mode 100644
index 00000000..e745d3db
--- /dev/null
+++ b/Classes/LevelsFactory.cs
@@ -0,0 +1,32 @@
+using BerlinClock.Enums;
+using BerlinClock.Model.Levels;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BerlinClock.Classes
+{
+ public static class LevelsFactory
+ {
+ public static IBerlinClockLevel GetLevel(LevesEnum type)
+ {
+ switch(type)
+ {
+ case LevesEnum.First:
+ return new FirstLevel();
+ case LevesEnum.FirstHour:
+ return new HourFirstLevel();
+ case LevesEnum.SecondHour:
+ return new HourSecondLevel();
+ case LevesEnum.FirstMinute:
+ return new MinutesFirstLevel();
+ case LevesEnum.SecondMinute:
+ return new MinutesSecondLevel();
+ default:
+ throw new KeyNotFoundException();
+ }
+ }
+ }
+}
diff --git a/Classes/StatesColors.cs b/Classes/StatesColors.cs
new file mode 100644
index 00000000..28a6134b
--- /dev/null
+++ b/Classes/StatesColors.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BerlinClock.Classes
+{
+ public class StatesColors
+ {
+ public const char RED = 'R';
+ public const char YELLOW = 'Y';
+ public const char NONE = 'O';
+ }
+}
diff --git a/Classes/TimeConverter.cs b/Classes/TimeConverter.cs
index dd5bf4e0..89fe6070 100644
--- a/Classes/TimeConverter.cs
+++ b/Classes/TimeConverter.cs
@@ -1,4 +1,6 @@
-using System;
+using BerlinClock.Classes;
+using BerlinClock.Enums;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -9,7 +11,48 @@ public class TimeConverter : ITimeConverter
{
public string convertTime(string aTime)
{
- throw new NotImplementedException();
+ var (hours, minutes, seconds) = SplitTime(aTime);
+ string resultClock = string.Empty;
+ foreach (var level in (LevesEnum[])Enum.GetValues(typeof(LevesEnum)))
+ {
+ resultClock += $"{LevelsFactory.GetLevel(level).ParseTime(hours, minutes, seconds)}";
+ }
+ return resultClock;
+ }
+
+ private (int, int, int) SplitTime(string time)
+ {
+ int hours = 0;
+ int minutes = 0;
+ int seconds = 0;
+
+ var list = time.Split(':');
+ if(list.Count() > 3)
+ {
+ throw new ArgumentException();
+ }
+ if (list.Count() >= 1)
+ {
+ if (!int.TryParse(list[0], out hours))
+ {
+ throw new ArgumentException();
+ }
+ }
+ if (list.Count() >= 2)
+ {
+ if (!int.TryParse(list[1], out minutes))
+ {
+ throw new ArgumentException();
+ }
+ }
+ if (list.Count() == 3)
+ {
+ if (!int.TryParse(list[2], out seconds))
+ {
+ throw new ArgumentException();
+ }
+ }
+ return (hours, minutes, seconds);
}
}
}
diff --git a/Enums/LevesEnum.cs b/Enums/LevesEnum.cs
new file mode 100644
index 00000000..6e86b5d1
--- /dev/null
+++ b/Enums/LevesEnum.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BerlinClock.Enums
+{
+ public enum LevesEnum
+ {
+ First,
+ FirstHour,
+ SecondHour,
+ FirstMinute,
+ SecondMinute
+ }
+}
diff --git a/Model/Levels/FirstLevel.cs b/Model/Levels/FirstLevel.cs
new file mode 100644
index 00000000..20e7612e
--- /dev/null
+++ b/Model/Levels/FirstLevel.cs
@@ -0,0 +1,23 @@
+using BerlinClock.Classes;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BerlinClock.Model.Levels
+{
+ public class FirstLevel : LevelBase
+ {
+ public FirstLevel()
+ :base(1)
+ {
+
+ }
+ public override string ParseTime(int hours, int minutes, int seconds)
+ {
+ base.CheckSeconds(seconds);
+ return seconds % 2 > 0 ? StatesColors.NONE.ToString() + Environment.NewLine : StatesColors.YELLOW.ToString() + Environment.NewLine;
+ }
+ }
+}
diff --git a/Model/Levels/HourFirstLevel.cs b/Model/Levels/HourFirstLevel.cs
new file mode 100644
index 00000000..1b41905b
--- /dev/null
+++ b/Model/Levels/HourFirstLevel.cs
@@ -0,0 +1,28 @@
+using BerlinClock.Classes;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BerlinClock.Model.Levels
+{
+ public class HourFirstLevel : LevelBase
+ {
+ public HourFirstLevel()
+ : base(4)
+ {
+
+ }
+ public override string ParseTime(int hours, int minutes, int seconds)
+ {
+ base.CheckHours(hours);
+ var res = string.Empty;
+ foreach (var n in Enumerable.Range(1, base.Colums))
+ {
+ res += (n <= (hours / 5)) ? StatesColors.RED : StatesColors.NONE;
+ }
+ return res + base.GetSeparator();
+ }
+ }
+}
diff --git a/Model/Levels/HourSecondLevel.cs b/Model/Levels/HourSecondLevel.cs
new file mode 100644
index 00000000..5ce1f139
--- /dev/null
+++ b/Model/Levels/HourSecondLevel.cs
@@ -0,0 +1,28 @@
+using BerlinClock.Classes;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BerlinClock.Model.Levels
+{
+ public class HourSecondLevel : LevelBase
+ {
+ public HourSecondLevel()
+ : base(4)
+ {
+
+ }
+ public override string ParseTime(int hours, int minutes, int seconds)
+ {
+ base.CheckHours(hours);
+ var res = string.Empty;
+ foreach (var n in Enumerable.Range(1, base.Colums))
+ {
+ res += (n <= (hours % 5)) ? StatesColors.RED : StatesColors.NONE;
+ }
+ return res + base.GetSeparator();
+ }
+ }
+}
diff --git a/Model/Levels/IBerlinClockLevel.cs b/Model/Levels/IBerlinClockLevel.cs
new file mode 100644
index 00000000..8e19dbc0
--- /dev/null
+++ b/Model/Levels/IBerlinClockLevel.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BerlinClock.Model.Levels
+{
+ public interface IBerlinClockLevel
+ {
+ string ParseTime(int hours, int minutes, int seconds);
+ }
+}
diff --git a/Model/Levels/LevelBase.cs b/Model/Levels/LevelBase.cs
new file mode 100644
index 00000000..4b3abb4a
--- /dev/null
+++ b/Model/Levels/LevelBase.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BerlinClock.Model.Levels
+{
+ public abstract class LevelBase : IBerlinClockLevel
+ {
+ protected int Colums;
+ public LevelBase(int _colums)
+ {
+ Colums = _colums;
+ }
+
+ public abstract string ParseTime(int hours, int minutes, int seconds);
+ public string GetSeparator(bool isLast = false) => isLast ? string.Empty : Environment.NewLine;
+
+ protected void CheckHours(int hours)
+ {
+ if (hours > 24 || hours < 0)
+ {
+ throw new ArgumentOutOfRangeException();
+ }
+ }
+ protected void CheckMinutes(int minutes)
+ {
+ if (minutes > 59 || minutes < 0)
+ {
+ throw new ArgumentOutOfRangeException();
+ }
+ }
+ protected void CheckSeconds(int seconds)
+ {
+ if (seconds > 59 || seconds < 0)
+ {
+ throw new ArgumentOutOfRangeException();
+ }
+ }
+ }
+}
diff --git a/Model/Levels/MinutesFirstLevel.cs b/Model/Levels/MinutesFirstLevel.cs
new file mode 100644
index 00000000..91bc7964
--- /dev/null
+++ b/Model/Levels/MinutesFirstLevel.cs
@@ -0,0 +1,28 @@
+using BerlinClock.Classes;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BerlinClock.Model.Levels
+{
+ public class MinutesFirstLevel : LevelBase
+ {
+ public MinutesFirstLevel()
+ : base(11)
+ {
+
+ }
+ public override string ParseTime(int hours, int minutes, int seconds)
+ {
+ base.CheckMinutes(minutes);
+ var res = string.Empty;
+ foreach (var n in Enumerable.Range(1, base.Colums))
+ {
+ res += (n <= (minutes / 5)) ? (n % 3 == 0) ? StatesColors.RED : StatesColors.YELLOW : StatesColors.NONE;
+ }
+ return res + base.GetSeparator();
+ }
+ }
+}
diff --git a/Model/Levels/MinutesSecondLevel.cs b/Model/Levels/MinutesSecondLevel.cs
new file mode 100644
index 00000000..0fe24836
--- /dev/null
+++ b/Model/Levels/MinutesSecondLevel.cs
@@ -0,0 +1,28 @@
+using BerlinClock.Classes;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BerlinClock.Model.Levels
+{
+ public class MinutesSecondLevel : LevelBase
+ {
+ public MinutesSecondLevel()
+ : base(4)
+ {
+
+ }
+ public override string ParseTime(int hours, int minutes, int seconds)
+ {
+ base.CheckMinutes(minutes);
+ var res = string.Empty;
+ foreach (var n in Enumerable.Range(1, base.Colums))
+ {
+ res += (n <= (minutes % 5)) ? StatesColors.YELLOW : StatesColors.NONE;
+ }
+ return res + base.GetSeparator(true);
+ }
+ }
+}
diff --git a/BDD/BerlinClockFeatureSteps.cs b/SpectFlowTest/BerlinClockFeatureSteps.cs
similarity index 100%
rename from BDD/BerlinClockFeatureSteps.cs
rename to SpectFlowTest/BerlinClockFeatureSteps.cs
diff --git a/BDD/BerlinClockFeatureSteps.feature b/SpectFlowTest/BerlinClockFeatureSteps.feature
similarity index 100%
rename from BDD/BerlinClockFeatureSteps.feature
rename to SpectFlowTest/BerlinClockFeatureSteps.feature
diff --git a/SpectFlowTest/BerlinClockFeatureSteps.feature.cs b/SpectFlowTest/BerlinClockFeatureSteps.feature.cs
new file mode 100644
index 00000000..bda75190
--- /dev/null
+++ b/SpectFlowTest/BerlinClockFeatureSteps.feature.cs
@@ -0,0 +1,223 @@
+// ------------------------------------------------------------------------------
+//
+// This code was generated by SpecFlow (http://www.specflow.org/).
+// SpecFlow Version:3.1.0.0
+// SpecFlow Generator Version:3.1.0.0
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+// ------------------------------------------------------------------------------
+#region Designer generated code
+#pragma warning disable
+namespace SpectFlowTest
+{
+ using TechTalk.SpecFlow;
+ using System;
+ using System.Linq;
+
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "3.1.0.0")]
+ [System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [TechTalk.SpecRun.FeatureAttribute("The Berlin Clock", Description="\tAs a clock enthusiast\r\n I want to tell the time using the Berlin Clock\r\n S" +
+ "o that I can increase the number of ways that I can read the time", SourceFile="BerlinClockFeatureSteps.feature", SourceLine=1)]
+ public partial class TheBerlinClockFeature
+ {
+
+ private TechTalk.SpecFlow.ITestRunner testRunner;
+
+ private string[] _featureTags = ((string[])(null));
+
+#line 1 "BerlinClockFeatureSteps.feature"
+#line hidden
+
+ [TechTalk.SpecRun.FeatureInitialize()]
+ public virtual void FeatureSetup()
+ {
+ testRunner = TechTalk.SpecFlow.TestRunnerManager.GetTestRunner();
+ TechTalk.SpecFlow.FeatureInfo featureInfo = new TechTalk.SpecFlow.FeatureInfo(new System.Globalization.CultureInfo("en-US"), "The Berlin Clock", "\tAs a clock enthusiast\r\n I want to tell the time using the Berlin Clock\r\n S" +
+ "o that I can increase the number of ways that I can read the time", ProgrammingLanguage.CSharp, ((string[])(null)));
+ testRunner.OnFeatureStart(featureInfo);
+ }
+
+ [TechTalk.SpecRun.FeatureCleanup()]
+ public virtual void FeatureTearDown()
+ {
+ testRunner.OnFeatureEnd();
+ testRunner = null;
+ }
+
+ public virtual void TestInitialize()
+ {
+ }
+
+ [TechTalk.SpecRun.ScenarioCleanup()]
+ public virtual void TestTearDown()
+ {
+ testRunner.OnScenarioEnd();
+ }
+
+ public virtual void ScenarioInitialize(TechTalk.SpecFlow.ScenarioInfo scenarioInfo)
+ {
+ testRunner.OnScenarioInitialize(scenarioInfo);
+ }
+
+ public virtual void ScenarioStart()
+ {
+ testRunner.OnScenarioStart();
+ }
+
+ public virtual void ScenarioCleanup()
+ {
+ testRunner.CollectScenarioErrors();
+ }
+
+ [TechTalk.SpecRun.ScenarioAttribute("Midnight 00:00", SourceLine=7)]
+ public virtual void Midnight0000()
+ {
+ string[] tagsOfScenario = ((string[])(null));
+ TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Midnight 00:00", null, ((string[])(null)));
+#line 8
+this.ScenarioInitialize(scenarioInfo);
+#line hidden
+ bool isScenarioIgnored = default(bool);
+ bool isFeatureIgnored = default(bool);
+ if ((tagsOfScenario != null))
+ {
+ isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any();
+ }
+ if ((this._featureTags != null))
+ {
+ isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any();
+ }
+ if ((isScenarioIgnored || isFeatureIgnored))
+ {
+ testRunner.SkipScenario();
+ }
+ else
+ {
+ this.ScenarioStart();
+#line 9
+testRunner.When("the time is \"00:00:00\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
+#line hidden
+#line 10
+testRunner.Then("the clock should look like", "Y\r\nOOOO\r\nOOOO\r\nOOOOOOOOOOO\r\nOOOO", ((TechTalk.SpecFlow.Table)(null)), "Then ");
+#line hidden
+ }
+ this.ScenarioCleanup();
+ }
+
+ [TechTalk.SpecRun.ScenarioAttribute("Middle of the afternoon", SourceLine=19)]
+ public virtual void MiddleOfTheAfternoon()
+ {
+ string[] tagsOfScenario = ((string[])(null));
+ TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Middle of the afternoon", null, ((string[])(null)));
+#line 20
+this.ScenarioInitialize(scenarioInfo);
+#line hidden
+ bool isScenarioIgnored = default(bool);
+ bool isFeatureIgnored = default(bool);
+ if ((tagsOfScenario != null))
+ {
+ isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any();
+ }
+ if ((this._featureTags != null))
+ {
+ isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any();
+ }
+ if ((isScenarioIgnored || isFeatureIgnored))
+ {
+ testRunner.SkipScenario();
+ }
+ else
+ {
+ this.ScenarioStart();
+#line 21
+testRunner.When("the time is \"13:17:01\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
+#line hidden
+#line 22
+testRunner.Then("the clock should look like", "O\r\nRROO\r\nRRRO\r\nYYROOOOOOOO\r\nYYOO", ((TechTalk.SpecFlow.Table)(null)), "Then ");
+#line hidden
+ }
+ this.ScenarioCleanup();
+ }
+
+ [TechTalk.SpecRun.ScenarioAttribute("Just before midnight", SourceLine=30)]
+ public virtual void JustBeforeMidnight()
+ {
+ string[] tagsOfScenario = ((string[])(null));
+ TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Just before midnight", null, ((string[])(null)));
+#line 31
+this.ScenarioInitialize(scenarioInfo);
+#line hidden
+ bool isScenarioIgnored = default(bool);
+ bool isFeatureIgnored = default(bool);
+ if ((tagsOfScenario != null))
+ {
+ isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any();
+ }
+ if ((this._featureTags != null))
+ {
+ isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any();
+ }
+ if ((isScenarioIgnored || isFeatureIgnored))
+ {
+ testRunner.SkipScenario();
+ }
+ else
+ {
+ this.ScenarioStart();
+#line 32
+testRunner.When("the time is \"23:59:59\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
+#line hidden
+#line 33
+testRunner.Then("the clock should look like", "O\r\nRRRR\r\nRRRO\r\nYYRYYRYYRYY\r\nYYYY", ((TechTalk.SpecFlow.Table)(null)), "Then ");
+#line hidden
+ }
+ this.ScenarioCleanup();
+ }
+
+ [TechTalk.SpecRun.ScenarioAttribute("Midnight 24:00", SourceLine=41)]
+ public virtual void Midnight2400()
+ {
+ string[] tagsOfScenario = ((string[])(null));
+ TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Midnight 24:00", null, ((string[])(null)));
+#line 42
+this.ScenarioInitialize(scenarioInfo);
+#line hidden
+ bool isScenarioIgnored = default(bool);
+ bool isFeatureIgnored = default(bool);
+ if ((tagsOfScenario != null))
+ {
+ isScenarioIgnored = tagsOfScenario.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any();
+ }
+ if ((this._featureTags != null))
+ {
+ isFeatureIgnored = this._featureTags.Where(__entry => __entry != null).Where(__entry => String.Equals(__entry, "ignore", StringComparison.CurrentCultureIgnoreCase)).Any();
+ }
+ if ((isScenarioIgnored || isFeatureIgnored))
+ {
+ testRunner.SkipScenario();
+ }
+ else
+ {
+ this.ScenarioStart();
+#line 43
+testRunner.When("the time is \"24:00:00\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
+#line hidden
+#line 44
+testRunner.Then("the clock should look like", "Y\r\nRRRR\r\nRRRR\r\nOOOOOOOOOOO\r\nOOOO", ((TechTalk.SpecFlow.Table)(null)), "Then ");
+#line hidden
+ }
+ this.ScenarioCleanup();
+ }
+
+ [TechTalk.SpecRun.TestRunCleanup()]
+ public virtual void TestRunCleanup()
+ {
+ TechTalk.SpecFlow.TestRunnerManager.GetTestRunner().OnTestRunEnd();
+ }
+ }
+}
+#pragma warning restore
+#endregion
diff --git a/SpectFlowTest/SpectFlowTest.csproj b/SpectFlowTest/SpectFlowTest.csproj
new file mode 100644
index 00000000..e4c37acf
--- /dev/null
+++ b/SpectFlowTest/SpectFlowTest.csproj
@@ -0,0 +1,21 @@
+
+
+
+ netcoreapp2.1
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/XUnitTestProject1/UnitTest.cs b/XUnitTestProject1/UnitTest.cs
new file mode 100644
index 00000000..dcc190fc
--- /dev/null
+++ b/XUnitTestProject1/UnitTest.cs
@@ -0,0 +1,62 @@
+using BerlinClock;
+using FluentAssertions;
+using System;
+using Xunit;
+
+namespace XUnitTestProject1
+{
+ public class UnitTest
+ {
+ private ITimeConverter timeConverter;
+ public UnitTest()
+ {
+ timeConverter = new TimeConverter();
+ }
+ [Theory]
+ [InlineData("13:17:01", "O\r\nRROO\r\nRRRO\r\nYYROOOOOOOO\r\nYYOO")]
+ [InlineData("24:00", "Y\r\nRRRR\r\nRRRR\r\nOOOOOOOOOOO\r\nOOOO")]
+ [InlineData("24:00:00", "Y\r\nRRRR\r\nRRRR\r\nOOOOOOOOOOO\r\nOOOO")]
+ [InlineData("00:00:00", "Y\r\nOOOO\r\nOOOO\r\nOOOOOOOOOOO\r\nOOOO")]
+ [InlineData("00:59:00", "Y\r\nOOOO\r\nOOOO\r\nYYRYYRYYRYY\r\nYYYY")]
+ public void ShouldConvertTime(string time, string expectedResult)
+ {
+ // Act
+ var res = timeConverter.convertTime(time);
+
+ // Assert
+ res.Should().Be(expectedResult);
+ }
+
+ [Theory]
+ [InlineData("25:00:00")]
+ [InlineData("-1:00:00")]
+ [InlineData("1:61:00")]
+ [InlineData("1:59:100")]
+ public void ShouldThrowExceptionIfTimeIsOutOfBounds(string time)
+ {
+ Action act = () => timeConverter.convertTime(time);
+
+ act.Should().Throw();
+ }
+
+ [Theory]
+ [InlineData("25a:00:00")]
+ [InlineData("00:00_")]
+ [InlineData("nf:ff:ff")]
+ public void ShouldThrowExceptionIfTimeIsMalFormed(string time)
+ {
+ Action act = () => timeConverter.convertTime(time);
+
+ act.Should().Throw();
+ }
+
+ [Theory]
+ [InlineData("00:00:00:000")]
+ public void ShouldThrowExceptionIfContainsMiliseconds(string time)
+ {
+ Action act = () => timeConverter.convertTime(time);
+
+ act.Should().Throw();
+ }
+ }
+}
diff --git a/XUnitTestProject1/XUnitTestProject1.csproj b/XUnitTestProject1/XUnitTestProject1.csproj
new file mode 100644
index 00000000..b07ec737
--- /dev/null
+++ b/XUnitTestProject1/XUnitTestProject1.csproj
@@ -0,0 +1,20 @@
+
+
+
+ netcoreapp2.1
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages.config b/packages.config
index c6658054..96732dd6 100644
--- a/packages.config
+++ b/packages.config
@@ -1,4 +1,5 @@
+
\ No newline at end of file
diff --git a/packages/SpecFlow.1.9.0/.signature.p7s b/packages/SpecFlow.1.9.0/.signature.p7s
new file mode 100644
index 00000000..73b641e1
Binary files /dev/null and b/packages/SpecFlow.1.9.0/.signature.p7s differ
diff --git a/packages/SpecFlow.1.9.0/LICENSE.txt b/packages/SpecFlow.1.9.0/LICENSE.txt
new file mode 100644
index 00000000..665e1cd4
--- /dev/null
+++ b/packages/SpecFlow.1.9.0/LICENSE.txt
@@ -0,0 +1,31 @@
+SpecFlow Licence (New BSD License)
+
+Copyright (c) 2009, TechTalk
+
+Disclaimer:
+ * The initial codebase of Specflow was written by TechTalk employees.
+ No 3rd party code was included.
+ * No code of customer projects was used to create this project.
+ * TechTalk had the full rights to publish the initial codebase.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the SpecFlow project nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL TECHTALK OR CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/packages/SpecFlow.1.9.0/SpecFlow.1.9.0.nupkg b/packages/SpecFlow.1.9.0/SpecFlow.1.9.0.nupkg
new file mode 100644
index 00000000..7a3d835b
Binary files /dev/null and b/packages/SpecFlow.1.9.0/SpecFlow.1.9.0.nupkg differ
diff --git a/packages/SpecFlow.1.9.0/changelog.txt b/packages/SpecFlow.1.9.0/changelog.txt
new file mode 100644
index 00000000..e335fc11
--- /dev/null
+++ b/packages/SpecFlow.1.9.0/changelog.txt
@@ -0,0 +1,411 @@
+1.9.0 - 2012/08/06
+
+See detailed feature summary at http://go.specflow.org/whatsnew-19
+
+New Features:
++ Visual Studio 2012 support
++ Download IDE integration packages through their own distribution channel:
+ Visual Studio 2012 and 2010: Visual Studio Gallery (http://go.specflow.org/vsgallery)
+ MonoDevelop: MonoDevelop Add-in Repository (http://go.specflow.org/monodevelop-addin)
+ SharpDevelop: download addin and install it from SharpDevelop AddIn Manager (http://go.specflow.org/download-sdaddin)
+ Visual Studio 2008: download installer (http://go.specflow.org/download-vs2008msi)
++ Visual Studio 2012 generic test runner support
++ Added SpecFlow.xUnit NuGet package
++ Guids can now be used as arguments to step definitions.
++ Any missing characters on a guid in tables or step arguments will be filled with trailing zeroes. ("7" => 70000000-0000-0000-0000-000000000000)
++ Better comparison exceptions when comparing tables to sets.
++ Using standard Gherkin parser (http://github.com/aslakhellesoy/gherkin) v2.6.5
++ VS2010: Comment and uncomment selection
++ VS2010: Cache analysis result for faster solution startup
++ VS2010: It can now be installed on machines used for SharePoint development
++ Step Definitions without Regular Expressions (underscore style, pascal-case style)
++ F# step definitions (regex method names, Visual Studio integration)
++ SpecFlow.NUnit NuGet package has been split to SpecFlow.NUnit (w/o AddOn for NUnit runner) and SpecFlow.NUnit.Runners (with runner support)
++ ReSharper: editor features (toggle comment, go to step definition, run/debug scenarios) can be used with R# keyboard shortcuts
++ MsTest: Support for MSTest's [Owner] and [WorkItem] attributes with tags like @owner:foo @workitem:123 (Issue 162, Pull 161)
++ NuGet package for creating custom generator extensions: SpecFlow.CustomPlugin
++ VS2010: Integration can track files changed outside of VS (e.g. updated by a SCC pull)
++ VS2010: Collect bindings from assembly references
++ VS2010: Navigation from step definitions to the matching steps (Issue 192)
++ VS2010: Context-dependent navigation (go to step definition / go to steps) with Alt+Ctrl+Shift+S
++ VS2010: Generate missing step definitions from a feature file
++ Support custom step definition skeleton templates (dirrerent style customizable in config, template can be overriden in
+ "C:\Users\\AppData\Local\SpecFlow\SkeletonTemplates.sftemplate", see http://go.specflow.org/doc-stepdefstyles) (Issue 137, Pull 113)
++ VS2010: Highlight unbound steps and step parameters in the editor (beta, can be switched off in Tools/Options/SpecFlow) (Issue 49, Pull 189, with support of matgiro)
++ Plugin infrastructure
++ The default MsTest unit test provider is changed to the MsTest.2010. If you need to use the MsTest 2008 provider, you have to specify "MsTest.2008".
+ For newer MsTest providers, you can use "MsTest" (recommended) or "MsTest.2010".
+
+Fixed issues:
++ VS2010: The message "Step bindings are still being analyzed. Please wait." displayed infinitely (Issue 168)
++ SharePoint: throws errors when creating a test class based on the .feature file generated in SharePoint progress because the content of the file is xml. (Issue 151, Pull 170)
++ VS2010: Formatting table fails if table row does not end with a pipe (Issue 146)
++ Support for missing feature/GenerationTargetLanguage (Issue 163)
++ RuntimePluginLoader: IsAssignableFrom is backwards (Issue 164)
++ VS2010: Specflow options show up as "General" in VS Import/Export settings (Issue 184)
++ Dispose IDisposable user objects created by SpecFlow (Issue 22)
+
+1.8.1 - 2011/10/25
+
+Fixed issues:
++ ReSharper: NUnit scenario outline without tag on example set (rowtest enabled) causes inconclusive result (Issue 116)
++ Step definition with more than 10 parameters causing BindingException (extended now to 20)
++ Run & debug scenarios from the feature file context menu does not work with ReSharper 6 (Issue 138)
++ VS2010 step autocomplete: New steps form external project are not found unless IDE is restarted (Issue 88, by Stanislaw Wozniak)
++ VS2010 step autocomplete: Duplicated steps
+
+1.8.0 - 2011/10/17
+
+Breaking changes:
++ Classes used for context injection must have a single public constructor with maximum parameter count (so far the first constructor was used).
++ After step hook is was not invoked when step definition failed so far. Now it is invoked even in case of a failure.
+
+New features:
++ Async testing support for Windows Phone 7 (Issue 132, by Jeff Simons)
++ Support for MbUnit v3. Use unit test provider name "mbunit.3". (Issue 133, by Raytheon)
++ SpecFlow framework classes can be used as a dependency for context injection.
++ Custom extensions for the runtime can be specified in the config file (specflow/runtime/dependencies).
++ Better customization possibilities with plugins.
++ [StepScope] attribute can also scope hooks (event bindings) (Issue 95)
++ [StepScope] has been renamed to [Scope]. [StepScope] is kept with obsolete warning.
++ VS2010: Run & debug scenarios from the feature file context menu and solution explorer nodes (feature file, folder, project).
++ VS2010: Use infix word prefix matching for step completion.
++ VS2010: Regenerate feature files from project context menu.
++ VS2010: Go to step definition command in feature file context menu.
++ MsBuild generator can output generated file paths (GeneratedFiles property). The file list is populated to the MsBuild item
+ @(SpecFlowGeneratedFiles) by the TechTalk.SpecFlow.targets.
++ MsBuild: TechTalk.SpecFlow.targets provides overrideable BeforeUpdateFeatureFilesInProject and AfterUpdateFeatureFilesInProject targets.
++ Cucumber harmonization
+ + Allow using [Before]/[After] attributes as synonyms of [BeforeScenario]/[AfterScenario]
+ + Allow using [StepDefinition] attribute that matches to given, when or then steps
+ + Leading '@' sign can be specified for hooks and [Scope] attribute
+
+Fixed issues:
++ Instances created for context injection are disposed after scenario execution (Issue 22)
++ Error when opening feature file in VS2008 if VS2008 syntax coloring was enabled.
++ Silverlight: make possible to access SilverlightTest instance (Issue 126, by Matt Ellis)
++ Silverlight: apply feature tags to the test class instead of the methods (Issue 126, by Matt Ellis)
++ SpecFlowContext.TryGetValue does not evaluate Func factory methods (Issue 127, by Matt Ellis)
++ StepArgumentTransformation cannot be used recursively
++ VS2010 locks generator folder
++ After step hook is not invoked when step definition failed.
++ Missing XML comment warnings caused by the generated test class (Issue 121)
++ VS2010: Goto step definition misdiagnoses Given-But as a Then-But (Issue 134, by Raytheon)
++ VS2010: 'Go To Definition' does not work with partial classes. (Issue 53, by Raytheon)
++ AfterTestRun-Hook does not trigger when running in NUnitGui or NUnitConsole. To fix this, you need to add the NUnit addin from
+ https://raw.github.com/techtalk/SpecFlow/master/Installer/NUnitNuGetPackage/SpecFlowNUnitExtension.cs to the project, or use
+ the SpecFlow.NUnit combined NuGet package that does this automatically.
+
+1.7.1 - 2011/08/19
+
+Fixed issues:
++ Test execution report displays the feature description instead of the title (Issue 118)
++ Incomprehensible error message when Scenario-description is empty (Issue 117)
++ Assist helpers do not support Singles (Issue 114, by Joe Parkin)
++ Assist helpers do not support unsigned integers (Issue 115, by mdellanoce)
++ The test class is not generated as UTF-8, so some accented characters might be displayed incorrectly. (Issue 112)
++ Fix step definition report broken by v1.7. (Issue 111, by Chris Roff)
++ Intellisense breaks when typing keyword 'E' (And in pt-BR) followed by a space (Issue 109)
++ Intellisense completition removes the non-first words of keywords (e.g. for "Gegeben sei") (Issue 65)
++ Support table delimiter escaping for table formatting (Issue 99)
++ Fixed enum property name match (Issue 119)
++ Added Assist support for byte, float, long, ulong, sbyte, ushort, single. With nullables. (Issue 120)
+
+1.7.0 - 2011/07/29
+
+Breaking changes:
++ There are a few breaking changes in the generated test code. If you upgrade to SpecFlow 1.7, you should either
+ re-generate the tests, or setup your project to use a version for generating the tests that is compatible with
+ the runtime you use (see "Using SpecFlow generator from the project's lib folder" feature).
+
+New features:
++ Using standard Gherkin parser (http://github.com/aslakhellesoy/gherkin) v2.3.6
++ Using SpecFlow generator from the project's lib folder instead of SpecFlow installed for IDE integration.
+ The VS2010 integration can be installed independently from projects using a different version. The VS2010
+ integration checks the generator in the following paths:
+ 1. generator path configured in app.config ()
+ 2. generator assembly (TechTalk.SpecFlow.Generator.dll) referenced from the SpecFlow project
+ 3. generator in the same folder as the runtime (TechTalk.SpecFlow.dll)
+ 4. generator is near to the runtime ("tools" or "..\tools", relative to the runtime)
+ 5. generator obtained through NuGet ("..\..\tools", relative to the runtime)
+ If SpecFlow cannot find the generator or it is older than v1.6.0, the installed SpecFlow generator is used.
+ If you use any custom plugins (e.g. unit test generator), this has to be in the same folder as the generator
+ currently.
++ Added ToProjection, ToProjectionOfSet, ToProjectionOfInstance to allow for LINQ-based comparisons. (by Vagif Abilov)
++ Cleaned-up CreateInstance and CreateSet for greater code maintainability.
++ Cleaned-up CompareToInstance and CompareToSet for greater code maintainability, and slightly more accurate value comparisons (like decimals with trailing zeroes).
++ Removed the |Field|Value| requirement for CreateInstance and CompareToInstance. Any header names can be used, so long as the first column is the name of the property and the second column is the value.
++ Can use empty spaces and different casing in the tables used for comparison (i.e. can use |First name| instead of |FirstName| )
++ Tables used with CreateInstance and CompareToInstance can now be one-row tables with each field as a column (instead of requiring a vertical table with "Field/Value" headers)
++ A default function to create a default instance can be passed to CreateInstance and CreateSet.
++ Syntax coloring support for Visual Studio 2008. Uncheck this option in the installer if you are using cuke4vs. (by Avram Korets)
++ SharpDevelop 4 (#develop) integration. Enable SharpDevelop 4 integration in the installer and use the SharpDevelop AddIn Manager
+ to install the integration (select addin file from SpecFlow installation folder). (by Charles Weld)
++ Support for testing Silverlight asynchronous code. (by Matt Ellis & Ryan Burnham)
+ See https://github.com/techtalk/SpecFlow/wiki/Testing-Silverlight-Asynchronous-Code for details.
++ TableRow implements IDictionary
++ Add table row from a (total or partially filled) dictionary
++ Raname table column (Table.RenameColumn(stirng, string))
+
+Fixed issues:
++ Installer executes devenv /installtemplates even if VS2008 integration is not selected.
++ Duplicated logic between generator and runtime (generator depends on runtime now)
++ MsTest tests are not properly attached to the right feature (Issue 96)
++ Assist methods now work with classes with multiple properties of the same enum type.
++ Refactor IUnitTestGeneratorProvider interface to be more consistent (Issue 4)
+
+1.6.1 - 2011/04/15
+
+Fixed issues:
++ Windows Phone 7 runtime (TechTalk.SpecFlow.WindowsPhone7.dll) is not included in the NuGet package (Issue 61)
++ Warnings in the generated test classes (Issue 58)
++ Improved tracing for VS2010 integration
+
+1.6.0 - 2011/04/04
+
+Breaking changes:
++ The Silverlight runtime assembly has been renamed to TechTalk.SpecFlow.Silverlight3.dll.
+
+New features:
++ Added a Set(Func) extension method. The Func method will be invoked whenever ScenarioContext.Current.Get is called.
++ Support for tagging (including @ignore) scenario outline examples.
+ NUnit and MbUnit: to filter for categories generated for the examples in the unit test runner, you need to
+ switch off row test generaiton ()
++ Using standard Gherkin parser (http://github.com/aslakhellesoy/gherkin) v2.3.5
++ Support for converting table and multi-line text arguments with [StepArgumentTransformation] (by Chris Roff, roffster)
+ See examples in Tests/FeatureTests/StepArgumentTransfomation
++ VS2010: Support for specifying color for the step text
++ Added a FillInstance(T) extension method off of Table. When passed an instance of T, it will fill the instance with values from the table (like CreateInstance).
++ VS2010: Re-generate feature file when the configuration has changed or a new version of SpecFlow is installed
++ VS2010: Improved intellisense for steps
++ VS2010: Intellisense for keywords
++ VS2010: "go to binding"
++ VS2010: Automatic table formatting when "|" is typed
++ VS2010: Tracing can be configured from tools / options. The environment variable SPECFLOW_TRACE is not used anymore.
++ Windows Phone 7 support, see https://github.com/techtalk/SpecFlow/wiki/Windows-Phone-7-Support (by Max Paulousky)
++ Silverlight runtime can be configured from query string (by Matt Ellis)
++ Generate test parameters from scenario outline parameters and example set name for MsTest (by Qingsong Yao)
++ Isolated test generator interface (can be used later for using the generator of the project instead of the generator of the IDE integration)
++ Official NuGet integration (by Daniel Sack)
+
+Fixed issues:
++ Scenario with only "*" steps fails with "System.ArgumentException: Unable to convert block to binding type"
++ Binding is reported as invalid if there is a matching step definition with different scope
++ Support for datetime comparisons that ignore 12:00:00 AM (issue 52)
++ Fix NUnit execution report to properly select features when .features is solely comprised Scenario Outlines.
+ (by Jon Archer)
++ Tags applied at the feature level are now applied as Silverlight TagAttributes on the class. (by Matt Ellis, citizenmatt)
++ Rethrowing exceptions caught during steps would lose the call stack on Silverlight. (by Matt Ellis, citizenmatt)
++ SpecFlow emits an erroneous suggestion for the step bindings in VB.NET (Issue 32)
++ Refactored VS2010 intagration to better maintanability
++ Refactored CreateSet and CompareToSet extension methods to use the same logic as CreateInstance and CompareToInstance.
++ Step Intellisense doesn't show in Feature Background (Issue 23)
++ Xunit Theory Attribute/InlineAttribute using incorrect namespace. (Issue 40, by Kerry Jones)
++ Scenario Outline - Multiple Scenarios table header row VS formatting issue (Issue 16)
++ SpecFlow step definition report generator throws unhandled exception when a scenario starts with "And" (Issue 45)
++ VS2010: SpecFlow writes out feature and code-behind files with inconsistent line endings (Issue 28)
++ Step definitions can be implemented in abstract base classes (but the abstract base class must not have the [Binding] attribute). SpecFlow no longer tries to instantiate the abstract base class. (Issue 47)
+
+1.5.0 - 2010/12/17
+
+Breaking changes:
++ Changing the default value (true) of the allowRowTests configuration setting is not incompatible with older
+ runtimes.
+
+New features:
++ Step Intellisense for Visual Studio 2010 - displays the list of bound steps when pressing space or ctrl+space
+ after a step keyword
+ (Thanks to Marcus Hammarberg for the contribution.)
++ Options for Visual Studio 2010 - you can enable/disable the integration features (syntax coloring, outlining,
+ intellisense) in Visual Studio 2010, Tools / Options / SpecFlow / General
++ Faster installation for VS2010 - if you install SpecFlow only to VS2010, the installation is much faster
+ as we now entirely using the new VSIX infrastructure for the integaration.
++ Support for row test generation (NUnit, MbUnit and xUnit). This new feature is enabled by default, but can
+ be switched off from the configuration with .
+ (Thanks to John Gietzen (otac0n) for the contribution.)
++ Support for specifying property names with blanks and case insensitive for SpecFlow.Assist (by Steven Zhang, jdomzhang)
+
+Fixed issues:
++ Scoped Steps does not recognize feature tags (Issue 12)
++ Support for double and nullable types in table-helpers of SpecFlow.Assist
++ Support for enum parsing in table-helpers of SpecFlow.Assist
++ Adding comparison helpers to SpecFlow.Assist (by darrencauthon)
++ Support for char parsing in table-helpers of SpecFlow.Assist (Issue 19)
++ VS2010 might crash after pasting into a feature file
++ Excution report should list features ordered by feature title
+
+1.4.0 - 2010/10/07
+
+Breaking changes:
++ The generator has been improved to provide source code language. Because of this, SpecFlow test generated
+ with this version will be incompatible with older runtimes.
+
+New features:
++ Scoped Step Definitions: you can scope step definitions (bindings) to tags, features and scenarios. Scope filter
+ can be applied to a class or a method with the [StepScope] attribute.
+ See examples in Tests/FeatureTests/ScopedSteps/ScopedSteps.feature and Tests/FeatureTests/ScopedSteps/ScopedStepsBindings.cs
+ (Thanks to Jose Simas for the contribution.)
++ Adding binding-culture to App.config. If set, this culture is used during execution of steps.
++ VB-Step-Definition Skeleton Provider: For VB-projects, the suggested step skeletons are generated in VB.
++ Merging strongly typed context accessors from Darren Cauthon's SpecFlowAssist
++ Merging table/row extension methods from Darren Cauthon's SpecFlowAssist
+ Add a using statement for the namespace TechTalk.SpecFlow.Assist to use the extension methods.
+ See also Darren's youtube tutorial: http://bit.ly/aY4VOd
++ Diagnostic tracing: VS2010 integration can display trace messages to the Output window
+ if tracing is enabled. Tracing can be enabled by setting the environment variable SPECFLOW_TRACE
+ to either "all" or to the comma separated list of individual SpecFlow traing categories (currently
+ only the category "EditorParser" is supported).
+
+Fixed issues:
++ Better error reporting for wrong Gherkin files (multiple errors displayed, detect duplicate scenario names)
++ Visual Studio 2010 editor slows down after editing a feature file for a longer time (Issue 9)
+
+1.3.5.2 - 2010/08/11
+
+Fixed issues:
++ Sorry, we're ironing out our deploy strategy with the new Mono/MonoDevelop integration. We didn't
+ change the version in the MonoDevelop Add-In XML file.
+
+1.3.5.1 - 2010/08/11
+
+New features:
++ Support for hosting add-in on http://addins.monodevelop.com
+
+1.3.5 - 2010/08/11
+
+New features:
++ Support for Mono (v2.6.7) & MonoDevelop (v2.4) by Dale Ragan
+
+Fixed issues:
++ Generating code randomly for the wrong testing engine
++ Test class generation problem for Russian feature files
++ Fix tag support for Silverlight
+
+1.3.4 - 2010/07/28
+
+Fixed issues:
++ Installation fails if Visual Studio 2010 is not installed
++ VS2010: Background section is not colored properly
+
+1.3.3 - 2010/07/19
+
+New features:
++ Support for MsTest report generation
+ usage: specflow mstestexecutionreport projectFile [/testResult:value] [/xsltFile:value] [/out:value]
+ projectFile Visual Studio Project File containing specs
+ [/testResult:value] Test Result file generated by MsTest. Defaults to TestResult.trx
+ [/out:value] Generated Output File. Defaults to TestResult.html
+ [/xsltFile:value] Xslt file to use, defaults to built-in stylesheet if not provided
++ Visual Studio 2010 editor support:
+ - syntax coloring with configurable colors ("Gherkin ...")
+ - outlining for scenarios
+ Uninstall the beta integration (TechTalk.SpecFlow.VsIntegration.GherkinFile.vsix) before installing
+ SpecFlow 1.3.3.
+
+Fixed issues:
++ MbUnit execution fails for pending steps (Assert method not found: Inconclusive)
+
+1.3.2 - 2010/06/29
+
+New features:
++ Support for MsTest for .NET 4.0 categories. Configure the test provider name to
+ "MsTest.2010" in order to use the [TestCategory] attribute.
++ Silverlight support (beta), see http://wiki.github.com/techtalk/SpecFlow/silverlight-support
+
+Fixed issues:
++ Report generation fails if no custom XSLT is provided
+
+
+1.3.1 - 2010/06/21
+
+New features:
++ Using standard Gherkin parser (http://github.com/aslakhellesoy/gherkin) v2.0.1
++ Custom XSLT can be specified for generating reports.
+ See examples in Tests/ReportingTests/CustomXsltTemplate.feature
++ The test error can be accessed through ScenarioContext.Current.TestError
+ (e.g. in an AfterScenario event).
++ [StepTransformation] attribute has been renamed to [StepArgumentTransformation]
+ because this name describe the intention better. Using the old attribute will
+ generate a warning.
++ Support for MbUnit
+
+Fixed issues:
++ NullReference exception when using BeforeTestRun event (Issue 41)
+
+1.3.0 - 2010/05/05
+
+New features:
++ Using standard Gherkin parser (http://github.com/aslakhellesoy/gherkin) v1.0.24
++ Context injection in step definitions. Step definitions can get a context injected with
+ constructor injection. (Issue 30)
+ See examples in Tests/FeatureTests/ContextInjection
++ Using steps in other assemblies. This enables writing steps in VB. (Issue 19)
+ See examples in Tests/FeatureTests/ExternalSteps
++ Steps can be invoked from other steps using step text. See examples in
+ Tests/FeatureTests/CallingStepsFromStepDefinitions
++ Custom step parameter converters can be defined as a binding.
+ See examples in Tests/FeatureTests/StepArgumentTransfomation
++ SpecFlow feature files can be added also to VB.NET projects
++ Support for xUnit
++ Single installer for Visual Studio 2008 and 2010 (Issue 6, 10, 11)
++ Place GeneratedCodeAttribute and 'Designer generated code' region on generated code to
+ avoid having this code parsed by code analysis. (Issue 33)
++ Configuration option to disable all output. (Issue 29)
+ Use the following config to disable output:
+
+
+Fixed issues:
++ SpecFlow Reporting doesn't work with Firefox (Issue 31)
++ Binding methods are executed using the culture of the feature file.
++ Several parsing issues are solved now (Issue 1, 8, 9, 37)
+
+1.2.0 - 2009/11/25
+
+New features:
++ Generate #line pragmas to the output file (Issue 26)
++ Allow transformation of feature files from command-line and MsBuild (Issue 3)
++ Merge all command-line tool (generation, reports) to a single executable: specflow.exe
++ Support for Dutch and Swedish language
++ Support enumerations in step binding arguments (Issue 28)
+
+Fixed issues:
++ MsTest does not refresh tests automatically (Issue 25)
++ Fixes in report localization
++ Non-string parameters for bindings are not converted using the feature language (Issue 26)
+
+1.1.0 - 2009/11/11
+
+New features:
++ Support for MsTest (Issue 4)
++ Finalize configuration (Issue 13)
++ Support German, French and Hungarian languages (Issue 5)
++ Add strong-name for specflow assemblies (Issue 2)
++ Allow scenario events to be instance methods (Issue 20)
++ More descriptive name for the scenario outline example tests than XYZ_Variant1 (Issue 18)
++ NUnit SpecFlow test execution report (Issue 23)
++ Step definition usage report (Issue 24)
+
+Fixed issues:
++ Runtime: Remove direct dependency on nunit.framework.dll from the runtime (Issue 12)
++ Runtime: Binding methods with more than 4 parameters cannot be used (Issue 21)
++ Generator: Special language characters (e.g. accented letters) are removed when generating
+ test method names (Issue 22)
+
+1.0.2 - 2009/10/20
+
+New features:
++ Runtime: allow non-static bindings
++ Runtime: support multiple step attributes on a single binding method
+
+Fixed issues:
++ VS: Error message is displayed when you add a SpecFlow project item to your project.
++ Parser: mixed order of Given/When/Then is not supported
++ Runtime: the original phrasing of the keywords (Given/And/But) is not preserved
++ Generator: the generated test class has a "Fixture" suffix
++ Parser: specifying any "given" should be optional
+
+
+1.0.1 - 2009/10/13
+
+Initial publish on http://www.specflow.org
+
diff --git a/packages/SpecFlow.1.9.0/content/App.config.transform b/packages/SpecFlow.1.9.0/content/App.config.transform
new file mode 100644
index 00000000..75b9125e
--- /dev/null
+++ b/packages/SpecFlow.1.9.0/content/App.config.transform
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/SpecFlow.1.9.0/lib/net35/TechTalk.SpecFlow.dll b/packages/SpecFlow.1.9.0/lib/net35/TechTalk.SpecFlow.dll
new file mode 100644
index 00000000..4218e27d
Binary files /dev/null and b/packages/SpecFlow.1.9.0/lib/net35/TechTalk.SpecFlow.dll differ
diff --git a/packages/SpecFlow.1.9.0/lib/sl3/TechTalk.SpecFlow.Silverlight3.dll b/packages/SpecFlow.1.9.0/lib/sl3/TechTalk.SpecFlow.Silverlight3.dll
new file mode 100644
index 00000000..3a5513d5
Binary files /dev/null and b/packages/SpecFlow.1.9.0/lib/sl3/TechTalk.SpecFlow.Silverlight3.dll differ
diff --git a/packages/SpecFlow.1.9.0/lib/sl4-wp/TechTalk.SpecFlow.WindowsPhone7.dll b/packages/SpecFlow.1.9.0/lib/sl4-wp/TechTalk.SpecFlow.WindowsPhone7.dll
new file mode 100644
index 00000000..b828fc04
Binary files /dev/null and b/packages/SpecFlow.1.9.0/lib/sl4-wp/TechTalk.SpecFlow.WindowsPhone7.dll differ
diff --git a/packages/SpecFlow.1.9.0/tools/Gherkin.dll b/packages/SpecFlow.1.9.0/tools/Gherkin.dll
new file mode 100644
index 00000000..a53d0699
Binary files /dev/null and b/packages/SpecFlow.1.9.0/tools/Gherkin.dll differ
diff --git a/packages/SpecFlow.1.9.0/tools/IKVM.OpenJDK.Core.dll b/packages/SpecFlow.1.9.0/tools/IKVM.OpenJDK.Core.dll
new file mode 100644
index 00000000..d9e93b16
Binary files /dev/null and b/packages/SpecFlow.1.9.0/tools/IKVM.OpenJDK.Core.dll differ
diff --git a/packages/SpecFlow.1.9.0/tools/IKVM.OpenJDK.Security.dll b/packages/SpecFlow.1.9.0/tools/IKVM.OpenJDK.Security.dll
new file mode 100644
index 00000000..1d5e7170
Binary files /dev/null and b/packages/SpecFlow.1.9.0/tools/IKVM.OpenJDK.Security.dll differ
diff --git a/packages/SpecFlow.1.9.0/tools/IKVM.OpenJDK.Text.dll b/packages/SpecFlow.1.9.0/tools/IKVM.OpenJDK.Text.dll
new file mode 100644
index 00000000..04bb2853
Binary files /dev/null and b/packages/SpecFlow.1.9.0/tools/IKVM.OpenJDK.Text.dll differ
diff --git a/packages/SpecFlow.1.9.0/tools/IKVM.OpenJDK.Util.dll b/packages/SpecFlow.1.9.0/tools/IKVM.OpenJDK.Util.dll
new file mode 100644
index 00000000..a04d10c8
Binary files /dev/null and b/packages/SpecFlow.1.9.0/tools/IKVM.OpenJDK.Util.dll differ
diff --git a/packages/SpecFlow.1.9.0/tools/IKVM.Runtime.dll b/packages/SpecFlow.1.9.0/tools/IKVM.Runtime.dll
new file mode 100644
index 00000000..1c00e075
Binary files /dev/null and b/packages/SpecFlow.1.9.0/tools/IKVM.Runtime.dll differ
diff --git a/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.Generator.dll b/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.Generator.dll
new file mode 100644
index 00000000..dfc49405
Binary files /dev/null and b/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.Generator.dll differ
diff --git a/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.Parser.dll b/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.Parser.dll
new file mode 100644
index 00000000..6125f1e1
Binary files /dev/null and b/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.Parser.dll differ
diff --git a/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.Reporting.dll b/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.Reporting.dll
new file mode 100644
index 00000000..d64d9927
Binary files /dev/null and b/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.Reporting.dll differ
diff --git a/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.Utils.dll b/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.Utils.dll
new file mode 100644
index 00000000..6b23ed8f
Binary files /dev/null and b/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.Utils.dll differ
diff --git a/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.dll b/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.dll
new file mode 100644
index 00000000..4218e27d
Binary files /dev/null and b/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.dll differ
diff --git a/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.targets b/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.targets
new file mode 100644
index 00000000..877db80e
--- /dev/null
+++ b/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.targets
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+ false
+
+
+
+ false
+
+ false
+ false
+ false
+
+
+
+ false
+ true
+
+
+
+
+ BeforeUpdateFeatureFilesInProject;
+ UpdateFeatureFilesInProject;
+ AfterUpdateFeatureFilesInProject;
+ $(BuildDependsOn)
+
+
+ SwitchToForceGenerate;
+ $(RebuildDependsOn)
+
+
+
+
+
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.tasks b/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.tasks
new file mode 100644
index 00000000..c652e133
--- /dev/null
+++ b/packages/SpecFlow.1.9.0/tools/TechTalk.SpecFlow.tasks
@@ -0,0 +1,17 @@
+
+
+
+ specflow.exe
+
+
+
+
+ <__SpecFlowTasksFullPath>$(SpecFlowTasksPath)
+
+ <__SpecFlowTasksFullPath Condition="Exists('$(MSBuildProjectDirectory)\$(SpecFlowTasksPath)')"
+ >$(MSBuildProjectDirectory)\$(SpecFlowTasksPath)
+
+
+
+
+
diff --git a/packages/SpecFlow.1.9.0/tools/specflow.exe b/packages/SpecFlow.1.9.0/tools/specflow.exe
new file mode 100644
index 00000000..504ae39e
Binary files /dev/null and b/packages/SpecFlow.1.9.0/tools/specflow.exe differ
diff --git a/packages/System.ValueTuple.4.5.0/.signature.p7s b/packages/System.ValueTuple.4.5.0/.signature.p7s
new file mode 100644
index 00000000..355e3841
Binary files /dev/null and b/packages/System.ValueTuple.4.5.0/.signature.p7s differ
diff --git a/packages/System.ValueTuple.4.5.0/LICENSE.TXT b/packages/System.ValueTuple.4.5.0/LICENSE.TXT
new file mode 100644
index 00000000..984713a4
--- /dev/null
+++ b/packages/System.ValueTuple.4.5.0/LICENSE.TXT
@@ -0,0 +1,23 @@
+The MIT License (MIT)
+
+Copyright (c) .NET Foundation and Contributors
+
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/System.ValueTuple.4.5.0/System.ValueTuple.4.5.0.nupkg b/packages/System.ValueTuple.4.5.0/System.ValueTuple.4.5.0.nupkg
new file mode 100644
index 00000000..595280b8
Binary files /dev/null and b/packages/System.ValueTuple.4.5.0/System.ValueTuple.4.5.0.nupkg differ
diff --git a/packages/System.ValueTuple.4.5.0/THIRD-PARTY-NOTICES.TXT b/packages/System.ValueTuple.4.5.0/THIRD-PARTY-NOTICES.TXT
new file mode 100644
index 00000000..db542ca2
--- /dev/null
+++ b/packages/System.ValueTuple.4.5.0/THIRD-PARTY-NOTICES.TXT
@@ -0,0 +1,309 @@
+.NET Core uses third-party libraries or other resources that may be
+distributed under licenses different than the .NET Core software.
+
+In the event that we accidentally failed to list a required notice, please
+bring it to our attention. Post an issue or email us:
+
+ dotnet@microsoft.com
+
+The attached notices are provided for information only.
+
+License notice for Slicing-by-8
+-------------------------------
+
+http://sourceforge.net/projects/slicing-by-8/
+
+Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved
+
+
+This software program is licensed subject to the BSD License, available at
+http://www.opensource.org/licenses/bsd-license.html.
+
+
+License notice for Unicode data
+-------------------------------
+
+http://www.unicode.org/copyright.html#License
+
+Copyright © 1991-2017 Unicode, Inc. All rights reserved.
+Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Unicode data files and any associated documentation
+(the "Data Files") or Unicode software and any associated documentation
+(the "Software") to deal in the Data Files or Software
+without restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, and/or sell copies of
+the Data Files or Software, and to permit persons to whom the Data Files
+or Software are furnished to do so, provided that either
+(a) this copyright and permission notice appear with all copies
+of the Data Files or Software, or
+(b) this copyright and permission notice appear in associated
+Documentation.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale,
+use or other dealings in these Data Files or Software without prior
+written authorization of the copyright holder.
+
+License notice for Zlib
+-----------------------
+
+https://github.com/madler/zlib
+http://zlib.net/zlib_license.html
+
+/* zlib.h -- interface of the 'zlib' general purpose compression library
+ version 1.2.11, January 15th, 2017
+
+ Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jean-loup Gailly Mark Adler
+ jloup@gzip.org madler@alumni.caltech.edu
+
+*/
+
+License notice for Mono
+-------------------------------
+
+http://www.mono-project.com/docs/about-mono/
+
+Copyright (c) .NET Foundation Contributors
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the Software), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+License notice for International Organization for Standardization
+-----------------------------------------------------------------
+
+Portions (C) International Organization for Standardization 1986:
+ Permission to copy in any form is granted for use with
+ conforming SGML systems and applications as defined in
+ ISO 8879, provided this notice is included in all copies.
+
+License notice for Intel
+------------------------
+
+"Copyright (c) 2004-2006 Intel Corporation - All Rights Reserved
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+License notice for Xamarin and Novell
+-------------------------------------
+
+Copyright (c) 2015 Xamarin, Inc (http://www.xamarin.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+Copyright (c) 2011 Novell, Inc (http://www.novell.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+Third party notice for W3C
+--------------------------
+
+"W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE
+Status: This license takes effect 13 May, 2015.
+This work is being provided by the copyright holders under the following license.
+License
+By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions.
+Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications:
+The full text of this NOTICE in a location viewable to users of the redistributed or derivative work.
+Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included.
+Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)."
+Disclaimers
+THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT.
+The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders."
+
+License notice for Bit Twiddling Hacks
+--------------------------------------
+
+Bit Twiddling Hacks
+
+By Sean Eron Anderson
+seander@cs.stanford.edu
+
+Individually, the code snippets here are in the public domain (unless otherwise
+noted) — feel free to use them however you please. The aggregate collection and
+descriptions are © 1997-2005 Sean Eron Anderson. The code and descriptions are
+distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY and
+without even the implied warranty of merchantability or fitness for a particular
+purpose.
+
+License notice for Brotli
+--------------------------------------
+
+Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+compress_fragment.c:
+Copyright (c) 2011, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+decode_fuzzer.c:
+Copyright (c) 2015 The Chromium Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+
diff --git a/packages/System.ValueTuple.4.5.0/lib/MonoAndroid10/_._ b/packages/System.ValueTuple.4.5.0/lib/MonoAndroid10/_._
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/System.ValueTuple.4.5.0/lib/MonoTouch10/_._ b/packages/System.ValueTuple.4.5.0/lib/MonoTouch10/_._
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/System.ValueTuple.4.5.0/lib/net461/System.ValueTuple.dll b/packages/System.ValueTuple.4.5.0/lib/net461/System.ValueTuple.dll
new file mode 100644
index 00000000..1cadbf3e
Binary files /dev/null and b/packages/System.ValueTuple.4.5.0/lib/net461/System.ValueTuple.dll differ
diff --git a/packages/System.ValueTuple.4.5.0/lib/net461/System.ValueTuple.xml b/packages/System.ValueTuple.4.5.0/lib/net461/System.ValueTuple.xml
new file mode 100644
index 00000000..6dcce66f
--- /dev/null
+++ b/packages/System.ValueTuple.4.5.0/lib/net461/System.ValueTuple.xml
@@ -0,0 +1,1299 @@
+
+
+
+ System.ValueTuple
+
+
+
+
+ Indicates that the use of on a member is meant to be treated as a tuple with element names.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ Specifies, in a pre-order depth-first traversal of a type's
+ construction, which occurrences are
+ meant to carry element names.
+
+
+ This constructor is meant to be used on types that contain an
+ instantiation of that contains
+ element names. For instance, if C is a generic type with
+ two type parameters, then a use of the constructed type C{, might be intended to
+ treat the first type argument as a tuple with element names and the
+ second as a tuple without element names. In which case, the
+ appropriate attribute specification should use a
+ transformNames value of { "name1", "name2", null, null,
+ null }.
+
+
+
+
+ Specifies, in a pre-order depth-first traversal of a type's
+ construction, which elements are
+ meant to carry element names.
+
+
+
+
+ Provides extension methods for instances to interop with C# tuples features (deconstruction syntax, converting from and to ).
+
+
+
+
+ Deconstruct a properly nested with 1 elements.
+
+
+
+
+ Deconstruct a properly nested with 2 elements.
+
+
+
+
+ Deconstruct a properly nested with 3 elements.
+
+
+
+
+ Deconstruct a properly nested with 4 elements.
+
+
+
+
+ Deconstruct a properly nested with 5 elements.
+
+
+
+
+ Deconstruct a properly nested with 6 elements.
+
+
+
+
+ Deconstruct a properly nested with 7 elements.
+
+
+
+
+ Deconstruct a properly nested with 8 elements.
+
+
+
+
+ Deconstruct a properly nested with 9 elements.
+
+
+
+
+ Deconstruct a properly nested with 10 elements.
+
+
+
+
+ Deconstruct a properly nested with 11 elements.
+
+
+
+
+ Deconstruct a properly nested with 12 elements.
+
+
+
+
+ Deconstruct a properly nested with 13 elements.
+
+
+
+
+ Deconstruct a properly nested with 14 elements.
+
+
+
+
+ Deconstruct a properly nested with 15 elements.
+
+
+
+
+ Deconstruct a properly nested with 16 elements.
+
+
+
+
+ Deconstruct a properly nested with 17 elements.
+
+
+
+
+ Deconstruct a properly nested with 18 elements.
+
+
+
+
+ Deconstruct a properly nested with 19 elements.
+
+
+
+
+ Deconstruct a properly nested with 20 elements.
+
+
+
+
+ Deconstruct a properly nested with 21 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 1 element.
+
+
+
+
+ Make a properly nested from a properly nested with 2 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 3 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 4 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 5 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 6 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 7 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 8 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 9 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 10 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 11 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 12 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 13 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 14 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 15 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 16 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 17 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 18 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 19 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 20 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 21 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 1 element.
+
+
+
+
+ Make a properly nested from a properly nested with 2 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 3 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 4 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 5 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 6 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 7 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 8 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 9 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 10 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 11 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 12 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 13 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 14 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 15 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 16 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 17 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 18 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 19 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 20 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 21 elements.
+
+
+
+
+ Helper so we can call some tuple methods recursively without knowing the underlying types.
+
+
+
+
+ The ValueTuple types (from arity 0 to 8) comprise the runtime implementation that underlies tuples in C# and struct tuples in F#.
+ Aside from created via language syntax, they are most easily created via the ValueTuple.Create factory methods.
+ The System.ValueTuple types differ from the System.Tuple types in that:
+ - they are structs rather than classes,
+ - they are mutable rather than readonly, and
+ - their members (such as Item1, Item2, etc) are fields rather than properties.
+
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if is a .
+
+
+ Returns a value indicating whether this instance is equal to a specified value.
+ An instance to compare to this instance.
+ true if has the same value as this instance; otherwise, false.
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+ Returns the hash code for this instance.
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form ().
+
+
+
+ Creates a new struct 0-tuple.
+ A 0-tuple.
+
+
+ Creates a new struct 1-tuple, or singleton.
+ The type of the first component of the tuple.
+ The value of the first component of the tuple.
+ A 1-tuple (singleton) whose value is (item1).
+
+
+ Creates a new struct 2-tuple, or pair.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ A 2-tuple (pair) whose value is (item1, item2).
+
+
+ Creates a new struct 3-tuple, or triple.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The type of the third component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ The value of the third component of the tuple.
+ A 3-tuple (triple) whose value is (item1, item2, item3).
+
+
+ Creates a new struct 4-tuple, or quadruple.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The type of the third component of the tuple.
+ The type of the fourth component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ The value of the third component of the tuple.
+ The value of the fourth component of the tuple.
+ A 4-tuple (quadruple) whose value is (item1, item2, item3, item4).
+
+
+ Creates a new struct 5-tuple, or quintuple.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The type of the third component of the tuple.
+ The type of the fourth component of the tuple.
+ The type of the fifth component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ The value of the third component of the tuple.
+ The value of the fourth component of the tuple.
+ The value of the fifth component of the tuple.
+ A 5-tuple (quintuple) whose value is (item1, item2, item3, item4, item5).
+
+
+ Creates a new struct 6-tuple, or sextuple.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The type of the third component of the tuple.
+ The type of the fourth component of the tuple.
+ The type of the fifth component of the tuple.
+ The type of the sixth component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ The value of the third component of the tuple.
+ The value of the fourth component of the tuple.
+ The value of the fifth component of the tuple.
+ The value of the sixth component of the tuple.
+ A 6-tuple (sextuple) whose value is (item1, item2, item3, item4, item5, item6).
+
+
+ Creates a new struct 7-tuple, or septuple.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The type of the third component of the tuple.
+ The type of the fourth component of the tuple.
+ The type of the fifth component of the tuple.
+ The type of the sixth component of the tuple.
+ The type of the seventh component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ The value of the third component of the tuple.
+ The value of the fourth component of the tuple.
+ The value of the fifth component of the tuple.
+ The value of the sixth component of the tuple.
+ The value of the seventh component of the tuple.
+ A 7-tuple (septuple) whose value is (item1, item2, item3, item4, item5, item6, item7).
+
+
+ Creates a new struct 8-tuple, or octuple.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The type of the third component of the tuple.
+ The type of the fourth component of the tuple.
+ The type of the fifth component of the tuple.
+ The type of the sixth component of the tuple.
+ The type of the seventh component of the tuple.
+ The type of the eighth component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ The value of the third component of the tuple.
+ The value of the fourth component of the tuple.
+ The value of the fifth component of the tuple.
+ The value of the sixth component of the tuple.
+ The value of the seventh component of the tuple.
+ The value of the eighth component of the tuple.
+ An 8-tuple (octuple) whose value is (item1, item2, item3, item4, item5, item6, item7, item8).
+
+
+ Represents a 1-tuple, or singleton, as a value type.
+ The type of the tuple's only component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its field
+ is equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1),
+ where Item1 represents the value of . If the field is ,
+ it is represented as .
+
+
+
+
+ Represents a 2-tuple, or pair, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object based on a specified comparison method.
+
+ The object to compare with this instance.
+ An object that defines the method to use to evaluate whether the two objects are equal.
+ if the current instance is equal to the specified object; otherwise, .
+
+
+ This member is an explicit interface member implementation. It can be used only when the
+ instance is cast to an interface.
+
+ The implementation is called only if other is not ,
+ and if it can be successfully cast (in C#) or converted (in Visual Basic) to a
+ whose components are of the same types as those of the current instance. The IStructuralEquatable.Equals(Object, IEqualityComparer) method
+ first passes the values of the objects to be compared to the
+ implementation. If this method call returns , the method is
+ called again and passed the values of the two instances.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2),
+ where Item1 and Item2 represent the values of the
+ and fields. If either field value is ,
+ it is represented as .
+
+
+
+
+ Represents a 3-tuple, or triple, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+ The type of the tuple's third component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ The current instance's third component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+ The value of the tuple's third component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2, Item3).
+ If any field value is , it is represented as .
+
+
+
+
+ Represents a 4-tuple, or quadruple, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+ The type of the tuple's third component.
+ The type of the tuple's fourth component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ The current instance's third component.
+
+
+
+
+ The current instance's fourth component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+ The value of the tuple's third component.
+ The value of the tuple's fourth component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2, Item3, Item4).
+ If any field value is , it is represented as .
+
+
+
+
+ Represents a 5-tuple, or quintuple, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+ The type of the tuple's third component.
+ The type of the tuple's fourth component.
+ The type of the tuple's fifth component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ The current instance's third component.
+
+
+
+
+ The current instance's fourth component.
+
+
+
+
+ The current instance's fifth component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+ The value of the tuple's third component.
+ The value of the tuple's fourth component.
+ The value of the tuple's fifth component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2, Item3, Item4, Item5).
+ If any field value is , it is represented as .
+
+
+
+
+ Represents a 6-tuple, or sixtuple, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+ The type of the tuple's third component.
+ The type of the tuple's fourth component.
+ The type of the tuple's fifth component.
+ The type of the tuple's sixth component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ The current instance's third component.
+
+
+
+
+ The current instance's fourth component.
+
+
+
+
+ The current instance's fifth component.
+
+
+
+
+ The current instance's sixth component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+ The value of the tuple's third component.
+ The value of the tuple's fourth component.
+ The value of the tuple's fifth component.
+ The value of the tuple's sixth component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2, Item3, Item4, Item5, Item6).
+ If any field value is , it is represented as .
+
+
+
+
+ Represents a 7-tuple, or sentuple, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+ The type of the tuple's third component.
+ The type of the tuple's fourth component.
+ The type of the tuple's fifth component.
+ The type of the tuple's sixth component.
+ The type of the tuple's seventh component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ The current instance's third component.
+
+
+
+
+ The current instance's fourth component.
+
+
+
+
+ The current instance's fifth component.
+
+
+
+
+ The current instance's sixth component.
+
+
+
+
+ The current instance's seventh component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+ The value of the tuple's third component.
+ The value of the tuple's fourth component.
+ The value of the tuple's fifth component.
+ The value of the tuple's sixth component.
+ The value of the tuple's seventh component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2, Item3, Item4, Item5, Item6, Item7).
+ If any field value is , it is represented as .
+
+
+
+
+ Represents an 8-tuple, or octuple, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+ The type of the tuple's third component.
+ The type of the tuple's fourth component.
+ The type of the tuple's fifth component.
+ The type of the tuple's sixth component.
+ The type of the tuple's seventh component.
+ The type of the tuple's eighth component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ The current instance's third component.
+
+
+
+
+ The current instance's fourth component.
+
+
+
+
+ The current instance's fifth component.
+
+
+
+
+ The current instance's sixth component.
+
+
+
+
+ The current instance's seventh component.
+
+
+
+
+ The current instance's eighth component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+ The value of the tuple's third component.
+ The value of the tuple's fourth component.
+ The value of the tuple's fifth component.
+ The value of the tuple's sixth component.
+ The value of the tuple's seventh component.
+ The value of the tuple's eight component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2, Item3, Item4, Item5, Item6, Item7, Rest).
+ If any field value is , it is represented as .
+
+
+
+
diff --git a/packages/System.ValueTuple.4.5.0/lib/net47/System.ValueTuple.dll b/packages/System.ValueTuple.4.5.0/lib/net47/System.ValueTuple.dll
new file mode 100644
index 00000000..4ce28fde
Binary files /dev/null and b/packages/System.ValueTuple.4.5.0/lib/net47/System.ValueTuple.dll differ
diff --git a/packages/System.ValueTuple.4.5.0/lib/net47/System.ValueTuple.xml b/packages/System.ValueTuple.4.5.0/lib/net47/System.ValueTuple.xml
new file mode 100644
index 00000000..1151832f
--- /dev/null
+++ b/packages/System.ValueTuple.4.5.0/lib/net47/System.ValueTuple.xml
@@ -0,0 +1,8 @@
+
+
+
+ System.ValueTuple
+
+
+
+
diff --git a/packages/System.ValueTuple.4.5.0/lib/netcoreapp2.0/_._ b/packages/System.ValueTuple.4.5.0/lib/netcoreapp2.0/_._
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/System.ValueTuple.4.5.0/lib/netstandard1.0/System.ValueTuple.dll b/packages/System.ValueTuple.4.5.0/lib/netstandard1.0/System.ValueTuple.dll
new file mode 100644
index 00000000..65fa9eee
Binary files /dev/null and b/packages/System.ValueTuple.4.5.0/lib/netstandard1.0/System.ValueTuple.dll differ
diff --git a/packages/System.ValueTuple.4.5.0/lib/netstandard1.0/System.ValueTuple.xml b/packages/System.ValueTuple.4.5.0/lib/netstandard1.0/System.ValueTuple.xml
new file mode 100644
index 00000000..6dcce66f
--- /dev/null
+++ b/packages/System.ValueTuple.4.5.0/lib/netstandard1.0/System.ValueTuple.xml
@@ -0,0 +1,1299 @@
+
+
+
+ System.ValueTuple
+
+
+
+
+ Indicates that the use of on a member is meant to be treated as a tuple with element names.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ Specifies, in a pre-order depth-first traversal of a type's
+ construction, which occurrences are
+ meant to carry element names.
+
+
+ This constructor is meant to be used on types that contain an
+ instantiation of that contains
+ element names. For instance, if C is a generic type with
+ two type parameters, then a use of the constructed type C{, might be intended to
+ treat the first type argument as a tuple with element names and the
+ second as a tuple without element names. In which case, the
+ appropriate attribute specification should use a
+ transformNames value of { "name1", "name2", null, null,
+ null }.
+
+
+
+
+ Specifies, in a pre-order depth-first traversal of a type's
+ construction, which elements are
+ meant to carry element names.
+
+
+
+
+ Provides extension methods for instances to interop with C# tuples features (deconstruction syntax, converting from and to ).
+
+
+
+
+ Deconstruct a properly nested with 1 elements.
+
+
+
+
+ Deconstruct a properly nested with 2 elements.
+
+
+
+
+ Deconstruct a properly nested with 3 elements.
+
+
+
+
+ Deconstruct a properly nested with 4 elements.
+
+
+
+
+ Deconstruct a properly nested with 5 elements.
+
+
+
+
+ Deconstruct a properly nested with 6 elements.
+
+
+
+
+ Deconstruct a properly nested with 7 elements.
+
+
+
+
+ Deconstruct a properly nested with 8 elements.
+
+
+
+
+ Deconstruct a properly nested with 9 elements.
+
+
+
+
+ Deconstruct a properly nested with 10 elements.
+
+
+
+
+ Deconstruct a properly nested with 11 elements.
+
+
+
+
+ Deconstruct a properly nested with 12 elements.
+
+
+
+
+ Deconstruct a properly nested with 13 elements.
+
+
+
+
+ Deconstruct a properly nested with 14 elements.
+
+
+
+
+ Deconstruct a properly nested with 15 elements.
+
+
+
+
+ Deconstruct a properly nested with 16 elements.
+
+
+
+
+ Deconstruct a properly nested with 17 elements.
+
+
+
+
+ Deconstruct a properly nested with 18 elements.
+
+
+
+
+ Deconstruct a properly nested with 19 elements.
+
+
+
+
+ Deconstruct a properly nested with 20 elements.
+
+
+
+
+ Deconstruct a properly nested with 21 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 1 element.
+
+
+
+
+ Make a properly nested from a properly nested with 2 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 3 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 4 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 5 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 6 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 7 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 8 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 9 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 10 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 11 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 12 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 13 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 14 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 15 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 16 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 17 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 18 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 19 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 20 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 21 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 1 element.
+
+
+
+
+ Make a properly nested from a properly nested with 2 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 3 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 4 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 5 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 6 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 7 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 8 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 9 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 10 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 11 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 12 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 13 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 14 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 15 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 16 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 17 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 18 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 19 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 20 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 21 elements.
+
+
+
+
+ Helper so we can call some tuple methods recursively without knowing the underlying types.
+
+
+
+
+ The ValueTuple types (from arity 0 to 8) comprise the runtime implementation that underlies tuples in C# and struct tuples in F#.
+ Aside from created via language syntax, they are most easily created via the ValueTuple.Create factory methods.
+ The System.ValueTuple types differ from the System.Tuple types in that:
+ - they are structs rather than classes,
+ - they are mutable rather than readonly, and
+ - their members (such as Item1, Item2, etc) are fields rather than properties.
+
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if is a .
+
+
+ Returns a value indicating whether this instance is equal to a specified value.
+ An instance to compare to this instance.
+ true if has the same value as this instance; otherwise, false.
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+ Returns the hash code for this instance.
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form ().
+
+
+
+ Creates a new struct 0-tuple.
+ A 0-tuple.
+
+
+ Creates a new struct 1-tuple, or singleton.
+ The type of the first component of the tuple.
+ The value of the first component of the tuple.
+ A 1-tuple (singleton) whose value is (item1).
+
+
+ Creates a new struct 2-tuple, or pair.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ A 2-tuple (pair) whose value is (item1, item2).
+
+
+ Creates a new struct 3-tuple, or triple.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The type of the third component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ The value of the third component of the tuple.
+ A 3-tuple (triple) whose value is (item1, item2, item3).
+
+
+ Creates a new struct 4-tuple, or quadruple.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The type of the third component of the tuple.
+ The type of the fourth component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ The value of the third component of the tuple.
+ The value of the fourth component of the tuple.
+ A 4-tuple (quadruple) whose value is (item1, item2, item3, item4).
+
+
+ Creates a new struct 5-tuple, or quintuple.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The type of the third component of the tuple.
+ The type of the fourth component of the tuple.
+ The type of the fifth component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ The value of the third component of the tuple.
+ The value of the fourth component of the tuple.
+ The value of the fifth component of the tuple.
+ A 5-tuple (quintuple) whose value is (item1, item2, item3, item4, item5).
+
+
+ Creates a new struct 6-tuple, or sextuple.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The type of the third component of the tuple.
+ The type of the fourth component of the tuple.
+ The type of the fifth component of the tuple.
+ The type of the sixth component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ The value of the third component of the tuple.
+ The value of the fourth component of the tuple.
+ The value of the fifth component of the tuple.
+ The value of the sixth component of the tuple.
+ A 6-tuple (sextuple) whose value is (item1, item2, item3, item4, item5, item6).
+
+
+ Creates a new struct 7-tuple, or septuple.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The type of the third component of the tuple.
+ The type of the fourth component of the tuple.
+ The type of the fifth component of the tuple.
+ The type of the sixth component of the tuple.
+ The type of the seventh component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ The value of the third component of the tuple.
+ The value of the fourth component of the tuple.
+ The value of the fifth component of the tuple.
+ The value of the sixth component of the tuple.
+ The value of the seventh component of the tuple.
+ A 7-tuple (septuple) whose value is (item1, item2, item3, item4, item5, item6, item7).
+
+
+ Creates a new struct 8-tuple, or octuple.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The type of the third component of the tuple.
+ The type of the fourth component of the tuple.
+ The type of the fifth component of the tuple.
+ The type of the sixth component of the tuple.
+ The type of the seventh component of the tuple.
+ The type of the eighth component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ The value of the third component of the tuple.
+ The value of the fourth component of the tuple.
+ The value of the fifth component of the tuple.
+ The value of the sixth component of the tuple.
+ The value of the seventh component of the tuple.
+ The value of the eighth component of the tuple.
+ An 8-tuple (octuple) whose value is (item1, item2, item3, item4, item5, item6, item7, item8).
+
+
+ Represents a 1-tuple, or singleton, as a value type.
+ The type of the tuple's only component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its field
+ is equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1),
+ where Item1 represents the value of . If the field is ,
+ it is represented as .
+
+
+
+
+ Represents a 2-tuple, or pair, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object based on a specified comparison method.
+
+ The object to compare with this instance.
+ An object that defines the method to use to evaluate whether the two objects are equal.
+ if the current instance is equal to the specified object; otherwise, .
+
+
+ This member is an explicit interface member implementation. It can be used only when the
+ instance is cast to an interface.
+
+ The implementation is called only if other is not ,
+ and if it can be successfully cast (in C#) or converted (in Visual Basic) to a
+ whose components are of the same types as those of the current instance. The IStructuralEquatable.Equals(Object, IEqualityComparer) method
+ first passes the values of the objects to be compared to the
+ implementation. If this method call returns , the method is
+ called again and passed the values of the two instances.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2),
+ where Item1 and Item2 represent the values of the
+ and fields. If either field value is ,
+ it is represented as .
+
+
+
+
+ Represents a 3-tuple, or triple, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+ The type of the tuple's third component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ The current instance's third component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+ The value of the tuple's third component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2, Item3).
+ If any field value is , it is represented as .
+
+
+
+
+ Represents a 4-tuple, or quadruple, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+ The type of the tuple's third component.
+ The type of the tuple's fourth component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ The current instance's third component.
+
+
+
+
+ The current instance's fourth component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+ The value of the tuple's third component.
+ The value of the tuple's fourth component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2, Item3, Item4).
+ If any field value is , it is represented as .
+
+
+
+
+ Represents a 5-tuple, or quintuple, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+ The type of the tuple's third component.
+ The type of the tuple's fourth component.
+ The type of the tuple's fifth component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ The current instance's third component.
+
+
+
+
+ The current instance's fourth component.
+
+
+
+
+ The current instance's fifth component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+ The value of the tuple's third component.
+ The value of the tuple's fourth component.
+ The value of the tuple's fifth component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2, Item3, Item4, Item5).
+ If any field value is , it is represented as .
+
+
+
+
+ Represents a 6-tuple, or sixtuple, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+ The type of the tuple's third component.
+ The type of the tuple's fourth component.
+ The type of the tuple's fifth component.
+ The type of the tuple's sixth component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ The current instance's third component.
+
+
+
+
+ The current instance's fourth component.
+
+
+
+
+ The current instance's fifth component.
+
+
+
+
+ The current instance's sixth component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+ The value of the tuple's third component.
+ The value of the tuple's fourth component.
+ The value of the tuple's fifth component.
+ The value of the tuple's sixth component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2, Item3, Item4, Item5, Item6).
+ If any field value is , it is represented as .
+
+
+
+
+ Represents a 7-tuple, or sentuple, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+ The type of the tuple's third component.
+ The type of the tuple's fourth component.
+ The type of the tuple's fifth component.
+ The type of the tuple's sixth component.
+ The type of the tuple's seventh component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ The current instance's third component.
+
+
+
+
+ The current instance's fourth component.
+
+
+
+
+ The current instance's fifth component.
+
+
+
+
+ The current instance's sixth component.
+
+
+
+
+ The current instance's seventh component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+ The value of the tuple's third component.
+ The value of the tuple's fourth component.
+ The value of the tuple's fifth component.
+ The value of the tuple's sixth component.
+ The value of the tuple's seventh component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2, Item3, Item4, Item5, Item6, Item7).
+ If any field value is , it is represented as .
+
+
+
+
+ Represents an 8-tuple, or octuple, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+ The type of the tuple's third component.
+ The type of the tuple's fourth component.
+ The type of the tuple's fifth component.
+ The type of the tuple's sixth component.
+ The type of the tuple's seventh component.
+ The type of the tuple's eighth component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ The current instance's third component.
+
+
+
+
+ The current instance's fourth component.
+
+
+
+
+ The current instance's fifth component.
+
+
+
+
+ The current instance's sixth component.
+
+
+
+
+ The current instance's seventh component.
+
+
+
+
+ The current instance's eighth component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+ The value of the tuple's third component.
+ The value of the tuple's fourth component.
+ The value of the tuple's fifth component.
+ The value of the tuple's sixth component.
+ The value of the tuple's seventh component.
+ The value of the tuple's eight component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2, Item3, Item4, Item5, Item6, Item7, Rest).
+ If any field value is , it is represented as .
+
+
+
+
diff --git a/packages/System.ValueTuple.4.5.0/lib/netstandard2.0/_._ b/packages/System.ValueTuple.4.5.0/lib/netstandard2.0/_._
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/System.ValueTuple.4.5.0/lib/portable-net40+sl4+win8+wp8/System.ValueTuple.dll b/packages/System.ValueTuple.4.5.0/lib/portable-net40+sl4+win8+wp8/System.ValueTuple.dll
new file mode 100644
index 00000000..b63769a4
Binary files /dev/null and b/packages/System.ValueTuple.4.5.0/lib/portable-net40+sl4+win8+wp8/System.ValueTuple.dll differ
diff --git a/packages/System.ValueTuple.4.5.0/lib/portable-net40+sl4+win8+wp8/System.ValueTuple.xml b/packages/System.ValueTuple.4.5.0/lib/portable-net40+sl4+win8+wp8/System.ValueTuple.xml
new file mode 100644
index 00000000..6dcce66f
--- /dev/null
+++ b/packages/System.ValueTuple.4.5.0/lib/portable-net40+sl4+win8+wp8/System.ValueTuple.xml
@@ -0,0 +1,1299 @@
+
+
+
+ System.ValueTuple
+
+
+
+
+ Indicates that the use of on a member is meant to be treated as a tuple with element names.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ Specifies, in a pre-order depth-first traversal of a type's
+ construction, which occurrences are
+ meant to carry element names.
+
+
+ This constructor is meant to be used on types that contain an
+ instantiation of that contains
+ element names. For instance, if C is a generic type with
+ two type parameters, then a use of the constructed type C{, might be intended to
+ treat the first type argument as a tuple with element names and the
+ second as a tuple without element names. In which case, the
+ appropriate attribute specification should use a
+ transformNames value of { "name1", "name2", null, null,
+ null }.
+
+
+
+
+ Specifies, in a pre-order depth-first traversal of a type's
+ construction, which elements are
+ meant to carry element names.
+
+
+
+
+ Provides extension methods for instances to interop with C# tuples features (deconstruction syntax, converting from and to ).
+
+
+
+
+ Deconstruct a properly nested with 1 elements.
+
+
+
+
+ Deconstruct a properly nested with 2 elements.
+
+
+
+
+ Deconstruct a properly nested with 3 elements.
+
+
+
+
+ Deconstruct a properly nested with 4 elements.
+
+
+
+
+ Deconstruct a properly nested with 5 elements.
+
+
+
+
+ Deconstruct a properly nested with 6 elements.
+
+
+
+
+ Deconstruct a properly nested with 7 elements.
+
+
+
+
+ Deconstruct a properly nested with 8 elements.
+
+
+
+
+ Deconstruct a properly nested with 9 elements.
+
+
+
+
+ Deconstruct a properly nested with 10 elements.
+
+
+
+
+ Deconstruct a properly nested with 11 elements.
+
+
+
+
+ Deconstruct a properly nested with 12 elements.
+
+
+
+
+ Deconstruct a properly nested with 13 elements.
+
+
+
+
+ Deconstruct a properly nested with 14 elements.
+
+
+
+
+ Deconstruct a properly nested with 15 elements.
+
+
+
+
+ Deconstruct a properly nested with 16 elements.
+
+
+
+
+ Deconstruct a properly nested with 17 elements.
+
+
+
+
+ Deconstruct a properly nested with 18 elements.
+
+
+
+
+ Deconstruct a properly nested with 19 elements.
+
+
+
+
+ Deconstruct a properly nested with 20 elements.
+
+
+
+
+ Deconstruct a properly nested with 21 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 1 element.
+
+
+
+
+ Make a properly nested from a properly nested with 2 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 3 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 4 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 5 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 6 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 7 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 8 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 9 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 10 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 11 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 12 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 13 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 14 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 15 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 16 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 17 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 18 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 19 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 20 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 21 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 1 element.
+
+
+
+
+ Make a properly nested from a properly nested with 2 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 3 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 4 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 5 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 6 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 7 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 8 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 9 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 10 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 11 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 12 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 13 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 14 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 15 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 16 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 17 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 18 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 19 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 20 elements.
+
+
+
+
+ Make a properly nested from a properly nested with 21 elements.
+
+
+
+
+ Helper so we can call some tuple methods recursively without knowing the underlying types.
+
+
+
+
+ The ValueTuple types (from arity 0 to 8) comprise the runtime implementation that underlies tuples in C# and struct tuples in F#.
+ Aside from created via language syntax, they are most easily created via the ValueTuple.Create factory methods.
+ The System.ValueTuple types differ from the System.Tuple types in that:
+ - they are structs rather than classes,
+ - they are mutable rather than readonly, and
+ - their members (such as Item1, Item2, etc) are fields rather than properties.
+
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if is a .
+
+
+ Returns a value indicating whether this instance is equal to a specified value.
+ An instance to compare to this instance.
+ true if has the same value as this instance; otherwise, false.
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+ Returns the hash code for this instance.
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form ().
+
+
+
+ Creates a new struct 0-tuple.
+ A 0-tuple.
+
+
+ Creates a new struct 1-tuple, or singleton.
+ The type of the first component of the tuple.
+ The value of the first component of the tuple.
+ A 1-tuple (singleton) whose value is (item1).
+
+
+ Creates a new struct 2-tuple, or pair.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ A 2-tuple (pair) whose value is (item1, item2).
+
+
+ Creates a new struct 3-tuple, or triple.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The type of the third component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ The value of the third component of the tuple.
+ A 3-tuple (triple) whose value is (item1, item2, item3).
+
+
+ Creates a new struct 4-tuple, or quadruple.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The type of the third component of the tuple.
+ The type of the fourth component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ The value of the third component of the tuple.
+ The value of the fourth component of the tuple.
+ A 4-tuple (quadruple) whose value is (item1, item2, item3, item4).
+
+
+ Creates a new struct 5-tuple, or quintuple.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The type of the third component of the tuple.
+ The type of the fourth component of the tuple.
+ The type of the fifth component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ The value of the third component of the tuple.
+ The value of the fourth component of the tuple.
+ The value of the fifth component of the tuple.
+ A 5-tuple (quintuple) whose value is (item1, item2, item3, item4, item5).
+
+
+ Creates a new struct 6-tuple, or sextuple.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The type of the third component of the tuple.
+ The type of the fourth component of the tuple.
+ The type of the fifth component of the tuple.
+ The type of the sixth component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ The value of the third component of the tuple.
+ The value of the fourth component of the tuple.
+ The value of the fifth component of the tuple.
+ The value of the sixth component of the tuple.
+ A 6-tuple (sextuple) whose value is (item1, item2, item3, item4, item5, item6).
+
+
+ Creates a new struct 7-tuple, or septuple.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The type of the third component of the tuple.
+ The type of the fourth component of the tuple.
+ The type of the fifth component of the tuple.
+ The type of the sixth component of the tuple.
+ The type of the seventh component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ The value of the third component of the tuple.
+ The value of the fourth component of the tuple.
+ The value of the fifth component of the tuple.
+ The value of the sixth component of the tuple.
+ The value of the seventh component of the tuple.
+ A 7-tuple (septuple) whose value is (item1, item2, item3, item4, item5, item6, item7).
+
+
+ Creates a new struct 8-tuple, or octuple.
+ The type of the first component of the tuple.
+ The type of the second component of the tuple.
+ The type of the third component of the tuple.
+ The type of the fourth component of the tuple.
+ The type of the fifth component of the tuple.
+ The type of the sixth component of the tuple.
+ The type of the seventh component of the tuple.
+ The type of the eighth component of the tuple.
+ The value of the first component of the tuple.
+ The value of the second component of the tuple.
+ The value of the third component of the tuple.
+ The value of the fourth component of the tuple.
+ The value of the fifth component of the tuple.
+ The value of the sixth component of the tuple.
+ The value of the seventh component of the tuple.
+ The value of the eighth component of the tuple.
+ An 8-tuple (octuple) whose value is (item1, item2, item3, item4, item5, item6, item7, item8).
+
+
+ Represents a 1-tuple, or singleton, as a value type.
+ The type of the tuple's only component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its field
+ is equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1),
+ where Item1 represents the value of . If the field is ,
+ it is represented as .
+
+
+
+
+ Represents a 2-tuple, or pair, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object based on a specified comparison method.
+
+ The object to compare with this instance.
+ An object that defines the method to use to evaluate whether the two objects are equal.
+ if the current instance is equal to the specified object; otherwise, .
+
+
+ This member is an explicit interface member implementation. It can be used only when the
+ instance is cast to an interface.
+
+ The implementation is called only if other is not ,
+ and if it can be successfully cast (in C#) or converted (in Visual Basic) to a
+ whose components are of the same types as those of the current instance. The IStructuralEquatable.Equals(Object, IEqualityComparer) method
+ first passes the values of the objects to be compared to the
+ implementation. If this method call returns , the method is
+ called again and passed the values of the two instances.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2),
+ where Item1 and Item2 represent the values of the
+ and fields. If either field value is ,
+ it is represented as .
+
+
+
+
+ Represents a 3-tuple, or triple, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+ The type of the tuple's third component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ The current instance's third component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+ The value of the tuple's third component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2, Item3).
+ If any field value is , it is represented as .
+
+
+
+
+ Represents a 4-tuple, or quadruple, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+ The type of the tuple's third component.
+ The type of the tuple's fourth component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ The current instance's third component.
+
+
+
+
+ The current instance's fourth component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+ The value of the tuple's third component.
+ The value of the tuple's fourth component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2, Item3, Item4).
+ If any field value is , it is represented as .
+
+
+
+
+ Represents a 5-tuple, or quintuple, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+ The type of the tuple's third component.
+ The type of the tuple's fourth component.
+ The type of the tuple's fifth component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ The current instance's third component.
+
+
+
+
+ The current instance's fourth component.
+
+
+
+
+ The current instance's fifth component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+ The value of the tuple's third component.
+ The value of the tuple's fourth component.
+ The value of the tuple's fifth component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2, Item3, Item4, Item5).
+ If any field value is , it is represented as .
+
+
+
+
+ Represents a 6-tuple, or sixtuple, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+ The type of the tuple's third component.
+ The type of the tuple's fourth component.
+ The type of the tuple's fifth component.
+ The type of the tuple's sixth component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ The current instance's third component.
+
+
+
+
+ The current instance's fourth component.
+
+
+
+
+ The current instance's fifth component.
+
+
+
+
+ The current instance's sixth component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+ The value of the tuple's third component.
+ The value of the tuple's fourth component.
+ The value of the tuple's fifth component.
+ The value of the tuple's sixth component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2, Item3, Item4, Item5, Item6).
+ If any field value is , it is represented as .
+
+
+
+
+ Represents a 7-tuple, or sentuple, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+ The type of the tuple's third component.
+ The type of the tuple's fourth component.
+ The type of the tuple's fifth component.
+ The type of the tuple's sixth component.
+ The type of the tuple's seventh component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ The current instance's third component.
+
+
+
+
+ The current instance's fourth component.
+
+
+
+
+ The current instance's fifth component.
+
+
+
+
+ The current instance's sixth component.
+
+
+
+
+ The current instance's seventh component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+ The value of the tuple's third component.
+ The value of the tuple's fourth component.
+ The value of the tuple's fifth component.
+ The value of the tuple's sixth component.
+ The value of the tuple's seventh component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2, Item3, Item4, Item5, Item6, Item7).
+ If any field value is , it is represented as .
+
+
+
+
+ Represents an 8-tuple, or octuple, as a value type.
+
+ The type of the tuple's first component.
+ The type of the tuple's second component.
+ The type of the tuple's third component.
+ The type of the tuple's fourth component.
+ The type of the tuple's fifth component.
+ The type of the tuple's sixth component.
+ The type of the tuple's seventh component.
+ The type of the tuple's eighth component.
+
+
+
+ The current instance's first component.
+
+
+
+
+ The current instance's second component.
+
+
+
+
+ The current instance's third component.
+
+
+
+
+ The current instance's fourth component.
+
+
+
+
+ The current instance's fifth component.
+
+
+
+
+ The current instance's sixth component.
+
+
+
+
+ The current instance's seventh component.
+
+
+
+
+ The current instance's eighth component.
+
+
+
+
+ Initializes a new instance of the value type.
+
+ The value of the tuple's first component.
+ The value of the tuple's second component.
+ The value of the tuple's third component.
+ The value of the tuple's fourth component.
+ The value of the tuple's fifth component.
+ The value of the tuple's sixth component.
+ The value of the tuple's seventh component.
+ The value of the tuple's eight component.
+
+
+
+ Returns a value that indicates whether the current instance is equal to a specified object.
+
+ The object to compare with this instance.
+ if the current instance is equal to the specified object; otherwise, .
+
+ The parameter is considered to be equal to the current instance under the following conditions:
+
+ - It is a value type.
+ - Its components are of the same types as those of the current instance.
+ - Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component.
+
+
+
+
+
+ Returns a value that indicates whether the current
+ instance is equal to a specified .
+
+ The tuple to compare with this instance.
+ if the current instance is equal to the specified tuple; otherwise, .
+
+ The parameter is considered to be equal to the current instance if each of its fields
+ are equal to that of the current instance, using the default comparer for that field's type.
+
+
+
+ Compares this instance to a specified instance and returns an indication of their relative values.
+ An instance to compare.
+
+ A signed number indicating the relative values of this instance and .
+ Returns less than zero if this instance is less than , zero if this
+ instance is equal to , and greater than zero if this instance is greater
+ than .
+
+
+
+
+ Returns the hash code for the current instance.
+
+ A 32-bit signed integer hash code.
+
+
+
+ Returns a string that represents the value of this instance.
+
+ The string representation of this instance.
+
+ The string returned by this method takes the form (Item1, Item2, Item3, Item4, Item5, Item6, Item7, Rest).
+ If any field value is , it is represented as .
+
+
+
+
diff --git a/packages/System.ValueTuple.4.5.0/lib/uap10.0.16299/_._ b/packages/System.ValueTuple.4.5.0/lib/uap10.0.16299/_._
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/System.ValueTuple.4.5.0/lib/xamarinios10/_._ b/packages/System.ValueTuple.4.5.0/lib/xamarinios10/_._
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/System.ValueTuple.4.5.0/lib/xamarinmac20/_._ b/packages/System.ValueTuple.4.5.0/lib/xamarinmac20/_._
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/System.ValueTuple.4.5.0/lib/xamarintvos10/_._ b/packages/System.ValueTuple.4.5.0/lib/xamarintvos10/_._
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/System.ValueTuple.4.5.0/lib/xamarinwatchos10/_._ b/packages/System.ValueTuple.4.5.0/lib/xamarinwatchos10/_._
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/System.ValueTuple.4.5.0/ref/MonoAndroid10/_._ b/packages/System.ValueTuple.4.5.0/ref/MonoAndroid10/_._
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/System.ValueTuple.4.5.0/ref/MonoTouch10/_._ b/packages/System.ValueTuple.4.5.0/ref/MonoTouch10/_._
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/System.ValueTuple.4.5.0/ref/net461/System.ValueTuple.dll b/packages/System.ValueTuple.4.5.0/ref/net461/System.ValueTuple.dll
new file mode 100644
index 00000000..ba8aeb6b
Binary files /dev/null and b/packages/System.ValueTuple.4.5.0/ref/net461/System.ValueTuple.dll differ
diff --git a/packages/System.ValueTuple.4.5.0/ref/net47/System.ValueTuple.dll b/packages/System.ValueTuple.4.5.0/ref/net47/System.ValueTuple.dll
new file mode 100644
index 00000000..ed3bd7bf
Binary files /dev/null and b/packages/System.ValueTuple.4.5.0/ref/net47/System.ValueTuple.dll differ
diff --git a/packages/System.ValueTuple.4.5.0/ref/netcoreapp2.0/_._ b/packages/System.ValueTuple.4.5.0/ref/netcoreapp2.0/_._
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/System.ValueTuple.4.5.0/ref/netstandard2.0/_._ b/packages/System.ValueTuple.4.5.0/ref/netstandard2.0/_._
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/System.ValueTuple.4.5.0/ref/portable-net40+sl4+win8+wp8/System.ValueTuple.dll b/packages/System.ValueTuple.4.5.0/ref/portable-net40+sl4+win8+wp8/System.ValueTuple.dll
new file mode 100644
index 00000000..8c72a7ae
Binary files /dev/null and b/packages/System.ValueTuple.4.5.0/ref/portable-net40+sl4+win8+wp8/System.ValueTuple.dll differ
diff --git a/packages/System.ValueTuple.4.5.0/ref/uap10.0.16299/_._ b/packages/System.ValueTuple.4.5.0/ref/uap10.0.16299/_._
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/System.ValueTuple.4.5.0/ref/xamarinios10/_._ b/packages/System.ValueTuple.4.5.0/ref/xamarinios10/_._
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/System.ValueTuple.4.5.0/ref/xamarinmac20/_._ b/packages/System.ValueTuple.4.5.0/ref/xamarinmac20/_._
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/System.ValueTuple.4.5.0/ref/xamarintvos10/_._ b/packages/System.ValueTuple.4.5.0/ref/xamarintvos10/_._
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/System.ValueTuple.4.5.0/ref/xamarinwatchos10/_._ b/packages/System.ValueTuple.4.5.0/ref/xamarinwatchos10/_._
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/System.ValueTuple.4.5.0/useSharedDesignerContext.txt b/packages/System.ValueTuple.4.5.0/useSharedDesignerContext.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/System.ValueTuple.4.5.0/version.txt b/packages/System.ValueTuple.4.5.0/version.txt
new file mode 100644
index 00000000..47004a02
--- /dev/null
+++ b/packages/System.ValueTuple.4.5.0/version.txt
@@ -0,0 +1 @@
+30ab651fcb4354552bd4891619a0bdd81e0ebdbf