1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import java.util.stream.IntStream;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.junit.jupiter.params.provider.MethodSource;
import org.junit.jupiter.params.provider.NullAndEmptySource;
import com.github.tschoonj.xraylib.Xraylib;
import com.github.tschoonj.xraylib.Crystal_Struct;
public class TestCrystalDiffraction {
private Crystal_Struct cs;
@BeforeEach
public void init() {
cs = Xraylib.Crystal_GetCrystal("Diamond");
}
@Test
public void test_list_crystals() {
String[] crystals_list = Xraylib.Crystal_GetCrystalsList();
assertEquals(crystals_list.length, 38);
for (String crystal_name : crystals_list) {
Crystal_Struct cs = Xraylib.Crystal_GetCrystal(crystal_name);
assertEquals(crystal_name, cs.name);
}
}
@ParameterizedTest(name="test_get_crystal {index} -> {arguments}")
@NullAndEmptySource
@ValueSource(strings = {"non-existent-crystal"})
public void test_get_crystal(String crystal) {
assertThrows(IllegalArgumentException.class, () -> {
Crystal_Struct cs = Xraylib.Crystal_GetCrystal(crystal);
});
}
@Test
public void test_bragg_angle() {
double angle = cs.Bragg_angle(10.0, 1, 1, 1);
assertEquals(angle, 0.3057795845795849, 1E-6);
IllegalArgumentException exc = assertThrows(IllegalArgumentException.class, () -> {
double angle2 = cs.Bragg_angle(-10.0, 1, 1, 1);
});
assertEquals(exc.getMessage(), Xraylib.NEGATIVE_ENERGY);
exc = assertThrows(IllegalArgumentException.class, () -> {
double angle2 = cs.Bragg_angle(10.0, 0, 0, 0);
});
assertEquals(exc.getMessage(), Xraylib.INVALID_MILLER);
}
@Test
public void test_Q_scattering_amplitude() {
double tmp = cs.Q_scattering_amplitude(10.0, 1, 1, 1, Math.PI/4.0);
assertEquals(tmp, 0.19184445408324474, 1E-6);
tmp = cs.Q_scattering_amplitude(10.0, 0, 0, 0, Math.PI/4.0);
assertEquals(tmp, 0.0);
IllegalArgumentException exc = assertThrows(IllegalArgumentException.class, () -> {
double tmp2 = cs.Q_scattering_amplitude(-10.0, 1, 1, 1, Math.PI/4.0);
});
assertEquals(exc.getMessage(), Xraylib.NEGATIVE_ENERGY);
}
@Test
public void test_atomic_factors() {
double[] factors = Xraylib.Atomic_Factors(26, 10.0, 1.0, 10.0);
assertArrayEquals(factors, new double[]{65.15, -0.22193271025027966, 22.420270655080493}, 1E-6);
IllegalArgumentException exc = assertThrows(IllegalArgumentException.class, () -> {
double[] factors2 = Xraylib.Atomic_Factors(-1, 10.0, 1.0, 10.0);
});
assertEquals(exc.getMessage(), Xraylib.Z_OUT_OF_RANGE);
exc = assertThrows(IllegalArgumentException.class, () -> {
double[] factors2 = Xraylib.Atomic_Factors(26, -10.0, 1.0, 10.0);
});
assertEquals(exc.getMessage(), Xraylib.NEGATIVE_ENERGY);
exc = assertThrows(IllegalArgumentException.class, () -> {
double[] factors2 = Xraylib.Atomic_Factors(26, 10.0, -1.0, 10.0);
});
assertEquals(exc.getMessage(), Xraylib.NEGATIVE_Q);
exc = assertThrows(IllegalArgumentException.class, () -> {
double[] factors2 = Xraylib.Atomic_Factors(26, 10.0, 1.0, -10.0);
});
assertEquals(exc.getMessage(), Xraylib.NEGATIVE_DEBYE_FACTOR);
}
@Test
public void test_unit_cell_volume() {
double tmp = cs.Crystal_UnitCellVolume();
assertEquals(tmp, 45.376673902751, 1E-5);
}
@Test
public void test_dspacing() {
double tmp = cs.Crystal_dSpacing(1, 1, 1);
assertEquals(tmp, 2.0592870875248344, 1E-6);
IllegalArgumentException exc = assertThrows(IllegalArgumentException.class, () -> {
double tmp2 = cs.Crystal_dSpacing(0, 0, 0);
});
assertEquals(exc.getMessage(), Xraylib.INVALID_MILLER);
}
/* TODO: Test Crystal_F_H_StructureFactor and Crystal_F_H_StructureFactor_Partial */
}
|