divine 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -14
- data/README.md +25 -0
- data/Rakefile +34 -19
- data/divine.gemspec +1 -0
- data/lib/divine.rb +3 -1
- data/lib/divine/code_generators/code_generator.rb +51 -1
- data/lib/divine/code_generators/csharp.rb +898 -0
- data/lib/divine/code_generators/java.rb +125 -13
- data/lib/divine/code_generators/javascript.rb +111 -4
- data/lib/divine/code_generators/ruby.rb +103 -9
- data/lib/divine/dsl.rb +95 -6
- data/lib/divine/graph_generator/graph_generator.rb +81 -0
- data/lib/divine/version.rb +2 -1
- data/test/basic_complex_test/basic_complex_test.rb +5 -0
- data/test/basic_complex_test/graph.jpg +0 -0
- data/test/basic_complex_test/java_test/JavaTest.java +1 -1
- data/test/basic_complex_test/ruby_test/ruby_test.rb +17 -4
- data/test/binaryTree_test/binaryTree_test.rb +5 -0
- data/test/binaryTree_test/csharp_test/csharp_test.cs +99 -0
- data/test/binaryTree_test/graph.png +0 -0
- data/test/binaryTree_test/java_test/JavaTest.java +1 -1
- data/test/binaryTree_test/ruby_test/ruby_test.rb +26 -3
- data/test/complex_test/complex_test.rb +5 -0
- data/test/complex_test/csharp_test/csharp_test.cs +109 -0
- data/test/complex_test/graph.png +0 -0
- data/test/complex_test/java_test/JavaTest.java +1 -1
- data/test/complex_test/ruby_test/ruby_test.rb +24 -1
- data/test/dynamic_int_test/csharp_test/csharp_test.cs +76 -0
- data/test/dynamic_int_test/dynamic_int_test.rb +20 -0
- data/test/dynamic_int_test/graph.jpg +0 -0
- data/test/dynamic_int_test/java_test/JavaTest.java +72 -0
- data/test/dynamic_int_test/js_test/js_test.js +54 -0
- data/test/dynamic_int_test/ruby_test/ruby_test.rb +55 -0
- data/test/ipv6_test/csharp_test/csharp_test.cs +73 -0
- data/test/ipv6_test/graph.jpg +0 -0
- data/test/ipv6_test/ipv6_test.rb +5 -0
- data/test/ipv6_test/java_test/JavaTest.java +1 -1
- data/test/ipv6_test/ruby_test/ruby_test.rb +24 -4
- data/test/lib/csharp/nunit.framework.dll +0 -0
- data/test/{java_lib → lib/java}/junit.jar +0 -0
- data/test/signed_int_test/csharp_test/csharp_test.cs +86 -0
- data/test/signed_int_test/graph.jpg +0 -0
- data/test/signed_int_test/java_test/JavaTest.java +1 -1
- data/test/signed_int_test/ruby_test/ruby_test.rb +21 -1
- data/test/signed_int_test/signed_int_test.rb +6 -0
- data/test/unify_test/unify_test.rb +17 -4
- metadata +54 -8
- data/test/signed_float_test/ruby_test/ruby_test.rb +0 -36
- data/test/signed_float_test/signed_float_test.rb +0 -14
@@ -0,0 +1,54 @@
|
|
1
|
+
eval(require('fs').readFileSync('test/dynamic_int_test/js_test/test_dynamic_int.js', 'utf8'));
|
2
|
+
var fs = require('fs');
|
3
|
+
var assert = require('assert');
|
4
|
+
|
5
|
+
console.log("Test Dynamic Int");
|
6
|
+
|
7
|
+
var obj_ser = buildObject();
|
8
|
+
|
9
|
+
var ca = obj_ser.serialize();
|
10
|
+
serialize(ca);
|
11
|
+
var read = deserialize();
|
12
|
+
|
13
|
+
var obj_deser = new DynamicInt();
|
14
|
+
obj_deser.deserialize(new DivineDataReader(read));
|
15
|
+
compare_list(obj_ser.list1, obj_deser.list1);
|
16
|
+
|
17
|
+
|
18
|
+
function buildObject(){
|
19
|
+
var obj = new DynamicInt();
|
20
|
+
obj.list1 = [127, 16383, 2097151, 268435455, 34359738367, 4398046511103, 562949953421311]//, 9007199254740991];
|
21
|
+
return obj;
|
22
|
+
}
|
23
|
+
|
24
|
+
function compare_list(lst_1, lst_2){
|
25
|
+
assert.equal(lst_1.length, lst_2.length)
|
26
|
+
for (var i = 0; i < lst_1.length; i++){
|
27
|
+
//console.log("Ser = " + lst_1[i] + ", Deser = " + lst_2[i]);
|
28
|
+
assert.equal(lst_1[i], lst_2[i]);
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
function serialize(obj){
|
33
|
+
var bBuffer = new Buffer(obj);
|
34
|
+
fs.writeFileSync(__dirname + '/bin.babel.js', bBuffer, function (err) {
|
35
|
+
if (err) {
|
36
|
+
return console.log(err);
|
37
|
+
}
|
38
|
+
});
|
39
|
+
}
|
40
|
+
|
41
|
+
function deserialize(){
|
42
|
+
var data = fs.readFileSync(__dirname + '/bin.babel.js');
|
43
|
+
data = toArray(data);
|
44
|
+
return data;
|
45
|
+
|
46
|
+
}
|
47
|
+
|
48
|
+
function toArray(buffer) {
|
49
|
+
var view = new Uint8Array(buffer.length);
|
50
|
+
for (var i = 0; i < buffer.length; ++i) {
|
51
|
+
view[i] = buffer[i];
|
52
|
+
}
|
53
|
+
return view;
|
54
|
+
}
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require_relative 'test_dynamic_int.rb'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
|
4
|
+
#
|
5
|
+
# Responsible for testing dynamic integer data types
|
6
|
+
#
|
7
|
+
class TestDynamicInteger < MiniTest::Unit::TestCase
|
8
|
+
|
9
|
+
#
|
10
|
+
# Compare objects after serialize and deserialize operations
|
11
|
+
#
|
12
|
+
def test_signedInt
|
13
|
+
puts "Test Dynamic Int"
|
14
|
+
obj_ser = BabelTest::DynamicInt.new
|
15
|
+
obj_ser.list1 = [127, 16383, 2097151, 268435455, 34359738367, 4398046511103, 562949953421311]#, 72057594037927935, 9223372036854775807]
|
16
|
+
|
17
|
+
ser = obj_ser.serialize
|
18
|
+
serialize(ser)
|
19
|
+
res = deserialize()
|
20
|
+
|
21
|
+
obj_deser = BabelTest::DynamicInt.new
|
22
|
+
obj_deser.deserialize res
|
23
|
+
compare(obj_ser, obj_deser)
|
24
|
+
end
|
25
|
+
|
26
|
+
#
|
27
|
+
# Make sure that the comming two objects are the same
|
28
|
+
# * *Args* :
|
29
|
+
# -obj_ser- --> original object
|
30
|
+
# -obj_deser- --> obtained object after serialize and deserialize operations
|
31
|
+
#
|
32
|
+
def compare(obj_ser, obj_deser)
|
33
|
+
#puts "Ser = #{obj_ser.list1}, Deser = #{obj_deser.list1}"
|
34
|
+
assert_equal obj_ser.list1, obj_deser.list1
|
35
|
+
end
|
36
|
+
|
37
|
+
#
|
38
|
+
# Write binary data to file
|
39
|
+
# * *Args* :
|
40
|
+
# -data- --> bytes to be written
|
41
|
+
#
|
42
|
+
def serialize(data)
|
43
|
+
File.open("test/dynamic_int_test/ruby_test/bin.babel.rb", "w+b") do |f|
|
44
|
+
f.write(data)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
#
|
49
|
+
# Read file in binary mode and return its bytes content
|
50
|
+
#
|
51
|
+
def deserialize()
|
52
|
+
mem_buf = File.new('test/dynamic_int_test/ruby_test/bin.babel.rb').binmode
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
using System;
|
2
|
+
using System.Collections.Generic;
|
3
|
+
using System.Text;
|
4
|
+
using System.IO;
|
5
|
+
using divine;
|
6
|
+
using NUnit.Framework;
|
7
|
+
|
8
|
+
namespace test_signed_int
|
9
|
+
{
|
10
|
+
[TestFixture]
|
11
|
+
class divine
|
12
|
+
{
|
13
|
+
[Test]
|
14
|
+
public static void Main(String[] args)
|
15
|
+
{
|
16
|
+
System.Console.Write("Test IPv6 \n");
|
17
|
+
IPV6 ser = buildObj();
|
18
|
+
serialize(ser);
|
19
|
+
byte[] res = deserialize();
|
20
|
+
|
21
|
+
IPV6 deser = new IPV6();
|
22
|
+
deser.deserialize(new MemoryStream(res));
|
23
|
+
|
24
|
+
compare(ser, deser);
|
25
|
+
}
|
26
|
+
|
27
|
+
public static IPV6 buildObj() {
|
28
|
+
IPV6 obj = new IPV6();
|
29
|
+
obj.list1.Add("255.102.0.25");
|
30
|
+
obj.list1.Add("ff:fabf:faf:f15f:f1ff:f2f:1f:f2");
|
31
|
+
obj.list1.Add("2001:db8::ff00:1:8329");
|
32
|
+
obj.list1.Add("f::");
|
33
|
+
obj.list1.Add("::1");
|
34
|
+
obj.list1.Add("");
|
35
|
+
return obj;
|
36
|
+
}
|
37
|
+
|
38
|
+
public static void compare(IPV6 obj1, IPV6 obj2)
|
39
|
+
{
|
40
|
+
for (int i = 0; i < obj1.list1.Count; i++)
|
41
|
+
{
|
42
|
+
//System.Console.Write("Ser = " + obj1.list1[i] + ", Deser = " + obj2.list1[i] + "\n");
|
43
|
+
Assert.AreEqual(obj1.list1[i].ToLower(), obj2.list1[i].ToLower());
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
public static void serialize(Divine obj)
|
48
|
+
{
|
49
|
+
try
|
50
|
+
{
|
51
|
+
byte[] data = obj.serialize();
|
52
|
+
File.WriteAllBytes("test/ipv6_test/csharp_test/bin.babel.csharp", data);
|
53
|
+
}
|
54
|
+
catch (System.IO.IOException ex)
|
55
|
+
{
|
56
|
+
throw ex;
|
57
|
+
}
|
58
|
+
}
|
59
|
+
|
60
|
+
public static byte[] deserialize(){
|
61
|
+
try
|
62
|
+
{
|
63
|
+
byte[] data = File.ReadAllBytes("test/ipv6_test/csharp_test/bin.babel.csharp");
|
64
|
+
return data;
|
65
|
+
}
|
66
|
+
catch (System.IO.IOException ex)
|
67
|
+
{
|
68
|
+
throw ex;
|
69
|
+
}
|
70
|
+
}
|
71
|
+
|
72
|
+
}
|
73
|
+
}
|
Binary file
|
data/test/ipv6_test/ipv6_test.rb
CHANGED
@@ -5,10 +5,15 @@ struct 'IPV6' do
|
|
5
5
|
list :list1, :ip_number
|
6
6
|
end
|
7
7
|
|
8
|
+
# Draw ERD for prev. structs
|
9
|
+
Divine::GraphGenerator.new.draw("test/ipv6_test/")
|
10
|
+
|
8
11
|
if ARGV[0] == "ruby"
|
9
12
|
Divine::CodeGenerator.new.generate(:ruby, file: 'test_ipv6.rb', module: 'BabelTest', parent_class: "Object", target_dir: "test/ipv6_test/ruby_test")
|
10
13
|
elsif ARGV[0] == "js"
|
11
14
|
Divine::CodeGenerator.new.generate(:javascript, file: 'test_ipv6.js', target_dir: "test/ipv6_test/js_test")
|
12
15
|
elsif ARGV[0] == "java"
|
13
16
|
Divine::CodeGenerator.new.generate(:java, file: 'test_ipv6.java', target_dir: "test/ipv6_test/java_test")
|
17
|
+
elsif ARGV[0] == "csharp"
|
18
|
+
Divine::CodeGenerator.new.generate(:csharp, file: 'test_ipv6.cs', target_dir: "test/ipv6_test/csharp_test")
|
14
19
|
end
|
@@ -51,7 +51,7 @@ public class JavaTest {
|
|
51
51
|
org.junit.Assert.assertEquals(obj1.list1.get(1), obj2.list1.get(1));
|
52
52
|
}
|
53
53
|
|
54
|
-
public void serialize(
|
54
|
+
public void serialize(Divine obj) throws IOException {
|
55
55
|
byte[] data = obj.serialize();
|
56
56
|
File file = new File("test/ipv6_test/java_test/bin.babel");
|
57
57
|
try {
|
@@ -1,10 +1,16 @@
|
|
1
1
|
require_relative 'test_ipv6.rb'
|
2
2
|
require 'minitest/autorun'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
#
|
5
|
+
# Responsible for testing IP data types
|
6
|
+
#
|
7
|
+
class TestIP < MiniTest::Unit::TestCase
|
8
|
+
|
9
|
+
#
|
10
|
+
# Compare objects after serialize and deserialize operations
|
11
|
+
#
|
12
|
+
def test_ip
|
13
|
+
puts "Test IP"
|
8
14
|
obj_ser = BabelTest::IPV6.new
|
9
15
|
obj_ser.list1 = ["255.102.0.25","ff:fabf:faf:f15f:f1ff:f2f:1f:f2","2001:db8::ff00:1:8329","f::","::1",""]
|
10
16
|
|
@@ -25,16 +31,30 @@ class TestBabelTestBasic < MiniTest::Unit::TestCase
|
|
25
31
|
|
26
32
|
end
|
27
33
|
|
34
|
+
#
|
35
|
+
# Make sure that the comming two objects are the same
|
36
|
+
# * *Args* :
|
37
|
+
# -obj_ser- --> original object
|
38
|
+
# -obj_deser- --> obtained object after serialize and deserialize operations
|
39
|
+
#
|
28
40
|
def compare(obj_ser, obj_deser)
|
29
41
|
assert_equal obj_ser.list1, obj_deser.list1
|
30
42
|
end
|
31
43
|
|
44
|
+
#
|
45
|
+
# Write binary data to file
|
46
|
+
# * *Args* :
|
47
|
+
# -data- --> bytes to be written
|
48
|
+
#
|
32
49
|
def serialize(data)
|
33
50
|
File.open("test/ipv6_test/ruby_test/bin.babel.rb", "w+b") do |f|
|
34
51
|
f.write(data)
|
35
52
|
end
|
36
53
|
end
|
37
54
|
|
55
|
+
#
|
56
|
+
# Read file in binary mode and return its bytes content
|
57
|
+
#
|
38
58
|
def deserialize()
|
39
59
|
mem_buf = File.new('test/ipv6_test/ruby_test/bin.babel.rb').binmode
|
40
60
|
end
|
Binary file
|
File without changes
|
@@ -0,0 +1,86 @@
|
|
1
|
+
using System;
|
2
|
+
using System.Collections.Generic;
|
3
|
+
using System.Text;
|
4
|
+
using System.IO;
|
5
|
+
using divine;
|
6
|
+
using NUnit.Framework;
|
7
|
+
|
8
|
+
namespace test_signed_int
|
9
|
+
{
|
10
|
+
[TestFixture]
|
11
|
+
class divine
|
12
|
+
{
|
13
|
+
[Test]
|
14
|
+
public static void Main(String[] args)
|
15
|
+
{
|
16
|
+
System.Console.Write("Test Signed Int \n");
|
17
|
+
SignedInt ser = buildObj();
|
18
|
+
serialize(ser);
|
19
|
+
byte[] res = deserialize();
|
20
|
+
|
21
|
+
SignedInt deser = new SignedInt();
|
22
|
+
deser.deserialize(new MemoryStream(res));
|
23
|
+
|
24
|
+
compare(ser, deser);
|
25
|
+
|
26
|
+
//System.Console.Read();
|
27
|
+
|
28
|
+
}
|
29
|
+
|
30
|
+
public static SignedInt buildObj() {
|
31
|
+
SignedInt obj = new SignedInt();
|
32
|
+
obj.list1.Add(-1);
|
33
|
+
obj.list1.Add(-2);
|
34
|
+
obj.list1.Add(-3);
|
35
|
+
obj.list1.Add(int.MaxValue);
|
36
|
+
obj.list1.Add(int.MinValue);
|
37
|
+
|
38
|
+
obj.list2.Add(-1);
|
39
|
+
obj.list2.Add(-2);
|
40
|
+
obj.list2.Add(-3);
|
41
|
+
obj.list2.Add( (long) Math.Pow(2, 53) -1 );
|
42
|
+
obj.list2.Add( (long) (Math.Pow(2, 53) - Math.Pow(2, 54)) );
|
43
|
+
return obj;
|
44
|
+
}
|
45
|
+
|
46
|
+
public static void compare(SignedInt obj1, SignedInt obj2)
|
47
|
+
{
|
48
|
+
for (int i = 0; i < obj1.list1.Count; i++)
|
49
|
+
{
|
50
|
+
//System.Console.Write("Ser = " + obj1.list1[i] + ", Deser = " + obj2.list1[i] + "\n");
|
51
|
+
Assert.AreEqual(obj1.list1[i], obj2.list1[i]);
|
52
|
+
}
|
53
|
+
for (int i = 0; i < obj1.list2.Count; i++)
|
54
|
+
{
|
55
|
+
//System.Console.Write("Ser = " + obj1.list2[i] + ", Deser = " + obj2.list2[i] + "\n");
|
56
|
+
Assert.AreEqual(obj1.list2[i], obj2.list2[i]);
|
57
|
+
}
|
58
|
+
}
|
59
|
+
|
60
|
+
public static void serialize(Divine obj)
|
61
|
+
{
|
62
|
+
try
|
63
|
+
{
|
64
|
+
byte[] data = obj.serialize();
|
65
|
+
File.WriteAllBytes("test/signed_int_test/csharp_test/bin.babel.csharp", data);
|
66
|
+
}
|
67
|
+
catch (System.IO.IOException ex)
|
68
|
+
{
|
69
|
+
throw ex;
|
70
|
+
}
|
71
|
+
}
|
72
|
+
|
73
|
+
public static byte[] deserialize(){
|
74
|
+
try
|
75
|
+
{
|
76
|
+
byte[] data = File.ReadAllBytes("test/signed_int_test/csharp_test/bin.babel.csharp");
|
77
|
+
return data;
|
78
|
+
}
|
79
|
+
catch (System.IO.IOException ex)
|
80
|
+
{
|
81
|
+
throw ex;
|
82
|
+
}
|
83
|
+
}
|
84
|
+
|
85
|
+
}
|
86
|
+
}
|
Binary file
|
@@ -59,7 +59,7 @@ public class JavaTest {
|
|
59
59
|
}
|
60
60
|
}
|
61
61
|
|
62
|
-
public void serialize(
|
62
|
+
public void serialize(Divine obj) throws IOException {
|
63
63
|
byte[] data = obj.serialize();
|
64
64
|
File file = new File("test/signed_int_test/java_test/bin.babel");
|
65
65
|
try {
|
@@ -1,8 +1,14 @@
|
|
1
1
|
require_relative 'test_signed_int.rb'
|
2
2
|
require 'minitest/autorun'
|
3
3
|
|
4
|
+
#
|
5
|
+
# Responsible for testing signed integer data types
|
6
|
+
#
|
4
7
|
class TestBabelTestBasic < MiniTest::Unit::TestCase
|
5
8
|
|
9
|
+
#
|
10
|
+
# Compare objects after serialize and deserialize operations
|
11
|
+
#
|
6
12
|
def test_signedInt
|
7
13
|
puts "Test Signed Int"
|
8
14
|
obj_ser = BabelTest::SignedInt.new
|
@@ -19,17 +25,31 @@ class TestBabelTestBasic < MiniTest::Unit::TestCase
|
|
19
25
|
|
20
26
|
end
|
21
27
|
|
28
|
+
#
|
29
|
+
# Make sure that the comming two objects are the same
|
30
|
+
# * *Args* :
|
31
|
+
# -obj_ser- --> original object
|
32
|
+
# -obj_deser- --> obtained object after serialize and deserialize operations
|
33
|
+
#
|
22
34
|
def compare(obj_ser, obj_deser)
|
23
35
|
#puts "Ser = #{obj_ser.list1}, Deser = #{obj_deser.list1}"
|
24
36
|
assert_equal obj_ser.list1, obj_deser.list1
|
25
37
|
end
|
26
38
|
|
39
|
+
#
|
40
|
+
# Write binary data to file
|
41
|
+
# * *Args* :
|
42
|
+
# -data- --> bytes to be written
|
43
|
+
#
|
27
44
|
def serialize(data)
|
28
45
|
File.open("test/signed_int_test/ruby_test/bin.babel.rb", "w+b") do |f|
|
29
46
|
f.write(data)
|
30
47
|
end
|
31
48
|
end
|
32
|
-
|
49
|
+
|
50
|
+
#
|
51
|
+
# Read file in binary mode and return its bytes content
|
52
|
+
#
|
33
53
|
def deserialize()
|
34
54
|
mem_buf = File.new('test/signed_int_test/ruby_test/bin.babel.rb').binmode
|
35
55
|
end
|
@@ -6,10 +6,16 @@ struct 'SignedInt' do
|
|
6
6
|
list :list2, :sint64
|
7
7
|
end
|
8
8
|
|
9
|
+
# Draw ERD for prev. struct
|
10
|
+
Divine::GraphGenerator.new.draw("test/signed_int_test/")
|
11
|
+
|
9
12
|
if ARGV[0] == "ruby"
|
10
13
|
Divine::CodeGenerator.new.generate(:ruby, file: 'test_signed_int.rb', module: 'BabelTest', parent_class: "Object", target_dir: "test/signed_int_test/ruby_test")
|
11
14
|
elsif ARGV[0] == "js"
|
12
15
|
Divine::CodeGenerator.new.generate(:javascript, file: 'test_signed_int.js', target_dir: "test/signed_int_test/js_test")
|
13
16
|
elsif ARGV[0] == "java"
|
14
17
|
Divine::CodeGenerator.new.generate(:java, file: 'test_signed_int.java', target_dir: "test/signed_int_test/java_test")
|
18
|
+
elsif ARGV[0] == "csharp"
|
19
|
+
Divine::CodeGenerator.new.generate(:csharp, file: 'test_signed_int.cs', target_dir: "test/signed_int_test/csharp_test")
|
20
|
+
|
15
21
|
end
|
@@ -1,25 +1,38 @@
|
|
1
1
|
require 'minitest/autorun'
|
2
2
|
|
3
|
+
#
|
4
|
+
# Responsible for equality testing to the produced byte files for all languages
|
5
|
+
#
|
3
6
|
class TestUnify < MiniTest::Unit::TestCase
|
4
7
|
|
8
|
+
#
|
9
|
+
# Make sure that the produced byte files from all languages in every test are the same.
|
10
|
+
#
|
5
11
|
def test_unify
|
6
12
|
puts "Unify Test: Compare the produced binary files"
|
7
13
|
paths = [
|
8
14
|
"test/binaryTree_test/",
|
9
15
|
"test/complex_test/",
|
10
16
|
"test/ipv6_test/",
|
11
|
-
"test/signed_int_test/"
|
17
|
+
"test/signed_int_test/",
|
18
|
+
"test/dynamic_int_test/"
|
12
19
|
]
|
13
20
|
paths.each do |path|
|
14
|
-
ruby
|
15
|
-
js
|
16
|
-
java
|
21
|
+
ruby = readFile("#{path}ruby_test/bin.babel.rb")
|
22
|
+
js = readFile("#{path}js_test/bin.babel.js")
|
23
|
+
java = readFile("#{path}java_test/bin.babel")
|
24
|
+
csharp = readFile("#{path}csharp_test/bin.babel.csharp")
|
17
25
|
|
18
26
|
assert_equal ruby, js
|
19
27
|
assert_equal ruby, java
|
28
|
+
assert_equal ruby, csharp
|
20
29
|
end
|
21
30
|
end
|
22
31
|
|
32
|
+
#
|
33
|
+
# Read certain file in binary mode and return its content bytes
|
34
|
+
# * *Args* :
|
35
|
+
# - +file+ -> path to file name
|
23
36
|
def readFile(file)
|
24
37
|
data = File.new(file).binmode
|
25
38
|
data.read(data.size).each_byte.to_a
|