Format numbers in output

This commit is contained in:
Andrew Cooper
2022-03-01 07:39:16 +11:00
parent 8d13695e72
commit 08f0ab0dc4
3 changed files with 104 additions and 4 deletions

View File

@@ -0,0 +1,79 @@
using System;
using System.IO;
using FluentAssertions;
using Xunit;
namespace Games.Common.IO.TextIOTests;
public class NumberFormatTests
{
[Theory]
[MemberData(nameof(WriteFloatTestCases))]
public void Write_Float_FormatsNumberSameAsBasic(float value, string basicString)
{
var outputWriter = new StringWriter();
var io = new TextIO(new StringReader(""), outputWriter);
io.Write(value);
outputWriter.ToString().Should().BeEquivalentTo(basicString);
}
[Theory]
[MemberData(nameof(WriteFloatTestCases))]
public void WriteLine_Float_FormatsNumberSameAsBasic(float value, string basicString)
{
var outputWriter = new StringWriter();
var io = new TextIO(new StringReader(""), outputWriter);
io.WriteLine(value);
outputWriter.ToString().Should().BeEquivalentTo(basicString + Environment.NewLine);
}
public static TheoryData<float, string> WriteFloatTestCases()
=> new()
{
{ 1000F, " 1000 " },
{ 3.1415927F, " 3.1415927 " },
{ 1F, " 1 " },
{ 0F, " 0 " },
{ -1F, "-1 " },
{ -3.1415927F, "-3.1415927 " },
{ -1000F, "-1000 " },
};
[Theory]
[MemberData(nameof(WriteIntTestCases))]
public void Write_Int_FormatsNumberSameAsBasic(int value, string basicString)
{
var outputWriter = new StringWriter();
var io = new TextIO(new StringReader(""), outputWriter);
io.Write(value);
outputWriter.ToString().Should().BeEquivalentTo(basicString);
}
[Theory]
[MemberData(nameof(WriteIntTestCases))]
public void WriteLine_Int_FormatsNumberSameAsBasic(int value, string basicString)
{
var outputWriter = new StringWriter();
var io = new TextIO(new StringReader(""), outputWriter);
io.WriteLine(value);
outputWriter.ToString().Should().BeEquivalentTo(basicString + Environment.NewLine);
}
public static TheoryData<int, string> WriteIntTestCases()
=> new()
{
{ 1000, " 1000 " },
{ 1, " 1 " },
{ 0, " 0 " },
{ -1, "-1 " },
{ -1000, "-1000 " },
};
}

View File

@@ -1,3 +1,5 @@
using System;
namespace Games.Common.IO;
/// <summary>
@@ -65,4 +67,17 @@ public interface IReadWrite
/// </summary>
/// <param name="message">The <see cref="string" /> to be written.</param>
void WriteLine(string message);
/// <summary>
/// Writes a <see cref="float" /> to output, formatted per the BASIC interpreter, with leading and trailing spaces.
/// </summary>
/// <param name="value">The <see cref="float" /> to be written.</param>
void Write(float value);
/// <summary>
/// Writes a <see cref="float" /> to output, formatted per the BASIC interpreter, with leading and trailing spaces,
/// followed by a new-line.
/// </summary>
/// <param name="value">The <see cref="float" /> to be written.</param>
void WriteLine(float value);
}

View File

@@ -67,10 +67,6 @@ public class TextIO : IReadWrite
nameof(quantity),
$"'{nameof(quantity)}' must be greater than zero.");
public void Write(string value) => _output.Write(value);
public void WriteLine(string value) => _output.WriteLine(value);
public string ReadString(string prompt)
{
return ReadStrings(prompt, 1)[0];
@@ -90,4 +86,14 @@ public class TextIO : IReadWrite
Write(prompt + "? ");
return _input.ReadLine();
}
public void Write(string value) => _output.Write(value);
public void WriteLine(string value) => _output.WriteLine(value);
public void Write(float value) => _output.Write(GetString(value));
public void WriteLine(float value) => _output.WriteLine(GetString(value));
private string GetString(float value) => value < 0 ? $"{value} " : $" {value} ";
}