All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.io.github.gaaabliz.kliz.common.util.GenUtils.kt Maven / Gradle / Ivy

@file:Suppress("MemberVisibilityCanBePrivate")

package io.github.gaaabliz.kliz.common.util

import org.apache.commons.lang3.RandomStringUtils
import java.time.DayOfWeek
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.ZoneOffset
import java.util.concurrent.ThreadLocalRandom

object GenUtils {

    fun generateRandomId(length: Int): String {
        val allowedChars = ('A'..'Z') + ('a'..'z') + ('0'..'9')
        return(1..length)
            .map { allowedChars.random() }
            .joinToString("")
    }

    fun generateRandomStringApache( length: Int ) : String = RandomStringUtils.randomAlphanumeric(length)
    fun generateRandomBoolean() : Boolean = (0..1).random() == 1
    fun generateRandomInt(min: Int, max: Int) : Int = (min..max).random()
    fun generateRandomLong(min: Long, max: Long) : Long = (min..max).random()
    fun generateRandomDouble(min: Double, max: Double) : Double = min + (Math.random() * (max - min))

    private fun generateRandomDoubleBetween(start: Double, end: Double): Double {
        return ThreadLocalRandom.current().nextDouble(start, end)
    }

    fun generateRandomImageUrl(imageWidth : Int , imageHeight : Int) : String {
        val randomInt = GenUtils.generateRandomInt(1, 100)
        return "https://source.unsplash.com/random/${imageWidth}x${imageHeight}?sig=${randomInt}"
    }

    fun generateRandomLocalDate() : LocalDate {
        val minDay = LocalDate.of(1900, 1, 1).toEpochDay()
        val maxDay = LocalDate.of(2021, 1, 1).toEpochDay()
        val randomDay = ThreadLocalRandom.current().nextLong(minDay, maxDay)
        return LocalDate.ofEpochDay(randomDay)
    }

    fun generateRandomLocalDateTime() : LocalDateTime {
        val minDay = LocalDateTime.of(1900, 1, 1, 0, 0, 0).toEpochSecond(ZoneOffset.UTC)
        val maxDay = LocalDateTime.of(2021, 1, 1, 0, 0, 0).toEpochSecond(ZoneOffset.UTC)
        val randomDay = ThreadLocalRandom.current().nextLong(minDay, maxDay)
        return LocalDateTime.ofEpochSecond(randomDay, 0, ZoneOffset.UTC)
    }

    fun genRandomLocalDateFromWeekDay(dayOfWeek: DayOfWeek) : LocalDate {
        val currentDayOfWeek = LocalDate.now().dayOfWeek
        val daysToAdd = (dayOfWeek.value - currentDayOfWeek.value + 7) % 7
        val randomDays = ThreadLocalRandom.current().nextInt(0, 7)
        val totalDaysToAdd = daysToAdd + randomDays
        return LocalDate.now().plusDays(totalDaysToAdd.toLong())
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy