Ruby 预期为:0,但实际为:1
我一直在做一项任务,创建一个返回笑脸总数的函数。有效的笑脸看起来像:“:):D;-D:~”,无效的笑脸:“;(:>:}:” 下面我的解决方案抛出以下错误消息“预期为0,但实际为1” 目前,我的解决方案通过了5项基本测试中的4项:Ruby 预期为:0,但实际为:1,ruby,Ruby,我一直在做一项任务,创建一个返回笑脸总数的函数。有效的笑脸看起来像:“:):D;-D:~”,无效的笑脸:“;(:>:}:” 下面我的解决方案抛出以下错误消息“预期为0,但实际为1” 目前,我的解决方案通过了5项基本测试中的4项: Basic tests Test Passed: Value == 0 Test Passed: Value == 4 Test Passed: Value == 2 Test Passed: Value == 1 Expected: 0, instead got:
Basic tests
Test Passed: Value == 0
Test Passed: Value == 4
Test Passed: Value == 2
Test Passed: Value == 1
Expected: 0, instead got: 1
我已经尝试删除参数,但这只在最后一次测试中有效,其余的测试我都失败了。有什么建议吗?谢谢
下面的示例测试:
Test.describe("Basic tests") do
Test.assert_equals(count_smileys([]), 0)
Test.assert_equals(count_smileys([":D",":~)",";~D",":)"]), 4)
Test.assert_equals(count_smileys([":)",":(",":D",":O",":;"]), 2)
Test.assert_equals(count_smileys([";]", ":[", ";*", ":$", ";-D"]), 1)
Test.assert_equals(count_smileys([";", ")", ";*", ":$", "8-D"]), 0)
end
使用数组交集进行比较或检查
您没有显示实际的测试设置,因此我不会对此进行说明。但是,似乎您正在尝试使用的块形式来计算给定数组中的笑脸数。可以说,使用来测量数组交集的大小或检查交集的内容更简单。例如:
SMILEYS = [
":)", ":D", ";-D", ":~)", ";~D", "8~(", ";(", ":>", ":}", ":]",
"8~P", "8-(", "; )", ";-P", ":~P", "~P", ":~P", "~P", "; (", ":-)",
"8~D", "~)", "8D", "~)", "8 )", "; )", "~)", ":-D", " (", ";D",
"8-D", "8-P", ";-D", ": D", ";~D", " ("
]
SMILEYS.&([":D", ":~)", ";~D", ":)"]).size == 4
#=> true
SMILEYS.&([":)", ":(", ":D", ":O", ":;"]).size == 2
#=> true
SMILEYS.&([";]", ":[", ";*", ":$", ";-D"]).size == 1
#=> true
SMILEYS.&([";", ")", ";*", ":$", "8-D"]).size == 0
#=> false
请注意,最后一次比较为false,因为您的笑脸列表中定义了8-D
。具体来说:
SMILEYS.&([";", ")", ";*", ":$", "8-D"])
#=> ["8-D"]
所以期望值应该是
1
,除非8-D
不属于可接受值的数组。如果是这种情况,请将其从包含允许值的变量或常量中删除。您能提供一些示例输入和期望输出吗?刚刚添加到问题中。“8-D”
位于基本数组中,但似乎不应用于测试。使用数组#计数来计算真实匹配项很难调试。使用数组#和(其他数组)。大小
(或#计数,如果您愿意)不那么模糊,也更容易检查IMHO。既然测试数组的最后一个元素“8-D”
包含在您的smiley数组中,为什么最后一个测试应该返回0
交集给出唯一的元素。如果笑脸出现多次,则.count
和&.size
给出不同的结果。
SMILEYS.&([";", ")", ";*", ":$", "8-D"])
#=> ["8-D"]