【发布时间】:2023-03-12 05:31:01
【问题描述】:
作为筛选面试的一部分,我收到了以下问题:
编写一个函数,该函数接收三角形边长的三个整数输入,并返回四个值之一以确定三角形类型(1=scalene,2=isosceles,3=equilateral,4=error)。假设另一个开发人员对该函数进行了编码,则为该函数生成测试用例。
我的回答是:
#define ERROR 4
#define EQUILATERAL 3
#define ISOSCELES 2
#define SCALENE 1
int detemineTriangle(int x, int y, int z)
{
if((x<=0) || (y<=0) || (z<=0))
return ERROR;
if((x==y) || (x==z) || (y==z))
{
if((x==y) && (y==z))
return EQUILATERAL;
else
return ISOSCELES;
}
return SCALENE;
}
测试用例:
detemineTriangle (0,0,0); //error
detemineTriangle (2,2,2); //equilateral
detemineTriangle (3,3,1); //isosceles
detemineTriangle (1,3,3); //isosceles
detemineTriangle (3,1,3); //isosceles
detemineTriangle (1,2,3); //scalene
detemineTriangle (-1,2,3); //error scalene
detemineTriangle (1,-2,3); //error scalene
detemineTriangle (1,2,-3); //error scalene
detemineTriangle (-2,-2,-2); //error equilateral
detemineTriangle (-2,5,-2); //error isosceles
detemineTriangle (-2,-2,5); //error isosceles
detemineTriangle (5,-2,-2); //error isosceles
//looking for overflows/underflows
detemineTriangle (INT_MAX,INT_MAX,INT_MAX);
detemineTriangle (INT_MAX,1,1);
detemineTriangle (1,INT_MAX,1);
detemineTriangle (1,1,INT_MAX);
detemineTriangle (-INT_MAX,-INT_MAX,-INT_MAX);
detemineTriangle (-INT_MAX,1,1);
detemineTriangle (1,-INT_MAX,1);
detemineTriangle (1,1,-INT_MAX);
//boundary tests
detemineTriangle(1,1,1)
detemineTriangle(0,0,0)
detemineTriangle(-1,-1,-1)
detemineTriangle (0,10,10);
detemineTriangle (1,10,10);
detemineTriangle (-1,10,10);
detemineTriangle (10,0,10);
detemineTriangle (10,1,10);
detemineTriangle (10,-1,10);
detemineTriangle (10,10,0);
detemineTriangle (10,10,1);
detemineTriangle (10,10,-1);
//checking thread safety
a =detemineTriangle (10,10,10);
b =detemineTriangle (10,10,10);
//a==b function does not appear to depend on global or static variables
你觉得这个答案有什么问题吗? 提前致谢。
【问题讨论】:
-
在我看来,您没有测试三个边的长度是否有效。例如,你不能有一个三边分别为
1、1和1000的三角形。一般规则应该是longest_size < shortest_side + median_side。 -
我想说@elnigno 有关键点,但不要假设人们不会因为他们的“一般东西”而被拒绝。招聘是一项奇怪的业务。将“最佳”编码实践与此类答案一起应用总是一个很好的提示 - 例如 always 支持 if 并且只有一个返回。你永远不知道审稿人最近是否被一个不带支撑的多行宏咬了......
-
首先排序长度(这样
x >= y && y >= z保持)将简化检查。例如。ERROR将被返回 ifz <= 0 || x -y >= z,EQUILATERALifx == z
标签: c++ c testing integration-testing