demo_hard/Testiks/UnitTest1.cs
2025-04-22 16:21:22 +03:00

168 lines
4.5 KiB
C#

using Libary;
[TestFixture]
public class AdditionalTests
{
private Calculations calculations;
[SetUp]
public void Setup()
{
calculations = new Calculations();
}
[Test]
public void TestPeriodEndsExactlyAtWorkEnd()
{
var result = calculations.AvailablePeriods(
new TimeSpan[] { new TimeSpan(16, 0, 0) },
new int[] { 60 },
new TimeSpan(9, 0, 0),
new TimeSpan(17, 0, 0),
30);
Assert.AreEqual("09:00-09:30", result[0]);
Assert.AreEqual("15:30-16:00", result[result.Length - 1]);
}
[Test]
public void TestPeriodStartsExactlyAtWorkBegin()
{
var result = calculations.AvailablePeriods(
new TimeSpan[] { new TimeSpan(9, 0, 0) },
new int[] { 60 },
new TimeSpan(9, 0, 0),
new TimeSpan(17, 0, 0),
30);
Assert.AreEqual("10:00-10:30", result[0]);
Assert.AreEqual("16:30-17:00", result[result.Length - 1]);
}
[Test]
public void TestNotEnoughTimeForConsultation()
{
var result = calculations.AvailablePeriods(
new TimeSpan[] { new TimeSpan(10, 0, 0), new TimeSpan(10, 45, 0) },
new int[] { 30, 15 },
new TimeSpan(9, 0, 0),
new TimeSpan(11, 0, 0),
30);
// Only 09:00-09:30 and 09:30-10:00 should be available
Assert.AreEqual(2, result.Length);
Assert.AreEqual("09:00-09:30", result[0]);
Assert.AreEqual("09:30-10:00", result[1]);
}
[Test]
public void TestConsultationLongerThanFreeSlot()
{
var result = calculations.AvailablePeriods(
new TimeSpan[] { new TimeSpan(10, 0, 0), new TimeSpan(11, 0, 0) },
new int[] { 30, 30 },
new TimeSpan(9, 0, 0),
new TimeSpan(12, 0, 0),
45);
// Only 09:00-09:45 and 09:45-10:30 fit
Assert.AreEqual(1, result.Length);
Assert.AreEqual("09:00-09:45", result[0]);
}
[Test]
public void TestBusyPeriodsOverlap()
{
var result = calculations.AvailablePeriods(
new TimeSpan[] { new TimeSpan(10, 0, 0), new TimeSpan(10, 30, 0) },
new int[] { 60, 60 },
new TimeSpan(9, 0, 0),
new TimeSpan(12, 0, 0),
30);
Assert.AreEqual(new[]
{
"09:00-09:30",
"09:30-10:00",
"11:30-12:00"
}, result);
}
[Test]
public void TestBusyEndsAtWorkEnd()
{
var result = calculations.AvailablePeriods(
new TimeSpan[] { new TimeSpan(16, 30, 0) },
new int[] { 30 },
new TimeSpan(9, 0, 0),
new TimeSpan(17, 0, 0),
30);
Assert.IsFalse(Array.Exists(result, r => r.StartsWith("16:30")));
}
[Test]
public void TestMultipleGapsBetweenBusy()
{
var result = calculations.AvailablePeriods(
new TimeSpan[]
{
new TimeSpan(10, 0, 0),
new TimeSpan(12, 0, 0),
new TimeSpan(14, 0, 0)
},
new int[] { 30, 30, 30 },
new TimeSpan(9, 0, 0),
new TimeSpan(15, 0, 0),
30);
Assert.AreEqual(new[]
{
"09:00-09:30", "09:30-10:00",
"10:30-11:00", "11:00-11:30", "11:30-12:00",
"12:30-13:00", "13:00-13:30", "13:30-14:00",
"14:30-15:00"
}, result);
}
[Test]
public void TestExactSlotAtEndOfDay()
{
var result = calculations.AvailablePeriods(
Array.Empty<TimeSpan>(),
Array.Empty<int>(),
new TimeSpan(16, 30, 0),
new TimeSpan(17, 0, 0),
30);
Assert.AreEqual(1, result.Length);
Assert.AreEqual("16:30-17:00", result[0]);
}
[Test]
public void TestBusyCoversWholeDay()
{
var result = calculations.AvailablePeriods(
new TimeSpan[] { new TimeSpan(9, 0, 0) },
new int[] { 480 },
new TimeSpan(9, 0, 0),
new TimeSpan(17, 0, 0),
30);
Assert.AreEqual(0, result.Length);
}
[Test]
public void TestFreeSlotBeforeFirstBusy()
{
var result = calculations.AvailablePeriods(
new TimeSpan[] { new TimeSpan(9, 30, 0) },
new int[] { 60 },
new TimeSpan(9, 0, 0),
new TimeSpan(11, 0, 0),
30);
Assert.AreEqual(new[] { "09:00-09:30", "10:30-11:00" }, result);
}
}