Skip to content

Commit aad8b03

Browse files
authored
Merge pull request #385 from nuskey8/codex/pr-test-fixture-names
test: name and group fixtures by behavior
2 parents a86ab1f + 2c22259 commit aad8b03

11 files changed

Lines changed: 140 additions & 136 deletions

tests/Lua.Tests/BitwiseLibraryReviewTests.cs renamed to tests/Lua.Tests/BitwiseLibraryTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace Lua.Tests;
44

5-
public class BitwiseLibraryReviewTests
5+
public class BitwiseLibraryTests
66
{
77
static LuaState CreateState()
88
{
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using System.Text;
2+
using Lua.CodeAnalysis.Syntax;
3+
using Lua.CodeAnalysis.Syntax.Nodes;
4+
using Lua.Platforms;
5+
using Lua.Runtime;
6+
using Lua.Standard;
7+
8+
namespace Lua.Tests;
9+
10+
public class CompilerConstantBoundaryTests
11+
{
12+
[Test]
13+
public async Task ConstantBeyondBxUsesLoadKxAndRoundTrips()
14+
{
15+
using var state = LuaState.Create();
16+
var source = new StringBuilder("local x\n");
17+
for (var i = 0; i <= Instruction.MaxArgBx + 1; i++)
18+
source.Append("x=").Append(i).Append('\n');
19+
source.Append("return x");
20+
var closure = state.Load(source.ToString(), "large-constants");
21+
Assert.That(closure.Proto.Code.ToArray().Any(i => i.OpCode == OpCode.LoadKX), Is.True);
22+
Assert.That(
23+
(await state.ExecuteAsync(closure))[0].Read<double>(),
24+
Is.EqualTo(Instruction.MaxArgBx + 1)
25+
);
26+
var restored = state.Load(closure.Proto.ToBytecode(), "large-constants-roundtrip");
27+
Assert.That(
28+
(await state.ExecuteAsync(restored))[0].Read<double>(),
29+
Is.EqualTo(Instruction.MaxArgBx + 1)
30+
);
31+
}
32+
}
Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace Lua.Tests;
99

1010
[TestFixture(LuaStringMode.Utf16)]
1111
[TestFixture(LuaStringMode.Bytes)]
12-
public class CompilerReviewTests(LuaStringMode stringMode)
12+
public class CompilerTests(LuaStringMode stringMode)
1313
{
1414
LuaState CreateState()
1515
{
@@ -127,27 +127,3 @@ public async Task SyntaxDepthFailureRestoresCounter()
127127
Assert.That((await state.DoStringAsync("return 42"))[0].Read<double>(), Is.EqualTo(42));
128128
}
129129
}
130-
131-
public class CompilerConstantBoundaryTests
132-
{
133-
[Test]
134-
public async Task ConstantBeyondBxUsesLoadKxAndRoundTrips()
135-
{
136-
using var state = LuaState.Create();
137-
var source = new StringBuilder("local x\n");
138-
for (var i = 0; i <= Instruction.MaxArgBx + 1; i++)
139-
source.Append("x=").Append(i).Append('\n');
140-
source.Append("return x");
141-
var closure = state.Load(source.ToString(), "large-constants");
142-
Assert.That(closure.Proto.Code.ToArray().Any(i => i.OpCode == OpCode.LoadKX), Is.True);
143-
Assert.That(
144-
(await state.ExecuteAsync(closure))[0].Read<double>(),
145-
Is.EqualTo(Instruction.MaxArgBx + 1)
146-
);
147-
var restored = state.Load(closure.Proto.ToBytecode(), "large-constants-roundtrip");
148-
Assert.That(
149-
(await state.ExecuteAsync(restored))[0].Read<double>(),
150-
Is.EqualTo(Instruction.MaxArgBx + 1)
151-
);
152-
}
153-
}

‎tests/Lua.Tests/ConversionLibraryReviewTests.cs‎

Lines changed: 0 additions & 70 deletions
This file was deleted.
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
using Lua.Standard;
2+
3+
namespace Lua.Tests;
4+
5+
public class FrexpReconstructionTests
6+
{
7+
[Test]
8+
public void FiniteValuesNormalizeAndReconstructBitExactly()
9+
{
10+
var random = new Random(0x52);
11+
for (var i = 0; i < 4096; i++)
12+
{
13+
var bits = random.NextInt64(long.MinValue, long.MaxValue);
14+
if ((i & 1) == 0)
15+
bits &= unchecked((long)0x800fffffffffffff); // Include subnormals.
16+
var input = BitConverter.Int64BitsToDouble(bits);
17+
if (!double.IsFinite(input))
18+
continue;
19+
var (mantissa, exponent) = MathEx.Frexp(input);
20+
if (input == 0)
21+
Assert.That(exponent, Is.Zero);
22+
else
23+
Assert.That(Math.Abs(mantissa), Is.GreaterThanOrEqualTo(0.5).And.LessThan(1));
24+
Assert.That(
25+
BitConverter.DoubleToInt64Bits(Math.ScaleB(mantissa, exponent)),
26+
Is.EqualTo(bits)
27+
);
28+
}
29+
}
30+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using Lua.Runtime;
2+
3+
namespace Lua.Tests;
4+
5+
public class LuaStackCapacityTests
6+
{
7+
[Test]
8+
public void EmptyStackCanGrowAndRejectsOverflowingCapacity()
9+
{
10+
var stack = new LuaStack(0);
11+
stack.Push(42);
12+
Assert.That(stack.Pop().Read<double>(), Is.EqualTo(42));
13+
Assert.Throws<LuaStackOverflowException>(() => stack.EnsureCapacity(int.MaxValue));
14+
Assert.That(stack.Count, Is.Zero);
15+
}
16+
}

tests/Lua.Tests/MathematicsLibraryReviewTests.cs renamed to tests/Lua.Tests/MathematicsLibraryTests.cs

Lines changed: 52 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace Lua.Tests;
44

5-
public class MathematicsLibraryReviewTests
5+
public class MathematicsLibraryTests
66
{
77
static LuaState CreateState()
88
{
@@ -66,31 +66,61 @@ public async Task AngleConversionsAndFrexpPreserveBothZeroSigns()
6666
Assert.That(values[1].Read<double>(), Is.Zero);
6767
}
6868
}
69-
}
7069

71-
public class FrexpReconstructionTests
72-
{
73-
[Test]
74-
public void FiniteValuesNormalizeAndReconstructBitExactly()
70+
[TestCase(-0.0)]
71+
[TestCase(-1d)]
72+
[TestCase(-1.5)]
73+
[TestCase(1e20)]
74+
[TestCase(-1e20)]
75+
[TestCase(double.Epsilon)]
76+
[TestCase(-double.Epsilon)]
77+
[TestCase(double.PositiveInfinity)]
78+
[TestCase(double.NegativeInfinity)]
79+
[TestCase(double.NaN)]
80+
public async Task ModfKeepsDoubleRangeAndSignedFractionalZero(double number)
7581
{
76-
var random = new Random(0x52);
77-
for (var i = 0; i < 4096; i++)
82+
using var state = CreateState();
83+
var values = await state.CallAsync(
84+
state.Environment["math"].Read<LuaTable>()["modf"],
85+
[number]
86+
);
87+
var integral = values[0].Read<double>();
88+
var fraction = values[1].Read<double>();
89+
if (double.IsNaN(number))
7890
{
79-
var bits = random.NextInt64(long.MinValue, long.MaxValue);
80-
if ((i & 1) == 0)
81-
bits &= unchecked((long)0x800fffffffffffff); // Include subnormals.
82-
var input = BitConverter.Int64BitsToDouble(bits);
83-
if (!double.IsFinite(input))
84-
continue;
85-
var (mantissa, exponent) = MathEx.Frexp(input);
86-
if (input == 0)
87-
Assert.That(exponent, Is.Zero);
88-
else
89-
Assert.That(Math.Abs(mantissa), Is.GreaterThanOrEqualTo(0.5).And.LessThan(1));
91+
Assert.That(double.IsNaN(integral) && double.IsNaN(fraction), Is.True);
92+
return;
93+
}
94+
Assert.That(
95+
BitConverter.DoubleToInt64Bits(integral),
96+
Is.EqualTo(BitConverter.DoubleToInt64Bits(Math.Truncate(number)))
97+
);
98+
if (double.IsInfinity(number) || number == Math.Truncate(number))
9099
Assert.That(
91-
BitConverter.DoubleToInt64Bits(Math.ScaleB(mantissa, exponent)),
92-
Is.EqualTo(bits)
100+
BitConverter.DoubleToInt64Bits(fraction),
101+
Is.EqualTo(BitConverter.DoubleToInt64Bits(number) & long.MinValue)
93102
);
94-
}
103+
else
104+
Assert.That(integral + fraction, Is.EqualTo(number));
105+
}
106+
107+
[Test]
108+
public async Task RandomSeedsAreNumericAndRepeatable()
109+
{
110+
using var state = CreateState();
111+
await state.DoStringAsync(
112+
"""
113+
local function sequence(seed)
114+
math.randomseed(seed)
115+
local t={}; for i=1,8 do t[i]=math.random() end
116+
return table.concat(t,',')
117+
end
118+
assert(sequence(1)==sequence(1))
119+
assert(sequence(1)~=sequence(2))
120+
assert(sequence('1')==sequence(1))
121+
assert(sequence(1.5)==sequence(2))
122+
assert(sequence(1+2^32)==sequence(1))
123+
"""
124+
);
95125
}
96126
}

‎tests/Lua.Tests/RuntimeMetamethodFailureTests.cs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@ bool suspend
2626
{
2727
if (suspend)
2828
await Task.Yield();
29-
throw new LuaRuntimeException(context.State, "branch-review-fault");
29+
throw new LuaRuntimeException(context.State, "metamethod-fault");
3030
}
3131
);
3232
state.Environment["value"] = new LuaTable { Metatable = metatable };
3333
var values = await state.DoStringAsync("return pcall(function() " + source + " end)");
3434
Assert.That(values[0].Read<bool>(), Is.False);
35-
Assert.That(values[1].Read<string>(), Does.Contain("branch-review-fault"));
35+
Assert.That(values[1].Read<string>(), Does.Contain("metamethod-fault"));
3636
Assert.That(state.Stack.Count, Is.Zero);
3737
Assert.That(state.CallStackFrameCount, Is.Zero);
3838
Assert.That((await state.DoStringAsync("return 42"))[0].Read<double>(), Is.EqualTo(42));
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ namespace Lua.Tests;
44

55
[TestFixture(LuaStringMode.Utf16)]
66
[TestFixture(LuaStringMode.Bytes)]
7-
public class ScannerReviewTests(LuaStringMode mode)
7+
public class ScannerTokenTests(LuaStringMode mode)
88
{
99
LuaState CreateState() =>
1010
LuaState.Create(
@@ -44,7 +44,7 @@ string expected
4444
[TestCase("'\\256'")]
4545
[TestCase("'\\x0'")]
4646
[TestCase("'\\xGG'")]
47-
public void InvalidQuotedStringsAreStillRejected(string literal)
47+
public void InvalidQuotedStringsAreRejected(string literal)
4848
{
4949
using var state = CreateState();
5050
Assert.Throws<LuaCompileException>(() =>
@@ -109,7 +109,7 @@ public void MalformedNumeralsMatchLua52TokenBoundaries(string expression, string
109109
[TestCase("0X.8P+2", 2)]
110110
[TestCase("000001.25", 1.25)]
111111
[TestCase("0x1p18446744073709551616", 1)]
112-
public async Task ValidNumeralBoundariesAndExponentsStillWork(
112+
public async Task ValidNumeralBoundariesAndExponentsAreAccepted(
113113
string expression,
114114
double expected
115115
)
Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace Lua.Tests;
66

77
[TestFixture(LuaStringMode.Utf16)]
88
[TestFixture(LuaStringMode.Bytes)]
9-
public class TableHelperReviewTests(LuaStringMode mode)
9+
public class TableLibraryTests(LuaStringMode mode)
1010
{
1111
LuaState CreateState()
1212
{
@@ -21,7 +21,7 @@ LuaState CreateState()
2121
[TestCase("table.remove(t,0.5)")]
2222
[TestCase("table.insert(t,0/0,99)")]
2323
[TestCase("table.remove(t,math.huge)")]
24-
public async Task InvalidPositionsAreStillRejected(string operation)
24+
public async Task InvalidPositionsAreRejected(string operation)
2525
{
2626
using var state = CreateState();
2727
var result = await state.DoStringAsync(
@@ -105,14 +105,4 @@ public async Task ExcessiveUnpackRangesAreRejectedWithoutStackGrowth(string rang
105105
Assert.That(state.Stack.Count, Is.Zero);
106106
Assert.That((await state.DoStringAsync("return 42"))[0].Read<double>(), Is.EqualTo(42));
107107
}
108-
109-
[Test]
110-
public void EmptyStackCanGrowAndRejectsOverflowingCapacity()
111-
{
112-
var stack = new LuaStack(0);
113-
stack.Push(42);
114-
Assert.That(stack.Pop().Read<double>(), Is.EqualTo(42));
115-
Assert.Throws<LuaStackOverflowException>(() => stack.EnsureCapacity(int.MaxValue));
116-
Assert.That(stack.Count, Is.Zero);
117-
}
118108
}

0 commit comments

Comments
 (0)