2704. 相等还是不相等
2704. 相等还是不相等
题目
Write a function expect
that helps developers test their code. It should take in any value val
and return an object with the following two functions.
toBe(val)
accepts another value and returnstrue
if the two values===
each other. If they are not equal, it should throw an error"Not Equal"
.notToBe(val)
accepts another value and returnstrue
if the two values!==
each other. If they are equal, it should throw an error"Equal"
.
Example 1:
Input: func = () => expect(5).toBe(5)
Output:
Explanation: 5 === 5 so this expression returns true.
Example 2:
Input: func = () => expect(5).toBe(null)
Output:
Explanation: 5 !== null so this expression throw the error "Not Equal".
Example 3:
Input: func = () => expect(5).notToBe(null)
Output:
Explanation: 5 !== null so this expression returns true.
题目大意
请你编写一个名为 expect
的函数,用于帮助开发人员测试他们的代码。它应该接受任何值 val
并返回一个包含以下两个函数的对象。
toBe(val)
接受另一个值并在两个值相等(===
)时返回true
。如果它们不相等,则应抛出错误"Not Equal"
。notToBe(val)
接受另一个值并在两个值不相等(!==
)时返回true
。如果它们相等,则应抛出错误"Equal"
。
示例 1:
输入: func = () => expect(5).toBe(5)
输出:
解释: 5 === 5 因此该表达式返回 true。
示例 2:
输入: func = () => expect(5).toBe(null)
输出:
解释: 5 !== null 因此抛出错误 "Not Equal".
示例 3:
输入: func = () => expect(5).notToBe(null)
输出:
解释: 5 !== null 因此该表达式返回 true.
解题思路
这道题目是对测试框架中的断言功能的模拟,能帮助在单元测试中验证值是否符合预期,常见于像 Jest 这样的测试框架。比如常见的 expect
函数,用来测试代码是否符合预期。toBe
和 notToBe
就像是测试条件,用于断言两个值是否相等或不等。
- 实现
expect
函数:- 传入的
val
会在内部返回一个对象,这个对象包含两个方法:toBe
和notToBe
。
- 传入的
toBe
方法:- 比较
val
和传入的val2
是否相等,如果相等则返回true
,否则抛出错误'Not Equal'
。
- 比较
notToBe
方法:- 比较
val
和传入的val2
是否不相等,如果不相等则返回true
,否则抛出错误'Equal'
。
- 比较
复杂度分析
- 时间复杂度:
O(1)
,因为每个操作都是常数时间的判断操作。 - 空间复杂度:
O(1)
,因为只存储了传入的val
和返回的对象,额外空间开销很小。
代码
/**
* @param {string} val
* @return {Object}
*/
var expect = function (val) {
return {
toBe: (val2) => {
if (val === val2) return true;
throw 'Not Equal';
},
notToBe: (val2) => {
if (val !== val2) return true;
throw 'Equal';
}
};
};
/**
* expect(5).toBe(5); // true
* expect(5).notToBe(5); // throws "Equal"
*/