crystalcell 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/test/test_atom.rb ADDED
@@ -0,0 +1,210 @@
1
+ #! /usr/bin/ruby
2
+
3
+ require "test/unit"
4
+ require "crystalcell/atom.rb"
5
+ require "rubygems"
6
+ gem "mageo"
7
+ require "mageo/vector3d.rb"
8
+
9
+ class TC_Atom < Test::Unit::TestCase
10
+ $tolerance = 10.0 ** (-10)
11
+
12
+ def setup
13
+ @a0 = Atom.new("Li", [ 0.0, 0.0, 0.0 ])
14
+ @a1 = Atom.new("Li", [ 1.0, 1.0, 1.0 ])
15
+ @a2 = Atom.new("Li", [ 0.0, 0.0, 0.0 ])
16
+ @a3 = Atom.new("Be", [ 0.0, 0.0, 0.0 ])
17
+ @a4 = Atom.new("Li", [ 1.0, 2.3, 4.5 ])
18
+ @a5 = Atom.new("Li", [-1.0,-2.3,-4.5 ])
19
+ @a6 = Atom.new( 3, [-1.0,-2.3,-4.5 ])
20
+ end
21
+
22
+ def test_initialize
23
+ assert_raise(Atom::TypeError){ Atom.new(nil, nil, nil) }
24
+ assert_raise(Atom::TypeError){ Atom.new(nil, nil, "A") }
25
+ assert_raise(Atom::TypeError){ Atom.new(nil, [0.0, 0.0], "A") }
26
+ assert_raise(Atom::TypeError){ Atom.new(nil, [0.0, 0.0, 0.0, 0.0], "A") }
27
+ a0 = Atom.new(nil, [ 0.0, 0.0, 0.0], nil)
28
+ a1 = Atom.new(nil, [ 0.0, 0.0, 0.0], "A")
29
+ assert_equal(nil, a0.name)
30
+ assert_equal("A", a1.name)
31
+ end
32
+
33
+ def test_equal_in_delta?
34
+ assert_equal(true , Atom.equal_in_delta?(@a0, @a0))
35
+ assert_equal(false, Atom.equal_in_delta?(@a0, @a1))
36
+ assert_equal(true , Atom.equal_in_delta?(@a0, @a2))
37
+ assert_equal(false, Atom.equal_in_delta?(@a0, @a3))
38
+ assert_equal(false, Atom.equal_in_delta?(@a1, @a0))
39
+ assert_equal(true , Atom.equal_in_delta?(@a1, @a1))
40
+ assert_equal(false, Atom.equal_in_delta?(@a1, @a2))
41
+ assert_equal(false, Atom.equal_in_delta?(@a1, @a3))
42
+ assert_equal(true , Atom.equal_in_delta?(@a2, @a0))
43
+ assert_equal(false, Atom.equal_in_delta?(@a2, @a1))
44
+ assert_equal(true , Atom.equal_in_delta?(@a2, @a2))
45
+ assert_equal(false, Atom.equal_in_delta?(@a2, @a3))
46
+ assert_equal(false, Atom.equal_in_delta?(@a3, @a0))
47
+ assert_equal(false, Atom.equal_in_delta?(@a3, @a1))
48
+ assert_equal(false, Atom.equal_in_delta?(@a3, @a2))
49
+ assert_equal(true , Atom.equal_in_delta?(@a3, @a3))
50
+
51
+ assert_equal(true , Atom.equal_in_delta?(@a0, @a0, 2.0))
52
+ assert_equal(true , Atom.equal_in_delta?(@a0, @a1, 2.0))
53
+ assert_equal(true , Atom.equal_in_delta?(@a0, @a2, 2.0))
54
+ assert_equal(false, Atom.equal_in_delta?(@a0, @a3, 2.0))
55
+ assert_equal(true , Atom.equal_in_delta?(@a1, @a0, 2.0))
56
+ assert_equal(true , Atom.equal_in_delta?(@a1, @a1, 2.0))
57
+ assert_equal(true , Atom.equal_in_delta?(@a1, @a2, 2.0))
58
+ assert_equal(false, Atom.equal_in_delta?(@a1, @a3, 2.0))
59
+ assert_equal(true , Atom.equal_in_delta?(@a2, @a0, 2.0))
60
+ assert_equal(true , Atom.equal_in_delta?(@a2, @a1, 2.0))
61
+ assert_equal(true , Atom.equal_in_delta?(@a2, @a2, 2.0))
62
+ assert_equal(false, Atom.equal_in_delta?(@a2, @a3, 2.0))
63
+ assert_equal(false, Atom.equal_in_delta?(@a3, @a0, 2.0))
64
+ assert_equal(false, Atom.equal_in_delta?(@a3, @a1, 2.0))
65
+ assert_equal(false, Atom.equal_in_delta?(@a3, @a2, 2.0))
66
+ assert_equal(true , Atom.equal_in_delta?(@a3, @a3, 2.0))
67
+
68
+ assert_equal(true , @a0.equal_in_delta?(@a0))
69
+ assert_equal(false, @a0.equal_in_delta?(@a1))
70
+ assert_equal(true , @a0.equal_in_delta?(@a2))
71
+ assert_equal(false, @a0.equal_in_delta?(@a3))
72
+ assert_equal(false, @a1.equal_in_delta?(@a0))
73
+ assert_equal(true , @a1.equal_in_delta?(@a1))
74
+ assert_equal(false, @a1.equal_in_delta?(@a2))
75
+ assert_equal(false, @a1.equal_in_delta?(@a3))
76
+ assert_equal(true , @a2.equal_in_delta?(@a0))
77
+ assert_equal(false, @a2.equal_in_delta?(@a1))
78
+ assert_equal(true , @a2.equal_in_delta?(@a2))
79
+ assert_equal(false, @a2.equal_in_delta?(@a3))
80
+ assert_equal(false, @a3.equal_in_delta?(@a0))
81
+ assert_equal(false, @a3.equal_in_delta?(@a1))
82
+ assert_equal(false, @a3.equal_in_delta?(@a2))
83
+ assert_equal(true , @a3.equal_in_delta?(@a3))
84
+
85
+ assert_equal(true , @a0.equal_in_delta?(@a0, 2.0))
86
+ assert_equal(true , @a0.equal_in_delta?(@a1, 2.0))
87
+ assert_equal(true , @a0.equal_in_delta?(@a2, 2.0))
88
+ assert_equal(false, @a0.equal_in_delta?(@a3, 2.0))
89
+ assert_equal(true , @a1.equal_in_delta?(@a0, 2.0))
90
+ assert_equal(true , @a1.equal_in_delta?(@a1, 2.0))
91
+ assert_equal(true , @a1.equal_in_delta?(@a2, 2.0))
92
+ assert_equal(false, @a1.equal_in_delta?(@a3, 2.0))
93
+ assert_equal(true , @a2.equal_in_delta?(@a0, 2.0))
94
+ assert_equal(true , @a2.equal_in_delta?(@a1, 2.0))
95
+ assert_equal(true , @a2.equal_in_delta?(@a2, 2.0))
96
+ assert_equal(false, @a2.equal_in_delta?(@a3, 2.0))
97
+ assert_equal(false, @a3.equal_in_delta?(@a0, 2.0))
98
+ assert_equal(false, @a3.equal_in_delta?(@a1, 2.0))
99
+ assert_equal(false, @a3.equal_in_delta?(@a2, 2.0))
100
+ assert_equal(true , @a3.equal_in_delta?(@a3, 2.0))
101
+ end
102
+
103
+ def test_equal
104
+ assert_equal(true, @a0 == Atom.new("Li", [0.0, 0.0, 0.0]))
105
+ assert_equal(true, @a1 == Atom.new("Li", [1.0, 1.0, 1.0]))
106
+ assert_equal(true, @a2 == Atom.new("Li", [0.0, 0.0, 0.0]))
107
+ assert_equal(true, @a3 == Atom.new("Be", [0.0, 0.0, 0.0]))
108
+
109
+ assert_equal(false, @a0 == Atom.new("Li", [0.9, 0.0, 0.0]))
110
+ assert_equal(false, @a1 == Atom.new("Li", [1.1, 1.0, 1.0]))
111
+ assert_equal(false, @a2 == Atom.new("Li", [0.9, 0.0, 0.0]))
112
+ assert_equal(false, @a3 == Atom.new("Be", [0.9, 0.0, 0.0]))
113
+ end
114
+
115
+ def test_internal_coordinates
116
+ assert_equal(Vector3DInternal[ 0.0, 0.0, 0.0 ], @a0.internal_coordinates)
117
+ assert_equal(Vector3DInternal[ 0.0, 0.0, 0.0 ], @a1.internal_coordinates)
118
+ assert_equal(Vector3DInternal[ 0.0, 0.0, 0.0 ], @a2.internal_coordinates)
119
+ assert_equal(Vector3DInternal[ 0.0, 0.0, 0.0 ], @a3.internal_coordinates)
120
+
121
+ assert_equal(Vector3DInternal, @a4.internal_coordinates.class)
122
+ assert_in_delta(0.0, @a4.internal_coordinates[0], $tolerance)
123
+ assert_in_delta(0.3, @a4.internal_coordinates[1], $tolerance)
124
+ assert_in_delta(0.5, @a4.internal_coordinates[2], $tolerance)
125
+
126
+ assert_equal(Vector3DInternal, @a5.internal_coordinates.class)
127
+ assert_in_delta(0.0, @a5.internal_coordinates[0], $tolerance)
128
+ assert_in_delta(0.7, @a5.internal_coordinates[1], $tolerance)
129
+ assert_in_delta(0.5, @a5.internal_coordinates[2], $tolerance)
130
+ end
131
+
132
+ def test_translation_symmetry_operation
133
+ assert_equal(Vector3DInternal[ 0, 0, 0 ], @a0.translation_symmetry_operation)
134
+ assert_equal(Vector3DInternal[ 1, 1, 1 ], @a1.translation_symmetry_operation)
135
+ assert_equal(Vector3DInternal[ 0, 0, 0 ], @a2.translation_symmetry_operation)
136
+ assert_equal(Vector3DInternal[ 0, 0, 0 ], @a3.translation_symmetry_operation)
137
+ assert_equal(Vector3DInternal[ 1, 2, 4 ], @a4.translation_symmetry_operation)
138
+ assert_equal(Vector3DInternal[-1,-3,-5 ], @a5.translation_symmetry_operation)
139
+ end
140
+
141
+ def test_set_position
142
+ assert_equal(Vector3DInternal[ 1.2, 2.3, 3.4 ], @a3.set_position([ 1.2, 2.3, 3.4 ]))
143
+ assert_equal(Vector3DInternal[ 2.3, 3.4, 4.5 ], @a4.set_position([ 2.3, 3.4, 4.5 ]))
144
+ assert_raise(Atom::TypeError){
145
+ @a4.set_position(Vector3D[ 2.3, 3.4, 4.5 ])
146
+ }
147
+ end
148
+
149
+ def test_element
150
+ @a6.element = "Li"
151
+ assert_equal(@a5, @a6)
152
+ end
153
+
154
+ def test_translate!
155
+ @a0.translate!([ 1.2, 3.4, 5.6 ])
156
+ assert_equal("Li", @a0.element)
157
+ assert_in_delta(1.2 , @a0.position[0], $tolerance)
158
+ assert_in_delta(3.4 , @a0.position[1], $tolerance)
159
+ assert_in_delta(5.6 , @a0.position[2], $tolerance)
160
+
161
+ @a3.translate!([ 1.2, 3.4, 5.6 ])
162
+ assert_equal("Be", @a3.element)
163
+ assert_in_delta(1.2 , @a3.position[0], $tolerance)
164
+ assert_in_delta(3.4 , @a3.position[1], $tolerance)
165
+ assert_in_delta(5.6 , @a3.position[2], $tolerance)
166
+
167
+
168
+ @a5.translate!([ 1.0, 1.0, 1.0 ])
169
+ assert_equal("Li", @a5.element)
170
+ assert_in_delta(0.0 , @a5.position[0], $tolerance)
171
+ assert_in_delta(-1.3 , @a5.position[1], $tolerance)
172
+ assert_in_delta(-3.5 , @a5.position[2], $tolerance)
173
+
174
+ # Vector3D なら例外
175
+ assert_raise(Atom::TypeError){ @a0.translate!(Vector3D[ 0.0, 0.0, 0.0 ]) }
176
+
177
+ # 3次元でなければ例外
178
+ assert_raise(Atom::TypeError){ @a0.translate!([ 0.0, 0.0 ]) }
179
+ assert_raise(Atom::TypeError){ @a0.translate!([ 0.0, 0.0, 0.0, 0.0 ]) }
180
+ end
181
+
182
+ def test_translate
183
+ t = @a0.translate([ 1.2, 3.4, 5.6 ])
184
+ assert_equal("Li", t.element)
185
+ assert_in_delta(1.2, t.position[0], $tolerance)
186
+ assert_in_delta(3.4, t.position[1], $tolerance)
187
+ assert_in_delta(5.6, t.position[2], $tolerance)
188
+
189
+ t = @a3.translate([ 1.2, 3.4, 5.6 ])
190
+ assert_equal("Be", t.element)
191
+ assert_in_delta(1.2, t.position[0], $tolerance)
192
+ assert_in_delta(3.4, t.position[1], $tolerance)
193
+ assert_in_delta(5.6, t.position[2], $tolerance)
194
+
195
+ t = @a5.translate([ 1.0, 1.0, 1.0 ])
196
+ assert_equal("Li", t.element)
197
+ assert_in_delta(0.0, t.position[0], $tolerance)
198
+ assert_in_delta(-1.3, t.position[1], $tolerance)
199
+ assert_in_delta(-3.5, t.position[2], $tolerance)
200
+
201
+ # Vector3D なら例外
202
+ assert_raise(Atom::TypeError){ @a0.translate(Vector3D[ 0.0, 0.0, 0.0 ]) }
203
+
204
+ # 3次元でなければ例外
205
+ assert_raise(Atom::TypeError){ @a0.translate([ 0.0, 0.0 ]) }
206
+ assert_raise(Atom::TypeError){ @a0.translate([ 0.0, 0.0, 0.0, 0.0 ]) }
207
+ end
208
+
209
+ end
210
+