mirror of
https://github.com/oliexdev/openScale.git
synced 2025-09-01 20:33:31 +02:00
use generic java reflection to divide and add scale measurements
This commit is contained in:
@@ -106,25 +106,38 @@ public class ScaleMeasurement implements Cloneable {
|
||||
}
|
||||
|
||||
public void add(final ScaleMeasurement summand) {
|
||||
weight += summand.getWeight();
|
||||
fat += summand.getFat();
|
||||
water += summand.getWater();
|
||||
muscle += summand.getMuscle();
|
||||
lbw += summand.getLbw();
|
||||
bone += summand.getBone();
|
||||
waist += summand.getWaist();
|
||||
hip += summand.getHip();
|
||||
try {
|
||||
Field[] fields = getClass().getDeclaredFields();
|
||||
|
||||
for (Field field : fields) {
|
||||
field.setAccessible(true);
|
||||
Object value = field.get(this);
|
||||
|
||||
if (value != null && Float.class.isAssignableFrom(value.getClass())) {
|
||||
field.set(this, (float)value + (float)field.get(summand));
|
||||
}
|
||||
field.setAccessible(false);
|
||||
}
|
||||
} catch (IllegalAccessException e) {
|
||||
Log.e("ScaleMeasurement", "Error: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public void divide(final float divisor) {
|
||||
weight /= divisor;
|
||||
fat /= divisor;
|
||||
water /= divisor;
|
||||
muscle /= divisor;
|
||||
lbw /= divisor;
|
||||
bone /= divisor;
|
||||
waist /= divisor;
|
||||
hip /= divisor;
|
||||
try {
|
||||
Field[] fields = getClass().getDeclaredFields();
|
||||
|
||||
for (Field field : fields) {
|
||||
field.setAccessible(true);
|
||||
Object value = field.get(this);
|
||||
if (value != null && Float.class.isAssignableFrom(value.getClass())) {
|
||||
field.set(this, (float)value / divisor);
|
||||
}
|
||||
field.setAccessible(false);
|
||||
}
|
||||
} catch (IllegalAccessException e) {
|
||||
Log.e("ScaleMeasurement", "Error: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public void merge(ScaleMeasurement measurements) {
|
||||
@@ -134,7 +147,7 @@ public class ScaleMeasurement implements Cloneable {
|
||||
for (Field field : fields) {
|
||||
field.setAccessible(true);
|
||||
Object value = field.get(measurements);
|
||||
if (Float.class.isAssignableFrom(value.getClass())) {
|
||||
if (value != null && Float.class.isAssignableFrom(value.getClass())) {
|
||||
if ((float)field.get(this) == 0.0f) {
|
||||
field.set(this, value);
|
||||
}
|
||||
|
@@ -17,18 +17,18 @@ package com.health.openscale;
|
||||
|
||||
import com.health.openscale.core.datatypes.ScaleMeasurement;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
|
||||
public class MeasurementTest {
|
||||
private static final double DELTA = 1e-15;
|
||||
private ScaleMeasurement measurementA = new ScaleMeasurement();
|
||||
private ScaleMeasurement measurementB = new ScaleMeasurement();
|
||||
|
||||
@Test
|
||||
public void mergeTest() throws InstantiationException, IllegalAccessException {
|
||||
ScaleMeasurement measurementA = new ScaleMeasurement();
|
||||
ScaleMeasurement measurementB = new ScaleMeasurement();
|
||||
|
||||
@Before
|
||||
public void initData() {
|
||||
measurementA.setWeight(80.0f);
|
||||
measurementA.setBone(3.0f);
|
||||
measurementA.setMuscle(55.0f);
|
||||
@@ -37,7 +37,10 @@ public class MeasurementTest {
|
||||
measurementB.setBone(10.0f);
|
||||
measurementB.setHip(5.0f);
|
||||
measurementB.setWater(12.0f);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void mergeTest() {
|
||||
measurementA.merge(measurementB);
|
||||
|
||||
assertEquals(80.0f, measurementA.getWeight(), DELTA);
|
||||
@@ -46,4 +49,25 @@ public class MeasurementTest {
|
||||
assertEquals( 12.0f, measurementA.getWater(), DELTA);
|
||||
assertEquals( 55.0f, measurementA.getMuscle(), DELTA);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void divideTest() {
|
||||
measurementA.divide(2.0f);
|
||||
|
||||
assertEquals(40.0f, measurementA.getWeight(), DELTA);
|
||||
assertEquals(1.5f, measurementA.getBone(), DELTA);
|
||||
assertEquals(27.5f, measurementA.getMuscle(), DELTA);
|
||||
assertEquals(0.0f, measurementA.getWater(), DELTA);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addTest() {
|
||||
measurementA.add(measurementB);
|
||||
|
||||
assertEquals(170.0f, measurementA.getWeight(), DELTA);
|
||||
assertEquals(13.0f, measurementA.getBone(), DELTA);
|
||||
assertEquals(55.0f, measurementA.getMuscle(), DELTA);
|
||||
assertEquals(12.0f, measurementA.getWater(), DELTA);
|
||||
assertEquals(5.0f, measurementA.getHip(), DELTA);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user