Skip to content

Commit

Permalink
Reduce allocations for execution despatch (#271) (#748)
Browse files Browse the repository at this point in the history
  • Loading branch information
reisenberger authored Jan 25, 2020
1 parent 989c399 commit 9de173b
Show file tree
Hide file tree
Showing 122 changed files with 4,384 additions and 2,242 deletions.
2 changes: 1 addition & 1 deletion src/Polly.Specs/Bulkhead/BulkheadAsyncSpecs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
using Polly.Specs.Helpers.Bulkhead;

using FluentAssertions;
using Polly.Utilities;
using Polly.Specs.Helpers;
using Xunit;
using Xunit.Abstractions;

Expand Down
1 change: 0 additions & 1 deletion src/Polly.Specs/Bulkhead/BulkheadTResultAsyncSpecs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
using Polly.Specs.Helpers;
using Polly.Specs.Helpers.Bulkhead;
using FluentAssertions;
using Polly.Utilities;
using Xunit;
using Xunit.Abstractions;

Expand Down
175 changes: 175 additions & 0 deletions src/Polly.Specs/Executables/ExecutablesAsyncSpecs.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using FluentAssertions;
using Xunit;

namespace Polly.Specs.Executables
{
public class ExecutablesAsyncSpecs
{
[Fact]
public async Task Should_execute_user_delegate_with_input_parameter()
{
var policy = Policy.NoOpAsync();

Int16 input1 = 1;
Int64 captured = 0;

await policy.ExecuteAsync<Int16>((context, token, captureContext, input) =>
{
captured = input;
return Task.CompletedTask;
}, new Context(),
CancellationToken.None,
continueOnCapturedContext: false,
input1);

captured.Should().Be(input1);
}

[Fact]
public async Task Should_execute_user_delegate_with_two_input_parameters()
{
var policy = Policy.NoOpAsync();

Int16 input1 = 1;
Int32 input2 = 2;
Int64 captured = 0;

await policy.ExecuteAsync<Int16, Int32>((context, token, captureContext, t1, t2) =>
{
captured = t1 + t2;
return Task.CompletedTask;
}, new Context(),
CancellationToken.None,
continueOnCapturedContext: false,
input1,
input2);

captured.Should().Be(input1 + input2);
}

[Fact]
public async Task Should_execute_user_delegate_with_input_parameter_and_return_type()
{
var policy = Policy.NoOpAsync();

Int16 input1 = 1;
Int64 captured = await policy.ExecuteAsync<Int16, Int64>(async (context, token, captureContext, input) =>
{
await Task.CompletedTask;
return input;
}, new Context(),
CancellationToken.None,
continueOnCapturedContext: false,
input1);

captured.Should().Be(input1);
}

[Fact]
public async Task Should_execute_user_delegate_with_two_input_parameters_and_return_type()
{
var policy = Policy.NoOpAsync();

Int16 input1 = 1;
Int32 input2 = 2;
Int64 captured = await policy.ExecuteAsync<Int16, Int32, Int64>(async (context, token, captureContext, t1, t2) =>
{
await Task.CompletedTask;
return t1 + t2;
}, new Context(),
CancellationToken.None,
continueOnCapturedContext: false,
input1,
input2);

captured.Should().Be(input1 + input2);
}

[Fact]
public async Task Should_executeandcapture_user_delegate_with_input_parameter()
{
var policy = Policy.NoOpAsync();

Int16 input1 = 1;
Int64 captured = 0;

var policyResult = await policy.ExecuteAndCaptureAsync<Int16>((context, token, captureContext, input) =>
{
captured = input;
return Task.CompletedTask;
}, new Context(),
CancellationToken.None,
continueOnCapturedContext: false,
input1);

policyResult.Outcome.Should().Be(OutcomeType.Successful);
captured.Should().Be(input1);
}

[Fact]
public async Task Should_executeandcapture_user_delegate_with_two_input_parameters()
{
var policy = Policy.NoOpAsync();

Int16 input1 = 1;
Int32 input2 = 2;
Int64 captured = 0;

var policyResult = await policy.ExecuteAndCaptureAsync<Int16, Int32>((context, token, captureContext, t1, t2) =>
{
captured = t1 + t2;
return Task.CompletedTask;
}, new Context(),
CancellationToken.None,
continueOnCapturedContext: false,
input1,
input2);

policyResult.Outcome.Should().Be(OutcomeType.Successful);
captured.Should().Be(input1 + input2);
}

[Fact]
public async Task Should_executeandcapture_user_delegate_with_input_parameter_and_return_type()
{
var policy = Policy.NoOpAsync();

Int16 input1 = 1;
var policyResult = await policy.ExecuteAndCaptureAsync<Int16, Int64>(async (context, token, captureContext, input) =>
{
await Task.CompletedTask;
return input;
}, new Context(),
CancellationToken.None,
continueOnCapturedContext: false,
input1);

policyResult.Outcome.Should().Be(OutcomeType.Successful);
policyResult.Result.Should().Be(input1);
}

[Fact]
public async Task Should_executeandcapture_user_delegate_with_two_input_parameters_and_return_type()
{
var policy = Policy.NoOpAsync();

Int16 input1 = 1;
Int32 input2 = 2;
var policyResult = await policy.ExecuteAndCaptureAsync<Int16, Int32, Int64>(async (context, token, captureContext, t1, t2) =>
{
await Task.CompletedTask;
return t1 + t2;
}, new Context(),
CancellationToken.None,
continueOnCapturedContext: false,
input1,
input2);

policyResult.Outcome.Should().Be(OutcomeType.Successful);
policyResult.Result.Should().Be(input1 + input2);
}
}
}
146 changes: 146 additions & 0 deletions src/Polly.Specs/Executables/ExecutablesSyncSpecs.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
using System;
using System.Threading;
using FluentAssertions;
using Xunit;

namespace Polly.Specs.Executables
{
public class ExecutablesSyncSpecs
{
[Fact]
public void Should_execute_user_delegate_with_input_parameter()
{
var policy = Policy.NoOp();

Int16 input1 = 1;
Int64 captured = 0;

policy.Execute<Int16>((context, token, input) =>
{
captured = input;
}, new Context(),
CancellationToken.None,
input1);

captured.Should().Be(input1);
}

[Fact]
public void Should_execute_user_delegate_with_two_input_parameters()
{
var policy = Policy.NoOp();

Int16 input1 = 1;
Int32 input2 = 2;
Int64 captured = 0;

policy.Execute<Int16, Int32>((context, token, t1, t2) =>
{
captured = t1 + t2;
}, new Context(),
CancellationToken.None,
input1,
input2);

captured.Should().Be(input1 + input2);
}

[Fact]
public void Should_execute_user_delegate_with_input_parameter_and_return_type()
{
var policy = Policy.NoOp();

Int16 input1 = 1;
double captured = policy.Execute<Int16, Int64>((context, token, input) => input, new Context(),
CancellationToken.None,
input1);

captured.Should().Be(input1);
}

[Fact]
public void Should_execute_user_delegate_with_two_input_parameters_and_return_type()
{
var policy = Policy.NoOp();

Int16 input1 = 1;
Int32 input2 = 2;
double captured = policy.Execute<Int16, Int32, Int64>((context, token, t1, t2) => t1 + t2, new Context(),
CancellationToken.None,
input1,
input2);

captured.Should().Be(input1 + input2);
}

[Fact]
public void Should_executeandcapture_user_delegate_with_input_parameter()
{
var policy = Policy.NoOp();

Int16 input1 = 1;
double captured = 0;

var policyResult = policy.ExecuteAndCapture<Int16>((context, token, input) =>
{
captured = input;
}, new Context(),
CancellationToken.None,
input1);

policyResult.Outcome.Should().Be(OutcomeType.Successful);
captured.Should().Be(input1);
}

[Fact]
public void Should_executeandcapture_user_delegate_with_two_input_parameters()
{
var policy = Policy.NoOp();

Int16 input1 = 1;
Int32 input2 = 2;
double captured = 0;

var policyResult = policy.ExecuteAndCapture<Int16, Int32>((context, token, t1, t2) =>
{
captured = t1 + t2;
}, new Context(),
CancellationToken.None,
input1,
input2);

policyResult.Outcome.Should().Be(OutcomeType.Successful);
captured.Should().Be(input1 + input2);
}

[Fact]
public void Should_executeandcapture_user_delegate_with_input_parameter_and_return_type()
{
var policy = Policy.NoOp();

Int16 input1 = 1;
var policyResult = policy.ExecuteAndCapture<Int16, Int64>((context, token, input) => input, new Context(),
CancellationToken.None,
input1);

policyResult.Outcome.Should().Be(OutcomeType.Successful);
policyResult.Result.Should().Be(input1);
}

[Fact]
public void Should_executeandcapture_user_delegate_with_two_input_parameters_and_return_type()
{
var policy = Policy.NoOp();

Int16 input1 = 1;
Int32 input2 = 2;
var policyResult = policy.ExecuteAndCapture<Int16, Int32, Int64>((context, token, t1, t2) => t1 + t2, new Context(),
CancellationToken.None,
input1,
input2);

policyResult.Outcome.Should().Be(OutcomeType.Successful);
policyResult.Result.Should().Be(input1 + input2);
}
}
}
Loading

0 comments on commit 9de173b

Please sign in to comment.