From cd8b31b733fe8dad71a25a594f0e3f70ff82b693 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20H=C3=A4nel?= Date: Mon, 30 Mar 2026 18:27:50 +0200 Subject: [PATCH 1/4] Fix bank account ineffective concurrency test --- exercises/practice/bank-account/.meta/Generator.tpl | 6 +++--- exercises/practice/bank-account/BankAccountTests.cs | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/exercises/practice/bank-account/.meta/Generator.tpl b/exercises/practice/bank-account/.meta/Generator.tpl index 95cb3d697..299beab7b 100644 --- a/exercises/practice/bank-account/.meta/Generator.tpl +++ b/exercises/practice/bank-account/.meta/Generator.tpl @@ -33,9 +33,9 @@ public class {{ testClass }} Assert.Equal({{ test.expected }}m, account.{{ op | to_call }}); {{ end -}} {{- else if op.operation == "concurrent" }} + var tasks = new List(); for (int i = 0; i < 500; i++) { - var tasks = new List(); tasks.Add(Task.Factory.StartNew(() => { for (int j = 0; j < 100; j++) @@ -44,9 +44,9 @@ public class {{ testClass }} account.{{ nested_op | to_call }}; {{- end -}} } - })); - await Task.WhenAll(tasks.ToArray()); + }, TestContext.Current.CancellationToken)); } + await Task.WhenAll(tasks.ToArray()); {{- else }} account.{{ op | to_call }}; {{- end -}} diff --git a/exercises/practice/bank-account/BankAccountTests.cs b/exercises/practice/bank-account/BankAccountTests.cs index 50d6b66cc..88cb9b987 100644 --- a/exercises/practice/bank-account/BankAccountTests.cs +++ b/exercises/practice/bank-account/BankAccountTests.cs @@ -152,9 +152,9 @@ public async Task Can_handle_concurrent_transactions() { var account = new BankAccount(); account.Open(); + var tasks = new List(); for (int i = 0; i < 500; i++) { - var tasks = new List(); tasks.Add(Task.Factory.StartNew(() => { for (int j = 0; j < 100; j++) @@ -163,8 +163,8 @@ public async Task Can_handle_concurrent_transactions() account.Withdraw(1m); } }, TestContext.Current.CancellationToken)); - await Task.WhenAll(tasks.ToArray()); } + await Task.WhenAll(tasks.ToArray()); Assert.Equal(0m, account.Balance); } } From 9b0fcc01c3720a6e0941e979f4fc46fbc1d31667 Mon Sep 17 00:00:00 2001 From: Erik Schierboom Date: Wed, 1 Apr 2026 08:46:15 +0200 Subject: [PATCH 2/4] Fix path to configlet --- bin/update-exercises.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/update-exercises.ps1 b/bin/update-exercises.ps1 index 78009459d..ea977064c 100644 --- a/bin/update-exercises.ps1 +++ b/bin/update-exercises.ps1 @@ -24,9 +24,9 @@ $PSNativeCommandUseErrorActionPreference = $true & bin/fetch-configlet if ($Exercise) { - & configlet sync --docs --metadata --filepaths --update --yes --exercise $Exercise + & bin/configlet sync --docs --metadata --filepaths --update --yes --exercise $Exercise & dotnet run --project generators update --exercise $Exercise } else { - & configlet sync --docs --metadata --filepaths --update --yes + & bin/configlet sync --docs --metadata --filepaths --update --yes & dotnet run --project generators update } From e3f008fd461fb614db884e329b44c0962caaeabd Mon Sep 17 00:00:00 2001 From: Erik Schierboom Date: Wed, 1 Apr 2026 08:48:01 +0200 Subject: [PATCH 3/4] Upgrade Scriban package --- generators/Generators.csproj | 2 +- generators/packages.lock.json | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/generators/Generators.csproj b/generators/Generators.csproj index a7a792ecb..cfb9d3fa3 100644 --- a/generators/Generators.csproj +++ b/generators/Generators.csproj @@ -14,7 +14,7 @@ - + diff --git a/generators/packages.lock.json b/generators/packages.lock.json index 5fc5350d3..97c4f02ba 100644 --- a/generators/packages.lock.json +++ b/generators/packages.lock.json @@ -39,9 +39,9 @@ }, "Scriban": { "type": "Direct", - "requested": "[6.5.5, )", - "resolved": "6.5.5", - "contentHash": "TxsmDVQ9agPQaY+SvdTO+zntGpJOnL1QaO4dzACfc6gEKRYhoMpzCCFuVixEZXet291sRnjyym6lB69Cr/EXPQ==" + "requested": "[7.0.6, )", + "resolved": "7.0.6", + "contentHash": "bOtHyk30sjl0y3+KYImIJv0ETZYLuFFJvlBF2ks2YLNtydhJqxRTGe4WaBDvg/3VRhhI6uf+qVfixuFROsOi+w==" }, "Tomlyn": { "type": "Direct", @@ -56,8 +56,8 @@ }, "Microsoft.CodeAnalysis.Analyzers": { "type": "Transitive", - "resolved": "5.3.0-2.final", - "contentHash": "VzdevMuvWpgH5s7bj+Y8CHaAPvJvzdRjBL/f2bzCEugZIOFOCZfblsbHwbCJ3hUFvvrbbcLcTrLt6HIj3bngAw==" + "resolved": "5.3.0-2.25625.1", + "contentHash": "4Yhh2fnu3G+J0J1lDc8WZVgMjgbynSeTfkl5IFJMFrmiIO0sc7Tjx+f3sFVV8Sd35PrIUWfof0RWc3lAMl7Azg==" }, "Microsoft.CodeAnalysis.Common": { "type": "Transitive", From eb171adfd8ade7f7c2668f10ab9ae65f640af821 Mon Sep 17 00:00:00 2001 From: Erik Schierboom Date: Wed, 1 Apr 2026 08:48:06 +0200 Subject: [PATCH 4/4] Fix warning --- generators/Templates.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generators/Templates.cs b/generators/Templates.cs index 17753eaf0..81ea8a936 100644 --- a/generators/Templates.cs +++ b/generators/Templates.cs @@ -18,7 +18,7 @@ public static string RenderTestsCode(CanonicalData canonicalData) scriptObject.Import("enum", new Func((text, enumType) => $"{enumType.Pascalize()}.{text.Pascalize()}")); scriptObject.Import("property", new Func((testCases, name) => - new ScriptArray(testCases.Cast().Where(testCase => testCase["property"].ToString() == name)))); + new ScriptArray(testCases.Cast().Where(testCase => testCase["property"]?.ToString() == name)))); scriptObject.Import(TemplateData.ForCanonicalData(canonicalData)); var context = new TemplateContext();