internal static void RunRules(FuzzyDateRange range) { foreach (var rule in _fuzzyDateRangeRules) { rule.Verify(range); } }
public void ConvertRangeToIso8601Test() { var range = new FuzzyDateRange(new FuzzyDate(2019, 4, 5), new FuzzyDate(2020, 1, 22)); Assert.AreEqual("2019-04-05/2020-01-22", range.ToIso8601()); Assert.AreEqual("2019-04-05--2020-01-22", range.ToIso8601(true)); }
private static FuzzyDateRange GetActiveDateRange(TemporalChainOfCommand h, TemporalLocation il) { // max start date var startDateTime = MaxDateTime(h.StartDateTime.DateTime, il.StartDateTime.DateTime); // min end date var endDateTime = MinDateTime(h.EndDateTime.DateTime, il.EndDateTime.DateTime); var timeSpan = new FuzzyDateRange(new FuzzyDateTime(startDateTime, "yyyy/MM/dd"), new FuzzyDateTime(endDateTime, "yyyy/MM/dd")); return(timeSpan); }
public void FromBeforeToIsValid() { try { _ = new FuzzyDateRange(new FuzzyDate(2019), new FuzzyDate(2019, 5)); } catch (Exception ex) { Assert.Fail($"Expect no exception, but got {ex.Message}"); } }
public void BothUnknownIsValid() { try { _ = new FuzzyDateRange(FuzzyDate.Unknown, FuzzyDate.Unknown); } catch (Exception ex) { Assert.Fail($"Expect no exception, but got {ex.Message}"); } }
public void NullToMonthIsValid() { // 9/2019 - ?/2019 is valid try { _ = new FuzzyDateRange(new FuzzyDate(2019, 9), new FuzzyDate(2019)); } catch (Exception ex) { Assert.Fail($"Expect no exception, but got {ex.Message}"); } }
public void ParseToOnlyTest() { try { var range = FuzzyDateRange.Parse("-2019"); Assert.IsFalse(range.From.Year.HasValue); Assert.AreEqual(2019, range.To.Year.Value); } catch (Exception ex) { Assert.Fail($"Expect no exception, but got {ex.Message}"); } }
public void ParseDelineatorOnlyTest() { try { var range = FuzzyDateRange.Parse("-"); Assert.IsFalse(range.From.Year.HasValue); Assert.IsFalse(range.To.Year.HasValue); } catch (Exception ex) { Assert.Fail($"Expect no exception, but got {ex.Message}"); } }
public void ReserializeTest() { try { var original = new FuzzyDateRange(new FuzzyDate(DateTime.Today.AddDays(-5)), FuzzyDate.Today); var js = JsonConvert.SerializeObject(original); var reconstructed = JsonConvert.DeserializeObject <FuzzyDateRange>(js); Assert.AreEqual(original, reconstructed); } catch (Exception ex) { Assert.Fail($"Expect no exception, but got {ex.Message}"); } }
public void ParseBothTest() { try { var range = FuzzyDateRange.Parse("10/2019-11/15/2019"); Assert.AreEqual(2019, range.From.Year.Value); Assert.AreEqual(10, range.From.Month.Value); Assert.IsFalse(range.From.Day.HasValue); Assert.AreEqual(2019, range.To.Year.Value); Assert.AreEqual(11, range.To.Month.Value); Assert.AreEqual(15, range.To.Day.Value); } catch (Exception ex) { Assert.Fail($"Expect no exception, but got {ex.Message}"); } }
private void TestGenerator() { var dateNames = new string[] { "_fdNone", "_fdYear", "_fdMonth", "_fdDay" }; var dates = new FuzzyDate[] { _fdNone, _fdYear, _fdMonth, _fdDay }; for (int firstFrom = 0; firstFrom < dates.Length; firstFrom++) { var firstFromDate = dates[firstFrom]; var firstFromName = dateNames[firstFrom]; for (int firstTo = 0; firstTo < dates.Length; firstTo++) { var firstToDate = dates[firstTo]; var firstToName = dateNames[firstTo]; for (int secondFrom = 0; secondFrom < dates.Length; secondFrom++) { var secondFromDate = dates[secondFrom]; var secondFromName = dateNames[secondFrom]; for (int secondTo = 0; secondTo < dates.Length; secondTo++) { var secondToDate = dates[secondTo]; var secondToName = dateNames[secondTo]; var compareResult = new FuzzyDateRange(firstFromDate, firstToDate).CompareTo(new FuzzyDateRange(secondFromDate, secondToDate)); Trace.WriteLine($"Assert.AreEqual({compareResult}, new FuzzyDateRange({firstFromName}, {firstToName}).CompareTo(new FuzzyDateRange({secondFromName}, {secondToName})));"); } } } } }
public void ConvertToTimeSpanTest() { try { var dayFrom = 2; var dayTo = 15; var from = new FuzzyDate(2019, 9, dayFrom); var to = new FuzzyDate(2019, 9, dayTo); var range = new FuzzyDateRange(from, to); var converted = range.ToTimeSpan(); Assert.AreEqual(dayTo - dayFrom, converted.TotalDays); } catch (Exception ex) { Assert.Fail($"Expect no exception, but got {ex.Message}"); } }
public void ConvertToTimeSpanUnknownMonthTest() { try { var yearFrom = 2013; var yearTo = 2018; var from = new FuzzyDate(yearFrom); var to = new FuzzyDate(yearTo); var range = new FuzzyDateRange(from, to); var converted = range.ToTimeSpan(); Assert.AreEqual(yearTo - yearFrom, (int)Math.Round(converted.TotalDays / 365.25)); // also close enough } catch (Exception ex) { Assert.Fail($"Expect no exception, but got {ex.Message}"); } }
public void ConvertToTimeSpanUnknownDayTest() { try { var monthFrom = 2; var monthTo = 5; var from = new FuzzyDate(2019, monthFrom); var to = new FuzzyDate(2019, monthTo); var range = new FuzzyDateRange(from, to); var converted = range.ToTimeSpan(); Assert.AreEqual(monthTo - monthFrom, (int)Math.Round(converted.TotalDays / 30)); // close enough } catch (Exception ex) { Assert.Fail($"Expect no exception, but got {ex.Message}"); } }
public void FromAfterToIsInvalid() { Assert.ThrowsException <ArgumentOutOfRangeException>(() => _ = new FuzzyDateRange(new FuzzyDate(2019, 5), new FuzzyDate(2019, 1))); }
private static List <Entry> SearchDataModel() { var entries = new List <Entry>(); var uk = new RegionInfo("en-UK"); var derby = new Municipality("Derby"); var catterick = new Municipality("Catterick"); var london = new Municipality("London"); var audit = new SimpleAudit("*****@*****.**"); var scrapBook = new SimplePublication("1st Derbyshire Yeomanry Scrapbook 1939 - 1947", new VariousAuthors(), new UnknownEditors(), new UnknownPublicationDateTime(), new SimplePublisher("Bemrose & Sons Ltd", new List <IPostalAddress>() { new SimplePostalAddress(derby, uk), new SimplePostalAddress(london, uk) } ) ); var mobilisationDate = new FuzzyDateTime(new DateTime(1939, 7, 29), "yyyy/MM/dd"); var veDay = new FuzzyDateTime(new DateTime(1945, 5, 8), "yyyy/MM/dd"); var armouredCar = new TemporalRole( new Reconnaissance(), new FuzzyDateRange( mobilisationDate), GetCitationPage(1, scrapBook), audit); var firstDerbyshireYeomanry = new Regiment("1st Derbyshire Yeomanry", armouredCar, uk, GetCitationPage(1, scrapBook), audit); var siddalsRoad = new SimplePostalAddress(null, new SimpleStreetAddress(91, "Siddals Road"), derby, null, null, uk, null, null); var siddalsRoadPosting = new TemporalLocation(siddalsRoad, new FuzzyDateRange(mobilisationDate), GetCitationPage(1, scrapBook), audit); firstDerbyshireYeomanry.AddLocation(siddalsRoadPosting); var mccHarrison = new Person("M.C.C", "Harrision", null, uk, GetCitationPage(2, scrapBook), audit); var commandFirstDerbyshireYeomanryPosting = new TemporalRole(new LieutenantColonel(firstDerbyshireYeomanry, mccHarrison), new FuzzyDateRange( new FuzzyDateTime(new DateTime(1939, 11, 7), "yyy/MM"), new FuzzyDateTime(new DateTime(1941, 4, 1), "yyy/MM") ), GetCitationPage(1, scrapBook), audit); firstDerbyshireYeomanry.AddPersonel(commandFirstDerbyshireYeomanryPosting); mccHarrison.AddAppointment(commandFirstDerbyshireYeomanryPosting); var ashbourneRoad = new SimplePostalAddress(null, new SimpleStreetAddress("Ashbourne Road"), derby, null, null, uk, null, null); var ashbourneRoadPosting = new TemporalLocation(ashbourneRoad, new FuzzyDateRange(new FuzzyDateTime(new DateTime(1939, 11, 1), "yyyy/MM"), new FuzzyDateTime(new DateTime(1940, 05, 1), "yyyy/MM")), GetCitationPage(2, scrapBook), audit); firstDerbyshireYeomanry.AddLocation(ashbourneRoadPosting); mccHarrison.AddLocation(ashbourneRoadPosting); var cavalryDivison = new TemporalRole( new Cavalry(), new FuzzyDateRange( mobilisationDate), GetCitationPage(4, scrapBook), audit); var catterickGarrision = new SimplePostalAddress(null, null, catterick, null, null, uk, null, null); var catterickGarrisionPosting = new TemporalLocation(catterickGarrision, new FuzzyDateRange(mobilisationDate, new FuzzyDateTime(new DateTime(1940, 05, 1), "yyyy/MM")), GetCitationPage(4, scrapBook), audit); var firstCavalryDivision = new Division("1st Cavalry", armouredCar, uk, GetCitationPage(4, scrapBook), audit); firstCavalryDivision.AddLocation(catterickGarrisionPosting); var cocFirstDerbyshireYeomanry = new TemporalChainOfCommand(firstCavalryDivision, firstDerbyshireYeomanry, new FuzzyDateRange(mobilisationDate, new FuzzyDateTime(new DateTime(1940, 05, 1), "yyyy/MM")), GetCitationPage(4, scrapBook), audit); firstCavalryDivision.AddHierarchy(cocFirstDerbyshireYeomanry); firstDerbyshireYeomanry.AddHierarchy(cocFirstDerbyshireYeomanry); var search = new FuzzyDateRange(new FuzzyDateTime(new DateTime(1939, 1, 1), "yyyy/MM/dd"), new FuzzyDateTime(new DateTime(1940, 12, 31), "yyyy/MM/dd")); var aSquadron = new Squadron("A", armouredCar, uk, GetCitationPage(7, scrapBook), audit); var bSquadron = new Squadron("B", armouredCar, uk, GetCitationPage(7, scrapBook), audit); var cSquadron = new Squadron("C", armouredCar, uk, GetCitationPage(7, scrapBook), audit); var dSquadron = new Squadron("D", armouredCar, uk, GetCitationPage(7, scrapBook), audit); EstablishChainOfCommand(firstDerbyshireYeomanry, aSquadron, mobilisationDate, veDay, GetCitationPage(4, scrapBook), audit); EstablishChainOfCommand(firstDerbyshireYeomanry, bSquadron, mobilisationDate, veDay, GetCitationPage(4, scrapBook), audit); EstablishChainOfCommand(firstDerbyshireYeomanry, cSquadron, mobilisationDate, veDay, GetCitationPage(4, scrapBook), audit); EstablishChainOfCommand(firstDerbyshireYeomanry, dSquadron, mobilisationDate, veDay, GetCitationPage(4, scrapBook), audit); var caistor = new Municipality("Caistor"); var talbotArms = new SimplePostalAddress(null, new SimpleStreetAddress("16 High Street"), caistor, null, new SimplePostalCode("LN7 6QF"), uk, null, null); var rotationStart = new DateTime(1939, 11, 27); var rotationEnd = new DateTime(1940, 5, 24); int rotation = 0; while (rotationStart < rotationEnd) { var talbotArmsPostingRotation = new TemporalLocation(talbotArms, new FuzzyDateRange(new FuzzyDateTime(rotationStart, "yyyy/MM/dd"), 14), GetCitationPage(2, scrapBook), audit); rotationStart = rotationStart.AddDays(14); int i = rotation % 4; switch (i) { case 0: aSquadron.AddLocation(talbotArmsPostingRotation); entries.Add(GetEntry(aSquadron, talbotArmsPostingRotation)); break; case 1: bSquadron.AddLocation(talbotArmsPostingRotation); entries.Add(GetEntry(bSquadron, talbotArmsPostingRotation)); break; case 2: cSquadron.AddLocation(talbotArmsPostingRotation); entries.Add(GetEntry(cSquadron, talbotArmsPostingRotation)); break; case 3: dSquadron.AddLocation(talbotArmsPostingRotation); entries.Add(GetEntry(dSquadron, talbotArmsPostingRotation)); break; } rotation++; } entries.Add(GetEntry(firstDerbyshireYeomanry, firstDerbyshireYeomanry.Locations[0])); entries.Add(GetEntry(firstDerbyshireYeomanry, firstDerbyshireYeomanry.Locations[1])); entries.Add(GetEntry(mccHarrison, mccHarrison.Locations[0])); entries.Add(GetEntry(firstCavalryDivision, firstCavalryDivision.Locations[0])); return(entries); }
public TemporalChainOfCommand(IOrganisation superior, IOrganisation inferior, FuzzyDateRange fuzzyDateRange, ICitation citation, IAudit audit) : base(fuzzyDateRange.StartDateTime, fuzzyDateRange.EndDateTime, citation, audit) { this.Superior = superior; this.Inferior = inferior; }
public void ParseFromInvalidRangeTest() { Assert.ThrowsException <BadDateRangeFormatException>(() => _ = FuzzyDateRange.Parse("2019")); }
public void ParseFromInvalidDateTest() { Assert.ThrowsException <BadDateFormatException>(() => _ = FuzzyDateRange.Parse("left-right")); }