1%% 2%% %CopyrightBegin% 3%% 4%% Copyright Ericsson AB 2002-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%% 21-module(erl_client). 22 23-export([void_test/2, long_test/2, longlong_test/2, ushort_test/2, 24 ulong_test/2, ulonglong_test/2, double_test/2, char_test/2, 25 wchar_test/2, octet_test/2, bool_test/2, struct_test/2, 26 struct2_test/2, seq1_test/2, seq2_test/2, seq3_test/2, 27 seq4_test/2, seq5_test/2, array1_test/2, array2_test/2, 28 enum_test/2, string1_test/2, wstring1_test/2, string2_test/2, 29 string3_test/2, string4_test/2, pid_test/2, port_test/2, 30 ref_test/2, term_test/2, typedef_test/2, 31 inline_sequence_test/2, term_sequence_test/2, 32 term_struct_test/2 33 34]). 35 36-include("m.hrl"). 37-include("m_i.hrl"). 38-include("oe_erl_c_test.hrl"). 39 40%%b 41void_test(Node, Timeout) -> 42 Ret = m_i:void_test({olsson, Node}, Timeout), 43 Ret == void. % XXX Not documented 44%%e 45 46%%b 47long_test(Node, Timeout) -> 48 In = max_long(), 49 {Ret, Out} = m_i:long_test({olsson, Node}, Timeout, In), 50 (Ret == In) and (Out == In). 51%%e 52 53%%b 54longlong_test(Node, Timeout) -> 55 In = 65537, 56 {Ret, Out} = m_i:longlong_test({olsson, Node}, Timeout, In), 57 (Ret == In) and (Out == In). 58%%e 59 60%%b 61ushort_test(Node, Timeout) -> 62 In = max_ushort(), 63 {Ret, Out} = m_i:ushort_test({olsson, Node}, Timeout, In), 64 (Ret == In) and (Out == In). 65%%e 66 67%%b 68ulong_test(Node, Timeout) -> 69 In = max_ulong(), 70 {Ret, Out} = m_i:ulong_test({olsson, Node}, Timeout, In), 71 (Ret == In) and (Out == In). 72%%e 73 74%%b 75ulonglong_test(Node, Timeout) -> 76 In = 65537, 77 {Ret, Out} = m_i:ulonglong_test({olsson, Node}, Timeout, In), 78 (Ret == In) and (Out == In). 79%%e 80 81%%b 82double_test(Node, Timeout) -> 83 In = 37768.93, 84 {Ret, Out} = m_i:double_test({olsson, Node}, Timeout, In), 85 (Ret == In) and (Out == In). 86%%e 87 88%%b 89char_test(Node, Timeout) -> 90 In = 80, 91 {Ret, Out} = m_i:char_test({olsson, Node}, Timeout, In), 92 (Ret == In) and (Out == In). 93%%e 94 95%%b 96wchar_test(Node, Timeout) -> 97 In = 4097, 98 {Ret, Out} = m_i:wchar_test({olsson, Node}, Timeout, In), 99 (Ret == In) and (Out == In). 100%%e 101 102%%b 103octet_test(Node, Timeout) -> 104 In = 255, 105 {Ret, Out} = m_i:octet_test({olsson, Node}, Timeout, In), 106 (Ret == In) and (Out == In). 107%%e 108 109%%b 110bool_test(Node, Timeout) -> 111 In = false, 112 {Ret, Out} = m_i:bool_test({olsson, Node}, Timeout, In), 113 (Ret == In) and (Out == In). 114%%e 115 116%%b 117struct_test(Node, Timeout) -> 118 In = #m_b{l = max_long(), c = $a}, 119 {Ret, Out} = m_i:struct_test({olsson, Node}, Timeout, In), 120 (Ret == In) and (Out == In). 121%%e 122 123%%b 124struct2_test(Node, Timeout) -> 125 In = #m_es{ f = banana, l = max_long()}, 126 {Ret, Out} = m_i:struct2_test({olsson, Node}, Timeout, In), 127 (Ret == In) and (Out == In). 128%%e 129 130%%b 131seq1_test(Node, Timeout) -> 132 B1 = #m_b{l = max_long(), c = $a}, 133 B2 = #m_b{l = min_long(), c = $b}, 134 In = [B1, B2], 135 {Ret, Out} = m_i:seq1_test({olsson, Node}, Timeout, In), 136 (Ret == In) and (Out == In). 137%%e 138 139%%b 140seq2_test(Node, Timeout) -> 141 B = #m_b{l = max_long(), c = $a}, 142 A = #m_a{l = min_long(), y = [B, B], d = 4711.31}, 143 In = [A, A, A], 144 {Ret, Out} = m_i:seq2_test({olsson, Node}, Timeout, In), 145 (Ret == In) and (Out == In). 146%%e 147 148%%b 149seq3_test(Node, Timeout) -> 150 In = [max_long(), min_long(), max_long()], 151 {Ret, Out} = m_i:seq3_test({olsson, Node}, Timeout, In), 152 (Ret == In) and (Out == In). 153%%e 154 155%%b 156seq4_test(Node, Timeout) -> 157 In = [["hello", "all"], ["Erlang", "users", "!"]], 158 {Ret, Out} = m_i:seq4_test({olsson, Node}, Timeout, In), 159 (Ret == In) and (Out == In). 160%%e 161 162%%b 163seq5_test(Node, Timeout) -> 164 Arr3 = mk_array(3, max_long()), 165 In = [[Arr3, Arr3], [Arr3, Arr3, Arr3]], 166 {Ret, Out} = m_i:seq5_test({olsson, Node}, Timeout, In), 167 (Ret == In) and (Out == In). 168%%e 169 170%%b 171array1_test(Node, Timeout) -> 172 In = mk_array(500, min_long()), 173 {Ret, Out} = m_i:array1_test({olsson, Node}, Timeout, In), 174 (Ret == In) and (Out == In). 175%%e 176 177%%b 178array2_test(Node, Timeout) -> 179 In = mk_array(2, mk_array(3, min_long())), 180 {Ret, Out} = m_i:array2_test({olsson, Node}, Timeout, In), 181 (Ret == In) and (Out == In). 182%%e 183 184%%b 185enum_test(Node, Timeout) -> 186 In = banana, 187 {Ret, Out} = m_i:enum_test({olsson, Node}, Timeout, In), 188 (Ret == In) and (Out == In). 189%%e 190 191%%b 192string1_test(Node, Timeout) -> 193 In = "Developing Erlang applications is fun!", 194 {Ret, Out} = m_i:string1_test({olsson, Node}, Timeout, In), 195 (Ret == In) and (Out == In). 196%%e 197 198%%b 199wstring1_test(Node, Timeout) -> 200 In = [1047| "eveloping Erlang applications is fun!"], 201 {Ret, Out} = m_i:wstring1_test({olsson, Node}, Timeout, In), 202 (Ret == In) and (Out == In). 203%%e 204 205%%b 206string2_test(Node, Timeout) -> 207 In = ["Developing Erlang applications ", "is fun!"], 208 {Ret, Out} = m_i:string2_test({olsson, Node}, Timeout, In), 209 (Ret == In) and (Out == In). 210%%e 211 212%%b 213string3_test(Node, Timeout) -> 214 In = "Developing Erlang applications is fun!", 215 {Ret, Out} = m_i:string3_test({olsson, Node}, Timeout, In), 216 (Ret == In) and (Out == In). 217%%e 218 219%%b 220string4_test(Node, Timeout) -> 221 222 In = #m_strRec{ 223 bb = true, 224 str4 = "Developing Erlang applications " 225 "is fun!", 226 str7 = mk_array(3, mk_array(2, max_long())), 227 str5 = [$a, $b, $c, $d, $e, $f], 228 str6 = "123456789012", 229 str8 = {$x, $y, $x}, 230 str9 = "123456789012", 231 str10 = [$a, $b, $c, $d, $e, $f] 232 }, 233 {Ret, Out} = m_i:string4_test({olsson, Node}, Timeout, In), 234 (Ret == In) and (Out == In). 235%%e 236 237%%b 238pid_test(Node, Timeout) -> 239 In = self(), 240 {Ret, Out} = m_i:pid_test({olsson, Node}, Timeout, In), 241 (Ret == In) and (Out == In). 242%%e 243 244%%b 245port_test(Node, Timeout) -> 246 In = get(port_test_port), 247 {Ret, Out} = m_i:port_test({olsson, Node}, Timeout, In), 248 (Ret == In) and (Out == In). 249%%e 250 251%%b 252ref_test(Node, Timeout) -> 253 In = make_ref(), 254 {Ret, Out} = m_i:ref_test({olsson, Node}, Timeout, In), 255 (Ret == In) and (Out == In). 256%%e 257 258%%b 259term_test(Node, Timeout) -> 260 In = {[a, b], 17, kalle}, 261 {Ret, Out} = m_i:term_test({olsson, Node}, Timeout, In), 262 (Ret == In) and (Out == In). 263%%e 264 265%%b 266typedef_test(Node, Timeout) -> 267 In1 = {nisse, [1, 2], olsson}, 268 In2 = get(port_test_port), 269 {Ret, Out1, Out2} = m_i:typedef_test({olsson, Node}, Timeout, In1, In2), 270 %% XXX Should check that Ret is an integer. 271 (Out1 == In1) and (Out2 == In2). 272%%e 273 274%%b 275inline_sequence_test(Node, Timeout) -> 276 In = #m_s{l = min_long(), sl = [max_long(), min_long()]}, 277 {Ret, Out} = m_i:inline_sequence_test({olsson, Node}, Timeout, In), 278 (Ret == In) and (Out == In). 279%%e 280 281%%b 282term_sequence_test(Node, Timeout) -> 283 In = lists:duplicate(17, {nisse, [1, 2], {kalle, olsson}}), 284 {Ret, Out} = m_i:term_sequence_test({olsson, Node}, Timeout, In), 285 (Ret == In) and (Out == In). 286%%e 287 288%%b 289term_struct_test(Node, Timeout) -> 290 In = #m_et{e = {nisse, ["abcde"], {kalle, olsson}}, l = 4711}, 291 {Ret, Out} = m_i:term_struct_test({olsson, Node}, Timeout, In), 292 (Ret == In) and (Out == In). 293%%e 294 295 296%% Locals 297 298mk_array(Es) -> 299 list_to_tuple(Es). 300 301mk_array(N, E) -> 302 mk_array(lists:duplicate(N, E)). 303 304%% max_short() -> 305%% power_of_two(15) - 1. 306max_long() -> 307 power_of_two(31) - 1. 308max_longlong() -> 309 power_of_two(63) - 1. 310max_ushort() -> 311 power_of_two(16) - 1. 312max_ulong() -> 313 power_of_two(32) - 1. 314max_ulonglong() -> 315 power_of_two(64) - 1. 316 317%% min_short() -> 318%% -power_of_two(15). 319min_long() -> 320 -power_of_two(31). 321%% min_longlong() -> 322%% -power_of_two(63). 323%% min_ushort() -> 324%% 0. 325%% min_ulong() -> 326%% 0. 327%% min_ulonglong() -> 328%% 0. 329 330power_of_two(N) -> 331 round(math:pow(2, N)). 332 333