matrix_disp 0.0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.travis.yml +9 -0
- data/Gemfile +10 -0
- data/Guardfile +9 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +22 -0
- data/bin/Practica9 +3 -0
- data/lib/matrix_disp/version.rb +3 -0
- data/lib/matrix_disp/version.rb~ +3 -0
- data/lib/matrix_disp.rb +567 -0
- data/lib/matrix_disp.rb~ +519 -0
- data/matrix_disp.gemspec +25 -0
- data/matrix_disp.gemspec~ +25 -0
- data/spec/matrix_disp_spec.rb +297 -0
- data/spec/matrix_disp_spec.rb~ +257 -0
- data/spec/spec_helper.rb +3 -0
- metadata +96 -0
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
#require File.join(File.dirname(__FILE__), 'spec_helper')
|
|
2
|
+
require_relative 'spec_helper'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
module Math
|
|
6
|
+
describe Fraccion do
|
|
7
|
+
before :each do
|
|
8
|
+
@c = Fraccion.new(10, 20)
|
|
9
|
+
end
|
|
10
|
+
#Primera prueba, quinto push al bitbucket.
|
|
11
|
+
# => Debe existir un numerador
|
|
12
|
+
context "1. Cuando se pida el numerador" do
|
|
13
|
+
it "este debe existir y debe ser del tipo Fixnum" do
|
|
14
|
+
expect(@c.num).to be_a_kind_of(Fixnum) #comprueba que lo que devuelve es un número
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
#Segunda prueba, 6º push al bitbucket.
|
|
18
|
+
# => Debe existir un denominador
|
|
19
|
+
context "2. Cuando se pida el denominador" do
|
|
20
|
+
it "este debe existir y debe ser del tipo Fixnum" do
|
|
21
|
+
expect(@c.denom).to be_a_kind_of(Fixnum) #comprueba que lo que devuelve es un número
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
#Tercera prueba, 7º push al bitbucket.
|
|
25
|
+
# => Debe de estar en su forma reducida
|
|
26
|
+
context "3. Cuando se cree un numero fraccionario" do
|
|
27
|
+
it "El constructor debe construirlo a la forma reducida" do
|
|
28
|
+
expect(@c.denom).to eq(2) #comprueba que al construir con denominador 20, lo reduce a 2
|
|
29
|
+
expect(@c.num).to eq(1) #comprueba que al construir con numerador 10, lo reduce a 1
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
#Cuarta prueba, 8º push
|
|
33
|
+
# => Se debe invocar al metodo num() para obtener el numerador
|
|
34
|
+
context "4. Si se quiere acceder al atributo del numerador" do
|
|
35
|
+
it "se debe invocar al metodo num()" do
|
|
36
|
+
expect(@c.num).to be_a_kind_of(Fixnum)
|
|
37
|
+
expect(@c.num).to eq(1)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
#Quinta prueba, 9º push
|
|
41
|
+
# => Se debe invocar al metodo denom() para obtener el denominador
|
|
42
|
+
context "5. Si se quiere acceder al atributo del denominador" do
|
|
43
|
+
it "se debe invocar al metodo denom()" do
|
|
44
|
+
expect(@c.denom).to be_a_kind_of(Fixnum)
|
|
45
|
+
expect(@c.denom).to eq(2)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
#Sexta prueba, 10º push
|
|
50
|
+
# => Se debe mostar por la consola la fraccion de la forma: a/b, donde a es el numerador y b el denominador
|
|
51
|
+
context "6. cuando se pida mostrar la fraccion" do
|
|
52
|
+
it "Se debe mostrar en la forma a/b, donde a es el numerador y b el denominador" do
|
|
53
|
+
expect(@c.to_s).to eql("#{@c.num}/#{@c.denom}") #comprueba que lo que devuelve la función es de la forma a/b
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
#Séptima prueba, 11º push
|
|
57
|
+
# => Se debe mostar por la consola la fraccion en formato flotante
|
|
58
|
+
context "7. cuando se pida mostrar la fraccion" do
|
|
59
|
+
it "Se debe mostrar en formato flotante" do
|
|
60
|
+
expect(@c.to_sf).to eq("#{@c.num.to_f}/#{@c.denom.to_f}") #comprueba que lo que devuelve la función es de la forma a.0/b.0
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
#Octava prueba, 12º push
|
|
65
|
+
# => Se debe comparar si dos fracciones son iguales con ==
|
|
66
|
+
context "8. Si se quieren comparar dos fracciones" do
|
|
67
|
+
it "Se debe hacer usando ==" do
|
|
68
|
+
d = Fraccion.new(20, 40)
|
|
69
|
+
expect(@c == d).to eq(true | false) #comprueba que la función de comparación devuelve true o false
|
|
70
|
+
expect(@c == d).to eq(true) #comprueba que en este caso, la función debe dar true
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
#Novena prueba, 13º push
|
|
74
|
+
# => Se debe calcular el valor absoluto de una fraccion con el metodo abs
|
|
75
|
+
context "9. Si se quiere calcular el valor absoluto de la fraccion" do
|
|
76
|
+
it "Se debe hacer usando abs" do
|
|
77
|
+
d = Fraccion.new(-10,-20)
|
|
78
|
+
d.abs
|
|
79
|
+
expect(d.num).to eq(1) #Comprueba que el valor obtenido es el valor absoluto y reducido del numerador
|
|
80
|
+
expect(d.denom).to eq(2) #Comprueba que el valor obtenido es el valor absoluto y reducido del denominador
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
#Décima prueba, 14º push
|
|
84
|
+
# => Se debe calcular el reciproco de una fraccion con el metodo reciprocal
|
|
85
|
+
context "10. Si se quiere calcular el reciproco de la fraccion" do
|
|
86
|
+
it "Se debe hacer usando abs" do
|
|
87
|
+
@c.reciprocal
|
|
88
|
+
expect(@c.num).to eq(2)
|
|
89
|
+
expect(@c.denom).to eq(1)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
#11ª Prueba, 15º push
|
|
93
|
+
# => Se debe calcular el opuesto de una fraccion con -
|
|
94
|
+
context "11. Si se quiere calcular el opuesto de una fraccion" do
|
|
95
|
+
it "Se debe hacer usando -" do
|
|
96
|
+
-@c
|
|
97
|
+
expect(@c.num).to eq(-1)
|
|
98
|
+
expect(@c.denom).to eq(2)
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
#12ª prueba, 15º push
|
|
103
|
+
# => Se debe sumar dos fracciones con + y dar el resultado de forma reducida
|
|
104
|
+
context "12. Si se quieren sumar dos fracciones" do
|
|
105
|
+
it "se debe hacer usando + y el resultado debe estar en forma reducida" do
|
|
106
|
+
d = Fraccion.new(35,21)
|
|
107
|
+
resultado = @c + d
|
|
108
|
+
expect(resultado.num).to eq(13)
|
|
109
|
+
expect(resultado.denom).to eq(6)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
#13ª prueba, 16º push
|
|
113
|
+
# => Se debe restar dos fracciones con - y dar el resultado de forma reducida
|
|
114
|
+
context "13. Si se quieren restar dos fracciones" do
|
|
115
|
+
it "se debe hacer usando - y el resultado debe estar en forma reducida" do
|
|
116
|
+
d = Fraccion.new(7,28)
|
|
117
|
+
resultado = @c - d
|
|
118
|
+
expect(resultado.num).to eq(1)
|
|
119
|
+
expect(resultado.denom).to eq(4)
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
#14ª prueba, 17º push
|
|
123
|
+
# => Se debe multiplicar dos fracciones con * y dar el resultado de forma reducida
|
|
124
|
+
context "14. Si se quieren multiplicar dos fracciones" do
|
|
125
|
+
it "se debe hacer usando * y el resultado debe estar en forma reducida" do
|
|
126
|
+
d = Fraccion.new(3,14)
|
|
127
|
+
resultado = @c * d
|
|
128
|
+
expect(resultado.num).to eq(3)
|
|
129
|
+
expect(resultado.denom).to eq(28)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
#15ª prueba, 18º push
|
|
133
|
+
# => Se debe dividir dos fracciones con / y dar el resultado de forma reducida
|
|
134
|
+
context "15. Si se quieren dividir dos fracciones" do
|
|
135
|
+
it "se debe hacer usando / y el resultado debe estar en forma reducida" do
|
|
136
|
+
d = Fraccion.new(21,8)
|
|
137
|
+
resultado = @c / d
|
|
138
|
+
expect(resultado.num).to eq(4)
|
|
139
|
+
expect(resultado.denom).to eq(21)
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
#16ª prueba, 19º push
|
|
144
|
+
# => Se debe calcular el resto dos fracciones con % y dar el resultado de forma reducida
|
|
145
|
+
context "16. Si se quiere calcular el resto de dos fracciones" do
|
|
146
|
+
it "se debe hacer usando % y el resultado debe estar en forma reducida" do
|
|
147
|
+
d = Fraccion.new(21,8)
|
|
148
|
+
resultado = @c % d
|
|
149
|
+
expect(resultado).to eq(4)
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
context "PRUEBA DE CLASE: Si se quiere calcular el reciproco de una funcion partida por otra" do
|
|
154
|
+
it "se debe usar divReciprocal" do
|
|
155
|
+
d = Fraccion.new(1,34)
|
|
156
|
+
resultado = @c.divReciprocal(d)
|
|
157
|
+
expect(resultado.num).to eq(1)
|
|
158
|
+
expect(resultado.denom).to eq(17)
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
######################################################
|
|
162
|
+
######################################################
|
|
163
|
+
context "PRUEBA PRACTICA 7: Se debe poder usar el modulo comparable" do
|
|
164
|
+
d = Fraccion.new(1,34)
|
|
165
|
+
it "Con el operador <" do
|
|
166
|
+
expect(d < @c).to eq(true)
|
|
167
|
+
end
|
|
168
|
+
it "Con el operador >" do
|
|
169
|
+
expect(@c > d).to eq(true)
|
|
170
|
+
end
|
|
171
|
+
it "Con el operador <=" do
|
|
172
|
+
e = Fraccion.new(1,2)
|
|
173
|
+
expect(@c <= e).to eq(true)
|
|
174
|
+
end
|
|
175
|
+
it "Con el operador >=" do
|
|
176
|
+
expect(@c >= d).to eq(true)
|
|
177
|
+
end
|
|
178
|
+
it "Con el operador between?" do
|
|
179
|
+
e = Fraccion.new(5,16)
|
|
180
|
+
expect(e.between?(d, @c)).to eq(true)
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
######################################################
|
|
184
|
+
######################################################
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
describe SparseVector do
|
|
188
|
+
before :each do
|
|
189
|
+
@p = SparseVector.new ({ 1 => 10, 2 => 22, 3 => 33 })
|
|
190
|
+
@q = SparseVector.new ({ 1 => 10, 2 => 20, 3 => 30 })
|
|
191
|
+
end
|
|
192
|
+
#Se debe poder indexar
|
|
193
|
+
context "1. Si se quiere indexar cualquier elemento de la matriz" do
|
|
194
|
+
it "Debe hacerse mediante el operador []" do
|
|
195
|
+
expect(@p[2]).to be_a_kind_of(Fixnum)
|
|
196
|
+
expect(@p[2]).to eq(22)
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
#Debe poder sumar y restar
|
|
200
|
+
context "2. Deben poderse hacer las siguientes operaciones basicas:" do
|
|
201
|
+
it "2.3 Suma" do
|
|
202
|
+
a = @p + @q
|
|
203
|
+
expect(a[1]).to eq(20)
|
|
204
|
+
expect(a[2]).to eq(42)
|
|
205
|
+
expect(a[3]).to eq(63)
|
|
206
|
+
end
|
|
207
|
+
it "2.4 Resta" do
|
|
208
|
+
a = @p - @q
|
|
209
|
+
expect(a[1]).to eq(0)
|
|
210
|
+
expect(a[2]).to eq(2)
|
|
211
|
+
expect(a[3]).to eq(3)
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
describe SparseMatrix do
|
|
216
|
+
before :each do
|
|
217
|
+
@a = Fraccion.new(4,5)
|
|
218
|
+
@p = SparseMatrix.new 1000 => { 100 => @a, 500 => 200}, 20000 => { 1000 => 3, 9000 => 200}
|
|
219
|
+
@q = SparseMatrix.new 1500 => { 100 => @a, 500 => 20}, 20000 => { 1000 => 3, 9000 => 200}
|
|
220
|
+
end
|
|
221
|
+
#Se debe poder indexar
|
|
222
|
+
context "1. Si se quiere indexar cualquier elemento de la matriz" do
|
|
223
|
+
it "Debe hacerse mediante el operador []" do
|
|
224
|
+
expect(@p.matrix[1000][100]).to be_a_kind_of(Fraccion)
|
|
225
|
+
expect(@p.matrix[1000][500]).to eq(200)
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
#Debe poder sumar y restar
|
|
229
|
+
context "2. Deben poderse hacer las siguientes operaciones basicas:" do
|
|
230
|
+
it "2.3 Suma" do
|
|
231
|
+
a = @p + @q
|
|
232
|
+
expect(a.matrix[1000][100]).to eq(@a)
|
|
233
|
+
expect(a.matrix[20000][1000]).to eq(6)
|
|
234
|
+
end
|
|
235
|
+
it "2.4 Resta" do
|
|
236
|
+
a = @p - @q
|
|
237
|
+
expect(a.matrix[1000][100]).to eq(@a)
|
|
238
|
+
expect(a.matrix[20000][1000]).to eq(0)
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
describe Matriz do
|
|
243
|
+
before :each do
|
|
244
|
+
|
|
245
|
+
end
|
|
246
|
+
#Se debe poder indexar
|
|
247
|
+
context "1. Segun el numero de ceros," do
|
|
248
|
+
it "Una matriz debe ser dispersa o Densa" do
|
|
249
|
+
a = Matriz.new(3,3,[1,2,3,4,5,6,7,8,9])
|
|
250
|
+
b = a.def_tipo
|
|
251
|
+
expect(b.class).to eq(Math::DenseMatrix)
|
|
252
|
+
c = Matriz.new(3,3,[1,0,0,0,0,6,0,0,9])
|
|
253
|
+
d = c.def_tipo
|
|
254
|
+
expect(d.class).to eq(Math::SparseMatrix)
|
|
255
|
+
end
|
|
256
|
+
end
|
|
257
|
+
end
|
|
258
|
+
describe DenseMatrix do
|
|
259
|
+
before :each do
|
|
260
|
+
@p = DenseMatrix.new(3, 3,[1,2,3,4,5,6,7,8,9])
|
|
261
|
+
end
|
|
262
|
+
#Debe existir el operador []
|
|
263
|
+
context "1. Si se quiere indexar cualquier elemento de la matriz" do
|
|
264
|
+
it "Debe hacerse mediante el operador []" do
|
|
265
|
+
expect(@p[2,1]).to be_a_kind_of(Fixnum)
|
|
266
|
+
expect(@p[2,1]).to eq(6)
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
#Debe poder realizar las siguientes operaciones básicas:
|
|
270
|
+
context "2. Deben poderse hacer las siguientes operaciones basicas:" do
|
|
271
|
+
it "2.1 Multiplicacion" do
|
|
272
|
+
a = DenseMatrix.new(3, 3,[1,2,3,4,5,6,7,8,9])
|
|
273
|
+
b = a * @p
|
|
274
|
+
expect(b[1,1]).to be_a_kind_of(Fixnum)
|
|
275
|
+
expect(b[1,1]).to eq(81)
|
|
276
|
+
end
|
|
277
|
+
it "2.2 Division" do
|
|
278
|
+
a = DenseMatrix.new(3, 3,[1,2,3,4,5,6,7,8,9])
|
|
279
|
+
a[1,2] = 15
|
|
280
|
+
b = @p/a
|
|
281
|
+
expect(b[1,1]).to eq(52.5)
|
|
282
|
+
end
|
|
283
|
+
it "2.3 Suma" do
|
|
284
|
+
a = DenseMatrix.new(3, 3,[1,2,3,4,5,6,7,8,9])
|
|
285
|
+
b = []
|
|
286
|
+
b = a + @p
|
|
287
|
+
expect(b[4]).to eq(10)
|
|
288
|
+
end
|
|
289
|
+
it "2.4 Resta" do
|
|
290
|
+
a = DenseMatrix.new(3, 3,[1,2,3,4,5,6,7,8,9])
|
|
291
|
+
b = []
|
|
292
|
+
b = a - @p
|
|
293
|
+
expect(b[4]).to eq(0)
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
end
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
#require File.join(File.dirname(__FILE__), 'spec_helper')
|
|
2
|
+
require_relative 'spec_helper'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
module Math
|
|
6
|
+
describe Fraccion do
|
|
7
|
+
before :each do
|
|
8
|
+
@c = Fraccion.new(10, 20)
|
|
9
|
+
end
|
|
10
|
+
#Primera prueba, quinto push al bitbucket.
|
|
11
|
+
# => Debe existir un numerador
|
|
12
|
+
context "1. Cuando se pida el numerador" do
|
|
13
|
+
it "este debe existir y debe ser del tipo Fixnum" do
|
|
14
|
+
expect(@c.num).to be_a_kind_of(Fixnum) #comprueba que lo que devuelve es un número
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
#Segunda prueba, 6º push al bitbucket.
|
|
18
|
+
# => Debe existir un denominador
|
|
19
|
+
context "2. Cuando se pida el denominador" do
|
|
20
|
+
it "este debe existir y debe ser del tipo Fixnum" do
|
|
21
|
+
expect(@c.denom).to be_a_kind_of(Fixnum) #comprueba que lo que devuelve es un número
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
#Tercera prueba, 7º push al bitbucket.
|
|
25
|
+
# => Debe de estar en su forma reducida
|
|
26
|
+
context "3. Cuando se cree un numero fraccionario" do
|
|
27
|
+
it "El constructor debe construirlo a la forma reducida" do
|
|
28
|
+
expect(@c.denom).to eq(2) #comprueba que al construir con denominador 20, lo reduce a 2
|
|
29
|
+
expect(@c.num).to eq(1) #comprueba que al construir con numerador 10, lo reduce a 1
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
#Cuarta prueba, 8º push
|
|
33
|
+
# => Se debe invocar al metodo num() para obtener el numerador
|
|
34
|
+
context "4. Si se quiere acceder al atributo del numerador" do
|
|
35
|
+
it "se debe invocar al metodo num()" do
|
|
36
|
+
expect(@c.num).to be_a_kind_of(Fixnum)
|
|
37
|
+
expect(@c.num).to eq(1)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
#Quinta prueba, 9º push
|
|
41
|
+
# => Se debe invocar al metodo denom() para obtener el denominador
|
|
42
|
+
context "5. Si se quiere acceder al atributo del denominador" do
|
|
43
|
+
it "se debe invocar al metodo denom()" do
|
|
44
|
+
expect(@c.denom).to be_a_kind_of(Fixnum)
|
|
45
|
+
expect(@c.denom).to eq(2)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
#Sexta prueba, 10º push
|
|
50
|
+
# => Se debe mostar por la consola la fraccion de la forma: a/b, donde a es el numerador y b el denominador
|
|
51
|
+
context "6. cuando se pida mostrar la fraccion" do
|
|
52
|
+
it "Se debe mostrar en la forma a/b, donde a es el numerador y b el denominador" do
|
|
53
|
+
expect(@c.to_s).to eql("#{@c.num}/#{@c.denom}") #comprueba que lo que devuelve la función es de la forma a/b
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
#Séptima prueba, 11º push
|
|
57
|
+
# => Se debe mostar por la consola la fraccion en formato flotante
|
|
58
|
+
context "7. cuando se pida mostrar la fraccion" do
|
|
59
|
+
it "Se debe mostrar en formato flotante" do
|
|
60
|
+
expect(@c.to_sf).to eq("#{@c.num.to_f}/#{@c.denom.to_f}") #comprueba que lo que devuelve la función es de la forma a.0/b.0
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
#Octava prueba, 12º push
|
|
65
|
+
# => Se debe comparar si dos fracciones son iguales con ==
|
|
66
|
+
context "8. Si se quieren comparar dos fracciones" do
|
|
67
|
+
it "Se debe hacer usando ==" do
|
|
68
|
+
d = Fraccion.new(20, 40)
|
|
69
|
+
expect(@c == d).to eq(true | false) #comprueba que la función de comparación devuelve true o false
|
|
70
|
+
expect(@c == d).to eq(true) #comprueba que en este caso, la función debe dar true
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
#Novena prueba, 13º push
|
|
74
|
+
# => Se debe calcular el valor absoluto de una fraccion con el metodo abs
|
|
75
|
+
context "9. Si se quiere calcular el valor absoluto de la fraccion" do
|
|
76
|
+
it "Se debe hacer usando abs" do
|
|
77
|
+
d = Fraccion.new(-10,-20)
|
|
78
|
+
d.abs
|
|
79
|
+
expect(d.num).to eq(1) #Comprueba que el valor obtenido es el valor absoluto y reducido del numerador
|
|
80
|
+
expect(d.denom).to eq(2) #Comprueba que el valor obtenido es el valor absoluto y reducido del denominador
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
#Décima prueba, 14º push
|
|
84
|
+
# => Se debe calcular el reciproco de una fraccion con el metodo reciprocal
|
|
85
|
+
context "10. Si se quiere calcular el reciproco de la fraccion" do
|
|
86
|
+
it "Se debe hacer usando abs" do
|
|
87
|
+
@c.reciprocal
|
|
88
|
+
expect(@c.num).to eq(2)
|
|
89
|
+
expect(@c.denom).to eq(1)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
#11ª Prueba, 15º push
|
|
93
|
+
# => Se debe calcular el opuesto de una fraccion con -
|
|
94
|
+
context "11. Si se quiere calcular el opuesto de una fraccion" do
|
|
95
|
+
it "Se debe hacer usando -" do
|
|
96
|
+
-@c
|
|
97
|
+
expect(@c.num).to eq(-1)
|
|
98
|
+
expect(@c.denom).to eq(2)
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
#12ª prueba, 15º push
|
|
103
|
+
# => Se debe sumar dos fracciones con + y dar el resultado de forma reducida
|
|
104
|
+
context "12. Si se quieren sumar dos fracciones" do
|
|
105
|
+
it "se debe hacer usando + y el resultado debe estar en forma reducida" do
|
|
106
|
+
d = Fraccion.new(35,21)
|
|
107
|
+
resultado = @c + d
|
|
108
|
+
expect(resultado.num).to eq(13)
|
|
109
|
+
expect(resultado.denom).to eq(6)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
#13ª prueba, 16º push
|
|
113
|
+
# => Se debe restar dos fracciones con - y dar el resultado de forma reducida
|
|
114
|
+
context "13. Si se quieren restar dos fracciones" do
|
|
115
|
+
it "se debe hacer usando - y el resultado debe estar en forma reducida" do
|
|
116
|
+
d = Fraccion.new(7,28)
|
|
117
|
+
resultado = @c - d
|
|
118
|
+
expect(resultado.num).to eq(1)
|
|
119
|
+
expect(resultado.denom).to eq(4)
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
#14ª prueba, 17º push
|
|
123
|
+
# => Se debe multiplicar dos fracciones con * y dar el resultado de forma reducida
|
|
124
|
+
context "14. Si se quieren multiplicar dos fracciones" do
|
|
125
|
+
it "se debe hacer usando * y el resultado debe estar en forma reducida" do
|
|
126
|
+
d = Fraccion.new(3,14)
|
|
127
|
+
resultado = @c * d
|
|
128
|
+
expect(resultado.num).to eq(3)
|
|
129
|
+
expect(resultado.denom).to eq(28)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
#15ª prueba, 18º push
|
|
133
|
+
# => Se debe dividir dos fracciones con / y dar el resultado de forma reducida
|
|
134
|
+
context "15. Si se quieren dividir dos fracciones" do
|
|
135
|
+
it "se debe hacer usando / y el resultado debe estar en forma reducida" do
|
|
136
|
+
d = Fraccion.new(21,8)
|
|
137
|
+
resultado = @c / d
|
|
138
|
+
expect(resultado.num).to eq(4)
|
|
139
|
+
expect(resultado.denom).to eq(21)
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
#16ª prueba, 19º push
|
|
144
|
+
# => Se debe calcular el resto dos fracciones con % y dar el resultado de forma reducida
|
|
145
|
+
context "16. Si se quiere calcular el resto de dos fracciones" do
|
|
146
|
+
it "se debe hacer usando % y el resultado debe estar en forma reducida" do
|
|
147
|
+
d = Fraccion.new(21,8)
|
|
148
|
+
resultado = @c % d
|
|
149
|
+
expect(resultado).to eq(4)
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
context "PRUEBA DE CLASE: Si se quiere calcular el reciproco de una funcion partida por otra" do
|
|
154
|
+
it "se debe usar divReciprocal" do
|
|
155
|
+
d = Fraccion.new(1,34)
|
|
156
|
+
resultado = @c.divReciprocal(d)
|
|
157
|
+
expect(resultado.num).to eq(1)
|
|
158
|
+
expect(resultado.denom).to eq(17)
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
######################################################
|
|
162
|
+
######################################################
|
|
163
|
+
context "PRUEBA PRACTICA 7: Se debe poder usar el modulo comparable" do
|
|
164
|
+
d = Fraccion.new(1,34)
|
|
165
|
+
it "Con el operador <" do
|
|
166
|
+
expect(d < @c).to eq(true)
|
|
167
|
+
end
|
|
168
|
+
it "Con el operador >" do
|
|
169
|
+
expect(@c > d).to eq(true)
|
|
170
|
+
end
|
|
171
|
+
it "Con el operador <=" do
|
|
172
|
+
e = Fraccion.new(1,2)
|
|
173
|
+
expect(@c <= e).to eq(true)
|
|
174
|
+
end
|
|
175
|
+
it "Con el operador >=" do
|
|
176
|
+
expect(@c >= d).to eq(true)
|
|
177
|
+
end
|
|
178
|
+
it "Con el operador between?" do
|
|
179
|
+
e = Fraccion.new(5,16)
|
|
180
|
+
expect(e.between?(d, @c)).to eq(true)
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
######################################################
|
|
184
|
+
######################################################
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
describe SparseVector do
|
|
188
|
+
before :each do
|
|
189
|
+
@p = SparseVector.new ({ 1 => 10, 2 => 22, 3 => 33 })
|
|
190
|
+
@q = SparseVector.new ({ 1 => 10, 2 => 20, 3 => 30 })
|
|
191
|
+
end
|
|
192
|
+
#Se debe poder indexar
|
|
193
|
+
context "1. Si se quiere indexar cualquier elemento de la matriz" do
|
|
194
|
+
it "Debe hacerse mediante el operador []" do
|
|
195
|
+
expect(@p[2]).to be_a_kind_of(Fixnum)
|
|
196
|
+
expect(@p[2]).to eq(22)
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
#Debe poder sumar y restar
|
|
200
|
+
context "2. Deben poderse hacer las siguientes operaciones basicas:" do
|
|
201
|
+
it "2.3 Suma" do
|
|
202
|
+
a = @p + @q
|
|
203
|
+
expect(a[1]).to eq(20)
|
|
204
|
+
expect(a[2]).to eq(42)
|
|
205
|
+
expect(a[3]).to eq(63)
|
|
206
|
+
end
|
|
207
|
+
it "2.4 Resta" do
|
|
208
|
+
a = @p - @q
|
|
209
|
+
expect(a[1]).to eq(0)
|
|
210
|
+
expect(a[2]).to eq(2)
|
|
211
|
+
expect(a[3]).to eq(3)
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
describe SparseMatrix do
|
|
216
|
+
before :each do
|
|
217
|
+
@a = Fraccion.new(4,5)
|
|
218
|
+
@p = SparseMatrix.new 1000 => { 100 => @a, 500 => 200}, 20000 => { 1000 => 3, 9000 => 200}
|
|
219
|
+
@q = SparseMatrix.new 1500 => { 100 => @a, 500 => 20}, 20000 => { 1000 => 3, 9000 => 200}
|
|
220
|
+
end
|
|
221
|
+
#Se debe poder indexar
|
|
222
|
+
context "1. Si se quiere indexar cualquier elemento de la matriz" do
|
|
223
|
+
it "Debe hacerse mediante el operador []" do
|
|
224
|
+
expect(@p.matrix[1000][100]).to be_a_kind_of(Fraccion)
|
|
225
|
+
expect(@p.matrix[1000][500]).to eq(200)
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
#Debe poder sumar y restar
|
|
229
|
+
context "2. Deben poderse hacer las siguientes operaciones basicas:" do
|
|
230
|
+
it "2.3 Suma" do
|
|
231
|
+
a = @p + @q
|
|
232
|
+
expect(a.matrix[1000][100]).to eq(@a)
|
|
233
|
+
expect(a.matrix[20000][1000]).to eq(6)
|
|
234
|
+
end
|
|
235
|
+
it "2.4 Resta" do
|
|
236
|
+
a = @p - @q
|
|
237
|
+
expect(a.matrix[1000][100]).to eq(@a)
|
|
238
|
+
expect(a.matrix[20000][1000]).to eq(0)
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
describe Matriz do
|
|
243
|
+
before :each do
|
|
244
|
+
|
|
245
|
+
end
|
|
246
|
+
#Se debe poder indexar
|
|
247
|
+
context "1. Segun el numero de ceros," do
|
|
248
|
+
it "Una matriz debe ser dispersa o Densa" do
|
|
249
|
+
a = Matriz.new(3,3,[1,2,3,4,5,6,7,8,9])
|
|
250
|
+
b = a.def_tipo
|
|
251
|
+
expect(b.class).to eq(Math::DenseMatrix)
|
|
252
|
+
c = Matriz.new(3,3,[1,0,0,0,0,6,0,0,9])
|
|
253
|
+
d = c.def_tipo
|
|
254
|
+
expect(d.class).to eq(Math::SparseMatrix)
|
|
255
|
+
end
|
|
256
|
+
end
|
|
257
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: matrix_disp
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Jonás
|
|
8
|
+
- Sergio
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2013-11-21 00:00:00.000000000 Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: bundler
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
requirements:
|
|
18
|
+
- - ~>
|
|
19
|
+
- !ruby/object:Gem::Version
|
|
20
|
+
version: '1.3'
|
|
21
|
+
type: :development
|
|
22
|
+
prerelease: false
|
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
24
|
+
requirements:
|
|
25
|
+
- - ~>
|
|
26
|
+
- !ruby/object:Gem::Version
|
|
27
|
+
version: '1.3'
|
|
28
|
+
- !ruby/object:Gem::Dependency
|
|
29
|
+
name: rake
|
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
|
31
|
+
requirements:
|
|
32
|
+
- - '>='
|
|
33
|
+
- !ruby/object:Gem::Version
|
|
34
|
+
version: '0'
|
|
35
|
+
type: :development
|
|
36
|
+
prerelease: false
|
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
38
|
+
requirements:
|
|
39
|
+
- - '>='
|
|
40
|
+
- !ruby/object:Gem::Version
|
|
41
|
+
version: '0'
|
|
42
|
+
description: Gema para realizar operaciones básicas con matrices (Tanto densas como
|
|
43
|
+
dispersas)
|
|
44
|
+
email:
|
|
45
|
+
- alu0100608359@ull.edu.es
|
|
46
|
+
executables:
|
|
47
|
+
- Practica9
|
|
48
|
+
extensions: []
|
|
49
|
+
extra_rdoc_files: []
|
|
50
|
+
files:
|
|
51
|
+
- .gitignore
|
|
52
|
+
- .travis.yml
|
|
53
|
+
- Gemfile
|
|
54
|
+
- Guardfile
|
|
55
|
+
- LICENSE.txt
|
|
56
|
+
- README.md
|
|
57
|
+
- Rakefile
|
|
58
|
+
- bin/Practica9
|
|
59
|
+
- lib/matrix_disp.rb
|
|
60
|
+
- lib/matrix_disp.rb~
|
|
61
|
+
- lib/matrix_disp/version.rb
|
|
62
|
+
- lib/matrix_disp/version.rb~
|
|
63
|
+
- matrix_disp.gemspec
|
|
64
|
+
- matrix_disp.gemspec~
|
|
65
|
+
- spec/matrix_disp_spec.rb
|
|
66
|
+
- spec/matrix_disp_spec.rb~
|
|
67
|
+
- spec/spec_helper.rb
|
|
68
|
+
homepage: ''
|
|
69
|
+
licenses:
|
|
70
|
+
- MIT
|
|
71
|
+
metadata: {}
|
|
72
|
+
post_install_message:
|
|
73
|
+
rdoc_options: []
|
|
74
|
+
require_paths:
|
|
75
|
+
- lib
|
|
76
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
77
|
+
requirements:
|
|
78
|
+
- - '>='
|
|
79
|
+
- !ruby/object:Gem::Version
|
|
80
|
+
version: '0'
|
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
|
+
requirements:
|
|
83
|
+
- - '>='
|
|
84
|
+
- !ruby/object:Gem::Version
|
|
85
|
+
version: '0'
|
|
86
|
+
requirements: []
|
|
87
|
+
rubyforge_project:
|
|
88
|
+
rubygems_version: 2.0.3
|
|
89
|
+
signing_key:
|
|
90
|
+
specification_version: 4
|
|
91
|
+
summary: Gema para realizar operaciones básicas con matrices (Tanto densas como dispersas)
|
|
92
|
+
test_files:
|
|
93
|
+
- spec/matrix_disp_spec.rb
|
|
94
|
+
- spec/matrix_disp_spec.rb~
|
|
95
|
+
- spec/spec_helper.rb
|
|
96
|
+
has_rdoc:
|