From 16f8729f135bdcc3f8285c036211f9e30c7f8643 Mon Sep 17 00:00:00 2001 From: billran Date: Wed, 25 Oct 2017 13:08:00 -0700 Subject: [PATCH] updated README.md --- README.md | 6 +- ShiftSharp.sln | 4 +- ShiftSharp/bin/Release/ShiftSharp.dll | Bin 0 -> 23552 bytes TestShiftSharp/TestSnippet.cs | 177 +------------------------- 4 files changed, 6 insertions(+), 181 deletions(-) create mode 100644 ShiftSharp/bin/Release/ShiftSharp.dll diff --git a/README.md b/README.md index dfafddf..52fbe30 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -# Shift -The Shift library project manages work schedules. A work schedule consists of one or more teams who rotate through a sequence of shift and off-shift periods of time. The Shift project allows breaks during shifts to be defined as well as non-working periods of time (e.g. holidays and scheduled maintenance periods) that are applicable to the entire work schedule. The C# project is a port of the java project at https://github.com/point85/Shift. +# ShiftSharp +The ShiftSharp library project manages work schedules. A work schedule consists of one or more teams who rotate through a sequence of shift and off-shift periods of time. The ShiftSharp project allows breaks during shifts to be defined as well as non-working periods of time (e.g. holidays and scheduled maintenance periods) that are applicable to the entire work schedule. The C# project is a port of the java project at https://github.com/point85/Shift. ## Concepts @@ -222,7 +222,7 @@ Working shifts ## Project Structure ShiftSharp depends upon .Net Framework 4.5+ due to use of the NodaTime date and time classes. -ShiftSharp, has the following structure: +ShiftSharp has the following structure: * `/Documentation/html` Doxygen HTML files * `/bin/Release` compiled ShiftSharp.dll * `.` - C# source files diff --git a/ShiftSharp.sln b/ShiftSharp.sln index 3deacc2..c746734 100644 --- a/ShiftSharp.sln +++ b/ShiftSharp.sln @@ -14,8 +14,8 @@ Global Description = C# version of java Shift library EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0D3FF948-F5BE-4338-94CB-CDC1A4475159}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0D3FF948-F5BE-4338-94CB-CDC1A4475159}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0D3FF948-F5BE-4338-94CB-CDC1A4475159}.Debug|Any CPU.ActiveCfg = Release|Any CPU + {0D3FF948-F5BE-4338-94CB-CDC1A4475159}.Debug|Any CPU.Build.0 = Release|Any CPU {0D3FF948-F5BE-4338-94CB-CDC1A4475159}.Release|Any CPU.ActiveCfg = Release|Any CPU {0D3FF948-F5BE-4338-94CB-CDC1A4475159}.Release|Any CPU.Build.0 = Release|Any CPU {4EA986B7-7046-4501-B3EE-511FDC84D10E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU diff --git a/ShiftSharp/bin/Release/ShiftSharp.dll b/ShiftSharp/bin/Release/ShiftSharp.dll new file mode 100644 index 0000000000000000000000000000000000000000..5834974e28fcbbd73b46d03e092f12439e9aba10 GIT binary patch literal 23552 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 literal 0 HcmV?d00001 diff --git a/TestShiftSharp/TestSnippet.cs b/TestShiftSharp/TestSnippet.cs index 844b713..095b0b1 100644 --- a/TestShiftSharp/TestSnippet.cs +++ b/TestShiftSharp/TestSnippet.cs @@ -27,6 +27,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE using NodaTime; using Point85.ShiftSharp.Schedule; using System; +using System.Collections.Generic; namespace TestShiftSharp { @@ -36,183 +37,7 @@ public class TestSnippet : BaseTest [TestMethod] public void TestPartial() { - schedule = new WorkSchedule("Working Time1", "Test working time"); - /* - // shift does not cross midnight - Duration shiftDuration = Duration.FromHours(8); - LocalTime shiftStart = new LocalTime(7, 0, 0); - Shift shift = schedule.CreateShift("Work Shift1", "Working time shift", shiftStart, shiftDuration); - LocalTime shiftEnd = shift.GetEnd(); - - // case #1 - Duration time = shift.CalculateWorkingTime(shiftStart.Minus(Period.FromHours(3)), shiftStart.Minus(Period.FromHours(2))); - Assert.IsTrue(time.TotalSeconds == 0); - time = shift.CalculateWorkingTime(shiftStart.Minus(Period.FromHours(3)), shiftStart.Minus(Period.FromHours(3))); - Assert.IsTrue(time.TotalSeconds == 0); - - // case #2 - time = shift.CalculateWorkingTime(shiftStart.Minus(Period.FromHours(1)), shiftStart.PlusHours(1)); - Assert.IsTrue(time.TotalSeconds == 3600); - - // case #3 - time = shift.CalculateWorkingTime(shiftStart.PlusHours(1), shiftStart.PlusHours(2)); - Assert.IsTrue(time.TotalSeconds == 3600); - - // case #4 - time = shift.CalculateWorkingTime(shiftEnd.Minus(Period.FromHours(1)), shiftEnd.PlusHours(1)); - Assert.IsTrue(time.TotalSeconds == 3600); - - // case #5 - time = shift.CalculateWorkingTime(shiftEnd.PlusHours(1), shiftEnd.PlusHours(2)); - Assert.IsTrue(time.TotalSeconds == 0); - time = shift.CalculateWorkingTime(shiftEnd.PlusHours(1), shiftEnd.PlusHours(1)); - Assert.IsTrue(time.TotalSeconds == 0); - - // case #6 - time = shift.CalculateWorkingTime(shiftStart.Minus(Period.FromHours(1)), shiftEnd.PlusHours(1)); - Assert.IsTrue(time.TotalSeconds == shiftDuration.TotalSeconds); - - // case #7 - time = shift.CalculateWorkingTime(shiftStart.PlusHours(1), shiftStart.PlusHours(1)); - Assert.IsTrue(time.TotalSeconds == 0); - - // case #8 - time = shift.CalculateWorkingTime(shiftStart, shiftEnd); - Assert.IsTrue(time.TotalSeconds == shiftDuration.TotalSeconds); - - // case #9 - time = shift.CalculateWorkingTime(shiftStart, shiftStart); - Assert.IsTrue(time.TotalSeconds == 0); - - // case #10 - time = shift.CalculateWorkingTime(shiftEnd, shiftEnd); - Assert.IsTrue(time.TotalSeconds == 0); - - // case #11 - time = shift.CalculateWorkingTime(shiftStart, shiftStart.PlusSeconds(1)); - Assert.IsTrue(time.TotalSeconds == 1); - - // case #12 - time = shift.CalculateWorkingTime(shiftEnd.Minus(Period.FromSeconds(1)), shiftEnd); - Assert.IsTrue(time.TotalSeconds == 1); - - // 8 hr shift crossing midnight - shiftStart = new LocalTime(22, 0, 0); - - shift = schedule.CreateShift("Work Shift2", "Working time shift", shiftStart, shiftDuration); - shiftEnd = shift.GetEnd(); - - // case #1 - time = shift.CalculateWorkingTime(shiftStart.Minus(Period.FromHours(3)), shiftStart.Minus(Period.FromHours(2)), true); - Assert.IsTrue(time.TotalSeconds == 0); - time = shift.CalculateWorkingTime(shiftStart.Minus(Period.FromHours(3)), shiftStart.Minus(Period.FromHours(3)), true); - Assert.IsTrue(time.TotalSeconds == 0); - - // case #2 - time = shift.CalculateWorkingTime(shiftStart.Minus(Period.FromHours(1)), shiftStart.PlusHours(1), true); - Assert.IsTrue(time.TotalSeconds == 3600); - - // case #3 - time = shift.CalculateWorkingTime(shiftStart.PlusHours(1), shiftStart.PlusHours(2), true); - Assert.IsTrue(time.TotalSeconds == 3600); - - // case #4 - time = shift.CalculateWorkingTime(shiftEnd.Minus(Period.FromHours(1)), shiftEnd.PlusHours(1), false); - Assert.IsTrue(time.TotalSeconds == 3600); - - // case #5 - time = shift.CalculateWorkingTime(shiftEnd.PlusHours(1), shiftEnd.PlusHours(2), true); - Assert.IsTrue(time.TotalSeconds == 0); - time = shift.CalculateWorkingTime(shiftEnd.PlusHours(1), shiftEnd.PlusHours(1), true); - Assert.IsTrue(time.TotalSeconds == 0); - - // case #6 - time = shift.CalculateWorkingTime(shiftStart.Minus(Period.FromHours(1)), shiftEnd.PlusHours(1), true); - Assert.IsTrue(time.TotalSeconds == shiftDuration.TotalSeconds); - - // case #7 - time = shift.CalculateWorkingTime(shiftStart.PlusHours(1), shiftStart.PlusHours(1), true); - Assert.IsTrue(time.TotalSeconds == 0); - - // case #8 - time = shift.CalculateWorkingTime(shiftStart, shiftEnd, true); - Assert.IsTrue(time.TotalSeconds == shiftDuration.TotalSeconds); - - // case #9 - time = shift.CalculateWorkingTime(shiftStart, shiftStart, true); - Assert.IsTrue(time.TotalSeconds == 0); - - // case #10 - time = shift.CalculateWorkingTime(shiftEnd, shiftEnd, true); - Assert.IsTrue(time.TotalSeconds == 0); - - // case #11 - time = shift.CalculateWorkingTime(shiftStart, shiftStart.PlusSeconds(1), true); - Assert.IsTrue(time.TotalSeconds == 1); - - // case #12 - time = shift.CalculateWorkingTime(shiftEnd.Minus(Period.FromSeconds(1)), shiftEnd, false); - Assert.IsTrue(time.TotalSeconds == 1); - */ - // 24 hr shift crossing midnight - Duration shiftDuration = Duration.FromHours(24); - LocalTime shiftStart = new LocalTime(7, 0, 0); - - Shift shift = schedule.CreateShift("Work Shift3", "Working time shift", shiftStart, shiftDuration); - LocalTime shiftEnd = shift.GetEnd(); - /* - // case #1 - Duration time = shift.CalculateWorkingTime(shiftStart.Minus(Period.FromHours(3)), shiftStart.Minus(Period.FromHours(2)), false); - Assert.IsTrue(time.TotalSeconds == 3600); - time = shift.CalculateWorkingTime(shiftStart.Minus(Period.FromHours(3)), shiftStart.Minus(Period.FromHours(3)), true); - Assert.IsTrue(time.TotalSeconds == 0); - - // case #2 - time = shift.CalculateWorkingTime(shiftStart.Minus(Period.FromHours(1)), shiftStart.PlusHours(1), true); - Assert.IsTrue(time.TotalSeconds == 3600); - - // case #3 - time = shift.CalculateWorkingTime(shiftStart.PlusHours(1), shiftStart.PlusHours(2), true); - Assert.IsTrue(time.TotalSeconds == 3600); - - // case #4 - time = shift.CalculateWorkingTime(shiftEnd.Minus(Period.FromHours(1)), shiftEnd.PlusHours(1), true); - Assert.IsTrue(time.TotalSeconds == 3600); - - // case #5 - time = shift.CalculateWorkingTime(shiftEnd.PlusHours(1), shiftEnd.PlusHours(2), true); - Assert.IsTrue(time.TotalSeconds == 3600); - time = shift.CalculateWorkingTime(shiftEnd.PlusHours(1), shiftEnd.PlusHours(1), true); - Assert.IsTrue(time.TotalSeconds == 0); - - // case #6 - time = shift.CalculateWorkingTime(shiftStart.Minus(Period.FromHours(1)), shiftEnd.PlusHours(1), true); - Assert.IsTrue(time.TotalSeconds == 3600); - - // case #7 - time = shift.CalculateWorkingTime(shiftStart.PlusHours(1), shiftStart.PlusHours(1), true); - Assert.IsTrue(time.TotalSeconds == 0); - */ - // case #8 - Duration time = shift.CalculateWorkingTime(shiftStart, shiftEnd, true); - Assert.IsTrue(time.TotalSeconds == shiftDuration.TotalSeconds); - - // case #9 - time = shift.CalculateWorkingTime(shiftStart, shiftStart, true); - Assert.IsTrue(time.TotalSeconds == shiftDuration.TotalSeconds); - - // case #10 - time = shift.CalculateWorkingTime(shiftEnd, shiftEnd, true); - Assert.IsTrue(time.TotalSeconds == shiftDuration.TotalSeconds); - - // case #11 - time = shift.CalculateWorkingTime(shiftStart, shiftStart.PlusSeconds(1), true); - Assert.IsTrue(time.TotalSeconds == 1); - - // case #12 - time = shift.CalculateWorkingTime(shiftEnd.Minus(Period.FromSeconds(1)), shiftEnd, false); - Assert.IsTrue(time.TotalSeconds == 1); } } }