-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathOperationsGrouping.cs
69 lines (64 loc) · 2.51 KB
/
OperationsGrouping.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
using Xunit;
using static ExpressionTreeTestObjects.Functions;
namespace ExpressionTreeToString.Tests {
public class OperationsGrouping {
[Theory]
[InlineData("C#", "() => (x + y) * z")]
[InlineData("Visual Basic", "Function() (x + y) * z")]
public void HigherBinaryPrecedence(string language, string expected) {
var expr = IIFE(() => {
var x = 0;
var y = 0;
var z = 0;
return Expr(() => (x + y) * z);
});
Assert.Equal(expected, expr.ToString(language));
}
[Theory]
[InlineData("C#", "() => (x + y).ToString()")]
[InlineData("Visual Basic", "Function() (x + y).ToString")]
public void BinaryPrecedence(string language, string expected) {
var expr = IIFE(() => {
var x = 0;
var y = 0;
return Expr(() => (x + y).ToString());
});
Assert.Equal(expected, expr.ToString(language));
}
[Theory]
[InlineData("C#", "() => ((int)d).ToString()")]
// no need to test VB because conversion operations include parentheses
public void ConversionPrecedence(string language, string expected) {
var expr = IIFE(() => {
var d = 5.2;
return Expr(() => ((int)d).ToString());
});
Assert.Equal(expected, expr.ToString(language));
}
[Theory]
[InlineData("C#", "() => x + (y + z)")]
[InlineData("Visual Basic", "Function() x + (y + z)")]
public void LeftAssociativity(string language, string expected) {
var expr = IIFE(() => {
var x = 0;
var y = 0;
var z = 0;
return Expr(() => x + (y + z));
});
Assert.Equal(expected, expr.ToString(language));
}
[Theory]
[InlineData("C#", "() => (b2 ? b2 : b1) ? b1 : b3")]
// no need to test VB because "simple" operators are all left associative, except for = assignment
// the ones that are not, include parentheses as part of the syntax
public void RightAssociativity(string language, string expected) {
var expr = IIFE(() => {
var b1 = false;
var b2 = false;
var b3 = false;
return Expr(() => (b2 ? b2 : b1) ? b1 : b3);
});
Assert.Equal(expected, expr.ToString(language));
}
}
}