Skip to content

Commit 0d26cdd

Browse files
committed
feat: add allocation-free overloads of Maybe.Map
1 parent b421543 commit 0d26cdd

File tree

14 files changed

+548
-321
lines changed

14 files changed

+548
-321
lines changed
Lines changed: 50 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,50 @@
1-
using System.Threading.Tasks;
2-
using FluentAssertions;
3-
using Xunit;
4-
5-
namespace CSharpFunctionalExtensions.Tests.MaybeTests.Extensions
6-
{
7-
public class MapTests_Task_Left : MaybeTestBase
8-
{
9-
[Fact]
10-
public async Task Map_Task_Left_returns_mapped_value()
11-
{
12-
Maybe<T> maybe = T.Value;
13-
14-
var maybe2 = await maybe.AsTask().Map(ExpectAndReturn(T.Value, T.Value2));
15-
16-
maybe2.HasValue.Should().BeTrue();
17-
maybe2.Value.Should().Be(T.Value2);
18-
}
19-
20-
[Fact]
21-
public async Task Map_Task_Left_returns_no_value_if_initial_maybe_is_null()
22-
{
23-
Maybe<T> maybe = null;
24-
25-
var maybe2 = await maybe.AsTask().Map(ExpectAndReturn(null, T.Value2));
26-
27-
maybe2.HasValue.Should().BeFalse();
28-
}
29-
}
30-
}
1+
using System.Threading.Tasks;
2+
using FluentAssertions;
3+
using Xunit;
4+
5+
namespace CSharpFunctionalExtensions.Tests.MaybeTests.Extensions
6+
{
7+
public class MapTests_Task_Left : MaybeTestBase
8+
{
9+
[Fact]
10+
public async Task Map_Task_Left_returns_mapped_value()
11+
{
12+
Maybe<T> maybe = T.Value;
13+
14+
var maybe2 = await maybe.AsTask().Map(ExpectAndReturn(T.Value, T.Value2));
15+
16+
maybe2.HasValue.Should().BeTrue();
17+
maybe2.Value.Should().Be(T.Value2);
18+
}
19+
20+
[Fact]
21+
public async Task Map_Task_Left_returns_no_value_if_initial_maybe_is_null()
22+
{
23+
Maybe<T> maybe = null;
24+
25+
var maybe2 = await maybe.AsTask().Map(ExpectAndReturn(null, T.Value2));
26+
27+
maybe2.HasValue.Should().BeFalse();
28+
}
29+
30+
[Fact]
31+
public async Task Map_Task_Left_provides_context_to_selector()
32+
{
33+
Maybe<T> maybe = T.Value;
34+
var context = 5;
35+
36+
var maybe2 = await maybe
37+
.AsTask()
38+
.Map(
39+
(value, ctx) =>
40+
{
41+
ctx.Should().Be(context);
42+
return value;
43+
},
44+
context
45+
);
46+
47+
maybe2.HasValue.Should().BeTrue();
48+
}
49+
}
50+
}
Lines changed: 48 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,48 @@
1-
using System.Threading.Tasks;
2-
using FluentAssertions;
3-
using Xunit;
4-
5-
namespace CSharpFunctionalExtensions.Tests.MaybeTests.Extensions
6-
{
7-
public class MapTests_Task_Right : MaybeTestBase
8-
{
9-
[Fact]
10-
public async Task Map_Task_Right_returns_mapped_value()
11-
{
12-
Maybe<T> maybe = T.Value;
13-
14-
var maybe2 = await maybe.Map(ExpectAndReturn_Task(T.Value, T.Value2));
15-
16-
maybe2.HasValue.Should().BeTrue();
17-
maybe2.Value.Should().Be(T.Value2);
18-
}
19-
20-
[Fact]
21-
public async Task Map_Task_Right_returns_no_value_if_initial_maybe_is_null()
22-
{
23-
Maybe<T> maybe = null;
24-
25-
var maybe2 = await maybe.Map(ExpectAndReturn_Task(null, T.Value2));
26-
27-
maybe2.HasValue.Should().BeFalse();
28-
}
29-
}
30-
}
1+
using System.Threading.Tasks;
2+
using FluentAssertions;
3+
using Xunit;
4+
5+
namespace CSharpFunctionalExtensions.Tests.MaybeTests.Extensions
6+
{
7+
public class MapTests_Task_Right : MaybeTestBase
8+
{
9+
[Fact]
10+
public async Task Map_Task_Right_returns_mapped_value()
11+
{
12+
Maybe<T> maybe = T.Value;
13+
14+
var maybe2 = await maybe.Map(ExpectAndReturn_Task(T.Value, T.Value2));
15+
16+
maybe2.HasValue.Should().BeTrue();
17+
maybe2.Value.Should().Be(T.Value2);
18+
}
19+
20+
[Fact]
21+
public async Task Map_Task_Right_returns_no_value_if_initial_maybe_is_null()
22+
{
23+
Maybe<T> maybe = null;
24+
25+
var maybe2 = await maybe.Map(ExpectAndReturn_Task(null, T.Value2));
26+
27+
maybe2.HasValue.Should().BeFalse();
28+
}
29+
30+
[Fact]
31+
public async Task Map_Task_Right_provides_context_to_selector()
32+
{
33+
Maybe<T> maybe = T.Value;
34+
var context = 5;
35+
36+
var maybe2 = await maybe.Map(
37+
(value, ctx) =>
38+
{
39+
ctx.Should().Be(context);
40+
return value.AsTask();
41+
},
42+
context
43+
);
44+
45+
maybe2.HasValue.Should().BeTrue();
46+
}
47+
}
48+
}
Lines changed: 50 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,50 @@
1-
using System.Threading.Tasks;
2-
using FluentAssertions;
3-
using Xunit;
4-
5-
namespace CSharpFunctionalExtensions.Tests.MaybeTests.Extensions
6-
{
7-
public class MapTests_Task : MaybeTestBase
8-
{
9-
[Fact]
10-
public async Task Map_Task_returns_mapped_value()
11-
{
12-
Maybe<T> maybe = T.Value;
13-
14-
var maybe2 = await maybe.AsTask().Map(ExpectAndReturn_Task(T.Value, T.Value2));
15-
16-
maybe2.HasValue.Should().BeTrue();
17-
maybe2.Value.Should().Be(T.Value2);
18-
}
19-
20-
[Fact]
21-
public async Task Map_Task_returns_no_value_if_initial_maybe_is_null()
22-
{
23-
Maybe<T> maybe = null;
24-
25-
var maybe2 = await maybe.AsTask().Map(ExpectAndReturn_Task(null, T.Value2));
26-
27-
maybe2.HasValue.Should().BeFalse();
28-
}
29-
}
30-
}
1+
using System.Threading.Tasks;
2+
using FluentAssertions;
3+
using Xunit;
4+
5+
namespace CSharpFunctionalExtensions.Tests.MaybeTests.Extensions
6+
{
7+
public class MapTests_Task : MaybeTestBase
8+
{
9+
[Fact]
10+
public async Task Map_Task_returns_mapped_value()
11+
{
12+
Maybe<T> maybe = T.Value;
13+
14+
var maybe2 = await maybe.AsTask().Map(ExpectAndReturn_Task(T.Value, T.Value2));
15+
16+
maybe2.HasValue.Should().BeTrue();
17+
maybe2.Value.Should().Be(T.Value2);
18+
}
19+
20+
[Fact]
21+
public async Task Map_Task_returns_no_value_if_initial_maybe_is_null()
22+
{
23+
Maybe<T> maybe = null;
24+
25+
var maybe2 = await maybe.AsTask().Map(ExpectAndReturn_Task(null, T.Value2));
26+
27+
maybe2.HasValue.Should().BeFalse();
28+
}
29+
30+
[Fact]
31+
public async Task Map_Task_provides_context_to_selector()
32+
{
33+
Maybe<T> maybe = T.Value;
34+
var context = 5;
35+
36+
var maybe2 = await maybe
37+
.AsTask()
38+
.Map(
39+
(value, ctx) =>
40+
{
41+
ctx.Should().Be(context);
42+
return value.AsTask();
43+
},
44+
context
45+
);
46+
47+
maybe2.HasValue.Should().BeTrue();
48+
}
49+
}
50+
}
Lines changed: 51 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,51 @@
1-
using System.Threading.Tasks;
2-
using CSharpFunctionalExtensions.ValueTasks;
3-
using FluentAssertions;
4-
using Xunit;
5-
6-
namespace CSharpFunctionalExtensions.Tests.MaybeTests.Extensions
7-
{
8-
public class MapTests_ValueTask_Left : MaybeTestBase
9-
{
10-
[Fact]
11-
public async Task Map_ValueTask_Left_returns_mapped_value()
12-
{
13-
Maybe<T> maybe = T.Value;
14-
15-
var maybe2 = await maybe.AsValueTask().Map(ExpectAndReturn(T.Value, T.Value2));
16-
17-
maybe2.HasValue.Should().BeTrue();
18-
maybe2.Value.Should().Be(T.Value2);
19-
}
20-
21-
[Fact]
22-
public async Task Map_ValueTask_Left_returns_no_value_if_initial_maybe_is_null()
23-
{
24-
Maybe<T> maybe = null;
25-
26-
var maybe2 = await maybe.AsValueTask().Map(ExpectAndReturn(null, T.Value2));
27-
28-
maybe2.HasValue.Should().BeFalse();
29-
}
30-
}
31-
}
1+
using System.Threading.Tasks;
2+
using CSharpFunctionalExtensions.ValueTasks;
3+
using FluentAssertions;
4+
using Xunit;
5+
6+
namespace CSharpFunctionalExtensions.Tests.MaybeTests.Extensions
7+
{
8+
public class MapTests_ValueTask_Left : MaybeTestBase
9+
{
10+
[Fact]
11+
public async Task Map_ValueTask_Left_returns_mapped_value()
12+
{
13+
Maybe<T> maybe = T.Value;
14+
15+
var maybe2 = await maybe.AsValueTask().Map(ExpectAndReturn(T.Value, T.Value2));
16+
17+
maybe2.HasValue.Should().BeTrue();
18+
maybe2.Value.Should().Be(T.Value2);
19+
}
20+
21+
[Fact]
22+
public async Task Map_ValueTask_Left_returns_no_value_if_initial_maybe_is_null()
23+
{
24+
Maybe<T> maybe = null;
25+
26+
var maybe2 = await maybe.AsValueTask().Map(ExpectAndReturn(null, T.Value2));
27+
28+
maybe2.HasValue.Should().BeFalse();
29+
}
30+
31+
[Fact]
32+
public async Task Map_ValueTask_Left_provides_context_to_selector()
33+
{
34+
Maybe<T> maybe = T.Value;
35+
var context = 5;
36+
37+
var maybe2 = await maybe
38+
.AsValueTask()
39+
.Map(
40+
(value, ctx) =>
41+
{
42+
ctx.Should().Be(context);
43+
return value;
44+
},
45+
context
46+
);
47+
48+
maybe2.HasValue.Should().BeTrue();
49+
}
50+
}
51+
}

0 commit comments

Comments
 (0)