crystalcell 0.0.0 → 0.0.1

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