From 6bfcd30558bbc44c4e9e42e2298af8b0b22b4840 Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Wed, 20 Apr 2022 17:04:24 +0200 Subject: [PATCH] use tuples for colours --- .../kafkatorio-schema/kafkatorio-schema.ts | 12 +- .../main/typescript/main/events/converters.ts | 12 +- .../src/main/typescript/package.json | 12 +- .../kafkatorio/schema/common/colours.kt | 24 +- .../kafkatorio/events/schema/ColourHexTest.kt | 19 +- .../events/schema/PrototypesTest.kt | 371 +++--------------- .../events/schema/UpdatePacketsTest.kt | 19 +- .../processor/serdes/MapTileDictionaryTest.kt | 41 ++ 8 files changed, 145 insertions(+), 365 deletions(-) create mode 100644 modules/events-server/src/test/kotlin/dev/adamko/kafkatorio/processor/serdes/MapTileDictionaryTest.kt diff --git a/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/kafkatorio-schema.ts b/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/kafkatorio-schema.ts index 16872e0..8c9cb3a 100644 --- a/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/kafkatorio-schema.ts +++ b/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/kafkatorio-schema.ts @@ -171,12 +171,12 @@ export interface PlayerUpdateKey { export type UnitNumber = UInt; -export interface Colour { - red?: Float; - green?: Float; - blue?: Float; - alpha?: Float; -} +export type Colour = [ + red: Float, + green: Float, + blue: Float, + alpha: Float, +]; export type MapEntityPosition = [ x: Double, diff --git a/modules/events-mod/src/main/typescript/main/events/converters.ts b/modules/events-mod/src/main/typescript/main/events/converters.ts index a7dcdbe..861ec53 100644 --- a/modules/events-mod/src/main/typescript/main/events/converters.ts +++ b/modules/events-mod/src/main/typescript/main/events/converters.ts @@ -86,12 +86,12 @@ export namespace Converters { // } export function mapColour(color: ColorTable): Colour { - return { - red: color.r ?? 0, - green: color.g ?? 0, - blue: color.b ?? 0, - alpha: color.a ?? 0, - } + return [ + color.r ?? 0, + color.g ?? 0, + color.b ?? 0, + color.a ?? 0, + ] } diff --git a/modules/events-mod/src/main/typescript/package.json b/modules/events-mod/src/main/typescript/package.json index dc5d159..ea7c2fb 100644 --- a/modules/events-mod/src/main/typescript/package.json +++ b/modules/events-mod/src/main/typescript/package.json @@ -9,8 +9,7 @@ "engines": { "node": "~14.19.1" }, - "devDependencies": { - }, + "devDependencies": {}, "dependencies": { "lua-types": "^2.11.0", "typescript-to-lua": "1.4.3", @@ -19,10 +18,7 @@ }, "// @types/node": "^12.0.8", "license": "UNLICENSED", - "peerDependencies": { - }, - "optionalDependencies": { - }, - "bundledDependencies": [ - ] + "peerDependencies": {}, + "optionalDependencies": {}, + "bundledDependencies": [] } diff --git a/modules/events-schema/src/commonMain/kotlin/dev/adamko/kafkatorio/schema/common/colours.kt b/modules/events-schema/src/commonMain/kotlin/dev/adamko/kafkatorio/schema/common/colours.kt index dab6394..a39baa0 100644 --- a/modules/events-schema/src/commonMain/kotlin/dev/adamko/kafkatorio/schema/common/colours.kt +++ b/modules/events-schema/src/commonMain/kotlin/dev/adamko/kafkatorio/schema/common/colours.kt @@ -1,5 +1,6 @@ package dev.adamko.kafkatorio.schema.common +import dev.adamko.kxstsgen.core.experiments.TupleSerializer import kotlin.math.roundToInt import kotlinx.serialization.Serializable @@ -9,13 +10,32 @@ import kotlinx.serialization.Serializable * * All values here are optional. Colour channels default to `0`, the alpha channel defaults to `1`. */ -@Serializable +@Serializable(with = Colour.Serializer::class) data class Colour( val red: Float = 0f, val green: Float = 0f, val blue: Float = 0f, val alpha: Float = 1f, -) +) { + object Serializer : TupleSerializer( + "Colour", + { + element(Colour::red) + element(Colour::green) + element(Colour::blue) + element(Colour::alpha) + } + ) { + override fun tupleConstructor(elements: Iterator<*>): Colour { + return Colour( + elements.next() as Float, + elements.next() as Float, + elements.next() as Float, + elements.next() as Float, + ) + } + } +} /** Size-efficient version of [Colour] (`4*4` bytes vs `4*1` bytes) */ diff --git a/modules/events-schema/src/commonTest/kotlin/dev/adamko/kafkatorio/events/schema/ColourHexTest.kt b/modules/events-schema/src/commonTest/kotlin/dev/adamko/kafkatorio/events/schema/ColourHexTest.kt index 522989f..935ca93 100644 --- a/modules/events-schema/src/commonTest/kotlin/dev/adamko/kafkatorio/events/schema/ColourHexTest.kt +++ b/modules/events-schema/src/commonTest/kotlin/dev/adamko/kafkatorio/events/schema/ColourHexTest.kt @@ -19,12 +19,7 @@ class ColourHexTest : BehaviorSpec({ //Language=JSON val colourJson = """ - { - "red": 0.1, - "green": 0.4, - "blue": 0.7, - "alpha": 0.6 - } + [0.1, 0.4, 0.7, 0.6] """.trimIndent() val colour: Colour = jsonMapperKafkatorio.decodeFromString(colourJson) @@ -68,12 +63,12 @@ class ColourHexTest : BehaviorSpec({ //Language=JSON val colourJson = """ - { - "red": ${r.toFloat() / UByte.MAX_VALUE.toFloat()}, - "green": ${g.toFloat() / UByte.MAX_VALUE.toFloat()}, - "blue": ${b.toFloat() / UByte.MAX_VALUE.toFloat()}, - "alpha": ${a.toFloat() / UByte.MAX_VALUE.toFloat()} - } + [ + ${r.toFloat() / UByte.MAX_VALUE.toFloat()}, + ${g.toFloat() / UByte.MAX_VALUE.toFloat()}, + ${b.toFloat() / UByte.MAX_VALUE.toFloat()}, + ${a.toFloat() / UByte.MAX_VALUE.toFloat()} + ] """.trimIndent() val colour: Colour = jsonMapperKafkatorio.decodeFromString(colourJson) diff --git a/modules/events-schema/src/commonTest/kotlin/dev/adamko/kafkatorio/events/schema/PrototypesTest.kt b/modules/events-schema/src/commonTest/kotlin/dev/adamko/kafkatorio/events/schema/PrototypesTest.kt index 8746f64..e4230ed 100644 --- a/modules/events-schema/src/commonTest/kotlin/dev/adamko/kafkatorio/events/schema/PrototypesTest.kt +++ b/modules/events-schema/src/commonTest/kotlin/dev/adamko/kafkatorio/events/schema/PrototypesTest.kt @@ -28,12 +28,7 @@ class PrototypesTest : BehaviorSpec({ "order": "z-a", "layer": 0, "collisionMasks": {}, - "mapColour": { - "red": 0, - "green": 0, - "blue": 0, - "alpha": 255 - }, + "mapColour": [0, 0, 0, 255], "canBeMined": false } ] @@ -65,12 +60,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 86, - "green": 82, - "blue": 74, - "alpha": 255 - }, + "mapColour": [86, 82, 74, 255], "canBeMined": true }, { @@ -81,12 +71,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 63, - "green": 61, - "blue": 59, - "alpha": 255 - }, + "mapColour": [63, 61, 59, 255], "canBeMined": true }, { @@ -97,12 +82,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 176, - "green": 142, - "blue": 39, - "alpha": 255 - }, + "mapColour": [176, 142, 39, 255], "canBeMined": true }, { @@ -113,12 +93,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 176, - "green": 142, - "blue": 39, - "alpha": 255 - }, + "mapColour": [176, 142, 39, 255], "canBeMined": true }, { @@ -129,12 +104,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 49, - "green": 48, - "blue": 45, - "alpha": 255 - }, + "mapColour": [49, 48, 45, 255], "canBeMined": true }, { @@ -145,12 +115,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 116, - "green": 94, - "blue": 26, - "alpha": 255 - }, + "mapColour": [116, 94, 26, 255], "canBeMined": true }, { @@ -161,12 +126,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 116, - "green": 94, - "blue": 26, - "alpha": 255 - }, + "mapColour": [116, 94, 26, 255], "canBeMined": true }, { @@ -177,12 +137,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 57, - "green": 39, - "blue": 26, - "alpha": 255 - }, + "mapColour": [57, 39, 26, 255], "canBeMined": false }, { @@ -193,12 +148,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 142, - "green": 194, - "blue": 40, - "alpha": 127 - }, + "mapColour": [142, 194, 40, 127], "canBeMined": false }, { @@ -209,12 +159,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 25, - "green": 25, - "blue": 25, - "alpha": 127 - }, + "mapColour": [25, 25, 25, 127], "canBeMined": false }, { @@ -225,12 +170,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 39, - "green": 137, - "blue": 228, - "alpha": 127 - }, + "mapColour": [39, 137, 228, 127], "canBeMined": false }, { @@ -241,12 +181,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 76, - "green": 29, - "blue": 0, - "alpha": 127 - }, + "mapColour": [76, 29, 0, 127], "canBeMined": false }, { @@ -257,12 +192,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 70, - "green": 192, - "blue": 181, - "alpha": 127 - }, + "mapColour": [70, 192, 181, 127], "canBeMined": false }, { @@ -273,12 +203,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 23, - "green": 195, - "blue": 43, - "alpha": 127 - }, + "mapColour": [23, 195, 43, 127], "canBeMined": false }, { @@ -289,12 +214,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 221, - "green": 127, - "blue": 33, - "alpha": 127 - }, + "mapColour": [221, 127, 33, 127], "canBeMined": false }, { @@ -305,12 +225,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 236, - "green": 98, - "blue": 131, - "alpha": 127 - }, + "mapColour": [236, 98, 131, 127], "canBeMined": false }, { @@ -321,12 +236,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 123, - "green": 28, - "blue": 168, - "alpha": 127 - }, + "mapColour": [123, 28, 168, 127], "canBeMined": false }, { @@ -337,12 +247,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 207, - "green": 6, - "blue": 0, - "alpha": 127 - }, + "mapColour": [207, 6, 0, 127], "canBeMined": false }, { @@ -353,12 +258,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 212, - "green": 169, - "blue": 19, - "alpha": 127 - }, + "mapColour": [212, 169, 19, 127], "canBeMined": false }, { @@ -369,12 +269,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 55, - "green": 53, - "blue": 11, - "alpha": 255 - }, + "mapColour": [55, 53, 11, 255], "canBeMined": false }, { @@ -385,12 +280,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 66, - "green": 57, - "blue": 15, - "alpha": 255 - }, + "mapColour": [66, 57, 15, 255], "canBeMined": false }, { @@ -401,12 +291,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 65, - "green": 52, - "blue": 28, - "alpha": 255 - }, + "mapColour": [65, 52, 28, 255], "canBeMined": false }, { @@ -417,12 +302,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 59, - "green": 40, - "blue": 18, - "alpha": 255 - }, + "mapColour": [59, 40, 18, 255], "canBeMined": false }, { @@ -433,12 +313,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 94, - "green": 66, - "blue": 37, - "alpha": 255 - }, + "mapColour": [94, 66, 37, 255], "canBeMined": false }, { @@ -449,12 +324,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 141, - "green": 104, - "blue": 60, - "alpha": 255 - }, + "mapColour": [141, 104, 60, 255], "canBeMined": false }, { @@ -465,12 +335,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 136, - "green": 96, - "blue": 59, - "alpha": 255 - }, + "mapColour": [136, 96, 59, 255], "canBeMined": false }, { @@ -481,12 +346,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 133, - "green": 92, - "blue": 53, - "alpha": 255 - }, + "mapColour": [133, 92, 53, 255], "canBeMined": false }, { @@ -497,12 +357,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 103, - "green": 72, - "blue": 43, - "alpha": 255 - }, + "mapColour": [103, 72, 43, 255], "canBeMined": false }, { @@ -513,12 +368,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 91, - "green": 63, - "blue": 38, - "alpha": 255 - }, + "mapColour": [91, 63, 38, 255], "canBeMined": false }, { @@ -529,12 +379,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 80, - "green": 55, - "blue": 31, - "alpha": 255 - }, + "mapColour": [80, 55, 31, 255], "canBeMined": false }, { @@ -545,12 +390,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 80, - "green": 54, - "blue": 28, - "alpha": 255 - }, + "mapColour": [80, 54, 28, 255], "canBeMined": false }, { @@ -561,12 +401,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 138, - "green": 103, - "blue": 58, - "alpha": 255 - }, + "mapColour": [138, 103, 58, 255], "canBeMined": false }, { @@ -577,12 +412,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 128, - "green": 93, - "blue": 52, - "alpha": 255 - }, + "mapColour": [128, 93, 52, 255], "canBeMined": false }, { @@ -593,12 +423,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 115, - "green": 83, - "blue": 47, - "alpha": 255 - }, + "mapColour": [115, 83, 47, 255], "canBeMined": false }, { @@ -609,12 +434,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 103, - "green": 70, - "blue": 32, - "alpha": 255 - }, + "mapColour": [103, 70, 32, 255], "canBeMined": false }, { @@ -625,12 +445,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 116, - "green": 81, - "blue": 39, - "alpha": 255 - }, + "mapColour": [116, 81, 39, 255], "canBeMined": false }, { @@ -641,12 +456,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 116, - "green": 84, - "blue": 43, - "alpha": 255 - }, + "mapColour": [116, 84, 43, 255], "canBeMined": false }, { @@ -657,12 +467,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 128, - "green": 93, - "blue": 52, - "alpha": 255 - }, + "mapColour": [128, 93, 52, 255], "canBeMined": false }, { @@ -677,12 +482,7 @@ class PrototypesTest : BehaviorSpec({ "resource-layer", "water-tile" ], - "mapColour": { - "red": 51, - "green": 83, - "blue": 95, - "alpha": 255 - }, + "mapColour": [51, 83, 95, 255], "canBeMined": false }, { @@ -697,12 +497,7 @@ class PrototypesTest : BehaviorSpec({ "resource-layer", "water-tile" ], - "mapColour": { - "red": 38, - "green": 64, - "blue": 73, - "alpha": 255 - }, + "mapColour": [38, 64, 73, 255], "canBeMined": false }, { @@ -717,12 +512,7 @@ class PrototypesTest : BehaviorSpec({ "resource-layer", "water-tile" ], - "mapColour": { - "red": 31, - "green": 48, - "blue": 18, - "alpha": 255 - }, + "mapColour": [31, 48, 18, 255], "canBeMined": false }, { @@ -737,12 +527,7 @@ class PrototypesTest : BehaviorSpec({ "resource-layer", "water-tile" ], - "mapColour": { - "red": 23, - "green": 37, - "blue": 16, - "alpha": 255 - }, + "mapColour": [23, 37, 16, 255], "canBeMined": false }, { @@ -756,12 +541,7 @@ class PrototypesTest : BehaviorSpec({ "resource-layer", "water-tile" ], - "mapColour": { - "red": 82, - "green": 98, - "blue": 92, - "alpha": 255 - }, + "mapColour": [82, 98, 92, 255], "canBeMined": false }, { @@ -775,12 +555,7 @@ class PrototypesTest : BehaviorSpec({ "resource-layer", "water-tile" ], - "mapColour": { - "red": 65, - "green": 89, - "blue": 90, - "alpha": 255 - }, + "mapColour": [65, 89, 90, 255], "canBeMined": false }, { @@ -791,12 +566,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 48, - "green": 40, - "blue": 35, - "alpha": 255 - }, + "mapColour": [48, 40, 35, 255], "canBeMined": false }, { @@ -811,12 +581,7 @@ class PrototypesTest : BehaviorSpec({ "resource-layer", "water-tile" ], - "mapColour": { - "red": 0, - "green": 0, - "blue": 0, - "alpha": 255 - }, + "mapColour": [0, 0, 0, 255], "canBeMined": false }, { @@ -826,12 +591,7 @@ class PrototypesTest : BehaviorSpec({ "layer": 0, "collisionMasks": { }, - "mapColour": { - "red": 0, - "green": 0, - "blue": 0, - "alpha": 255 - }, + "mapColour": [0, 0, 0, 255], "canBeMined": false }, { @@ -849,12 +609,7 @@ class PrototypesTest : BehaviorSpec({ "resource-layer", "water-tile" ], - "mapColour": { - "red": 0, - "green": 0, - "blue": 0, - "alpha": 255 - }, + "mapColour": [0, 0, 0, 255], "canBeMined": false }, { @@ -865,12 +620,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 49, - "green": 49, - "blue": 49, - "alpha": 255 - }, + "mapColour": [49, 49, 49, 255], "canBeMined": false }, { @@ -881,12 +631,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 0, - "green": 0, - "blue": 0, - "alpha": 255 - }, + "mapColour": [0, 0, 0, 255], "canBeMined": false }, { @@ -897,12 +642,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 255, - "green": 255, - "blue": 255, - "alpha": 255 - }, + "mapColour": [255, 255, 255, 255], "canBeMined": false }, { @@ -913,12 +653,7 @@ class PrototypesTest : BehaviorSpec({ "collisionMasks": [ "ground-tile" ], - "mapColour": { - "red": 122, - "green": 122, - "blue": 122, - "alpha": 255 - }, + "mapColour": [122, 122, 122, 255], "canBeMined": false } ] diff --git a/modules/events-schema/src/commonTest/kotlin/dev/adamko/kafkatorio/events/schema/UpdatePacketsTest.kt b/modules/events-schema/src/commonTest/kotlin/dev/adamko/kafkatorio/events/schema/UpdatePacketsTest.kt index 2d1d4df..7ca4869 100644 --- a/modules/events-schema/src/commonTest/kotlin/dev/adamko/kafkatorio/events/schema/UpdatePacketsTest.kt +++ b/modules/events-schema/src/commonTest/kotlin/dev/adamko/kafkatorio/events/schema/UpdatePacketsTest.kt @@ -30,18 +30,8 @@ class UpdatePacketsTest : FunSpec({ "type": "dev.adamko.kafkatorio.schema2.PlayerUpdate", "key": {"index": 1}, "afkTime": 0, - "chatColour": { - "red": 1, - "green": 0.4, - "blue": 0.6, - "alpha": 1 - }, - "colour": { - "red": 0.8, - "green": 0.5, - "blue": 0.2, - "alpha": 0.5 - }, + "chatColour": [1, 0.4, 0.6, 1], + "colour": [0.8, 0.5, 0.2, 0.5], "eventCounts": { "on_player_changed_position": 7, "on_player_joined_game": 1 @@ -54,7 +44,10 @@ class UpdatePacketsTest : FunSpec({ "lastOnline": 0, "name": "fredthedeadhead", "onlineTime": 0, - "position": [-58, 13], + "position": [ + -58, + 13 + ], "tag": "" } } diff --git a/modules/events-server/src/test/kotlin/dev/adamko/kafkatorio/processor/serdes/MapTileDictionaryTest.kt b/modules/events-server/src/test/kotlin/dev/adamko/kafkatorio/processor/serdes/MapTileDictionaryTest.kt new file mode 100644 index 0000000..31addee --- /dev/null +++ b/modules/events-server/src/test/kotlin/dev/adamko/kafkatorio/processor/serdes/MapTileDictionaryTest.kt @@ -0,0 +1,41 @@ +package dev.adamko.kafkatorio.processor.serdes + +import dev.adamko.kafkatorio.schema.common.MapTileDictionary +import dev.adamko.kafkatorio.schema.common.PrototypeName +import io.kotest.core.spec.style.FunSpec +import io.kotest.matchers.equality.shouldBeEqualToComparingFields +import kotlinx.serialization.decodeFromByteArray +import kotlinx.serialization.encodeToByteArray + +class MapTileDictionaryTest : FunSpec({ + + context("encode MapTileDictionary") { + val actual = MapTileDictionary( + tilesXY = mapOf( + "-192" to mapOf("-65" to MapTileDictionary.PrototypeKey(2)), + "161" to mapOf( + "-96" to MapTileDictionary.PrototypeKey(1), + "-95" to MapTileDictionary.PrototypeKey(2), + "94" to MapTileDictionary.PrototypeKey(2), + "93" to MapTileDictionary.PrototypeKey(32), + ), + + // unknown prototype + "44" to mapOf("1" to MapTileDictionary.PrototypeKey(44)), + ), + protos = mapOf( + PrototypeName("water") to MapTileDictionary.PrototypeKey(1), + PrototypeName("grass-4") to MapTileDictionary.PrototypeKey(2), + PrototypeName("grass-3") to MapTileDictionary.PrototypeKey(32), + + PrototypeName("not-used") to MapTileDictionary.PrototypeKey(99), + ) + ) + + test("binary round trip") { + val encoded: ByteArray = kxsBinary.encodeToByteArray(actual) + val decoded: MapTileDictionary = kxsBinary.decodeFromByteArray(encoded) + decoded.shouldBeEqualToComparingFields(actual) + } + } +})