跳至主要內容

2704. 相等还是不相等


2704. 相等还是不相等open in new window

🟢   🔗 力扣open in new window LeetCodeopen in new window

题目

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 returns true if the two values === each other. If they are not equal, it should throw an error "Not Equal".
  • notToBe(val) accepts another value and returns true 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 函数,用来测试代码是否符合预期。toBenotToBe 就像是测试条件,用于断言两个值是否相等或不等。

  1. 实现 expect 函数
    • 传入的 val 会在内部返回一个对象,这个对象包含两个方法:toBenotToBe
  2. toBe 方法
    • 比较 val 和传入的 val2 是否相等,如果相等则返回 true,否则抛出错误 'Not Equal'
  3. 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"
 */