1require_relative 'base'
2
3class TestMkmf
4  class TestLibs < TestMkmf
5    def test_split_libs
6      assert_equal(%w[-lfoo -lbar], split_libs("-lfoo -lbar"))
7      assert_equal(%w[-ObjC -framework\ Ruby], split_libs("-ObjC -framework Ruby"), 'Bug #6987')
8    end
9
10    def assert_in_order(array, x, y, mesg = nil)
11      mesg = "#{x} must proceed to #{y}#{': ' if mesg}#{mesg}"
12      assert_operator(array.index(x), :<, array.rindex(y), mesg)
13    end
14
15    def test_merge_simple
16      bug = '[ruby-dev:21765]'
17      assert_equal([], merge_libs(%w[]))
18      assert_equal(%w[a b], merge_libs(%w[a], %w[b]))
19      array = merge_libs(%w[a c], %w[b])
20      assert_in_order(array, "a", "c", bug)
21    end
22
23    def test_merge_seq
24      bug = '[ruby-dev:21765]'
25      array = merge_libs(%w[a c d], %w[c b e])
26      assert_in_order(array, "a", "c", bug)
27      assert_in_order(array, "c", "d", bug)
28      assert_in_order(array, "c", "b", bug)
29      assert_in_order(array, "b", "e", bug)
30    end
31
32    def test_merge_seq_pre
33      bug = '[ruby-dev:21765]'
34      array = merge_libs(%w[a c d], %w[b c d e])
35      assert_in_order(array, "a", "c", bug)
36      assert_in_order(array, "c", "d", bug)
37      assert_in_order(array, "b", "c", bug)
38      assert_in_order(array, "d", "e", bug)
39    end
40
41    def test_merge_cyclic
42      bug = '[ruby-dev:21765]'
43      array = merge_libs(%w[a c d], %w[b c b])
44      assert_in_order(array, "a", "c", bug)
45      assert_in_order(array, "c", "d", bug)
46      assert_in_order(array, "b", "c", bug)
47      assert_in_order(array, "c", "b", bug)
48    end
49
50    def test_merge_cyclic_2
51      bug = '[ruby-dev:21765]'
52      array = merge_libs(%w[a c a d], %w[b c b])
53      assert_in_order(array, "a", "c", bug)
54      assert_in_order(array, "c", "a", bug)
55      assert_in_order(array, "c", "d", bug)
56      assert_in_order(array, "a", "d", bug)
57      assert_in_order(array, "b", "c", bug)
58      assert_in_order(array, "c", "b", bug)
59    end
60
61    def test_merge_reversal
62      bug = '[ruby-dev:22440]'
63      array = merge_libs(%w[a b c], %w[c d a])
64      assert_in_order(array, "a", "b" , bug)
65      assert_in_order(array, "c", "d" , bug)
66      ## assume that a and c have no dependency
67    end
68
69    def test_merge_reversal_followed
70      bug7467 = '[ruby-core:50314] [Bug #7467]'
71      array = nil
72      assert_nothing_raised(bug7467) {
73        array = merge_libs(%w[a b c d e f g h], %w[d c d e], [])
74      }
75      assert_in_order(array, "a", "b", bug7467)
76      assert_in_order(array, "b", "c", bug7467)
77      assert_in_order(array, "c", "d", bug7467)
78      assert_in_order(array, "d", "e", bug7467)
79      assert_in_order(array, "e", "f", bug7467)
80      assert_in_order(array, "f", "g", bug7467)
81      assert_in_order(array, "g", "h", bug7467)
82      assert_in_order(array, "d", "c", bug7467)
83      assert_in_order(array, "c", "e", bug7467)
84    end
85  end
86end if RUBY_ENGINE == "ruby"
87