Use signed integers instead of unsigned
This commit is contained in:
parent
2a40bb7d97
commit
de6cced59e
3 changed files with 17 additions and 16 deletions
|
@ -11,7 +11,7 @@ class ArticleCardsListRecyclerAdapter(private val onItemClick: () -> Unit) :
|
|||
{
|
||||
private val articleCardsList = listOf(
|
||||
ArticleCard(
|
||||
ArticleId(2021u, 8u, 6u, "writing-about-it"),
|
||||
ArticleId(2021, 8, 6, "writing-about-it"),
|
||||
"Почему сложно писать о передовых информационных технологиях?",
|
||||
"""
|
||||
Однажды мы выпустили статью “Децентрализованные сервисы против распределённых”, где
|
||||
|
@ -20,7 +20,7 @@ class ArticleCardsListRecyclerAdapter(private val onItemClick: () -> Unit) :
|
|||
""".replace("\\s+".toRegex(), " "),
|
||||
),
|
||||
ArticleCard(
|
||||
ArticleId(2020u, 6u, 4u, "decentralized-vs-distributed"),
|
||||
ArticleId(2020, 6, 4, "decentralized-vs-distributed"),
|
||||
"Децентрализованные сервисы против распределённых",
|
||||
"""
|
||||
Более правильная, но менее известная схема, показывающая разницу между
|
||||
|
@ -29,7 +29,7 @@ class ArticleCardsListRecyclerAdapter(private val onItemClick: () -> Unit) :
|
|||
""".replace("\\s+".toRegex(), " "),
|
||||
),
|
||||
ArticleCard(
|
||||
ArticleId(2021u, 7u, 28u, "yggdrasil"),
|
||||
ArticleId(2021, 7, 28, "yggdrasil"),
|
||||
"Заметки об Yggdrasil: качество кода, безопасность, DNS",
|
||||
"""
|
||||
Сейчас сложно продвигать сеть Yggdrasil для массового использования. Она сложна для
|
||||
|
|
|
@ -2,11 +2,11 @@ package com.causa_arcana
|
|||
|
||||
import java.lang.RuntimeException
|
||||
|
||||
class ArticleId(val year: UInt, val month: UInt, val day: UInt, val slug: String) {
|
||||
class ArticleId(val year: Int, val month: Int, val day: Int, val slug: String) {
|
||||
init {
|
||||
if (year !in 2000u..3000u) throw RuntimeException("Invalid article year")
|
||||
if (month !in 1u..12u) throw RuntimeException("Invalid article month")
|
||||
if (day !in 1u..31u) throw RuntimeException("Invalid article day")
|
||||
if (year !in 2000..3000) throw RuntimeException("Invalid article year")
|
||||
if (month !in 1..12) throw RuntimeException("Invalid article month")
|
||||
if (day !in 1..31) throw RuntimeException("Invalid article day")
|
||||
if (!SLUG_RE.matches(slug)) throw RuntimeException("Invalid article slug")
|
||||
}
|
||||
|
||||
|
@ -31,9 +31,9 @@ class ArticleId(val year: UInt, val month: UInt, val day: UInt, val slug: String
|
|||
fun fromString(id: String): ArticleId {
|
||||
(ID_RE.matchEntire(id) ?: throw RuntimeException("Invalid article ID")).destructured
|
||||
.let { (year, month, day, slugHead, slugTail) -> return ArticleId(
|
||||
year.toUInt(),
|
||||
month.toUInt(),
|
||||
day.toUInt(),
|
||||
year.toInt(),
|
||||
month.toInt(),
|
||||
day.toInt(),
|
||||
slugHead + slugTail,
|
||||
)
|
||||
}
|
||||
|
|
|
@ -5,16 +5,17 @@ import org.junit.Test
|
|||
import org.junit.Assert.*
|
||||
|
||||
class ExampleUnitTest {
|
||||
private val articleId1 = ArticleId(2021u, 1u, 1u, "hello-world")
|
||||
private val articleId2 = ArticleId(2000u, 6u, 24u, "123")
|
||||
private val articleId3 = ArticleId(3000u, 12u, 6u, "0foo-1-2")
|
||||
private val articleId1 = ArticleId(2021, 1, 1, "hello-world")
|
||||
private val articleId2 = ArticleId(2000, 6, 24, "123")
|
||||
private val articleId3 = ArticleId(3000, 12, 6, "0foo-1-2")
|
||||
|
||||
@Test
|
||||
fun articleIdFromString() {
|
||||
val articleId = ArticleId.fromString("2021-01-01-hello-world")
|
||||
assertEquals(2021u, articleId.year)
|
||||
assertEquals(1u, articleId.month)
|
||||
assertEquals(1u, articleId.day)
|
||||
|
||||
assertEquals(2021, articleId.year)
|
||||
assertEquals(1, articleId.month)
|
||||
assertEquals(1, articleId.day)
|
||||
assertEquals("hello-world", articleId.slug)
|
||||
}
|
||||
|
||||
|
|
Reference in a new issue