blob: cbaabf770e0ff068b3264870483515d7ca8658d0 [file] [log] [blame]
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.location.cts.fine;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import android.location.GnssAntennaInfo;
import android.location.GnssAntennaInfo.PhaseCenterOffset;
import android.location.GnssAntennaInfo.SphericalCorrections;
import android.os.Parcel;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* Tests fundamental functionality of GnssAntennaInfo class. This includes writing and reading from
* parcel, and verifying computed values and getters.
*/
@RunWith(AndroidJUnit4.class)
public class GnssAntennaInfoTest {
private static final double PRECISION = 0.0001;
private static final double[][] PHASE_CENTER_VARIATION_CORRECTIONS = new double[][]{
{5.29, 0.20, 7.15, 10.18, 9.47, 8.05},
{11.93, 3.98, 2.68, 2.66, 8.15, 13.54},
{14.69, 7.63, 13.46, 8.70, 4.36, 1.21},
{4.19, 12.43, 12.40, 0.90, 1.96, 1.99},
{7.30, 0.49, 7.43, 8.71, 3.70, 7.24},
{4.79, 1.88, 13.88, 3.52, 13.40, 11.81}
};
private static final double[][] PHASE_CENTER_VARIATION_CORRECTION_UNCERTAINTIES = new double[][]{
{1.77, 0.81, 0.72, 1.65, 2.35, 1.22},
{0.77, 3.43, 2.77, 0.97, 4.55, 1.38},
{1.51, 2.50, 2.23, 2.43, 1.94, 0.90},
{0.34, 4.72, 4.14, 4.78, 4.57, 1.69},
{4.49, 0.05, 2.78, 1.33, 3.20, 2.75},
{1.09, 0.31, 3.79, 4.32, 0.65, 1.23}
};
private static final double[][] SIGNAL_GAIN_CORRECTIONS = new double[][]{
{0.19, 7.04, 1.65, 14.84, 2.95, 9.21},
{0.45, 6.27, 14.57, 8.95, 3.92, 12.68},
{6.80, 13.04, 7.92, 2.23, 14.22, 7.36},
{4.81, 11.78, 5.04, 5.13, 12.09, 12.85},
{0.88, 4.04, 5.71, 3.72, 12.62, 0.40},
{14.26, 9.50, 4.21, 11.14, 6.54, 14.63}
};
private static final double[][] SIGNAL_GAIN_CORRECTION_UNCERTAINTIES = new double[][]{
{4.74, 1.54, 1.59, 4.05, 1.65, 2.46},
{0.10, 0.33, 0.84, 0.83, 0.57, 2.66},
{2.08, 1.46, 2.10, 3.25, 1.48, 0.65},
{4.02, 2.90, 2.51, 2.13, 1.67, 1.23},
{2.13, 4.30, 1.36, 3.86, 1.02, 2.96},
{3.22, 3.95, 3.75, 1.73, 1.91, 4.93}
};
@Test
public void testFullAntennaInfoDescribeContents() {
GnssAntennaInfo gnssAntennaInfo = createFullTestGnssAntennaInfo();
assertEquals(0, gnssAntennaInfo.describeContents());
}
@Test
public void testPartialAntennaInfoDescribeContents() {
GnssAntennaInfo gnssAntennaInfo = createPartialTestGnssAntennaInfo();
assertEquals(0, gnssAntennaInfo.describeContents());
}
@Test
public void testFullAntennaInfoWriteToParcel() {
GnssAntennaInfo gnssAntennaInfo = createFullTestGnssAntennaInfo();
Parcel parcel = Parcel.obtain();
gnssAntennaInfo.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
GnssAntennaInfo newGnssAntennaInfo = GnssAntennaInfo.CREATOR.createFromParcel(parcel);
verifyFullGnssAntennaInfoValuesAndGetters(newGnssAntennaInfo);
parcel.recycle();
}
@Test
public void testPartialAntennaInfoWriteToParcel() {
GnssAntennaInfo gnssAntennaInfo = createPartialTestGnssAntennaInfo();
Parcel parcel = Parcel.obtain();
gnssAntennaInfo.writeToParcel(parcel, 0);
parcel.setDataPosition(0);
GnssAntennaInfo newGnssAntennaInfo = GnssAntennaInfo.CREATOR.createFromParcel(parcel);
verifyPartialGnssAntennaInfoValuesAndGetters(newGnssAntennaInfo);
parcel.recycle();
}
@Test
public void testCreateFullGnssAntennaInfoAndGetValues() {
GnssAntennaInfo gnssAntennaInfo = createFullTestGnssAntennaInfo();
verifyFullGnssAntennaInfoValuesAndGetters(gnssAntennaInfo);
}
@Test
public void testCreatePartialGnssAntennaInfoAndGetValues() {
GnssAntennaInfo gnssAntennaInfo = createPartialTestGnssAntennaInfo();
verifyPartialGnssAntennaInfoValuesAndGetters(gnssAntennaInfo);
}
private static GnssAntennaInfo createFullTestGnssAntennaInfo() {
double carrierFrequencyMHz = 13758.0;
GnssAntennaInfo.PhaseCenterOffset phaseCenterOffset = new
GnssAntennaInfo.PhaseCenterOffset(
4.3d,
1.4d,
2.10d,
2.1d,
3.12d,
0.5d);
double[][] phaseCenterVariationCorrectionsMillimeters = PHASE_CENTER_VARIATION_CORRECTIONS;
double[][] phaseCenterVariationCorrectionsUncertaintyMillimeters =
PHASE_CENTER_VARIATION_CORRECTION_UNCERTAINTIES;
SphericalCorrections
phaseCenterVariationCorrections =
new SphericalCorrections(
phaseCenterVariationCorrectionsMillimeters,
phaseCenterVariationCorrectionsUncertaintyMillimeters);
double[][] signalGainCorrectionsDbi = SIGNAL_GAIN_CORRECTIONS;
double[][] signalGainCorrectionsUncertaintyDbi = SIGNAL_GAIN_CORRECTION_UNCERTAINTIES;
SphericalCorrections signalGainCorrections = new
SphericalCorrections(
signalGainCorrectionsDbi,
signalGainCorrectionsUncertaintyDbi);
return new GnssAntennaInfo.Builder()
.setCarrierFrequencyMHz(carrierFrequencyMHz)
.setPhaseCenterOffset(phaseCenterOffset)
.setPhaseCenterVariationCorrections(phaseCenterVariationCorrections)
.setSignalGainCorrections(signalGainCorrections)
.build();
}
private static GnssAntennaInfo createPartialTestGnssAntennaInfo() {
double carrierFrequencyMHz = 13758.0;
GnssAntennaInfo.PhaseCenterOffset phaseCenterOffset = new
GnssAntennaInfo.PhaseCenterOffset(
4.3d,
1.4d,
2.10d,
2.1d,
3.12d,
0.5d);
return new GnssAntennaInfo.Builder()
.setCarrierFrequencyMHz(carrierFrequencyMHz)
.setPhaseCenterOffset(phaseCenterOffset)
.build();
}
private static void verifyPartialGnssAntennaInfoValuesAndGetters(GnssAntennaInfo gnssAntennaInfo) {
assertEquals(13758.0d, gnssAntennaInfo.getCarrierFrequencyMHz(), PRECISION);
// Phase Center Offset Tests --------------------------------------------------------
PhaseCenterOffset phaseCenterOffset =
gnssAntennaInfo.getPhaseCenterOffset();
assertEquals(4.3d, phaseCenterOffset.getXOffsetMm(),
PRECISION);
assertEquals(1.4d, phaseCenterOffset.getXOffsetUncertaintyMm(),
PRECISION);
assertEquals(2.10d, phaseCenterOffset.getYOffsetMm(),
PRECISION);
assertEquals(2.1d, phaseCenterOffset.getYOffsetUncertaintyMm(),
PRECISION);
assertEquals(3.12d, phaseCenterOffset.getZOffsetMm(),
PRECISION);
assertEquals(0.5d, phaseCenterOffset.getZOffsetUncertaintyMm(),
PRECISION);
// Phase Center Variation Corrections Tests -----------------------------------------
assertNull(gnssAntennaInfo.getPhaseCenterVariationCorrections());
// Signal Gain Corrections Tests -----------------------------------------------------
assertNull(gnssAntennaInfo.getSignalGainCorrections());
}
private static void verifyFullGnssAntennaInfoValuesAndGetters(GnssAntennaInfo gnssAntennaInfo) {
assertEquals(13758.0d, gnssAntennaInfo.getCarrierFrequencyMHz(), PRECISION);
// Phase Center Offset Tests --------------------------------------------------------
PhaseCenterOffset phaseCenterOffset =
gnssAntennaInfo.getPhaseCenterOffset();
assertEquals(4.3d, phaseCenterOffset.getXOffsetMm(),
PRECISION);
assertEquals(1.4d, phaseCenterOffset.getXOffsetUncertaintyMm(),
PRECISION);
assertEquals(2.10d, phaseCenterOffset.getYOffsetMm(),
PRECISION);
assertEquals(2.1d, phaseCenterOffset.getYOffsetUncertaintyMm(),
PRECISION);
assertEquals(3.12d, phaseCenterOffset.getZOffsetMm(),
PRECISION);
assertEquals(0.5d, phaseCenterOffset.getZOffsetUncertaintyMm(),
PRECISION);
// Phase Center Variation Corrections Tests -----------------------------------------
SphericalCorrections phaseCenterVariationCorrections =
gnssAntennaInfo.getPhaseCenterVariationCorrections();
assertEquals(60.0d, phaseCenterVariationCorrections.getDeltaTheta(), PRECISION);
assertEquals(36.0d, phaseCenterVariationCorrections.getDeltaPhi(), PRECISION);
assertArrayEquals(PHASE_CENTER_VARIATION_CORRECTIONS, phaseCenterVariationCorrections
.getCorrectionsArray());
assertArrayEquals(PHASE_CENTER_VARIATION_CORRECTION_UNCERTAINTIES,
phaseCenterVariationCorrections.getCorrectionUncertaintiesArray());
// Signal Gain Corrections Tests -----------------------------------------------------
SphericalCorrections signalGainCorrections = gnssAntennaInfo.getSignalGainCorrections();
assertEquals(60.0d, signalGainCorrections.getDeltaTheta(), PRECISION);
assertEquals(36.0d, signalGainCorrections.getDeltaPhi(), PRECISION);
assertArrayEquals(SIGNAL_GAIN_CORRECTIONS, signalGainCorrections
.getCorrectionsArray());
assertArrayEquals(SIGNAL_GAIN_CORRECTION_UNCERTAINTIES,
signalGainCorrections.getCorrectionUncertaintiesArray());
}
}