test/unit/bio/test_location.rb in bio-1.2.1 vs test/unit/bio/test_location.rb in bio-1.3.0
- old
+ new
@@ -1,39 +1,599 @@
#
-# test/unit/bio/test_location.rb - Unit test for Bio::Location
+# test/unit/bio/test_location.rb - Unit test for Bio::Location and Bio::Locations
#
-# Copyright:: Copyright (C) 2004
-# Moses Hohman <mmhohman@northwestern.edu>
+# Copyright:: Copyright (C) 2004 Moses Hohman <mmhohman@northwestern.edu>
+# 2008 Naohisa Goto <ng@bioruby.org>
# License:: The Ruby License
#
-# $Id: test_location.rb,v 1.4 2007/04/05 23:35:42 trevor Exp $
+# $Id:$
#
require 'pathname'
-libpath = Pathname.new(File.join(File.dirname(__FILE__), ['..'] * 2, 'lib')).cleanpath.to_s
+libpath = Pathname.new(File.join(File.dirname(__FILE__), ['..'] * 3, 'lib')).cleanpath.to_s
$:.unshift(libpath) unless $:.include?(libpath)
require 'test/unit'
require 'bio/location'
module Bio
- class TestLocation < Test::Unit::TestCase
+ class TestLocations < Test::Unit::TestCase
+ def test_should_not_modify_argument
+ assert_nothing_raised {
+ Locations.new(' 123..456 '.freeze)
+ }
+ end
+
+ def test_normal
+ loc = Locations.new('123..456')
+ assert_equal([123, 456], loc.span)
+ assert_equal(123..456, loc.range)
+ assert_equal(1, loc[0].strand)
+ end
+
def test_hat
loc = Locations.new('754^755')
assert_equal([754, 755], loc.span, "span wrong")
assert_equal(754..755, loc.range, "range wrong")
assert_equal(1, loc[0].strand, "strand wrong")
+ assert_equal(true, loc[0].carat, "carat wrong")
end
def test_complement
loc = Locations.new('complement(53^54)')
assert_equal([53, 54], loc.span, "span wrong")
assert_equal(53..54, loc.range, "range wrong")
assert_equal(-1, loc[0].strand, "strand wrong")
+ assert_equal(true, loc[0].carat, "carat wrong")
end
def test_replace_single_base
loc = Locations.new('replace(4792^4793,"a")')
assert_equal("a", loc[0].sequence)
end
+ end
+
+ class TestLocationsRoundTrip < Test::Unit::TestCase
+
+ class TestLoc
+ def initialize(*arg)
+ @xref_id = nil
+ @lt = nil
+ @from = nil
+ @gt = nil
+ @to = nil
+ @carat = nil
+ @sequence = nil
+ @strand = 1
+ arg.each do |x|
+ case x
+ when :complement
+ @strand = -1
+ when '<'
+ @lt = true
+ when '>'
+ @gt = true
+ when '..'
+ # do nothing
+ when '^'
+ @carat = true
+ when Integer
+ @from ||= x
+ @to = x
+ when Hash
+ @sequence ||= x[:sequence]
+ else
+ @xref_id ||= x
+ end
+ end
+ end
+
+ def to_location
+ loc = Bio::Location.new
+ loc.from = @from
+ loc.to = @to
+ loc.gt = @gt
+ loc.lt = @lt
+ loc.strand = @strand
+ loc.xref_id = @xref_id
+ loc.sequence = @sequence
+ loc.carat = @carat
+ loc
+ end
+ end #class TestLoc
+
+ TestData =
+ [
+ # (C) n^m
+ #
+ # * [AB015179] 754^755
+ [ 'AB015179', '754^755',
+ nil,
+ TestLoc.new(754, '^', 755)
+ ],
+
+ # * [AF179299] complement(53^54)
+ # (see below)
+
+ # * [CELXOL1ES] replace(4480^4481,"")
+ # (see below)
+
+ # * [ECOUW87] replace(4792^4793,"a")
+ # (see below)
+
+ # * [APLPCII] replace(1905^1906,"acaaagacaccgccctacgcc")
+ # (see below)
+
+ # (n.m) and one-of() are not supported.
+ # (D) (n.m)
+ #
+ # * [HACSODA] 157..(800.806)
+ # * [HALSODB] (67.68)..(699.703)
+ # * [AP001918] (45934.45974)..46135
+ # * [BACSPOJ] <180..(731.761)
+ # * [BBU17998] (88.89)..>1122
+ # * [ECHTGA] complement((1700.1708)..(1715.1721))
+ # * [ECPAP17] complement(<22..(255.275))
+ # * [LPATOVGNS] complement((64.74)..1525)
+ # * [PIP404CG] join((8298.8300)..10206,1..855)
+ # * [BOVMHDQBY4] join(M30006.1:(392.467)..575,M30005.1:415..681,M30004.1:129..410,M30004.1:907..1017,521..534)
+ # * [HUMMIC2A] replace((651.655)..(651.655),"")
+ # * [HUMSOD102] order(L44135.1:(454.445)..>538,<1..181)
+ #
+ # (n.m) and one-of() are not supported.
+ # (E) one-of
+ #
+ # * [ECU17136] one-of(898,900)..983
+ # * [CELCYT1A] one-of(5971..6308,5971..6309)
+ # * [DMU17742] 8050..one-of(10731,10758,10905,11242)
+ # * [PFU27807] one-of(623,627,632)..one-of(628,633,637)
+ # * [BTBAINH1] one-of(845,953,963,1078,1104)..1354
+ # * [ATU39449] join(one-of(969..1094,970..1094,995..1094,1018..1094),1518..1587,1726..2119,2220..2833,2945..3215)
+ #
+
+ # (F) join, order, group
+ #
+ # * [AB037374S2] join(AB037374.1:1..177,1..807)
+ [ 'AB037374S2', 'join(AB037374.1:1..177,1..807)',
+ nil,
+ TestLoc.new('AB037374.1', 1, 177),
+ TestLoc.new(1, 807)
+ ],
+
+ # * [AP000001] join(complement(1..61),complement(AP000007.1:252907..253505))
+ # (see below)
+
+ # * [ASNOS11] join(AF130124.1:<2563..2964,AF130125.1:21..157,AF130126.1:12..174,AF130127.1:21..112,AF130128.1:21..162,AF130128.1:281..595,AF130128.1:661..842,AF130128.1:916..1030,AF130129.1:21..115,AF130130.1:21..165,AF130131.1:21..125,AF130132.1:21..428,AF130132.1:492..746,AF130133.1:21..168,AF130133.1:232..401,AF130133.1:475..906,AF130133.1:970..1107,AF130133.1:1176..1367,21..>128)
+ [ 'ASNOS11', 'join(AF130124.1:<2563..2964,AF130125.1:21..157,AF130126.1:12..174,AF130127.1:21..112,AF130128.1:21..162,AF130128.1:281..595,AF130128.1:661..842,AF130128.1:916..1030,AF130129.1:21..115,AF130130.1:21..165,AF130131.1:21..125,AF130132.1:21..428,AF130132.1:492..746,AF130133.1:21..168,AF130133.1:232..401,AF130133.1:475..906,AF130133.1:970..1107,AF130133.1:1176..1367,21..>128)',
+ nil,
+ TestLoc.new('AF130124.1', '<', 2563, 2964),
+ TestLoc.new('AF130125.1', 21, 157),
+ TestLoc.new('AF130126.1', 12, 174),
+ TestLoc.new('AF130127.1', 21, 112),
+ TestLoc.new('AF130128.1', 21, 162),
+ TestLoc.new('AF130128.1', 281, 595),
+ TestLoc.new('AF130128.1', 661, 842),
+ TestLoc.new('AF130128.1', 916, 1030),
+ TestLoc.new('AF130129.1', 21, 115),
+ TestLoc.new('AF130130.1', 21, 165),
+ TestLoc.new('AF130131.1', 21, 125),
+ TestLoc.new('AF130132.1', 21, 428),
+ TestLoc.new('AF130132.1', 492, 746),
+ TestLoc.new('AF130133.1', 21, 168),
+ TestLoc.new('AF130133.1', 232, 401),
+ TestLoc.new('AF130133.1', 475, 906),
+ TestLoc.new('AF130133.1', 970, 1107),
+ TestLoc.new('AF130133.1', 1176, 1367),
+ TestLoc.new(21, '>', 128)
+ ],
+
+ # * [AARPOB2] order(AF194507.1:<1..510,1..>871)
+ # (see below)
+
+ # * [AF006691] order(912..1918,20410..21416)
+ [ 'AF006691', 'order(912..1918,20410..21416)',
+ :order,
+ TestLoc.new(912,1918),
+ TestLoc.new(20410,21416)
+ ],
+
+ # * [AF024666] complement(order(13965..14892,18919..19224))
+ # (Note that in older version of GenBank, the order of
+ # "order" and "complement" was different.)
+ # * [AF024666] order(complement(18919..19224),complement(13965..14892))
+ [ 'AF024666', 'complement(order(13965..14892,18919..19224))',
+ :complement_order,
+ TestLoc.new(13965, 14892),
+ TestLoc.new(18919, 19224)
+ ],
+
+ # * [AF264948] order(27066..27076,27089..27099,27283..27314,27330..27352)
+ [ 'AF264948',
+ 'order(27066..27076,27089..27099,27283..27314,27330..27352)',
+ :order,
+ TestLoc.new(27066, 27076),
+ TestLoc.new(27089, 27099),
+ TestLoc.new(27283, 27314),
+ TestLoc.new(27330, 27352)
+ ],
+
+ # * [D63363] order(3..26,complement(964..987))
+ # (see below)
+
+ # * [ECOCURLI2] order(complement(1009..>1260),complement(AF081827.1:<1..177))
+ [ 'ECOCURLI2',
+ 'order(complement(1009..>1260),complement(AF081827.1:<1..177))',
+ :order,
+ TestLoc.new(:complement, 1009, '>', 1260),
+ TestLoc.new(:complement, 'AF081827.1', '<', 1, 177)
+ ],
+
+ # * [S72388S2] order(join(S72388.1:757..911,S72388.1:609..1542),1..>139)
+ # (not supported)
+
+ # * [HEYRRE07] order(complement(1..38),complement(M82666.1:1..140),complement(M82665.1:1..176),complement(M82664.1:1..215),complement(M82663.1:1..185),complement(M82662.1:1..49),complement(M82661.1:1..133))
+ [ 'HEYRRE07',
+ 'order(complement(1..38),complement(M82666.1:1..140),complement(M82665.1:1..176),complement(M82664.1:1..215),complement(M82663.1:1..185),complement(M82662.1:1..49),complement(M82661.1:1..133))',
+ :order,
+ TestLoc.new(:complement, 1, 38),
+ TestLoc.new(:complement, 'M82666.1', 1, 140),
+ TestLoc.new(:complement, 'M82665.1', 1, 176),
+ TestLoc.new(:complement, 'M82664.1', 1, 215),
+ TestLoc.new(:complement, 'M82663.1', 1, 185),
+ TestLoc.new(:complement, 'M82662.1', 1, 49),
+ TestLoc.new(:complement, 'M82661.1', 1, 133)
+ ],
+
+ # * [COL11A1G34] order(AF101079.1:558..1307,AF101080.1:1..749,AF101081.1:1..898,AF101082.1:1..486,AF101083.1:1..942,AF101084.1:1..1734,AF101085.1:1..2385,AF101086.1:1..1813,AF101087.1:1..2287,AF101088.1:1..1073,AF101089.1:1..989,AF101090.1:1..5017,AF101091.1:1..3401,AF101092.1:1..1225,AF101093.1:1..1072,AF101094.1:1..989,AF101095.1:1..1669,AF101096.1:1..918,AF101097.1:1..1114,AF101098.1:1..1074,AF101099.1:1..1709,AF101100.1:1..986,AF101101.1:1..1934,AF101102.1:1..1699,AF101103.1:1..940,AF101104.1:1..2330,AF101105.1:1..4467,AF101106.1:1..1876,AF101107.1:1..2465,AF101108.1:1..1150,AF101109.1:1..1170,AF101110.1:1..1158,AF101111.1:1..1193,1..611)
+ [ 'COL11A1G34',
+ 'order(AF101079.1:558..1307,AF101080.1:1..749,AF101081.1:1..898,AF101082.1:1..486,AF101083.1:1..942,AF101084.1:1..1734,AF101085.1:1..2385,AF101086.1:1..1813,AF101087.1:1..2287,AF101088.1:1..1073,AF101089.1:1..989,AF101090.1:1..5017,AF101091.1:1..3401,AF101092.1:1..1225,AF101093.1:1..1072,AF101094.1:1..989,AF101095.1:1..1669,AF101096.1:1..918,AF101097.1:1..1114,AF101098.1:1..1074,AF101099.1:1..1709,AF101100.1:1..986,AF101101.1:1..1934,AF101102.1:1..1699,AF101103.1:1..940,AF101104.1:1..2330,AF101105.1:1..4467,AF101106.1:1..1876,AF101107.1:1..2465,AF101108.1:1..1150,AF101109.1:1..1170,AF101110.1:1..1158,AF101111.1:1..1193,1..611)',
+ :order,
+ TestLoc.new('AF101079.1', 558, 1307),
+ TestLoc.new('AF101080.1', 1, 749),
+ TestLoc.new('AF101081.1', 1, 898),
+ TestLoc.new('AF101082.1', 1, 486),
+ TestLoc.new('AF101083.1', 1, 942),
+ TestLoc.new('AF101084.1', 1, 1734),
+ TestLoc.new('AF101085.1', 1, 2385),
+ TestLoc.new('AF101086.1', 1, 1813),
+ TestLoc.new('AF101087.1', 1, 2287),
+ TestLoc.new('AF101088.1', 1, 1073),
+ TestLoc.new('AF101089.1', 1, 989),
+ TestLoc.new('AF101090.1', 1, 5017),
+ TestLoc.new('AF101091.1', 1, 3401),
+ TestLoc.new('AF101092.1', 1, 1225),
+ TestLoc.new('AF101093.1', 1, 1072),
+ TestLoc.new('AF101094.1', 1, 989),
+ TestLoc.new('AF101095.1', 1, 1669),
+ TestLoc.new('AF101096.1', 1, 918),
+ TestLoc.new('AF101097.1', 1, 1114),
+ TestLoc.new('AF101098.1', 1, 1074),
+ TestLoc.new('AF101099.1', 1, 1709),
+ TestLoc.new('AF101100.1', 1, 986),
+ TestLoc.new('AF101101.1', 1, 1934),
+ TestLoc.new('AF101102.1', 1, 1699),
+ TestLoc.new('AF101103.1', 1, 940),
+ TestLoc.new('AF101104.1', 1, 2330),
+ TestLoc.new('AF101105.1', 1, 4467),
+ TestLoc.new('AF101106.1', 1, 1876),
+ TestLoc.new('AF101107.1', 1, 2465),
+ TestLoc.new('AF101108.1', 1, 1150),
+ TestLoc.new('AF101109.1', 1, 1170),
+ TestLoc.new('AF101110.1', 1, 1158),
+ TestLoc.new('AF101111.1', 1, 1193),
+ TestLoc.new(1, 611)
+ ],
+
+ # group() are found in the COMMENT field only (in GenBank 122.0)
+ #
+ # gbpat2.seq: FT repeat_region group(598..606,611..619)
+ # gbpat2.seq: FT repeat_region group(8..16,1457..1464).
+ # gbpat2.seq: FT variation group(t1,t2)
+ # gbpat2.seq: FT variation group(t1,t3)
+ # gbpat2.seq: FT variation group(t1,t2,t3)
+ # gbpat2.seq: FT repeat_region group(11..202,203..394)
+ # gbpri9.seq:COMMENT Residues reported = 'group(1..2145);'.
+ #
+
+ # (G) ID:location
+ # * [AARPOB2] order(AF194507.1:<1..510,1..>871)
+ [ 'AARPOB2', 'order(AF194507.1:<1..510,1..>871)',
+ :order,
+ TestLoc.new('AF194507.1', '<', 1, 510),
+ TestLoc.new(1, '>', 871)
+ ],
+ # * [AF178221S4] join(AF178221.1:<1..60,AF178222.1:1..63,AF178223.1:1..42,1..>90)
+ [ 'AF178221S4',
+ 'join(AF178221.1:<1..60,AF178222.1:1..63,AF178223.1:1..42,1..>90)',
+ nil,
+ TestLoc.new('AF178221.1', '<', 1, 60),
+ TestLoc.new('AF178222.1', 1, 63),
+ TestLoc.new('AF178223.1', 1, 42),
+ TestLoc.new( 1, '>', 90)
+ ],
+ # * [BOVMHDQBY4] join(M30006.1:(392.467)..575,M30005.1:415..681,M30004.1:129..410,M30004.1:907..1017,521..534)
+ # not supported
+
+ # * [HUMSOD102] order(L44135.1:(454.445)..>538,<1..181)
+ # not supported
+
+ # * [SL16SRRN1] order(<1..>267,X67092.1:<1..>249,X67093.1:<1..>233)
+ [ 'SL16SRRN1',
+ 'order(<1..>267,X67092.1:<1..>249,X67093.1:<1..>233)',
+ :order,
+ TestLoc.new( '<', 1, '>', 267),
+ TestLoc.new('X67092.1', '<', 1, '>', 249),
+ TestLoc.new('X67093.1', '<', 1, '>', 233)
+ ],
+
+ # (I) <, >
+ # * [A5U48871] <1..>318
+ [ 'A5U48871', '<1..>318',
+ nil,
+ TestLoc.new('<', 1, '>', 318)
+ ],
+
+ # * [AA23SRRNP] <1..388
+ [ 'AA23SRRNP', '<1..388',
+ nil,
+ TestLoc.new('<', 1, 388)
+ ],
+
+ # * [AA23SRRNP] 503..>1010
+ [ 'AA23SRRNP', '503..>1010',
+ nil,
+ TestLoc.new(503, '>', 1010)
+ ],
+
+ # * [AAM5961] complement(<1..229)
+ [ 'AAM5961', 'complement(<1..229)',
+ nil,
+ TestLoc.new(:complement, '<', 1, 229)
+ ],
+
+ # * [AAM5961] complement(5231..>5598)
+ [ 'AAM5961', 'complement(5231..>5598)',
+ nil,
+ TestLoc.new(:complement, 5231, '>', 5598)
+ ],
+
+ # * [AF043934] join(<1,60..99,161..241,302..370,436..594,676..887,993..1141,1209..1329,1387..1559,1626..1646,1708..>1843)
+ [ 'AF043934', 'join(<1,60..99,161..241,302..370,436..594,676..887,993..1141,1209..1329,1387..1559,1626..1646,1708..>1843)',
+ nil,
+ TestLoc.new('<', 1),
+ TestLoc.new(60, 99),
+ TestLoc.new(161,241),
+ TestLoc.new(302,370),
+ TestLoc.new(436,594),
+ TestLoc.new(676,887),
+ TestLoc.new(993,1141),
+ TestLoc.new(1209,1329),
+ TestLoc.new(1387,1559),
+ TestLoc.new(1626,1646),
+ TestLoc.new(1708, '>', 1843)
+ ],
+
+ # * [BACSPOJ] <180..(731.761)
+ # not supported
+
+ # * [BBU17998] (88.89)..>1122
+ # not supported
+
+ # * [AARPOB2] order(AF194507.1:<1..510,1..>871)
+ # (see above)
+
+ # * [SL16SRRN1] order(<1..>267,X67092.1:<1..>249,X67093.1:<1..>233)
+ # (see above)
+
+ # (J) complement
+ # * [AF179299] complement(53^54)
+ [ 'AF179299', 'complement(53^54)',
+ nil,
+ TestLoc.new(:complement, 53, '^', 54)
+ ],
+
+ # * [AP000001] join(complement(1..61),complement(AP000007.1:252907..253505))
+ [ 'AP000001',
+ 'join(complement(1..61),complement(AP000007.1:252907..253505))',
+ nil,
+ TestLoc.new(:complement, 1, 61),
+ TestLoc.new(:complement, 'AP000007.1', 252907, 253505)
+ ],
+
+ # * [AF209868S2] order(complement(1..>308),complement(AF209868.1:75..336))
+ [ 'AF209868S2',
+ 'order(complement(1..>308),complement(AF209868.1:75..336))',
+ :order,
+ TestLoc.new(:complement, 1, '>', 308),
+ TestLoc.new(:complement, 'AF209868.1', 75, 336)
+ ],
+
+ # * [CPPLCG] complement(<1..(1093.1098))
+ # not supported
+
+ # * [D63363] order(3..26,complement(964..987))
+ [ 'D63363]', 'order(3..26,complement(964..987))',
+ :order,
+ TestLoc.new(3,26),
+ TestLoc.new(:complement, 964, 987)
+ ],
+
+ # * [ECHTGA] complement((1700.1708)..(1715.1721))
+ # not supported
+
+ # * [ECOUXW] complement(order(1636..1641,1658..1663))
+ # (Note that in older version of GenBank, the order of
+ # "order" and "complement" was different.)
+ # * [ECOUXW] order(complement(1658..1663),complement(1636..1641))
+ #
+ [ 'ECOUXW', 'complement(order(1636..1641,1658..1663))',
+ :complement_order,
+ TestLoc.new(:complement, 1636, 1641),
+ TestLoc.new(:complement, 1658, 1663)
+ ],
+
+ # * [LPATOVGNS] complement((64.74)..1525)
+ # not supported
+
+ # * [AF129075] complement(join(71606..71829,75327..75446,76039..76203,76282..76353,76914..77029,77114..77201,77276..77342,78138..78316,79755..79892,81501..81562,81676..81856,82341..82490,84208..84287,85032..85122,88316..88403))
+ [ 'AF129075',
+ 'complement(join(71606..71829,75327..75446,76039..76203,76282..76353,76914..77029,77114..77201,77276..77342,78138..78316,79755..79892,81501..81562,81676..81856,82341..82490,84208..84287,85032..85122,88316..88403))',
+ :complement_join,
+ TestLoc.new(71606,71829),
+ TestLoc.new(75327,75446),
+ TestLoc.new(76039,76203),
+ TestLoc.new(76282,76353),
+ TestLoc.new(76914,77029),
+ TestLoc.new(77114,77201),
+ TestLoc.new(77276,77342),
+ TestLoc.new(78138,78316),
+ TestLoc.new(79755,79892),
+ TestLoc.new(81501,81562),
+ TestLoc.new(81676,81856),
+ TestLoc.new(82341,82490),
+ TestLoc.new(84208,84287),
+ TestLoc.new(85032,85122),
+ TestLoc.new(88316,88403)
+ ],
+
+ # * [ZFDYST2] join(AF137145.1:<1..18,complement(<1..99))
+ [ 'ZFDYST2', 'join(AF137145.1:<1..18,complement(<1..99))',
+ nil,
+ TestLoc.new('AF137145.1', '<', 1, 18),
+ TestLoc.new(:complement, '<', 1, 99)
+ ],
+
+ # (K) replace
+ # * [CSU27710] replace(64,"A")
+ [ 'CSU27710', 'replace(64,"a")',
+ nil,
+ TestLoc.new(64, :sequence => "a")
+ ],
+
+ # * [CELXOL1ES] replace(5256,"t")
+ [ 'CELXOL1ES', 'replace(5256,"t")',
+ nil,
+ TestLoc.new(5256,:sequence => "t")
+ ],
+
+ # * [ANICPC] replace(1..468,"")
+ [ 'ANICPC', 'replace(1..468,"")',
+ nil,
+ TestLoc.new(1, 468, :sequence => "")
+ ],
+
+ # * [CSU27710] replace(67..68,"GC")
+ [ 'CSU27710', 'replace(67..68,"gc")',
+ nil,
+ TestLoc.new(67, 68, :sequence => "gc")
+ ],
+
+ # * [CELXOL1ES] replace(4480^4481,"") <= ? only one case in GenBank 122.0
+ [ 'CELXOL1ES', 'replace(4480^4481,"")',
+ nil,
+ TestLoc.new(4480, '^', 4481, :sequence => "")
+ ],
+
+ # * [ECOUW87] replace(4792^4793,"a")
+ [ 'ECOUW87', 'replace(4792^4793,"a")',
+ nil,
+ TestLoc.new(4792, '^', 4793, :sequence => "a")
+ ],
+
+ # * [CEU34893] replace(1..22,"ggttttaacccagttactcaag")
+ [ 'CEU34893', 'replace(1..22,"ggttttaacccagttactcaag")',
+ nil,
+ TestLoc.new(1, 22, :sequence => "ggttttaacccagttactcaag")
+ ],
+
+ # * [APLPCII] replace(1905^1906,"acaaagacaccgccctacgcc")
+ [ 'APLPCII', 'replace(1905^1906,"acaaagacaccgccctacgcc")',
+ nil,
+ TestLoc.new(1905, '^', 1906, :sequence => "acaaagacaccgccctacgcc")
+ ],
+
+ # * [MBDR3S1] replace(1400..>9281,"")
+ [ 'MBDR3S1', 'replace(1400..>9281,"")',
+ nil,
+ TestLoc.new(1400, '>', 9281, :sequence => "")
+ ],
+
+ # * [HUMMHDPB1F] replace(complement(36..37),"ttc")
+ [ 'HUMMHDPB1F', 'replace(complement(36..37),"ttc")',
+ nil,
+ TestLoc.new(:complement, 36, 37, :sequence => "ttc")
+ ],
+
+ # * [HUMMIC2A] replace((651.655)..(651.655),"")
+ # not supported
+
+ # * [LEIMDRPGP] replace(1..1554,"L01572")
+ # not supported
+
+ # * [TRBND3] replace(376..395,"atttgtgtgtggtaatta")
+ [ 'TRBND3', 'replace(376..395,"atttgtgtgtggtaatta")',
+ nil,
+ TestLoc.new(376, 395, :sequence => "atttgtgtgtggtaatta")
+ ],
+
+ # * [TRBND3] replace(376..395,"atttgtgtgggtaatttta")
+ # * [TRBND3] replace(376..395,"attttgttgttgttttgttttgaatta")
+ # * [TRBND3] replace(376..395,"atgtgtggtgaatta")
+ # * [TRBND3] replace(376..395,"atgtgtgtggtaatta")
+ # * [TRBND3] replace(376..395,"gatttgttgtggtaatttta")
+ # (see above)
+
+ # * [MSU09460] replace(193,"t")
+ [ 'MSU09460', 'replace(193,"t")',
+ nil,
+ TestLoc.new(193, :sequence => "t")
+ ],
+
+ # * [HUMMAGE12X] replace(3002..3003, "GC")
+ [ 'HUMMAGE12X', 'replace(3002..3003,"gc")',
+ nil,
+ TestLoc.new(3002, 3003, :sequence => "gc")
+ ],
+
+ # * [ADR40FIB] replace(510..520, "taatcctaccg")
+ [ 'ADR40FIB', 'replace(510..520,"taatcctaccg")',
+ nil,
+ TestLoc.new(510, 520, :sequence => "taatcctaccg")
+ ],
+
+ # * [RATDYIIAAB] replace(1306..1443,"aagaacatccacggagtcagaactgggctcttcacgccggatttggcgttcgaggccattgtgaaaaagcaggcaatgcaccagcaagctcagttcctacccctgcgtggacctggttatccaggagctaatcagtacagttaggtggtcaagctgaaagagccctgtctgaaa")
+ [ 'RATDYIIAAB', 'replace(1306..1443,"aagaacatccacggagtcagaactgggctcttcacgccggatttggcgttcgaggccattgtgaaaaagcaggcaatgcaccagcaagctcagttcctacccctgcgtggacctggttatccaggagctaatcagtacagttaggtggtcaagctgaaagagccctgtctgaaa")',
+ nil,
+ TestLoc.new(1306, 1443, :sequence => "aagaacatccacggagtcagaactgggctcttcacgccggatttggcgttcgaggccattgtgaaaaagcaggcaatgcaccagcaagctcagttcctacccctgcgtggacctggttatccaggagctaatcagtacagttaggtggtcaagctgaaagagccctgtctgaaa")
+ ]
+ ] #TestData=
+
+ def test_locations_to_s
+ TestData.each do |a|
+ label = a[0]
+ str = a[1]
+ op = a[2]
+ locs = a[3..-1]
+ locs.collect! { |x| x.to_location }
+ case op
+ when :complement_join, :complement_order
+ locs.reverse!
+ locs.each { |loc| loc.strand = -1 }
+ op = op.to_s.sub(/complement_/, '').intern
+ end
+ locations = Bio::Locations.new(locs)
+ locations.operator = op if op
+ assert_equal(str, locations.to_s, "to_s: wrong for #{label}")
+ end
+ end
+
+ def test_locations_roundtrip
+ TestData.each do |a|
+ label = a[0]
+ str = a[1]
+ locations = Bio::Locations.new(str)
+ assert_equal(str, locations.to_s, "round trip: wrong for #{label}")
+ end
+ end
+
end
end