require 'test/unit' require 'spec_id/aa_freqs' class FastaTest < Test::Unit::TestCase def initialize(arg) super(arg) @tfiles = File.dirname(__FILE__) + '/tfiles/' @sf = @tfiles + "small.fasta" end def test_basic obj = SpecID::AAFreqs.new(@sf) expect = {:I=>0.0628918621937819, :S=>0.0539719475147049, :D=>0.0526145691939758, :Z=>0.0, :L=>0.102772929998061, :T=>0.0491888048607071, :E=>0.0609527503070261, :O=>0.0, :C=>0.0157714433456144, :K=>0.0471850559110594, :U=>0.0, :Q=>0.0382651412319824, :W=>0.0137030573330748, :A=>0.101997285243359, :M=>0.0294745006786892, :J=>0.0, :G=>0.0811195139292871, :Y=>0.0254670027793937, :X=>0.0, :F=>0.0418201796910348, :R=>0.0546829552065154, :V=>0.0702604873634542, :H=>0.0213302307543145, :B=>0.0, :N=>0.03471010277293, :P=>0.0418201796910348} aaf = obj.aafreqs expect.each do |k,v| assert(aaf.key?(k)) assert_in_delta(v, aaf[k], 0.00000001, "freqs match up") end sum = 0.0 aaf.values.each do |v| sum += v end assert_in_delta(1.0, sum, 0.0000000000001, "all freqs add to 1") end def test_probability_of_length_table # p SpecID::AAFreqs.probability_of_length_table(0.01, 4) assert_equal_arrs_in_delta([0.0, 0.01, 0.0199, 0.029701, 0.0394039900000001], SpecID::AAFreqs.probability_of_length_table(0.01, 4), 0.000000001) assert_equal_arrs_in_delta([0.0, 0.2, 0.36, 0.488, 0.5904], SpecID::AAFreqs.probability_of_length_table(0.2, 4), 0.000000001) end def test_actual_and_expected_number fobj = Fasta.new.read_file(@sf) obj = SpecID::AAFreqs.new obj.aafreqs = obj.calculate_frequencies(fobj) peptide_aaseqs = fobj.prots.map do |prot| prot.aaseq[0..12] end assert_equal(50, peptide_aaseqs.size, 'sanity check') (ac,ex) = obj.actual_and_expected_number(peptide_aaseqs, :C, 1) assert_equal(9, ac) assert_in_delta( 9.33530631238985, ex, 0.0000000001) end private def assert_equal_arrs_in_delta(expect, actual, delta) expect.each_with_index do |v,i| assert_in_delta(v, actual[i], delta) end end end