On Jul 11, 12:57 ¨Βν¬ ΝαττθεΝοσσ Όναττθεχ®ν®®®ΐηναιμ®γονΎ χςοτεΊ > Anyway, here's another test: > > nums = (0...1000).sort_by { rand } > strs = nums.map { |n| symbolify(n) } > > strs.zip(nums).sort_by { rand }.each do |str, num| > res = eval(str) > raise "Not a string!" ¨Βξμεσστς®ισίαΣτςιξη > raise "Invalid chars!" unless str.delete("?*()-").empty? > raise "Decode failed!" unless res == num > end > > puts "Passed!" I've done some translating of these tests into test/unit (and some meta-programming to help me test multiple solutions easily. Here's what the end of my solution file looks like: ### require 'test/unit' class TestSymbolify < Test::Unit::TestCase @test_number = 1 def self.solution_test(module_name, range, test=:delayed_eval_tests) class_eval <<-EOD def test_#{@test_number}_#{module_name.to_s.gsub('::','_')} Object.send(:include, #{module_name}) #{test}(#{range}) end EOD @test_number += 1 end def symbolify_assertions_for(string, integer) assert_kind_of(String, string) assert_match(/\A[?*()-]*\Z/, string) assert_equal(integer, eval(string)) end def cheat_friendly_tests(range) range.each do |i| s = symbolify(i) symbolify_assertions_for(s,i) end end def delayed_eval_tests(range) nums = range.sort_by { rand } strs = nums.map { |n| symbolify(n) } strs.zip(nums).sort_by { rand }.each do |s, i| symbolify_assertions_for(s,i) end end # The actual tests solution_test(Symbolify::Integers, -1000..1000) solution_test(Symbolify::NaturalNumbers, 0..1000) solution_test(Symbolify::Cheating, -1000..1000, :cheat_friendly_tests) end ### It might be a little much... but I *was* having fun. Chris