crystalcell 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,294 @@
1
+ #! /usr/bin/ruby
2
+
3
+ require "test/unit"
4
+ require "rubygems"
5
+ gem "mageo"
6
+ require "mageo/vector3d.rb"
7
+ require "crystalcell/latticeaxes.rb"
8
+
9
+ class LatticeAxes
10
+ #public :triangulate, :rotate
11
+ #public :rotate
12
+ end
13
+
14
+ 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
291
+
292
+
293
+ end
294
+