Skip to content

Commit 0e90f00

Browse files
ConcurrentTeskProgress
1 parent dfab985 commit 0e90f00

File tree

5 files changed

+46
-4
lines changed

5 files changed

+46
-4
lines changed

src/ResourceManager/Common/Commands.Common.Strategies.UnitTest/TimeSlotTest.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ public void AddTest()
2020
Assert.AreEqual(1, first.TaskCount);
2121
Assert.AreEqual(next, first.Next);
2222

23+
Assert.AreEqual(10.0, first.GetTaskProgress(10));
24+
2325
Assert.AreEqual(0, next.Duration);
2426
Assert.AreEqual(0, next.TaskCount);
2527
Assert.AreEqual(null, next.Next);
@@ -31,6 +33,8 @@ public void AddTest()
3133
Assert.AreEqual(next2, first.Next);
3234
Assert.AreEqual(next, first.Next);
3335

36+
Assert.AreEqual(20.0, first.GetTaskProgress(40));
37+
3438
Assert.AreEqual(0, next2.Duration);
3539
Assert.AreEqual(0, next2.TaskCount);
3640
Assert.AreEqual(null, next2.Next);
@@ -40,11 +44,15 @@ public void AddTest()
4044
Assert.AreEqual(3, first.TaskCount);
4145
Assert.AreEqual(next3, first.Next);
4246

47+
Assert.AreEqual(3.0, first.GetTaskProgress(9));
48+
4349
Assert.AreEqual(20, next3.Duration);
4450
Assert.AreEqual(2, next3.TaskCount);
4551
Assert.AreEqual(next2, next3.Next);
4652
Assert.AreEqual(next, next3.Next);
4753

54+
Assert.AreEqual(10.0 + 5, first.GetTaskProgress(40));
55+
4856
Assert.AreEqual(0, next2.Duration);
4957
Assert.AreEqual(0, next2.TaskCount);
5058
Assert.AreEqual(null, next2.Next);
@@ -54,6 +62,8 @@ public void AddTest()
5462
Assert.AreEqual(1, next2.TaskCount);
5563
Assert.AreEqual(next4, next2.Next);
5664

65+
Assert.AreEqual((30.0 / 4) + (20.0 / 3) + 20, first.GetTaskProgress(70));
66+
5767
Assert.AreEqual(0, next4.Duration);
5868
Assert.AreEqual(0, next4.TaskCount);
5969
Assert.AreEqual(null, next4.Next);

src/ResourceManager/Common/Commands.Common.Strategies/Commands.Common.Strategies.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
<Compile Include="IResourceConfig.cs" />
7474
<Compile Include="IResourceConfigVisitor.cs" />
7575
<Compile Include="IShouldProcess.cs" />
76+
<Compile Include="ConcurrentTaskProgress.cs" />
7677
<Compile Include="TimeSlot.cs" />
7778
<Compile Include="StateOperationContext.cs" />
7879
<Compile Include="Compute\ComputeStrategy.cs" />
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
namespace Microsoft.Azure.Commands.Common.Strategies
2+
{
3+
public sealed class ConcurrentTaskProgress
4+
{
5+
public TimeSlot TimeSlot { get; }
6+
7+
public int Begin { get; }
8+
9+
public ConcurrentTaskProgress(TimeSlot timeSlot, int begin)
10+
{
11+
TimeSlot = timeSlot;
12+
Begin = begin;
13+
}
14+
15+
public ConcurrentTaskProgress AddTask(int duration)
16+
=> new ConcurrentTaskProgress(TimeSlot.AddTask(duration), Begin + duration);
17+
}
18+
}

src/ResourceManager/Common/Commands.Common.Strategies/TimeSlot.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
namespace Microsoft.Azure.Commands.Common.Strategies
22
{
3+
/// <summary>
4+
/// TimeSlot is a node of a singly linked list of TimeSlots.
5+
/// The last node of the list is always an empty time slot
6+
/// - Duration = 0.
7+
/// - Next = null.
8+
/// - TaskCount = 0.
9+
/// </summary>
310
public sealed class TimeSlot
411
{
512
public int Duration { get; private set; }
@@ -10,9 +17,7 @@ public sealed class TimeSlot
1017

1118
public bool IsLast => Next == null;
1219

13-
public TimeSlot() : this(0, 0, null)
14-
{
15-
}
20+
public TimeSlot() : this(0, 0, null) { }
1621

1722
TimeSlot(int duration, int taskCount, TimeSlot next)
1823
{
@@ -47,5 +52,13 @@ public TimeSlot AddTask(int duration)
4752
return Next.AddTask(duration - Duration);
4853
}
4954
}
55+
56+
public double GetTaskProgress(int duration)
57+
=> duration <= Duration
58+
? GetProgress(duration)
59+
: GetProgress(Duration) + Next.GetTaskProgress(duration - Duration);
60+
61+
double GetProgress(double duration)
62+
=> duration / TaskCount;
5063
}
5164
}

src/ResourceManager/Common/Commands.Common.Strategies/TimeSlotExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
{
33
class TimeSlotExtensions
44
{
5-
public TimeSlot
5+
// public TimeSlot
66
}
77
}

0 commit comments

Comments
 (0)