require 'test/unit' require 'controlbot' # Tests the liar's paradox (see subbot.org/essays/liar). # gagentbotd, emobotd, and oppbotd must be started before running this test. class TestControlbot < Test::Unit::TestCase def setup @agent = ControlBot.new name = @agent.send("what is your name?") #@agent.send("#{name}: set delay to 5.0") #@agent.send("#{name}: set sleep to 4.0") end def test_liar @agent.send("gagent: reset graph") @agent.send("emoagent: reset graph") actual = @agent.send('A = "A = false"') expected = /Okay, A = A = false./ assert_match(expected, actual.to_s) actual = @agent.send('Assume A = true ') expected = /Okay, I will assume A = true./ assert_match(expected, actual.to_s) actual = @agent.send('if A = true, then "A = false" = true') expected = /Okay, A = true -> A = false = true./ assert_match(expected, actual.to_s) actual = @agent.send('does "A = false" = true?') expected = /Yes, A = false = true./ assert_match(expected, actual.to_s) actual = @agent.send('if "A = false" = true, then A = false') expected = /Okay, A = false = true -> A = false./ assert_match(expected, actual.to_s) actual = @agent.send('But "A = false" is a contradiction of our assumption that A = true!') expected = /Therefore, A != true./ assert_match(expected, actual.to_s) actual = @agent.send('if A != true, then A = false') expected = /Okay, A != true -> A = false./ assert_match(expected, actual.to_s) actual = @agent.send('forget that A = true') expected = /Okay I have deleted A = true./ assert_match(expected, actual.to_s) actual = @agent.send('Assume A = false') expected = /Okay, I will assume A = false./ assert_match(expected, actual.to_s) actual = @agent.send('if A = false, then "A = false" = false') expected = /Okay, A = false -> A = false = false./ assert_match(expected, actual.to_s) actual = @agent.send('does "A = false" = false?') expected = /Yes, A = false = false./ assert_match(expected, actual.to_s) actual = @agent.send('if "A = false" = false, then A = true') expected = /Okay, A = false = false -> A = true./ assert_match(expected, actual.to_s) actual = @agent.send('does A = true?') expected = /Yes, A = true./ assert_match(expected, actual.to_s) actual = @agent.send('but "A = true" is a contradiction of our assumption that A = false!') expected = /Therefore, A != false./ assert_match(expected, actual.to_s) actual = @agent.send('if A != false, then A = true') expected = /Okay, A != false -> A = true./ assert_match(expected, actual.to_s) actual = @agent.send('does A = true? ') expected = /Yes, A = true./ assert_match(expected, actual.to_s) actual = @agent.send('does A = false?') expected = /Yes, A = false./ assert_match(expected, actual.to_s) end def tear_down @agent.send("gagent: reset graph") @agent.send("emobot: reset graph") end end