Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions Ical.Net.Benchmarks/ApplicationWorkflows.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Ical.Net.Evaluation;

namespace Ical.Net.Benchmarks;

Expand Down Expand Up @@ -38,7 +39,7 @@ public List<Occurrence> SingleThreaded()
return _manyCalendars
.SelectMany(Calendar.Load<Calendar>)
.SelectMany(c => c.Events)
.SelectMany(e => e.GetOccurrences(_searchStart).TakeWhile(p => p.Period.StartTime < _searchEnd))
.SelectMany(e => e.GetOccurrences(_searchStart).TakeWhile(p => p.Period.StartTime.LessThan(_searchEnd)))
.ToList();
}

Expand All @@ -49,7 +50,7 @@ public List<Occurrence> ParallelUponDeserialize()
.AsParallel()
.SelectMany(Calendar.Load<Calendar>)
.SelectMany(c => c.Events)
.SelectMany(e => e.GetOccurrences(_searchStart).TakeWhile(p => p.Period.StartTime < _searchEnd))
.SelectMany(e => e.GetOccurrences(_searchStart).TakeWhile(p => p.Period.StartTime.LessThan(_searchEnd)))
.ToList();
}

Expand All @@ -60,7 +61,7 @@ public List<Occurrence> ParallelUponGetOccurrences()
.SelectMany(Calendar.Load<Calendar>)
.SelectMany(c => c.Events)
.AsParallel()
.SelectMany(e => e.GetOccurrences(_searchStart).TakeWhile(p => p.Period.StartTime < _searchEnd))
.SelectMany(e => e.GetOccurrences(_searchStart).TakeWhile(p => p.Period.StartTime.LessThan(_searchEnd)))
.ToList();
}

Expand All @@ -72,7 +73,7 @@ public List<Occurrence> ParallelDeserializeSequentialGatherEventsParallelGetOccu
.SelectMany(Calendar.Load<Calendar>)
.AsSequential()
.SelectMany(c => c.Events)
.SelectMany(e => e.GetOccurrences(_searchStart).TakeWhile(p => p.Period.StartTime < _searchEnd))
.SelectMany(e => e.GetOccurrences(_searchStart).TakeWhile(p => p.Period.StartTime.LessThan(_searchEnd)))
.ToList();
}
}
1 change: 1 addition & 0 deletions Ical.Net.Benchmarks/CalDateTimePerfTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using BenchmarkDotNet.Attributes;
using Ical.Net.DataTypes;
using System;
using Ical.Net.Evaluation;

namespace Ical.Net.Benchmarks;

Expand Down
13 changes: 7 additions & 6 deletions Ical.Net.Benchmarks/OccurencePerfTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Ical.Net.Evaluation;

namespace Ical.Net.Benchmarks;

Expand All @@ -35,7 +36,7 @@ public void MultipleEventsWithUntilOccurrencesSearchingByWholeCalendar()
{
var searchStart = _calendarFourEvents.Events.First().DtStart!.AddYears(-1);
var searchEnd = _calendarFourEvents.Events.Last().DtStart!.AddYears(1);
_ = _calendarFourEvents.GetOccurrences(searchStart).TakeWhile(p => p.Period.StartTime < searchEnd);
_ = _calendarFourEvents.GetOccurrences(searchStart).TakeWhile(p => p.Period.StartTime.LessThan(searchEnd));
}

[Benchmark]
Expand All @@ -44,7 +45,7 @@ public void MultipleEventsWithUntilOccurrences()
var searchStart = _calendarFourEvents.Events.First().DtStart!.AddYears(-1);
var searchEnd = _calendarFourEvents.Events.Last().DtStart!.AddYears(1);
_ = _calendarFourEvents.Events
.SelectMany(e => e.GetOccurrences(searchStart).TakeWhile(p => p.Period.StartTime < searchEnd))
.SelectMany(e => e.GetOccurrences(searchStart).TakeWhile(p => p.Period.StartTime.LessThan(searchEnd)))
.ToList();
}

Expand All @@ -55,7 +56,7 @@ public void MultipleEventsWithUntilOccurrencesEventsAsParallel()
var searchEnd = _calendarFourEvents.Events.Last().DtStart!.AddYears(1).AddDays(10);
_ = _calendarFourEvents.Events
.AsParallel()
.SelectMany(e => e.GetOccurrences(searchStart).TakeWhile(p => p.Period.StartTime < searchEnd))
.SelectMany(e => e.GetOccurrences(searchStart).TakeWhile(p => p.Period.StartTime.LessThan(searchEnd)))
.ToList();
}

Expand Down Expand Up @@ -113,7 +114,7 @@ public void MultipleEventsWithCountOccurrencesSearchingByWholeCalendar()
var calendar = GetFourCalendarEventsWithCountRule();
var searchStart = calendar.Events.First().DtStart!.AddYears(-1);
var searchEnd = calendar.Events.Last().DtStart!.AddYears(1);
_ = calendar.GetOccurrences(searchStart).TakeWhile(p => p.Period.StartTime < searchEnd);
_ = calendar.GetOccurrences(searchStart).TakeWhile(p => p.Period.StartTime.LessThan(searchEnd));
}

[Benchmark]
Expand All @@ -123,7 +124,7 @@ public void MultipleEventsWithCountOccurrences()
var searchStart = calendar.Events.First().DtStart!.AddYears(-1);
var searchEnd = calendar.Events.Last().DtStart!.AddYears(1);
_ = calendar.Events
.SelectMany(e => e.GetOccurrences(searchStart).TakeWhile(p => p.Period.StartTime < searchEnd))
.SelectMany(e => e.GetOccurrences(searchStart).TakeWhile(p => p.Period.StartTime.LessThan(searchEnd)))
.ToList();
}

Expand All @@ -135,7 +136,7 @@ public void MultipleEventsWithCountOccurrencesEventsAsParallel()
var searchEnd = calendar.Events.Last().DtStart!.AddYears(1).AddDays(10);
_ = calendar.Events
.AsParallel()
.SelectMany(e => e.GetOccurrences(searchStart).TakeWhile(p => p.Period.StartTime < searchEnd))
.SelectMany(e => e.GetOccurrences(searchStart).TakeWhile(p => p.Period.StartTime.LessThan(searchEnd)))
.ToList();
}

Expand Down
5 changes: 3 additions & 2 deletions Ical.Net.Benchmarks/ThroughputTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using BenchmarkDotNet.Attributes;
using System.Linq;
using Ical.Net.DataTypes;
using Ical.Net.Evaluation;

namespace Ical.Net.Benchmarks;

Expand Down Expand Up @@ -70,7 +71,7 @@ rsion 08.00.0681.000"">\n<TITLE></TITLE>\n</HEAD>\n<BODY>\n<!-- Converted f
var calendarEvent = calendar.Events.First();
var searchStart = new CalDateTime(2009, 06, 20);
var searchEnd = new CalDateTime(2011, 06, 23);
var occurrences = calendarEvent.GetOccurrences(searchStart).TakeWhile(p => p.Period.StartTime < searchEnd);
_ = calendarEvent.GetOccurrences(searchStart).TakeWhile(p => p.Period.StartTime.LessThan(searchEnd));
}

[Benchmark]
Expand Down Expand Up @@ -132,6 +133,6 @@ rsion 08.00.0681.000"">\n<TITLE></TITLE>\n</HEAD>\n<BODY>\n<!-- Converted f
var calendarEvent = calendar.Events.First();
var searchStart = new CalDateTime(2009, 06, 20);
var searchEnd = new CalDateTime(2011, 06, 23);
var occurrences = calendarEvent.GetOccurrences(searchStart).TakeWhile(p => p.Period.StartTime < searchEnd);
_ = calendarEvent.GetOccurrences(searchStart).TakeWhile(p => p.Period.StartTime.LessThan(searchEnd));
}
}
49 changes: 31 additions & 18 deletions Ical.Net.Tests/CalDateTimeTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Ical.Net.Evaluation;

namespace Ical.Net.Tests;

Expand Down Expand Up @@ -55,10 +56,10 @@ public void ToTimeZoneFloating()
[Test, TestCaseSource(nameof(ToTimeZoneTestCases))]
public void ToTimeZoneTests(CalendarEvent calendarEvent, string targetTimeZone)
{
var startAsUtc = calendarEvent.Start.AsUtc;
var startAsUtc = calendarEvent.Start!.AsUtc();

var convertedStart = calendarEvent.Start.ToTimeZone(targetTimeZone);
var convertedAsUtc = convertedStart.AsUtc;
var convertedAsUtc = convertedStart.AsUtc();

Assert.That(convertedAsUtc, Is.EqualTo(startAsUtc));
}
Expand Down Expand Up @@ -96,11 +97,11 @@ public void SameDateTimeWithDifferentTzIdShouldReturnSameUtc()
var someTime = DateTimeOffset.Parse("2018-05-21T11:35:00-04:00", CultureInfo.InvariantCulture);

var someDt = new CalDateTime(someTime.DateTime, "America/New_York");
var firstUtc = someDt.AsUtc;
var firstUtc = someDt.AsUtc();
Assert.That(firstUtc, Is.EqualTo(someTime.UtcDateTime));

someDt = new CalDateTime(someTime.DateTime, "Europe/Berlin");
var berlinUtc = someDt.AsUtc;
var berlinUtc = someDt.AsUtc();
Assert.That(berlinUtc, Is.Not.EqualTo(firstUtc));
}

Expand Down Expand Up @@ -142,14 +143,26 @@ public static IEnumerable DateTimeKindOverrideTestCases()
.SetName("DateTime with Kind = Local and null tzid returns DateTimeKind.Unspecified");
}

[Test, TestCaseSource(nameof(ToStringTestCases))]
public string ToStringTests(CalDateTime calDateTime, string format, IFormatProvider formatProvider)
[Test]
public void ToStringTest()
{
var calDateTime = new CalDateTime(2024, 8, 30, 10, 30, 0, tzId: "Pacific/Auckland");
Assert.That(calDateTime.ToString(),
Is.EqualTo("08/30/2024 10:30:00 Pacific/Auckland"));
#pragma warning disable CA1305
Assert.That(calDateTime.ToString("yyyy-MM-dd HH:mm:ss"),
Is.EqualTo("2024-08-30 10:30:00 Pacific/Auckland"));
#pragma warning restore CA1305
}

[Test, TestCaseSource(nameof(ToStringWithFormatTestCases))]
public string ToStringWitFormatTests(CalDateTime calDateTime, string format, IFormatProvider formatProvider)
=> calDateTime.ToString(format, formatProvider);

public static IEnumerable ToStringTestCases()
public static IEnumerable ToStringWithFormatTestCases()
{
yield return new TestCaseData(new CalDateTime(2024, 8, 30, 10, 30, 0, tzId: "Pacific/Auckland"), "O", null)
.Returns("2024-08-30T10:30:00.0000000+12:00 Pacific/Auckland")
.Returns("2024-08-30T10:30:00.0000000 Pacific/Auckland")
.SetName("Date and time with 'O' format arg, default culture");

yield return new TestCaseData(new CalDateTime(2024, 8, 30), "O", null)
Expand All @@ -158,7 +171,7 @@ public static IEnumerable ToStringTestCases()

yield return new TestCaseData(new CalDateTime(2024, 8, 30, 10, 30, 0, tzId: "Pacific/Auckland"), "O",
CultureInfo.GetCultureInfo("fr-FR"))
.Returns("2024-08-30T10:30:00.0000000+12:00 Pacific/Auckland")
.Returns("2024-08-30T10:30:00.0000000 Pacific/Auckland")
.SetName("Date and time with 'O' format arg, French culture");

yield return new TestCaseData(new CalDateTime(2024, 8, 30, 10, 30, 0, tzId: "Pacific/Auckland"),
Expand Down Expand Up @@ -190,15 +203,15 @@ public static IEnumerable DateTimeArithmeticTestCases()

yield return new TestCaseData(new Func<CalDateTime, CalDateTime>(dt => dt.AddHours(1)))
.Returns(dateTime.AddHours(1))
.SetName($"{nameof(CalDateTime.AddHours)} 1 hour");
.SetName($"{nameof(CalDateTimeExtensions.AddHours)} 1 hour");

yield return new TestCaseData(new Func<CalDateTime, CalDateTime>(dt => dt.Add(Duration.FromSeconds(30))))
.Returns(dateTime.Add(TimeSpan.FromSeconds(30)))
.SetName($"{nameof(CalDateTime.Add)} 30 seconds");
.SetName($"{nameof(CalDateTimeExtensions.Add)} 30 seconds");

yield return new TestCaseData(new Func<CalDateTime, CalDateTime>(dt => dt.AddMinutes(70)))
.Returns(dateTime.AddMinutes(70))
.SetName($"{nameof(CalDateTime.AddMinutes)} 70 minutes");
.SetName($"{nameof(CalDateTimeExtensions.AddMinutes)} 70 minutes");
}

[Test, TestCaseSource(nameof(EqualityTestCases))]
Expand Down Expand Up @@ -259,27 +272,27 @@ public static IEnumerable DateOnlyValidArithmeticTestCases()

yield return new TestCaseData(new Func<CalDateTime, CalDateTime>(dt => dt.Add(-Duration.FromDays(1))))
.Returns((dateTime.AddDays(-1), false))
.SetName($"{nameof(CalDateTime.Add)} -1 day TimeSpan");
.SetName($"{nameof(CalDateTimeExtensions.Add)} -1 day TimeSpan");

yield return new TestCaseData(new Func<CalDateTime, CalDateTime>(dt => dt.AddYears(1)))
.Returns((dateTime.AddYears(1), false))
.SetName($"{nameof(CalDateTime.AddYears)} 1 year");
.SetName($"{nameof(CalDateTimeExtensions.AddYears)} 1 year");

yield return new TestCaseData(new Func<CalDateTime, CalDateTime>(dt => dt.AddMonths(2)))
.Returns((dateTime.AddMonths(2), false))
.SetName($"{nameof(CalDateTime.AddMonths)} 2 months");
.SetName($"{nameof(CalDateTimeExtensions.AddMonths)} 2 months");

yield return new TestCaseData(new Func<CalDateTime, CalDateTime>(dt => dt.AddDays(7)))
.Returns((dateTime.AddDays(7), false))
.SetName($"{nameof(CalDateTime.AddDays)} 7 days");
.SetName($"{nameof(CalDateTimeExtensions.AddDays)} 7 days");

yield return new TestCaseData(new Func<CalDateTime, CalDateTime>(dt => dt.Add(Duration.FromDays(1))))
.Returns((dateTime.Add(TimeSpan.FromDays(1)), false))
.SetName($"{nameof(CalDateTime.Add)} 1 day TimeSpan");
.SetName($"{nameof(CalDateTimeExtensions.Add)} 1 day TimeSpan");

yield return new TestCaseData(new Func<CalDateTime, CalDateTime>(dt => dt.Add(Duration.Zero)))
.Returns((dateTime.Add(TimeSpan.Zero), false))
.SetName($"{nameof(CalDateTime.Add)} TimeSpan.Zero");
.SetName($"{nameof(CalDateTimeExtensions.Add)} TimeSpan.Zero");
}

[Test]
Expand Down
Loading
Loading