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) {
|
public void add(final ScaleMeasurement summand) {
|
||||||
weight += summand.getWeight();
|
try {
|
||||||
fat += summand.getFat();
|
Field[] fields = getClass().getDeclaredFields();
|
||||||
water += summand.getWater();
|
|
||||||
muscle += summand.getMuscle();
|
for (Field field : fields) {
|
||||||
lbw += summand.getLbw();
|
field.setAccessible(true);
|
||||||
bone += summand.getBone();
|
Object value = field.get(this);
|
||||||
waist += summand.getWaist();
|
|
||||||
hip += summand.getHip();
|
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) {
|
public void divide(final float divisor) {
|
||||||
weight /= divisor;
|
try {
|
||||||
fat /= divisor;
|
Field[] fields = getClass().getDeclaredFields();
|
||||||
water /= divisor;
|
|
||||||
muscle /= divisor;
|
for (Field field : fields) {
|
||||||
lbw /= divisor;
|
field.setAccessible(true);
|
||||||
bone /= divisor;
|
Object value = field.get(this);
|
||||||
waist /= divisor;
|
if (value != null && Float.class.isAssignableFrom(value.getClass())) {
|
||||||
hip /= divisor;
|
field.set(this, (float)value / divisor);
|
||||||
|
}
|
||||||
|
field.setAccessible(false);
|
||||||
|
}
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
Log.e("ScaleMeasurement", "Error: " + e.getMessage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void merge(ScaleMeasurement measurements) {
|
public void merge(ScaleMeasurement measurements) {
|
||||||
@@ -134,7 +147,7 @@ public class ScaleMeasurement implements Cloneable {
|
|||||||
for (Field field : fields) {
|
for (Field field : fields) {
|
||||||
field.setAccessible(true);
|
field.setAccessible(true);
|
||||||
Object value = field.get(measurements);
|
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) {
|
if ((float)field.get(this) == 0.0f) {
|
||||||
field.set(this, value);
|
field.set(this, value);
|
||||||
}
|
}
|
||||||
|
@@ -17,18 +17,18 @@ package com.health.openscale;
|
|||||||
|
|
||||||
import com.health.openscale.core.datatypes.ScaleMeasurement;
|
import com.health.openscale.core.datatypes.ScaleMeasurement;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import static junit.framework.Assert.assertEquals;
|
import static junit.framework.Assert.assertEquals;
|
||||||
|
|
||||||
public class MeasurementTest {
|
public class MeasurementTest {
|
||||||
private static final double DELTA = 1e-15;
|
private static final double DELTA = 1e-15;
|
||||||
|
private ScaleMeasurement measurementA = new ScaleMeasurement();
|
||||||
|
private ScaleMeasurement measurementB = new ScaleMeasurement();
|
||||||
|
|
||||||
@Test
|
@Before
|
||||||
public void mergeTest() throws InstantiationException, IllegalAccessException {
|
public void initData() {
|
||||||
ScaleMeasurement measurementA = new ScaleMeasurement();
|
|
||||||
ScaleMeasurement measurementB = new ScaleMeasurement();
|
|
||||||
|
|
||||||
measurementA.setWeight(80.0f);
|
measurementA.setWeight(80.0f);
|
||||||
measurementA.setBone(3.0f);
|
measurementA.setBone(3.0f);
|
||||||
measurementA.setMuscle(55.0f);
|
measurementA.setMuscle(55.0f);
|
||||||
@@ -37,7 +37,10 @@ public class MeasurementTest {
|
|||||||
measurementB.setBone(10.0f);
|
measurementB.setBone(10.0f);
|
||||||
measurementB.setHip(5.0f);
|
measurementB.setHip(5.0f);
|
||||||
measurementB.setWater(12.0f);
|
measurementB.setWater(12.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void mergeTest() {
|
||||||
measurementA.merge(measurementB);
|
measurementA.merge(measurementB);
|
||||||
|
|
||||||
assertEquals(80.0f, measurementA.getWeight(), DELTA);
|
assertEquals(80.0f, measurementA.getWeight(), DELTA);
|
||||||
@@ -46,4 +49,25 @@ public class MeasurementTest {
|
|||||||
assertEquals( 12.0f, measurementA.getWater(), DELTA);
|
assertEquals( 12.0f, measurementA.getWater(), DELTA);
|
||||||
assertEquals( 55.0f, measurementA.getMuscle(), 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