Added unit tests for sat params parsing

This commit is contained in:
Arty Bishop committed 2021-09-12 15:40:05 +01:00
1 parent 9a4de03cac
commit 2c757a6b35
2 files changed
+58 -43

No files matched your search

@@ -48,41 +48,43 @@ data class TLE(
companion object {
fun parseArray(array: Array<String>): TLE? {
if (array.size != 3) return null
fun parseStream(stream: InputStream): List<TLE> {
val itemParams = mutableListOf(String(), String(), String())
val importedItems = mutableListOf<TLE>()
var lineIndex = 0
stream.bufferedReader().forEachLine { line ->
itemParams[lineIndex] = line
if (lineIndex < 2) {
lineIndex++
} else {
val isLineOneValid = itemParams[1].substring(0, 1) == "1"
val isLineTwoValid = itemParams[2].substring(0, 1) == "2"
if (!isLineOneValid && !isLineTwoValid) return@forEachLine
parseParams(itemParams)?.let { tle -> importedItems.add(tle) }
lineIndex = 0
}
}
return importedItems
}
private fun parseParams(params: List<String>): TLE? {
if (params[1].substring(0, 1) != "1" && params[2].substring(0, 1) != "2") return null
try {
val name: String = array[0].trim()
val epoch: Double = array[1].substring(18, 32).toDouble()
val meanmo: Double = array[2].substring(52, 63).toDouble()
val eccn: Double = 1.0e-07 * array[2].substring(26, 33).toDouble()
val incl: Double = array[2].substring(8, 16).toDouble()
val raan: Double = array[2].substring(17, 25).toDouble()
val argper: Double = array[2].substring(34, 42).toDouble()
val meanan: Double = array[2].substring(43, 51).toDouble()
val catnum: Int = array[1].substring(2, 7).trim().toInt()
val bstar: Double = 1.0e-5 * array[1].substring(53, 59).toDouble() /
10.0.pow(array[1].substring(60, 61).toDouble())
val name: String = params[0].trim()
val epoch: Double = params[1].substring(18, 32).toDouble()
val meanmo: Double = params[2].substring(52, 63).toDouble()
val eccn: Double = 1.0e-07 * params[2].substring(26, 33).toDouble()
val incl: Double = params[2].substring(8, 16).toDouble()
val raan: Double = params[2].substring(17, 25).toDouble()
val argper: Double = params[2].substring(34, 42).toDouble()
val meanan: Double = params[2].substring(43, 51).toDouble()
val catnum: Int = params[1].substring(2, 7).trim().toInt()
val bstar: Double = 1.0e-5 * params[1].substring(53, 59).toDouble() /
10.0.pow(params[1].substring(60, 61).toDouble())
return TLE(name, epoch, meanmo, eccn, incl, raan, argper, meanan, catnum, bstar)
} catch (exception: Exception) {
return null
}
}
fun parseStream(stream: InputStream): List<TLE> {
val elementArray = arrayOf(String(), String(), String())
val importedElements = mutableListOf<TLE>()
var line = 0
stream.bufferedReader().forEachLine {
if (line != 2) {
elementArray[line] = it
line++
} else {
elementArray[line] = it
parseArray(elementArray)?.let { tle -> importedElements.add(tle) }
line = 0
}
}
return importedElements
}
}
}
@@ -5,22 +5,35 @@ import org.junit.Test
class Look4SatTest {
private val validParamsStream = """
ISS (ZARYA)
1 25544U 98067A 21255.21005818 -.00120443 00000-0 -22592-2 0 9998
2 25544 51.6451 272.4173 0002526 27.1693 64.4213 15.48396490302085
SHENZHOU-12
1 48852U 21053A 21254.65783594 .00009779 00000-0 11349-3 0 9992
2 48852 41.4714 115.4555 0001945 272.0324 187.3218 15.61782249 21227
PROGRESS-MS 17
1 48869U 21057A 21254.57379002 .00002620 00000-0 56399-4 0 9993
2 48869 51.6436 275.5624 0003404 23.4371 118.9508 15.48629868301984
""".trimIndent().byteInputStream()
private val invalidParamsStream = """
1 25544U 98067A 21255.21005818 -.00120443 00000-0 -22592-2 0 9998
2 25544 51.6451 272.4173 0002526 27.1693 64.4213 15.48396490302085
1 48852U 21053A 21254.65783594 .00009779 00000-0 11349-3 0 9992
2 48852 41.4714 115.4555 0001945 272.0324 187.3218 15.61782249 21227
1 48869U 21057A 21254.57379002 .00002620 00000-0 56399-4 0 9993
2 48869 51.6436 275.5624 0003404 23.4371 118.9508 15.48629868301984
""".trimIndent().byteInputStream()
@Test
fun `Given correct TLE array returns Satellite`() {
val tleArray = arrayOf(
"ISS (ZARYA)",
"1 25544U 98067A 21242.56000419 .00070558 00000-0 12956-2 0 9996",
"2 25544 51.6433 334.9559 0003020 334.9496 106.9882 15.48593918300128"
)
assert(TLE.parseArray(tleArray)?.createSat() != null)
fun `Given valid params stream returns valid data`() {
val parsedList = TLE.parseStream(validParamsStream)
assert(parsedList[2].catnum == 48869)
}
@Test
fun `Given incorrect TLE array returns null`() {
val tleArray = arrayOf(
"1 25544U 98067A 21242.56000419 .00070558 00000-0 12956-2 0 9996",
"2 25544 51.6433 334.9559 0003020 334.9496 106.9882 15.48593918300128"
)
assert(TLE.parseArray(tleArray)?.createSat() == null)
fun `Given invalid params stream returns empty list`() {
val parsedList = TLE.parseStream(invalidParamsStream)
assert(parsedList.isEmpty())
}
}