public static IEnumerable<object[]> Multiply_TestData()
{
yield return new object[] { 0, 0, 0, 0 }; // 0 * 0 = 0
yield return new object[] { 0, 0, RandomPositiveDouble(), RandomPositivePhase() }; // 0 * x = 0
yield return new object[] { RandomPositiveDouble(), RandomPositivePhase(), 0, 0, }; // x * 0 = 0
yield return new object[] { 1, 0, 1, 0 }; // 1 * 1 = 0
yield return new object[] { 1, 0, RandomPositiveDouble(), RandomPositivePhase() }; // 1 * x = x
yield return new object[] { RandomPositiveDouble(), RandomPositivePhase(), 1, 0 }; // x * 1 = x
yield return new object[] { 0, 1, 0, 1 }; // i * x
yield return new object[] { 0, 1, RandomPositiveDouble(), RandomPositivePhase() }; // i * x
yield return new object[] { RandomPositiveDouble(), RandomPositivePhase(), 0, 1 }; // x * i
// Boundary values
yield return new object[] { double.MaxValue, double.MaxValue, SmallRandomPositiveDouble(), SmallRandomPositiveDouble() };
yield return new object[] { double.MinValue, double.MinValue, SmallRandomPositiveDouble(), SmallRandomPositiveDouble() };
}