Skip to content

Commit

Permalink
feat: Table 13.01 Code listings and tests written
Browse files Browse the repository at this point in the history
  • Loading branch information
A-Tanner committed Sep 12, 2023
1 parent 290a4dd commit 07150a3
Show file tree
Hide file tree
Showing 11 changed files with 192 additions and 51 deletions.
47 changes: 0 additions & 47 deletions src/Chapter13.Tests/Table03.03.Tests.cs

This file was deleted.

28 changes: 28 additions & 0 deletions src/Chapter13.Tests/Table13.01.Tests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
using AddisonWesley.Michaelis.EssentialCSharp.Shared.Tests;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace AddisonWesley.Michaelis.EssentialCSharp.Chapter13.Table13_01.Tests;

[TestClass]
public class LambdaHighlightTests
{
public TestContext TestContext { get; set; } = null!; // Set by MSTest;

[TestMethod]
/* 1. */ [DataRow(".a", "CS0023")]
/* 2. */ [DataRow(".b", "CS0837")]
/* 3. */ [DataRow(".c", "CS0029", "CS1662")]
/* 5. */ [DataRow(".e", "CS8070", "CS1632")]
/* 6. */ [DataRow(".f", "CS0103")]
/* 7. */ [DataRow(".g", "CS0165")]
/* 8. */ [DataRow(".h", "CS0165")]
public async Task ParseAndCompile(string fileNameSuffix, params string[] errorIds)
{
await CompilerAssert.CompileAsync($"Table13.01{fileNameSuffix}.LambdaExpressionNotesAndExamples.cs", errorIds);
}

[TestMethod]
public void PatternMatchingOnTypeTest(){
LambdaExpressionNotesAndExamples.PatternMatchingOnType();
}
}
2 changes: 1 addition & 1 deletion src/Chapter13/Chapter13.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ChapterNumber>13</ChapterNumber>
<LangVersion>9.0</LangVersion>
<LangVersion>11.0</LangVersion>
</PropertyGroup>
<Import Project="..\Chapter.props" />
<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,16 @@

namespace AddisonWesley.Michaelis.EssentialCSharp.Chapter13.Table13_01;

public partial class CommonArayCodingErrors
public partial class LambdaExpressionNotesAndExamples
{
// 1.
static public void SquareBracketsOnVariableRatherThanType()
static public void AccessingMemberMethods()
{
//#if COMPILEERROR
#if !NET6_0_OR_GREATER
var v = (int x) => x;
//ERROR: Operator "." cannot be applied to
//operand of type "lambda expression"
string s = ((int x ) =>).ToString();
#endif
//#endif // COMPILEERROR
}
Expand Down
20 changes: 20 additions & 0 deletions src/Chapter13/Table13.01.b.LambdaExpressionNotesAndExamples.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// Justification: Only snippets of source code shown for elucidation.
#pragma warning disable CS0168 // Variable is declared but never used

namespace AddisonWesley.Michaelis.EssentialCSharp.Chapter13.Table13_01;

public partial class LambdaExpressionNotesAndExamples
{
// 2.
static public void PatternMatchingOnType()
{
//#if COMPILEERROR
#if !NET6_0_OR_GREATER
//ERROR: The first operand of an "is" or "as"
//operator may not be a lambda expression or
//anonymous method
bool b = ((int x) => x) is Func<int,int>;
#endif
//#endif // COMPILEERROR
}
}
19 changes: 19 additions & 0 deletions src/Chapter13/Table13.01.c.LambdaExpressionNotesAndExamples.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// Justification: Only snippets of source code shown for elucidation.
#pragma warning disable CS0168 // Variable is declared but never used

namespace AddisonWesley.Michaelis.EssentialCSharp.Chapter13.Table13_01;

public partial class LambdaExpressionNotesAndExamples
{
// 3.
static public void ConvertingToImproperDelegate()
{
//#if COMPILEERROR
#if !NET6_0_OR_GREATER
//ERROR: Lambda expression is not compatible
//with Func<int, bool> type
Func<int, bool> f = (int x) => x;
#endif
//#endif // COMPILEERROR
}
}
20 changes: 20 additions & 0 deletions src/Chapter13/Table13.01.d.LambdaExpressionNotesAndExamples.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// Justification: Only snippets of source code shown for elucidation.
#pragma warning disable CS0168 // Variable is declared but never used

namespace AddisonWesley.Michaelis.EssentialCSharp.Chapter13.Table13_01;

public partial class LambdaExpressionNotesAndExamples
{
// 4.
static public void TypeInferenceOfExpression()
{
//#if COMPILEERROR
#if !NET6_0_OR_GREATER
//ERROR: You cannot assign lambda
//expression to an implicitly
//typed local variable prior C#10
var v = (int x) => x;
#endif
//#endif // COMPILEERROR
}
}
30 changes: 30 additions & 0 deletions src/Chapter13/Table13.01.e.LambdaExpressionNotesAndExamples.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Justification: Only snippets of source code shown for elucidation.
#pragma warning disable CS0168 // Variable is declared but never used

namespace AddisonWesley.Michaelis.EssentialCSharp.Chapter13.Table13_01;

public partial class LambdaExpressionNotesAndExamples
{
// 5.
static public void JumpStatementsToOutOfScopeDestinations()
{
//#if COMPILEERROR
#if !NET6_0_OR_GREATER
//ERROR: Control cannot leave the body of an
//anonymous method or lambda expression
string[] args = {"/File", "fileThatMostCertainlyDoesNotExist"};
Func<string> f;
switch(args[0])
{
case "/File":
f = () =>
{
if (!File.Exists(args[1]))
break;
return args[1];
};
}
#endif
//#endif // COMPILEERROR
}
}
21 changes: 21 additions & 0 deletions src/Chapter13/Table13.01.f.LambdaExpressionNotesAndExamples.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// Justification: Only snippets of source code shown for elucidation.
#pragma warning disable CS0168 // Variable is declared but never used

namespace AddisonWesley.Michaelis.EssentialCSharp.Chapter13.Table13_01;

public partial class LambdaExpressionNotesAndExamples
{
// 6.
static public void AccessingParametersAndLocalsOutOfBody()
{
//#if COMPILEERROR
#if !NET6_0_OR_GREATER
//ERROR: The name "first" does not
//exist in the current context
Func <int, int, bool> expression =
(first, secont) => first > second;
first++;
#endif
//#endif // COMPILEERROR
}
}
24 changes: 24 additions & 0 deletions src/Chapter13/Table13.01.g.LambdaExpressionNotesAndExamples.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Justification: Only snippets of source code shown for elucidation.
#pragma warning disable CS0168 // Variable is declared but never used

namespace AddisonWesley.Michaelis.EssentialCSharp.Chapter13.Table13_01;

public partial class LambdaExpressionNotesAndExamples
{
// 7.
static public void UsingOutParameters()
{
//#if COMPILEERROR
#if !NET6_0_OR_GREATER
int number;
Func <string, bool> f =
text => int.TryParse(text, out number);
if (f("1"))
{
//ERROR: Use of unassigned local variable
System.Console.Write(number)
}
#endif
//#endif // COMPILEERROR
}
}
24 changes: 24 additions & 0 deletions src/Chapter13/Table13.01.h.LambdaExpressionNotesAndExamples.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Justification: Only snippets of source code shown for elucidation.
#pragma warning disable CS0168 // Variable is declared but never used

namespace AddisonWesley.Michaelis.EssentialCSharp.Chapter13.Table13_01;

public partial class LambdaExpressionNotesAndExamples
{
// 8.
static public void CompilerWillNotDetectInLambdaInitialization()
{
//#if COMPILEERROR
#if !NET6_0_OR_GREATER
int number;
Func<int, bool> isFortyTwo =
x => 42 == (number = x);
if(isFortyTwo(42))
{
//ERROR: Use of unassigned local variable
System.Console.Write(number);
}
#endif
//#endif // COMPILEERROR
}
}

0 comments on commit 07150a3

Please sign in to comment.