Skip to content

Commit 3552a41

Browse files
committed
C#: Add test case for static abstract and static virtual interface members.
1 parent dc50b6b commit 3552a41

File tree

3 files changed

+72
-0
lines changed

3 files changed

+72
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
public interface INumber<T> where T : INumber<T>
2+
{
3+
static abstract T operator ++(T other);
4+
5+
static virtual T operator --(T other) => other;
6+
7+
static abstract T Add(T left, T right);
8+
9+
static virtual T Subtract(T left, T right) => left;
10+
11+
static T Zero() => default(T);
12+
}
13+
14+
public class Complex : INumber<Complex>
15+
{
16+
public double Real { get; private set; } = 0.0;
17+
public double Imaginary { get; private set; } = 0.0;
18+
19+
public Complex() { }
20+
21+
public static Complex Zero() => new Complex();
22+
23+
public static Complex operator ++(Complex other) =>
24+
new Complex { Real = other.Real + 1.0, Imaginary = other.Imaginary };
25+
26+
public static Complex operator --(Complex other) =>
27+
new Complex { Real = other.Real - 1.0, Imaginary = other.Imaginary };
28+
29+
public static Complex Add(Complex left, Complex right) =>
30+
new Complex { Real = left.Real + right.Real, Imaginary = left.Imaginary + right.Imaginary };
31+
32+
public static Complex Subtract(Complex left, Complex right) =>
33+
new Complex { Real = left.Real - right.Real, Imaginary = left.Imaginary - right.Imaginary };
34+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
interfacemembers
2+
| INumber<> | StaticInterfaceMembers.cs:3:32:3:33 | ++ | abstract |
3+
| INumber<> | StaticInterfaceMembers.cs:3:32:3:33 | ++ | public |
4+
| INumber<> | StaticInterfaceMembers.cs:3:32:3:33 | ++ | static |
5+
| INumber<> | StaticInterfaceMembers.cs:5:31:5:32 | -- | public |
6+
| INumber<> | StaticInterfaceMembers.cs:5:31:5:32 | -- | static |
7+
| INumber<> | StaticInterfaceMembers.cs:5:31:5:32 | -- | virtual |
8+
| INumber<> | StaticInterfaceMembers.cs:7:23:7:25 | Add | abstract |
9+
| INumber<> | StaticInterfaceMembers.cs:7:23:7:25 | Add | public |
10+
| INumber<> | StaticInterfaceMembers.cs:7:23:7:25 | Add | static |
11+
| INumber<> | StaticInterfaceMembers.cs:9:22:9:29 | Subtract | public |
12+
| INumber<> | StaticInterfaceMembers.cs:9:22:9:29 | Subtract | static |
13+
| INumber<> | StaticInterfaceMembers.cs:9:22:9:29 | Subtract | virtual |
14+
| INumber<> | StaticInterfaceMembers.cs:11:14:11:17 | Zero | public |
15+
| INumber<> | StaticInterfaceMembers.cs:11:14:11:17 | Zero | static |
16+
implements
17+
| StaticInterfaceMembers.cs:23:36:23:37 | ++ | StaticInterfaceMembers.cs:3:32:3:33 | ++ |
18+
| StaticInterfaceMembers.cs:26:36:26:37 | -- | StaticInterfaceMembers.cs:5:31:5:32 | -- |
19+
| StaticInterfaceMembers.cs:29:27:29:29 | Add | StaticInterfaceMembers.cs:7:23:7:25 | Add |
20+
| StaticInterfaceMembers.cs:32:27:32:34 | Subtract | StaticInterfaceMembers.cs:9:22:9:29 | Subtract |
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import csharp
2+
3+
query predicate interfacemembers(string interface, Member m, string modifier) {
4+
exists(Interface i |
5+
i.isUnboundDeclaration() and
6+
i.getFile().getStem() = "StaticInterfaceMembers" and
7+
i.getName() = interface and
8+
m = i.getAMember() and
9+
modifier = m.getAModifier().getName()
10+
)
11+
}
12+
13+
query predicate implements(Overridable o, Virtualizable v) {
14+
v.getFile().getStem() = "StaticInterfaceMembers" and
15+
(v.isVirtual() or v.isAbstract()) and
16+
v.isStatic() and
17+
v.getAnImplementor() = o
18+
}

0 commit comments

Comments
 (0)