crystalcell 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,287 +4,292 @@ require "helper"
4
4
  require "rubygems"
5
5
 
6
6
  class CrystalCell::LatticeAxes
7
- #public :triangulate, :rotate
8
- #public :rotate
7
+ #public :triangulate, :rotate
8
+ #public :rotate
9
9
  end
10
10
 
11
11
  class TC_LatticeAxes < Test::Unit::TestCase
12
- $tolerance = 10 ** (-10)
13
-
14
- include Math
15
-
16
- def setup
17
- @axes1 = [ [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0] ]
18
-
19
- @lc1 = CrystalCell::LatticeAxes.new([ [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0] ])
20
- @lc2 = CrystalCell::LatticeAxes.new([ [0.5, 0.5, 0.0], [0.5, 0.0, 0.5], [0.0, 0.5, 0.5] ])
21
- @lc3 = CrystalCell::LatticeAxes.new(CrystalCell::LatticeAxes.lc_to_axes([1.0, 1.0, 1.0, 90.0, 90.0, 90.0]))
22
- @lc4 = CrystalCell::LatticeAxes.new(
23
- CrystalCell::LatticeAxes.lc_to_axes(
24
- [ Math::sqrt(0.5), Math::sqrt(0.5), Math::sqrt(0.5),
25
- 60.0, 60.0, 60.0]) # Math::sqrt(0.5) == 0.5* Math::sqrt(2.0)
26
- )
27
- @lc5 = CrystalCell::LatticeAxes.new([ [1.0, 1.0, 1.0], [0.0, 1.0, 1.0], [0.0, 0.0, 1.0] ])
28
- @lc6 = CrystalCell::LatticeAxes.new([ [1.0, 1.0, 1.0], [0.0,-1.0,-1.0], [0.0, 0.0, 1.0] ])
29
-
30
- @vec_x = Mageo::Vector3D[ 1.0, 0.0, 0.0 ]
31
- @vec_y = Mageo::Vector3D[ 0.0, 1.0, 0.0 ]
32
- @vec_z = Mageo::Vector3D[ 0.0, 0.0, 1.0 ]
33
- @vec_0 = Mageo::Vector3D[ 0.0, 0.0, 0.0 ]
34
- @vec_1 = Mageo::Vector3D[ 1.0, 1.0, 0.0 ]
35
- end
36
-
37
- def test_initialize
38
- assert_raise(ArgumentError) { CrystalCell::LatticeAxes.new }
39
- assert_raise(CrystalCell::LatticeAxes::InitializeError) { CrystalCell::LatticeAxes.new([]) }
40
- assert_raise(CrystalCell::LatticeAxes::InitializeError) {
41
- CrystalCell::LatticeAxes.new([1.0, 1.0, 1.0, 90.0, 90.0, 90.0])
42
- }
43
-
44
- assert_raise(CrystalCell::LatticeAxes::InitializeError) {CrystalCell::LatticeAxes.new([0,1])}
45
- assert_raise(CrystalCell::LatticeAxes::InitializeError) {CrystalCell::LatticeAxes.new([0,1,2,3])}
46
- assert_nothing_raised {CrystalCell::LatticeAxes.new([ @vec_x, @vec_y, @vec_z ]) }
47
- assert_raise(CrystalCell::LatticeAxes::InitializeError) {CrystalCell::LatticeAxes.new([ @vec_x, @vec_y, @vec_0 ]) }
48
- assert_raise(CrystalCell::LatticeAxes::InitializeError) {CrystalCell::LatticeAxes.new([ @vec_x, @vec_y, [1, 2, 3, 4] ]) }
49
-
50
- assert_in_delta(1.0, @lc1.axes[0][0], $tolerance)
51
- assert_in_delta(0.0, @lc1.axes[0][1], $tolerance)
52
- assert_in_delta(0.0, @lc1.axes[0][2], $tolerance)
53
- assert_in_delta(0.0, @lc1.axes[1][0], $tolerance)
54
- assert_in_delta(1.0, @lc1.axes[1][1], $tolerance)
55
- assert_in_delta(0.0, @lc1.axes[1][2], $tolerance)
56
- assert_in_delta(0.0, @lc1.axes[2][0], $tolerance)
57
- assert_in_delta(0.0, @lc1.axes[2][1], $tolerance)
58
- assert_in_delta(1.0, @lc1.axes[2][2], $tolerance)
59
-
60
- assert_in_delta(- 0.577350269189626, @lc2.axes[0][0], $tolerance)
61
- assert_in_delta( 0.204124145231932, @lc2.axes[0][1], $tolerance)
62
- assert_in_delta( 0.353553390593274, @lc2.axes[0][2], $tolerance)
63
- assert_in_delta( 0.000000000000000, @lc2.axes[1][0], $tolerance)
64
- assert_in_delta( 0.612372435695795, @lc2.axes[1][1], $tolerance)
65
- assert_in_delta( 0.353553390593274, @lc2.axes[1][2], $tolerance)
66
- assert_in_delta( 0.000000000000000, @lc2.axes[2][0], $tolerance)
67
- assert_in_delta( 0.000000000000000, @lc2.axes[2][1], $tolerance)
68
- assert_in_delta( 0.707106781186548, @lc2.axes[2][2], $tolerance)
69
-
70
- assert_in_delta(1.0, @lc3.axes[0][0], $tolerance)
71
- assert_in_delta(0.0, @lc3.axes[0][1], $tolerance)
72
- assert_in_delta(0.0, @lc3.axes[0][2], $tolerance)
73
- assert_in_delta(0.0, @lc3.axes[1][0], $tolerance)
74
- assert_in_delta(1.0, @lc3.axes[1][1], $tolerance)
75
- assert_in_delta(0.0, @lc3.axes[1][2], $tolerance)
76
- assert_in_delta(0.0, @lc3.axes[2][0], $tolerance)
77
- assert_in_delta(0.0, @lc3.axes[2][1], $tolerance)
78
- assert_in_delta(1.0, @lc3.axes[2][2], $tolerance)
79
-
80
- assert_in_delta(0.577350269189626, @lc4.axes[0][0], $tolerance)
81
- assert_in_delta(0.204124145231932, @lc4.axes[0][1], $tolerance)
82
- assert_in_delta(0.353553390593274, @lc4.axes[0][2], $tolerance)
83
- assert_in_delta(0.000000000000000, @lc4.axes[1][0], $tolerance)
84
- assert_in_delta(0.612372435695795, @lc4.axes[1][1], $tolerance)
85
- assert_in_delta(0.353553390593274, @lc4.axes[1][2], $tolerance)
86
- assert_in_delta(0.000000000000000, @lc4.axes[2][0], $tolerance)
87
- assert_in_delta(0.000000000000000, @lc4.axes[2][1], $tolerance)
88
- assert_in_delta(0.707106781186548, @lc4.axes[2][2], $tolerance)
89
-
90
- # triangulate の結果、b 軸の y 成分は 正方向であるべき。
91
- assert_in_delta(-1.0, @lc6.axes[0][0], $tolerance)
92
- assert_in_delta(-1.0, @lc6.axes[0][1], $tolerance)
93
- assert_in_delta(1.0, @lc6.axes[0][2], $tolerance)
94
- assert_in_delta(0.0, @lc6.axes[1][0], $tolerance)
95
- assert_in_delta(1.0, @lc6.axes[1][1], $tolerance)
96
- assert_in_delta(-1.0, @lc6.axes[1][2], $tolerance)
97
- assert_in_delta(0.0, @lc6.axes[2][0], $tolerance)
98
- assert_in_delta(0.0, @lc6.axes[2][1], $tolerance)
99
- assert_in_delta(1.0, @lc6.axes[2][2], $tolerance)
100
- end
101
-
102
- ## Class methods.
103
-
104
- #def test_self_triangulate
105
- # result = CrystalCell::LatticeAxes.triangulate([ [0.5, 0.5, 0.0], [0.0, 0.5, 0.5], [0.5, 0.0, 0.5] ])
106
- # assert_in_delta(0.577350269189626, result[0][0], $tolerance)
107
- # assert_in_delta(0.204124145231932, result[0][1], $tolerance)
108
- # assert_in_delta(0.353553390593274, result[0][2], $tolerance)
109
- # assert_in_delta(0.000000000000000, result[1][0], $tolerance)
110
- # assert_in_delta(0.612372435695795, result[1][1], $tolerance)
111
- # assert_in_delta(0.353553390593274, result[1][2], $tolerance)
112
- # assert_in_delta(0.000000000000000, result[2][0], $tolerance)
113
- # assert_in_delta(0.000000000000000, result[2][1], $tolerance)
114
- # assert_in_delta(0.707106781186548, result[2][2], $tolerance)
115
- #end
116
-
117
- def test_self_lc_to_axes
118
- axes = CrystalCell::LatticeAxes.lc_to_axes([ 1.0, 1.0, 1.0, 90.0, 90.0, 90.0 ])
119
- assert_in_delta(@axes1[0][0], axes[0][0], $tolerance)
120
- assert_in_delta(@axes1[0][1], axes[0][1], $tolerance)
121
- assert_in_delta(@axes1[0][2], axes[0][2], $tolerance)
122
- assert_in_delta(@axes1[1][0], axes[1][0], $tolerance)
123
- assert_in_delta(@axes1[1][1], axes[1][1], $tolerance)
124
- assert_in_delta(@axes1[1][2], axes[1][2], $tolerance)
125
- assert_in_delta(@axes1[2][0], axes[2][0], $tolerance)
126
- assert_in_delta(@axes1[2][1], axes[2][1], $tolerance)
127
- assert_in_delta(@axes1[2][2], axes[2][2], $tolerance)
128
-
129
- axes = CrystalCell::LatticeAxes.lc_to_axes([ 1.0, 1.0, 1.0, 90.0, 90.0, 90.0 ], false)
130
- assert_in_delta(- @axes1[0][0], axes[0][0], $tolerance)
131
- assert_in_delta( @axes1[0][1], axes[0][1], $tolerance)
132
- assert_in_delta( @axes1[0][2], axes[0][2], $tolerance)
133
- assert_in_delta( @axes1[1][0], axes[1][0], $tolerance)
134
- assert_in_delta( @axes1[1][1], axes[1][1], $tolerance)
135
- assert_in_delta( @axes1[1][2], axes[1][2], $tolerance)
136
- assert_in_delta( @axes1[2][0], axes[2][0], $tolerance)
137
- assert_in_delta( @axes1[2][1], axes[2][1], $tolerance)
138
- assert_in_delta( @axes1[2][2], axes[2][2], $tolerance)
139
- end
140
-
141
- def test_self_axes_to_lc
142
- correct = [ 1.0, 1.0, 1.0, 90.0, 90.0, 90.0 ]
143
- assert_equal(correct, CrystalCell::LatticeAxes.axes_to_lc(@axes1))
144
-
145
- #correct = [ 1.0, 1.0, 1.0, 90.0, 90.0, 90.0 ]
146
- #assert_equal(correct, CrystalCell::LatticeAxes.axes_to_lc(@axes1))
147
- end
148
-
149
- def test_equal_in_delta?
150
- assert_equal(true , @lc1.equal_in_delta?(@lc1, 0.01, 1.0))
151
- assert_equal(false, @lc1.equal_in_delta?(@lc2, 0.01, 1.0))
152
- assert_equal(false, @lc1.equal_in_delta?(@lc4, 0.01, 1.0))
153
- assert_equal(false, @lc2.equal_in_delta?(@lc1, 0.01, 1.0))
154
- assert_equal(true , @lc2.equal_in_delta?(@lc2, 0.01, 1.0))
155
- assert_equal(true , @lc2.equal_in_delta?(@lc4, 0.01, 1.0))
156
- assert_equal(false, @lc4.equal_in_delta?(@lc1, 0.01, 1.0))
157
- assert_equal(true , @lc4.equal_in_delta?(@lc2, 0.01, 1.0))
158
- assert_equal(true , @lc4.equal_in_delta?(@lc4, 0.01, 1.0))
159
- end
160
-
161
- def test_self_righthand?
162
- # Righthand
163
- assert_equal(true , CrystalCell::LatticeAxes.righthand?([ @vec_x, @vec_y, @vec_z ]))
164
- assert_equal(true , CrystalCell::LatticeAxes.righthand?([ @vec_y, @vec_z, @vec_x ]))
165
- assert_equal(true , CrystalCell::LatticeAxes.righthand?([ @vec_z, @vec_x, @vec_y ]))
166
-
167
- # Lefthand
168
- assert_equal(false, CrystalCell::LatticeAxes.righthand?([ @vec_z, @vec_y, @vec_x ]))
169
- assert_equal(false, CrystalCell::LatticeAxes.righthand?([ @vec_x, @vec_z, @vec_y ]))
170
- assert_equal(false, CrystalCell::LatticeAxes.righthand?([ @vec_y, @vec_x, @vec_z ]))
171
-
172
- # Including zero vector.
173
- assert_equal(false, CrystalCell::LatticeAxes.righthand?([ @vec_0, @vec_y, @vec_z ]))
174
- assert_equal(false, CrystalCell::LatticeAxes.righthand?([ @vec_0, @vec_z, @vec_x ]))
175
- assert_equal(false, CrystalCell::LatticeAxes.righthand?([ @vec_0, @vec_x, @vec_y ]))
176
-
177
- # One vector is on the plane of residual two vectors.
178
- assert_equal(false, CrystalCell::LatticeAxes.righthand?([ @vec_x, @vec_y, @vec_1 ]))
179
- end
180
-
181
- def test_self_lefthand?
182
- # Righthand
183
- assert_equal(false, CrystalCell::LatticeAxes.lefthand?([ @vec_x, @vec_y, @vec_z ]))
184
- assert_equal(false, CrystalCell::LatticeAxes.lefthand?([ @vec_y, @vec_z, @vec_x ]))
185
- assert_equal(false, CrystalCell::LatticeAxes.lefthand?([ @vec_z, @vec_x, @vec_y ]))
186
-
187
- # Lefthand
188
- assert_equal(true , CrystalCell::LatticeAxes.lefthand?([ @vec_z, @vec_y, @vec_x ]))
189
- assert_equal(true , CrystalCell::LatticeAxes.lefthand?([ @vec_x, @vec_z, @vec_y ]))
190
- assert_equal(true , CrystalCell::LatticeAxes.lefthand?([ @vec_y, @vec_x, @vec_z ]))
191
-
192
- # Including zero vector.
193
- assert_equal(false, CrystalCell::LatticeAxes.lefthand?([ @vec_0, @vec_y, @vec_z ]))
194
- assert_equal(false, CrystalCell::LatticeAxes.lefthand?([ @vec_0, @vec_z, @vec_x ]))
195
- assert_equal(false, CrystalCell::LatticeAxes.lefthand?([ @vec_0, @vec_x, @vec_y ]))
196
-
197
- # One vector is on the plane of residual two vectors.
198
- assert_equal(false, CrystalCell::LatticeAxes.lefthand?([ @vec_x, @vec_y, @vec_1 ]))
199
- end
200
-
201
- ## Instance methods.
202
-
203
- def test_get_lattice_constants
204
- assert_in_delta( 1.0, @lc1.get_lattice_constants[0], $tolerance)
205
- assert_in_delta( 1.0, @lc1.get_lattice_constants[1], $tolerance)
206
- assert_in_delta( 1.0, @lc1.get_lattice_constants[2], $tolerance)
207
- assert_in_delta(90.0, @lc1.get_lattice_constants[3], $tolerance)
208
- assert_in_delta(90.0, @lc1.get_lattice_constants[4], $tolerance)
209
- assert_in_delta(90.0, @lc1.get_lattice_constants[5], $tolerance)
210
- assert_in_delta(Math::sqrt(0.5), @lc2.get_lattice_constants[0], $tolerance)
211
- assert_in_delta(Math::sqrt(0.5), @lc2.get_lattice_constants[1], $tolerance)
212
- assert_in_delta(Math::sqrt(0.5), @lc2.get_lattice_constants[2], $tolerance)
213
- assert_in_delta(60.0, @lc2.get_lattice_constants[3], $tolerance)
214
- assert_in_delta(60.0, @lc2.get_lattice_constants[4], $tolerance)
215
- assert_in_delta(60.0, @lc2.get_lattice_constants[5], $tolerance)
216
- assert_in_delta( 1.0, @lc3.get_lattice_constants[0], $tolerance)
217
- assert_in_delta( 1.0, @lc3.get_lattice_constants[1], $tolerance)
218
- assert_in_delta( 1.0, @lc3.get_lattice_constants[2], $tolerance)
219
- assert_in_delta(90.0, @lc3.get_lattice_constants[3], $tolerance)
220
- assert_in_delta(90.0, @lc3.get_lattice_constants[4], $tolerance)
221
- assert_in_delta(90.0, @lc3.get_lattice_constants[5], $tolerance)
222
- assert_in_delta(Math::sqrt(0.5), @lc4.get_lattice_constants[0], $tolerance)
223
- assert_in_delta(Math::sqrt(0.5), @lc4.get_lattice_constants[1], $tolerance)
224
- assert_in_delta(Math::sqrt(0.5), @lc4.get_lattice_constants[2], $tolerance)
225
- assert_in_delta(60.0, @lc4.get_lattice_constants[3], $tolerance)
226
- assert_in_delta(60.0, @lc4.get_lattice_constants[4], $tolerance)
227
- assert_in_delta(60.0, @lc4.get_lattice_constants[5], $tolerance)
228
- end
229
-
230
- def test_righthand?
231
- assert_equal(true , @lc1.righthand?)
232
- assert_equal(false, @lc2.righthand?)
233
- end
234
-
235
- def test_lefthand?
236
- assert_equal(false, @lc1.lefthand?)
237
- assert_equal(true , @lc2.lefthand?)
238
- end
239
-
240
- #def test_internal2cartesian
241
- # assert_raise(CrystalCell::LatticeAxes::TypeError){
242
- # @lc5.internal2cartesian([ 2.0, 3.0, 4.0 ])
243
- # }
244
- # assert_in_delta(2.0, @lc5.internal2cartesian([ 2.0, 3.0, 4.0 ])[0], $tolerance)
245
- # assert_in_delta(5.0, @lc5.internal2cartesian([ 2.0, 3.0, 4.0 ])[1], $tolerance)
246
- # assert_in_delta(9.0, @lc5.internal2cartesian([ 2.0, 3.0, 4.0 ])[2], $tolerance)
247
- #end
248
-
249
- #def test_cartesian2internal
250
- # assert_in_delta(2.0, @lc5.cartesian2internal([ 2.0, 5.0, 9.0 ])[0], $tolerance)
251
- # assert_in_delta(3.0, @lc5.cartesian2internal([ 2.0, 5.0, 9.0 ])[1], $tolerance)
252
- # assert_in_delta(4.0, @lc5.cartesian2internal([ 2.0, 5.0, 9.0 ])[2], $tolerance)
253
- #end
254
-
255
- def test_equal
256
- assert_equal(true , @lc1 == @lc1)
257
- assert_equal(true , @lc2 == @lc2)
258
- assert_equal(true , @lc3 == @lc3)
259
-
260
- assert_equal(false, @lc1 == @lc2)
261
- assert_equal(false, @lc2 == @lc3)
262
- assert_equal(true , @lc3 == @lc1)
263
-
264
- assert_equal(true , @lc1 == @lc3)
265
- assert_equal(false, @lc2 == @lc1)
266
- assert_equal(false, @lc3 == @lc2)
267
- end
268
-
269
- def test_triangulate
270
- t = CrystalCell::LatticeAxes.new([ [0.5, 0.5, 0.0], [0.0, 0.5, 0.5], [0.5, 0.0, 0.5] ])
271
- assert_in_delta(0.577350269189626, t[0][0], $tolerance)
272
- assert_in_delta(0.204124145231932, t[0][1], $tolerance)
273
- assert_in_delta(0.353553390593274, t[0][2], $tolerance)
274
- assert_in_delta(0.000000000000000, t[1][0], $tolerance)
275
- assert_in_delta(0.612372435695795, t[1][1], $tolerance)
276
- assert_in_delta(0.353553390593274, t[1][2], $tolerance)
277
- assert_in_delta(0.000000000000000, t[2][0], $tolerance)
278
- assert_in_delta(0.000000000000000, t[2][1], $tolerance)
279
- assert_in_delta(0.707106781186548, t[2][2], $tolerance)
280
- end
281
-
282
- #def test_rotate
283
- # #@lc1 = CrystalCell::LatticeAxes.new([ [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0] ])
284
- # @lc1.rotate(0, 1, 2)
285
- #
286
- # TODO
287
- #end
12
+ $tolerance = 10 ** (-10)
13
+
14
+ include Math
15
+
16
+ def setup
17
+ @axes1 = [ [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0] ]
18
+
19
+ @lc1 = CrystalCell::LatticeAxes.new([ [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0] ])
20
+ @lc2 = CrystalCell::LatticeAxes.new([ [0.5, 0.5, 0.0], [0.5, 0.0, 0.5], [0.0, 0.5, 0.5] ])
21
+ @lc3 = CrystalCell::LatticeAxes.new(CrystalCell::LatticeAxes.lc_to_axes([1.0, 1.0, 1.0, 90.0, 90.0, 90.0]))
22
+ @lc4 = CrystalCell::LatticeAxes.new(
23
+ CrystalCell::LatticeAxes.lc_to_axes(
24
+ [ Math::sqrt(0.5), Math::sqrt(0.5), Math::sqrt(0.5),
25
+ 60.0, 60.0, 60.0]) # Math::sqrt(0.5) == 0.5* Math::sqrt(2.0)
26
+ )
27
+ @lc5 = CrystalCell::LatticeAxes.new([ [1.0, 1.0, 1.0], [0.0, 1.0, 1.0], [0.0, 0.0, 1.0] ])
28
+ @lc6 = CrystalCell::LatticeAxes.new([ [1.0, 1.0, 1.0], [0.0,-1.0,-1.0], [0.0, 0.0, 1.0] ])
29
+
30
+ @vec_x = Mageo::Vector3D[ 1.0, 0.0, 0.0 ]
31
+ @vec_y = Mageo::Vector3D[ 0.0, 1.0, 0.0 ]
32
+ @vec_z = Mageo::Vector3D[ 0.0, 0.0, 1.0 ]
33
+ @vec_0 = Mageo::Vector3D[ 0.0, 0.0, 0.0 ]
34
+ @vec_1 = Mageo::Vector3D[ 1.0, 1.0, 0.0 ]
35
+ end
36
+
37
+ def test_initialize
38
+ assert_raise(ArgumentError) { CrystalCell::LatticeAxes.new }
39
+ assert_raise(CrystalCell::LatticeAxes::InitializeError) { CrystalCell::LatticeAxes.new([]) }
40
+ assert_raise(CrystalCell::LatticeAxes::InitializeError) {
41
+ CrystalCell::LatticeAxes.new([1.0, 1.0, 1.0, 90.0, 90.0, 90.0])
42
+ }
43
+
44
+ assert_raise(CrystalCell::LatticeAxes::InitializeError) {CrystalCell::LatticeAxes.new([0,1])}
45
+ assert_raise(CrystalCell::LatticeAxes::InitializeError) {CrystalCell::LatticeAxes.new([0,1,2,3])}
46
+ assert_nothing_raised {CrystalCell::LatticeAxes.new([ @vec_x, @vec_y, @vec_z ]) }
47
+ assert_raise(CrystalCell::LatticeAxes::InitializeError) {CrystalCell::LatticeAxes.new([ @vec_x, @vec_y, @vec_0 ]) }
48
+ assert_raise(CrystalCell::LatticeAxes::InitializeError) {CrystalCell::LatticeAxes.new([ @vec_x, @vec_y, [1, 2, 3, 4] ]) }
49
+
50
+ assert_in_delta(1.0, @lc1.axes[0][0], $tolerance)
51
+ assert_in_delta(0.0, @lc1.axes[0][1], $tolerance)
52
+ assert_in_delta(0.0, @lc1.axes[0][2], $tolerance)
53
+ assert_in_delta(0.0, @lc1.axes[1][0], $tolerance)
54
+ assert_in_delta(1.0, @lc1.axes[1][1], $tolerance)
55
+ assert_in_delta(0.0, @lc1.axes[1][2], $tolerance)
56
+ assert_in_delta(0.0, @lc1.axes[2][0], $tolerance)
57
+ assert_in_delta(0.0, @lc1.axes[2][1], $tolerance)
58
+ assert_in_delta(1.0, @lc1.axes[2][2], $tolerance)
59
+
60
+ assert_in_delta(- 0.577350269189626, @lc2.axes[0][0], $tolerance)
61
+ assert_in_delta( 0.204124145231932, @lc2.axes[0][1], $tolerance)
62
+ assert_in_delta( 0.353553390593274, @lc2.axes[0][2], $tolerance)
63
+ assert_in_delta( 0.000000000000000, @lc2.axes[1][0], $tolerance)
64
+ assert_in_delta( 0.612372435695795, @lc2.axes[1][1], $tolerance)
65
+ assert_in_delta( 0.353553390593274, @lc2.axes[1][2], $tolerance)
66
+ assert_in_delta( 0.000000000000000, @lc2.axes[2][0], $tolerance)
67
+ assert_in_delta( 0.000000000000000, @lc2.axes[2][1], $tolerance)
68
+ assert_in_delta( 0.707106781186548, @lc2.axes[2][2], $tolerance)
69
+
70
+ assert_in_delta(1.0, @lc3.axes[0][0], $tolerance)
71
+ assert_in_delta(0.0, @lc3.axes[0][1], $tolerance)
72
+ assert_in_delta(0.0, @lc3.axes[0][2], $tolerance)
73
+ assert_in_delta(0.0, @lc3.axes[1][0], $tolerance)
74
+ assert_in_delta(1.0, @lc3.axes[1][1], $tolerance)
75
+ assert_in_delta(0.0, @lc3.axes[1][2], $tolerance)
76
+ assert_in_delta(0.0, @lc3.axes[2][0], $tolerance)
77
+ assert_in_delta(0.0, @lc3.axes[2][1], $tolerance)
78
+ assert_in_delta(1.0, @lc3.axes[2][2], $tolerance)
79
+
80
+ assert_in_delta(0.577350269189626, @lc4.axes[0][0], $tolerance)
81
+ assert_in_delta(0.204124145231932, @lc4.axes[0][1], $tolerance)
82
+ assert_in_delta(0.353553390593274, @lc4.axes[0][2], $tolerance)
83
+ assert_in_delta(0.000000000000000, @lc4.axes[1][0], $tolerance)
84
+ assert_in_delta(0.612372435695795, @lc4.axes[1][1], $tolerance)
85
+ assert_in_delta(0.353553390593274, @lc4.axes[1][2], $tolerance)
86
+ assert_in_delta(0.000000000000000, @lc4.axes[2][0], $tolerance)
87
+ assert_in_delta(0.000000000000000, @lc4.axes[2][1], $tolerance)
88
+ assert_in_delta(0.707106781186548, @lc4.axes[2][2], $tolerance)
89
+
90
+ # triangulate の結果、b 軸の y 成分は 正方向であるべき。
91
+ assert_in_delta(-1.0, @lc6.axes[0][0], $tolerance)
92
+ assert_in_delta(-1.0, @lc6.axes[0][1], $tolerance)
93
+ assert_in_delta(1.0, @lc6.axes[0][2], $tolerance)
94
+ assert_in_delta(0.0, @lc6.axes[1][0], $tolerance)
95
+ assert_in_delta(1.0, @lc6.axes[1][1], $tolerance)
96
+ assert_in_delta(-1.0, @lc6.axes[1][2], $tolerance)
97
+ assert_in_delta(0.0, @lc6.axes[2][0], $tolerance)
98
+ assert_in_delta(0.0, @lc6.axes[2][1], $tolerance)
99
+ assert_in_delta(1.0, @lc6.axes[2][2], $tolerance)
100
+ end
101
+
102
+ ## Class methods.
103
+ #
104
+ def test_new_lc
105
+ result = CrystalCell::LatticeAxes.new_lc([1.0, 1.0, 1.0, 90.0, 90.0, 90.0])
106
+ assert_equal(@lc3, result)
107
+ end
108
+
109
+ #def test_self_triangulate
110
+ # result = CrystalCell::LatticeAxes.triangulate([ [0.5, 0.5, 0.0], [0.0, 0.5, 0.5], [0.5, 0.0, 0.5] ])
111
+ # assert_in_delta(0.577350269189626, result[0][0], $tolerance)
112
+ # assert_in_delta(0.204124145231932, result[0][1], $tolerance)
113
+ # assert_in_delta(0.353553390593274, result[0][2], $tolerance)
114
+ # assert_in_delta(0.000000000000000, result[1][0], $tolerance)
115
+ # assert_in_delta(0.612372435695795, result[1][1], $tolerance)
116
+ # assert_in_delta(0.353553390593274, result[1][2], $tolerance)
117
+ # assert_in_delta(0.000000000000000, result[2][0], $tolerance)
118
+ # assert_in_delta(0.000000000000000, result[2][1], $tolerance)
119
+ # assert_in_delta(0.707106781186548, result[2][2], $tolerance)
120
+ #end
121
+
122
+ def test_self_lc_to_axes
123
+ axes = CrystalCell::LatticeAxes.lc_to_axes([ 1.0, 1.0, 1.0, 90.0, 90.0, 90.0 ])
124
+ assert_in_delta(@axes1[0][0], axes[0][0], $tolerance)
125
+ assert_in_delta(@axes1[0][1], axes[0][1], $tolerance)
126
+ assert_in_delta(@axes1[0][2], axes[0][2], $tolerance)
127
+ assert_in_delta(@axes1[1][0], axes[1][0], $tolerance)
128
+ assert_in_delta(@axes1[1][1], axes[1][1], $tolerance)
129
+ assert_in_delta(@axes1[1][2], axes[1][2], $tolerance)
130
+ assert_in_delta(@axes1[2][0], axes[2][0], $tolerance)
131
+ assert_in_delta(@axes1[2][1], axes[2][1], $tolerance)
132
+ assert_in_delta(@axes1[2][2], axes[2][2], $tolerance)
133
+
134
+ axes = CrystalCell::LatticeAxes.lc_to_axes([ 1.0, 1.0, 1.0, 90.0, 90.0, 90.0 ], false)
135
+ assert_in_delta(- @axes1[0][0], axes[0][0], $tolerance)
136
+ assert_in_delta( @axes1[0][1], axes[0][1], $tolerance)
137
+ assert_in_delta( @axes1[0][2], axes[0][2], $tolerance)
138
+ assert_in_delta( @axes1[1][0], axes[1][0], $tolerance)
139
+ assert_in_delta( @axes1[1][1], axes[1][1], $tolerance)
140
+ assert_in_delta( @axes1[1][2], axes[1][2], $tolerance)
141
+ assert_in_delta( @axes1[2][0], axes[2][0], $tolerance)
142
+ assert_in_delta( @axes1[2][1], axes[2][1], $tolerance)
143
+ assert_in_delta( @axes1[2][2], axes[2][2], $tolerance)
144
+ end
145
+
146
+ def test_self_axes_to_lc
147
+ correct = [ 1.0, 1.0, 1.0, 90.0, 90.0, 90.0 ]
148
+ assert_equal(correct, CrystalCell::LatticeAxes.axes_to_lc(@axes1))
149
+
150
+ #correct = [ 1.0, 1.0, 1.0, 90.0, 90.0, 90.0 ]
151
+ #assert_equal(correct, CrystalCell::LatticeAxes.axes_to_lc(@axes1))
152
+ end
153
+
154
+ def test_equal_in_delta?
155
+ assert_equal(true , @lc1.equal_in_delta?(@lc1, 0.01, 1.0))
156
+ assert_equal(false, @lc1.equal_in_delta?(@lc2, 0.01, 1.0))
157
+ assert_equal(false, @lc1.equal_in_delta?(@lc4, 0.01, 1.0))
158
+ assert_equal(false, @lc2.equal_in_delta?(@lc1, 0.01, 1.0))
159
+ assert_equal(true , @lc2.equal_in_delta?(@lc2, 0.01, 1.0))
160
+ assert_equal(true , @lc2.equal_in_delta?(@lc4, 0.01, 1.0))
161
+ assert_equal(false, @lc4.equal_in_delta?(@lc1, 0.01, 1.0))
162
+ assert_equal(true , @lc4.equal_in_delta?(@lc2, 0.01, 1.0))
163
+ assert_equal(true , @lc4.equal_in_delta?(@lc4, 0.01, 1.0))
164
+ end
165
+
166
+ def test_self_righthand?
167
+ # Righthand
168
+ assert_equal(true , CrystalCell::LatticeAxes.righthand?([ @vec_x, @vec_y, @vec_z ]))
169
+ assert_equal(true , CrystalCell::LatticeAxes.righthand?([ @vec_y, @vec_z, @vec_x ]))
170
+ assert_equal(true , CrystalCell::LatticeAxes.righthand?([ @vec_z, @vec_x, @vec_y ]))
171
+
172
+ # Lefthand
173
+ assert_equal(false, CrystalCell::LatticeAxes.righthand?([ @vec_z, @vec_y, @vec_x ]))
174
+ assert_equal(false, CrystalCell::LatticeAxes.righthand?([ @vec_x, @vec_z, @vec_y ]))
175
+ assert_equal(false, CrystalCell::LatticeAxes.righthand?([ @vec_y, @vec_x, @vec_z ]))
176
+
177
+ # Including zero vector.
178
+ assert_equal(false, CrystalCell::LatticeAxes.righthand?([ @vec_0, @vec_y, @vec_z ]))
179
+ assert_equal(false, CrystalCell::LatticeAxes.righthand?([ @vec_0, @vec_z, @vec_x ]))
180
+ assert_equal(false, CrystalCell::LatticeAxes.righthand?([ @vec_0, @vec_x, @vec_y ]))
181
+
182
+ # One vector is on the plane of residual two vectors.
183
+ assert_equal(false, CrystalCell::LatticeAxes.righthand?([ @vec_x, @vec_y, @vec_1 ]))
184
+ end
185
+
186
+ def test_self_lefthand?
187
+ # Righthand
188
+ assert_equal(false, CrystalCell::LatticeAxes.lefthand?([ @vec_x, @vec_y, @vec_z ]))
189
+ assert_equal(false, CrystalCell::LatticeAxes.lefthand?([ @vec_y, @vec_z, @vec_x ]))
190
+ assert_equal(false, CrystalCell::LatticeAxes.lefthand?([ @vec_z, @vec_x, @vec_y ]))
191
+
192
+ # Lefthand
193
+ assert_equal(true , CrystalCell::LatticeAxes.lefthand?([ @vec_z, @vec_y, @vec_x ]))
194
+ assert_equal(true , CrystalCell::LatticeAxes.lefthand?([ @vec_x, @vec_z, @vec_y ]))
195
+ assert_equal(true , CrystalCell::LatticeAxes.lefthand?([ @vec_y, @vec_x, @vec_z ]))
196
+
197
+ # Including zero vector.
198
+ assert_equal(false, CrystalCell::LatticeAxes.lefthand?([ @vec_0, @vec_y, @vec_z ]))
199
+ assert_equal(false, CrystalCell::LatticeAxes.lefthand?([ @vec_0, @vec_z, @vec_x ]))
200
+ assert_equal(false, CrystalCell::LatticeAxes.lefthand?([ @vec_0, @vec_x, @vec_y ]))
201
+
202
+ # One vector is on the plane of residual two vectors.
203
+ assert_equal(false, CrystalCell::LatticeAxes.lefthand?([ @vec_x, @vec_y, @vec_1 ]))
204
+ end
205
+
206
+ ## Instance methods.
207
+
208
+ def test_get_lattice_constants
209
+ assert_in_delta( 1.0, @lc1.get_lattice_constants[0], $tolerance)
210
+ assert_in_delta( 1.0, @lc1.get_lattice_constants[1], $tolerance)
211
+ assert_in_delta( 1.0, @lc1.get_lattice_constants[2], $tolerance)
212
+ assert_in_delta(90.0, @lc1.get_lattice_constants[3], $tolerance)
213
+ assert_in_delta(90.0, @lc1.get_lattice_constants[4], $tolerance)
214
+ assert_in_delta(90.0, @lc1.get_lattice_constants[5], $tolerance)
215
+ assert_in_delta(Math::sqrt(0.5), @lc2.get_lattice_constants[0], $tolerance)
216
+ assert_in_delta(Math::sqrt(0.5), @lc2.get_lattice_constants[1], $tolerance)
217
+ assert_in_delta(Math::sqrt(0.5), @lc2.get_lattice_constants[2], $tolerance)
218
+ assert_in_delta(60.0, @lc2.get_lattice_constants[3], $tolerance)
219
+ assert_in_delta(60.0, @lc2.get_lattice_constants[4], $tolerance)
220
+ assert_in_delta(60.0, @lc2.get_lattice_constants[5], $tolerance)
221
+ assert_in_delta( 1.0, @lc3.get_lattice_constants[0], $tolerance)
222
+ assert_in_delta( 1.0, @lc3.get_lattice_constants[1], $tolerance)
223
+ assert_in_delta( 1.0, @lc3.get_lattice_constants[2], $tolerance)
224
+ assert_in_delta(90.0, @lc3.get_lattice_constants[3], $tolerance)
225
+ assert_in_delta(90.0, @lc3.get_lattice_constants[4], $tolerance)
226
+ assert_in_delta(90.0, @lc3.get_lattice_constants[5], $tolerance)
227
+ assert_in_delta(Math::sqrt(0.5), @lc4.get_lattice_constants[0], $tolerance)
228
+ assert_in_delta(Math::sqrt(0.5), @lc4.get_lattice_constants[1], $tolerance)
229
+ assert_in_delta(Math::sqrt(0.5), @lc4.get_lattice_constants[2], $tolerance)
230
+ assert_in_delta(60.0, @lc4.get_lattice_constants[3], $tolerance)
231
+ assert_in_delta(60.0, @lc4.get_lattice_constants[4], $tolerance)
232
+ assert_in_delta(60.0, @lc4.get_lattice_constants[5], $tolerance)
233
+ end
234
+
235
+ def test_righthand?
236
+ assert_equal(true , @lc1.righthand?)
237
+ assert_equal(false, @lc2.righthand?)
238
+ end
239
+
240
+ def test_lefthand?
241
+ assert_equal(false, @lc1.lefthand?)
242
+ assert_equal(true , @lc2.lefthand?)
243
+ end
244
+
245
+ #def test_internal2cartesian
246
+ # assert_raise(CrystalCell::LatticeAxes::TypeError){
247
+ # @lc5.internal2cartesian([ 2.0, 3.0, 4.0 ])
248
+ # }
249
+ # assert_in_delta(2.0, @lc5.internal2cartesian([ 2.0, 3.0, 4.0 ])[0], $tolerance)
250
+ # assert_in_delta(5.0, @lc5.internal2cartesian([ 2.0, 3.0, 4.0 ])[1], $tolerance)
251
+ # assert_in_delta(9.0, @lc5.internal2cartesian([ 2.0, 3.0, 4.0 ])[2], $tolerance)
252
+ #end
253
+
254
+ #def test_cartesian2internal
255
+ # assert_in_delta(2.0, @lc5.cartesian2internal([ 2.0, 5.0, 9.0 ])[0], $tolerance)
256
+ # assert_in_delta(3.0, @lc5.cartesian2internal([ 2.0, 5.0, 9.0 ])[1], $tolerance)
257
+ # assert_in_delta(4.0, @lc5.cartesian2internal([ 2.0, 5.0, 9.0 ])[2], $tolerance)
258
+ #end
259
+
260
+ def test_equal
261
+ assert_equal(true , @lc1 == @lc1)
262
+ assert_equal(true , @lc2 == @lc2)
263
+ assert_equal(true , @lc3 == @lc3)
264
+
265
+ assert_equal(false, @lc1 == @lc2)
266
+ assert_equal(false, @lc2 == @lc3)
267
+ assert_equal(true , @lc3 == @lc1)
268
+
269
+ assert_equal(true , @lc1 == @lc3)
270
+ assert_equal(false, @lc2 == @lc1)
271
+ assert_equal(false, @lc3 == @lc2)
272
+ end
273
+
274
+ def test_triangulate
275
+ t = CrystalCell::LatticeAxes.new([ [0.5, 0.5, 0.0], [0.0, 0.5, 0.5], [0.5, 0.0, 0.5] ])
276
+ assert_in_delta(0.577350269189626, t[0][0], $tolerance)
277
+ assert_in_delta(0.204124145231932, t[0][1], $tolerance)
278
+ assert_in_delta(0.353553390593274, t[0][2], $tolerance)
279
+ assert_in_delta(0.000000000000000, t[1][0], $tolerance)
280
+ assert_in_delta(0.612372435695795, t[1][1], $tolerance)
281
+ assert_in_delta(0.353553390593274, t[1][2], $tolerance)
282
+ assert_in_delta(0.000000000000000, t[2][0], $tolerance)
283
+ assert_in_delta(0.000000000000000, t[2][1], $tolerance)
284
+ assert_in_delta(0.707106781186548, t[2][2], $tolerance)
285
+ end
286
+
287
+ #def test_rotate
288
+ # #@lc1 = CrystalCell::LatticeAxes.new([ [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0] ])
289
+ # @lc1.rotate(0, 1, 2)
290
+ #
291
+ # TODO
292
+ #end
288
293
 
289
294
 
290
295
  end