C#: Add data flow tests for implicit index usage.

This commit is contained in:
Michael Nebel
2025-01-23 11:18:24 +01:00
parent 0430a9ee3f
commit c38ad4acff
2 changed files with 820 additions and 731 deletions

View File

@@ -13,6 +13,8 @@ public class CollectionFlow
public static void SinkElem<T>(T[] ts) => Sink(ts[0]);
public static void SinkLastElem<T>(T[] ts) => Sink(ts[^1]);
public static void SinkListElem<T>(IList<T> list) => Sink(list[0]);
public static void SinkDictValue<T>(IDictionary<int, T> dict) => Sink(dict[0]);
@@ -21,6 +23,8 @@ public class CollectionFlow
public static T First<T>(T[] ts) => ts[0];
public static T Last<T>(T[] ts) => ts[^1];
public static T ListFirst<T>(IList<T> list) => list[0];
public static T DictIndexZero<T>(IDictionary<int, T> dict) => dict[0];
@@ -73,6 +77,15 @@ public class CollectionFlow
Sink(First(c.As)); // no flow
}
public void ArrayInitializerImplicitIndexFlow()
{
var a = new A();
var c = new CollectionFlow() { As = { [^1] = a } };
Sink(c.As[^1]); // flow
SinkLastElem(c.As); // flow
Sink(Last(c.As)); // flow
}
public void ArrayAssignmentFlow()
{
var a = new A();
@@ -93,6 +106,16 @@ public class CollectionFlow
Sink(First(@as)); // no flow
}
public void ArrayAssignmentImplicitIndexFlow()
{
var a = new A();
var @as = new A[1];
@as[^1] = a;
Sink(@as[^1]); // flow
SinkLastElem(@as); // flow
Sink(Last(@as)); // flow
}
public void ListAssignmentFlow()
{
var a = new A();