void Just_Convert_Sanity() { Maybe <int> i1 = Maybe.Just(5); Maybe <int> i2 = Maybe.Just(0); Maybe <string> s1 = Maybe.Just("s1"); Maybe <string> s2 = Maybe.Just("s2"); Assert.Equal("success", i1.Convert((just) => "success", () => "fail")); Assert.Equal("success", i2.Convert((just) => "success", () => "fail")); Assert.Equal("success", s1.Convert((just) => "success", () => "fail")); Assert.Equal("success", s2.Convert((just) => "success", () => "fail")); Assert.Equal("success", i1.Convert((just) => "success", "fail")); Assert.Equal("success", i2.Convert((just) => "success", "fail")); Assert.Equal("success", s1.Convert((just) => "success", "fail")); Assert.Equal("success", s2.Convert((just) => "success", "fail")); Assert.Equal("5success", i1.Convert((just) => $"{just}success", () => "fail")); Assert.Equal("0success", i2.Convert((just) => $"{just}success", () => "fail")); Assert.Equal("s1success", s1.Convert((just) => $"{just}success", () => "fail")); Assert.Equal("s2success", s2.Convert((just) => $"{just}success", () => "fail")); Assert.Equal("5success", i1.Convert((just) => $"{just}success", "fail")); Assert.Equal("0success", i2.Convert((just) => $"{just}success", "fail")); Assert.Equal("s1success", s1.Convert((just) => $"{just}success", "fail")); Assert.Equal("s2success", s2.Convert((just) => $"{just}success", "fail")); }
public void Convert() { Assert.AreEqual(new Maybe <string>("10"), Maybe10.Convert(i => i.ToString())); Assert.AreEqual(Maybe <string> .Empty, MaybeEmpty.Convert(i => i.ToString())); Assert.AreEqual("10", Maybe10.Convert(i => i.ToString(), () => "none")); Assert.AreEqual("none", MaybeEmpty.Convert(i => i.ToString(), () => "none")); Assert.AreEqual("10", Maybe10.Convert(i => i.ToString(), "none")); Assert.AreEqual("none", MaybeEmpty.Convert(i => i.ToString(), "none")); }
void Nothing_Convert_Sanity() { Maybe <int> nI = Nothing <int> .Instance; Maybe <string> nS = Nothing <string> .Instance; Maybe <object> nO = Nothing <object> .Instance; Assert.Equal("success", nI.Convert((just) => "fail", () => "success")); Assert.Equal("success", nS.Convert((just) => "fail", () => "success")); Assert.Equal("success", nO.Convert((just) => "fail", () => "success")); Assert.Equal("success", nI.Convert((just) => "fail", "success")); Assert.Equal("success", nS.Convert((just) => "fail", "success")); Assert.Equal("success", nO.Convert((just) => "fail", "success")); }
public static Maybe <IReportNode> ParseMaybe(this IReportParser parser, Maybe <TextParser> p) => p?parser.Parse(p.Value) : p.Convert <IReportNode>();
protected Maybe <IReportNode> Error <T>(Maybe <T> p) => p.Convert <IReportNode>();
public static IEnumerable <T> ToEnumerable <T>(this Maybe <T> maybe) => maybe.Convert(One, Enumerable.Empty <T>);
/// <summary> /// Run the hosted runtime, blocking the calling thread. /// </summary> /// <returns>True if the worker stopped as planned (e.g. due to updated assemblies)</returns> public bool Run(Maybe<ICloudConfigurationSettings> externalRoleConfiguration) { _stoppedWaitHandle.Reset(); // Runtime IoC Setup var runtimeBuilder = new ContainerBuilder(); runtimeBuilder.RegisterModule(new CloudModule()); runtimeBuilder.RegisterModule(externalRoleConfiguration.Convert(s => new CloudConfigurationModule(s), () => new CloudConfigurationModule())); runtimeBuilder.RegisterType<Runtime>().InstancePerDependency(); // Run using (var runtimeContainer = runtimeBuilder.Build()) { var log = runtimeContainer.Resolve<ILog>(); AppDomain.CurrentDomain.UnhandledException += (sender, e) => log.ErrorFormat( e.ExceptionObject as Exception, "Runtime Host: An unhandled {0} exception occurred on worker {1} in a background thread. The Runtime Host will be restarted: {2}.", e.ExceptionObject.GetType().Name, CloudEnvironment.PartitionKey, e.IsTerminating); _runtime = null; try { _runtime = runtimeContainer.Resolve<Runtime>(); _runtime.RuntimeContainer = runtimeContainer; // runtime endlessly keeps pinging queues for pending work _runtime.Execute(); log.DebugFormat("Runtime Host: Runtime has stopped cleanly on worker {0}.", CloudEnvironment.PartitionKey); } catch (TypeLoadException typeLoadException) { log.ErrorFormat(typeLoadException, "Runtime Host: Type {0} could not be loaded. The Runtime Host will be restarted.", typeLoadException.TypeName); } catch (FileLoadException fileLoadException) { // Tentatively: referenced assembly is missing log.Fatal(fileLoadException, "Runtime Host: Could not load assembly probably due to a missing reference assembly. The Runtime Host will be restarted."); } catch (SecurityException securityException) { // Tentatively: assembly cannot be loaded due to security config log.FatalFormat(securityException, "Runtime Host: Could not load assembly {0} probably due to security configuration. The Runtime Host will be restarted.", securityException.FailedAssemblyInfo); } catch (TriggerRestartException) { log.DebugFormat("Runtime Host: Triggered to stop execution on worker {0}. The Role Instance will be recycled and the Runtime Host restarted.", CloudEnvironment.PartitionKey); return true; } catch (ThreadAbortException) { Thread.ResetAbort(); log.DebugFormat("Runtime Host: execution was aborted on worker {0}. The Runtime is stopping.", CloudEnvironment.PartitionKey); } catch (Exception ex) { // Generic exception log.ErrorFormat(ex, "Runtime Host: An unhandled {0} exception occurred on worker {1}. The Runtime Host will be restarted.", ex.GetType().Name, CloudEnvironment.PartitionKey); } finally { _stoppedWaitHandle.Set(); _runtime = null; } return false; } }