本实验用了vs2015自带的cppunit。
[TestMethod()]
public void IsNumbericTest()
{
string input;
bool expected;
bool actual;
//test1
input = "sd13d";
expected = false;
actual = Program.IsNumberic(input);
Assert.AreEqual(expected, actual);
//test2
input = "123.456";
expected = true;
actual = Program.IsNumberic(input);
Assert.AreEqual(expected, actual);
}
该段代码用来测试字符串是否为数字,用bool类型来表示,是数字返回1,不是返回0.
[TestMethod()]
public void isOperateorsTest()
{
string input;
bool expected;
bool actual;
//test1
input = "2";
expected = false;
actual = Program.isOperateors(input);
Assert.AreEqual(expected, actual);
//test2
input = "+";
expected = true;
actual = Program.isOperateors(input);
Assert.AreEqual(expected, actual);
}
该段代码为判断是否为运算符,给出两个测试输入,一个是,一个不是,用人工预测的expected和事实输出的actual进行比较。
public static int[,] m_priorityTable = new int[,]
{
/*行为入栈运算符,列为栈顶运算符,2表示等于号,1表示大于号,
0表示小于号,-1表示错误的匹配*/
//* '+','-','*','/','(',')','#'*/
/*'+'*/{ 1, 1, 0, 0, 0, 1, 1},
/*'-'*/{ 1, 1, 0, 0, 0, 1, 1},
/*'*'*/{ 1, 1, 1, 1, 0, 1, 1},
/*'/'*/{ 1, 1, 1, 1, 0, 1, 1},
/*'('*/{ 0, 0, 0, 0, 0, 2, -1},
/*')'*/{ 0, 0, 0, 0, -1, 1, 1},
/*'#'*/{ 0, 0, 0, 0, 0, -1, 2},
};
这个是从网上下载的符号优先级表,把它存入二维数组中来实现,行列来比较。
[TestMethod()]
public void IsPriorityTest()
{
int input1;
int input2;
int expected;
int actual;
//test1
input1 = 3;
input2 = 2;
expected = 1;
actual = Program.IsPriority(input1, input2);
Assert.AreEqual(expected, actual);
}
测试符号优先级。
[TestMethod()]
public void IsPositiveIntTest()
{
string input;
bool expected;
bool actual;
//test1
input = "-1";
expected = false;
actual = Program.IsPositiveInt(input);
Assert.AreEqual(expected, actual);
//test1
input = "3";
expected = true;
actual = Program.IsPositiveInt(input);
Assert.AreEqual(expected, actual);
}
测试一个数是否是正负数。
public void SplitExpressTest()
{
string input;
Queue<string> expected;
Queue<string> actual;
//test
input = "(0/2)+4+4";
expected = new Queue<string>();
expected.Enqueue("(");
expected.Enqueue("0");
expected.Enqueue("/");
expected.Enqueue("2");
expected.Enqueue(")");
expected.Enqueue("+");
expected.Enqueue("4");
expected.Enqueue("+");
expected.Enqueue("4");
expected.Enqueue("#");
actual = Program.SplitExpress(input);
CollectionAssert.AreEqual(expected, actual);
}
将表达式分割成一个一个的字符存入队列。
[TestMethod()]
public void InorderToPostorderTest()
{
Queue<string> input = new Queue<string>();
List<string> expected;
List<string> actual;
//test
input.Enqueue("0");
input.Enqueue("-");
input.Enqueue("(");
input.Enqueue("7");
input.Enqueue("/");
input.Enqueue("2");
input.Enqueue(")");
input.Enqueue("+");
input.Enqueue("4");
input.Enqueue("#");
expected = new List<string>() { "0", "7", "2", "/", "-", "4", "+" };
actual = Program.InorderToPostorder(input);
CollectionAssert.AreEqual(expected, actual);
}
测试由中缀表达式转换为后缀表达式是否正确。
[TestMethod()]
public void IsResultTest()
{
List<string> input;
double expected;
double actual;
//test
input = new List<string>() { "5", "2", "/", "3", "*", "8", "-" };
expected = -0.5;
Program.IsResult(input, out actual);
Assert.AreEqual(expected, actual);
}
测试最后表达式的值是否正确。
预测结果:
结对照片:
感悟:
这个过程以李俞寰同学为主导,我在旁边学习。