1%%
2%% %CopyrightBegin%
3%%
4%% Copyright Ericsson AB 2005-2016. All Rights Reserved.
5%%
6%% Licensed under the Apache License, Version 2.0 (the "License");
7%% you may not use this file except in compliance with the License.
8%% You may obtain a copy of the License at
9%%
10%%     http://www.apache.org/licenses/LICENSE-2.0
11%%
12%% Unless required by applicable law or agreed to in writing, software
13%% distributed under the License is distributed on an "AS IS" BASIS,
14%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15%% See the License for the specific language governing permissions and
16%% limitations under the License.
17%%
18%% %CopyrightEnd%
19%%
20-module(otp_5632).
21-export([?MODULE/0]).
22-export([pstnproxy_add_headers/2,macosx_workaround/0,fast_cut/3,test/1,test2/1,
23	 create_int_jumper_cables/1]).
24
25-import(lists, [foldl/3,last/1,member/2,reverse/1,reverse/2,seq/2,sort/1]).
26
27?MODULE() ->
28    ok.
29
30-record(request, {
31	  header
32	 }).
33
34
35-record(siporigin, {
36	  proto
37	 }).
38
39
40%% Test a problem in beam_jump.erl.
41pstnproxy_add_headers(Request, Origin) when is_record(Request, request),
42                                            is_record(Origin, siporigin) ->
43    NewHeaders1 = Request#request.header,
44    NewHeaders2 =
45        case (Origin#siporigin.proto == tls) or (Origin#siporigin.proto == tls6) of
46            true ->
47		keylist:delete("X-Foo2", NewHeaders1);
48	    false ->
49                keylist:delete("X-Foo2", NewHeaders1)
50        end,
51    NewHeaders3 =
52      case (Origin#siporigin.proto == tls) or (Origin#siporigin.proto == tls6) of
53          true ->
54              keylist:delete("X-Foo3", NewHeaders2);
55          false ->
56              keylist:delete("X-Foo3", NewHeaders2)
57      end,
58    Request#request{header = NewHeaders3}.
59
60%% Test a problem in beam_validator.erl.
61macosx_workaround() ->
62    try 1.0/zero()
63    catch
64	error:_ -> ok
65    end.
66
67zero() -> 0.0.
68
69-record(we, {id,
70             perm = 0,
71             name,
72             es,
73             fs,
74             he,
75             vc,
76             vp,
77             mat = default,
78             next_id,
79             mode,
80             mirror = none,
81             light = none,
82             has_shape = true}).
83
84-record(edge, {vs,
85               ve,
86               a = none,
87               b = none,
88               lf,
89               rf,
90               ltpr,
91               ltsu,
92               rtpr,
93               rtsu}).
94
95
96fast_cut(Edge,Pos0,We0) ->
97    {NewEdge = NewV,We} = wings_we:new_ids(1,We0),
98    #we{es = Etab0,
99        vc = Vct0,
100        vp = Vtab0,
101        he = Htab0} = We,
102    Template = gb_trees:get(Edge,Etab0),
103    #edge{vs = Vstart,
104          ve = Vend,
105          a = ACol,
106          b = BCol,
107          lf = Lf,
108          rf = Rf,
109          ltpr = EdgeA,
110          rtsu = EdgeB,
111          rtpr = NextBCol} = Template,
112    VendPos = gb_trees:get(Vend,Vtab0),
113    Vct1 = gb_trees:update(Vend,NewEdge,Vct0),
114    VstartPos = wings_vertex:pos(Vstart,Vtab0),
115    if
116        Pos0 =:= default ->
117            NewVPos0 = e3d_vec:average([VstartPos,VendPos]);
118        true ->
119            NewVPos0 = Pos0
120    end,
121    NewVPos = wings_util:share(NewVPos0),
122    Vct = gb_trees:insert(NewV,NewEdge,Vct1),
123    Vtab = gb_trees:insert(NewV,NewVPos,Vtab0),
124    AColOther = ?MODULE:get_vtx_color(EdgeA,Lf,Etab0),
125    BColOther = ?MODULE:get_vtx_color(NextBCol,Rf,Etab0),
126    Weight = if
127                 Pos0 == default ->
128                     0.500000;
129                 true ->
130                     ADist = e3d_vec:dist(Pos0,VstartPos),
131                     BDist = e3d_vec:dist(Pos0,VendPos),
132                     try
133                         ADist / (ADist + BDist)
134                     catch
135                         error:badarith ->
136                             0.500000
137                     end
138             end,
139    NewColA = wings_color:mix(Weight,AColOther,ACol),
140    NewColB = wings_color:mix(Weight,BCol,BColOther),
141    NewEdgeRec = Template#edge{vs = NewV,
142                               a = NewColA,
143                               ltsu = Edge,
144                               rtpr = Edge},
145    Etab1 = gb_trees:insert(NewEdge,NewEdgeRec,Etab0),
146    Etab2 = ?MODULE:patch_edge(EdgeA,NewEdge,Edge,Etab1),
147    Etab3 = ?MODULE:patch_edge(EdgeB,NewEdge,Edge,Etab2),
148    EdgeRec = Template#edge{ve = NewV,
149                            b = NewColB,
150                            rtsu = NewEdge,
151                            ltpr = NewEdge},
152    Etab = gb_trees:update(Edge,EdgeRec,Etab3),
153    Htab = case gb_sets:is_member(Edge,Htab0) of
154               false ->
155                   Htab0;
156               true ->
157                   gb_sets:insert(NewEdge,Htab0)
158           end,
159    {We#we{es = Etab,
160           vc = Vct,
161           vp = Vtab,
162           he = Htab},NewV}.
163
164%% A problem in beam_bool.
165
166-record(a, {a,b,c}).
167
168test(As) ->
169     case As of
170     A when A#a.b == []; A#a.b == undefined ->
171         true;
172     _ ->
173         false
174     end.
175
176test2(As) ->
177     case As of
178     A when A#a.b == {a,b,c}; A#a.b == undefined ->
179         true;
180     _ ->
181         false
182     end.
183
184%% Record updating problems.
185
186-record(int_jumper_cable, {id,
187                           connectionFieldRef,
188                           aiuPlugInUnitRef,
189                           connFieldConnector,
190                           aiuConnector,
191                           dlAttenuation = 1,
192                           ulAttenuation = 1,
193                           electricalDlDelay = 100,
194                           electricalUlDelay = 100,
195                           optionals = []}).
196
197create_int_jumper_cables(_Config) ->
198    ct_line:line({{ccl_setup_SUITE,create_int_jumper_cables},637}),
199    ct:comment("Create IntJumperCable MO"),
200    ct_line:line({{ccl_setup_SUITE,create_int_jumper_cables},639}),
201    Parent = "ManagedElement=1,Equipment=1",
202    ct_line:line({{ccl_setup_SUITE,create_int_jumper_cables},641}),
203    I1 = #int_jumper_cable{id = 1,
204                           connectionFieldRef = Parent ++ ",ConnectionField=1",
205                           aiuPlugInUnitRef = Parent ++ ",Subrack=2,Slot=6,PlugInUnit=1",
206                           connFieldConnector = "J1",
207                           aiuConnector = 1},
208    ct_line:line({{ccl_setup_SUITE,create_int_jumper_cables},650}),
209    I2 = I1#int_jumper_cable{id = 2,
210                             connFieldConnector = "H1",
211                             aiuConnector = 2},
212    ct_line:line({{ccl_setup_SUITE,create_int_jumper_cables},657}),
213    I3 = I1#int_jumper_cable{id = 3,
214                             aiuPlugInUnitRef = Parent ++ ",Subrack=2,Slot=9,PlugInUnit=1",
215                             connFieldConnector = "J2"},
216    ct_line:line({{ccl_setup_SUITE,create_int_jumper_cables},663}),
217    I4 = I3#int_jumper_cable{id = 4,
218                             connFieldConnector = "H2",
219                             aiuConnector = 2},
220    ct_line:line({{ccl_setup_SUITE,create_int_jumper_cables},670}),
221    I5 = I1#int_jumper_cable{id = 5,
222                             aiuPlugInUnitRef = Parent ++ ",Subrack=2,Slot=12,PlugInUnit=1",
223                             connFieldConnector = "J3"},
224    ct_line:line({{ccl_setup_SUITE,create_int_jumper_cables},677}),
225    I6 = I5#int_jumper_cable{id = 6,
226                             connFieldConnector = "H3",
227                             aiuConnector = 2},
228    ct_line:line({{ccl_setup_SUITE,create_int_jumper_cables},684}),
229    [_MO1,_MO2,_MO3,_MO4,_MO5,_MO6] = mub_util:create(mp_mub,Parent,[I1,I2,I3,I4,I5,I6]),
230    ct_line:line({{ccl_setup_SUITE,create_int_jumper_cables},686}),
231    ok.
232