コード例 #1
0
 internal static void RunRules(FuzzyDateRange range)
 {
     foreach (var rule in _fuzzyDateRangeRules)
     {
         rule.Verify(range);
     }
 }
コード例 #2
0
        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));
        }
コード例 #3
0
ファイル: KmlWriter.cs プロジェクト: itofinity/geohistory
        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);
        }
コード例 #4
0
 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}");
     }
 }
コード例 #5
0
 public void BothUnknownIsValid()
 {
     try
     {
         _ = new FuzzyDateRange(FuzzyDate.Unknown, FuzzyDate.Unknown);
     }
     catch (Exception ex)
     {
         Assert.Fail($"Expect no exception, but got {ex.Message}");
     }
 }
コード例 #6
0
 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}");
     }
 }
コード例 #7
0
 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}");
     }
 }
コード例 #8
0
 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}");
     }
 }
コード例 #9
0
 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}");
     }
 }
コード例 #10
0
 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}");
     }
 }
コード例 #11
0
        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})));");
                        }
                    }
                }
            }
        }
コード例 #12
0
        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}");
            }
        }
コード例 #13
0
        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}");
            }
        }
コード例 #14
0
        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}");
            }
        }
コード例 #15
0
 public void FromAfterToIsInvalid()
 {
     Assert.ThrowsException <ArgumentOutOfRangeException>(() => _ = new FuzzyDateRange(new FuzzyDate(2019, 5), new FuzzyDate(2019, 1)));
 }
コード例 #16
0
        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);
        }
コード例 #17
0
 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;
 }
コード例 #18
0
 public void ParseFromInvalidRangeTest()
 {
     Assert.ThrowsException <BadDateRangeFormatException>(() => _ = FuzzyDateRange.Parse("2019"));
 }
コード例 #19
0
 public void ParseFromInvalidDateTest()
 {
     Assert.ThrowsException <BadDateFormatException>(() => _ = FuzzyDateRange.Parse("left-right"));
 }