Added unit tests for sat params parsing
This commit is contained in:
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())
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user