Implement sequenceOf(T) & sequenceOf()
diff --git a/libraries/stdlib/samples/test/samples/collections/sequences.kt b/libraries/stdlib/samples/test/samples/collections/sequences.kt
index b152cb0..220eecf 100644
--- a/libraries/stdlib/samples/test/samples/collections/sequences.kt
+++ b/libraries/stdlib/samples/test/samples/collections/sequences.kt
@@ -60,6 +60,18 @@
         }
 
         @Sample
+        fun sequenceOfSingleValue() {
+            val sequence = sequenceOf("single")
+            assertPrints(sequence.toList(), "[single]")
+        }
+
+        @Sample
+        fun sequenceOfEmpty() {
+            val sequence = sequenceOf<String>()
+            assertPrints(sequence.toList(), "[]")
+        }
+
+        @Sample
         fun sequenceFromCollection() {
             val collection = listOf('a', 'b', 'c')
             val sequence = collection.asSequence()
diff --git a/libraries/stdlib/src/kotlin/collections/Sequences.kt b/libraries/stdlib/src/kotlin/collections/Sequences.kt
index dd7b5dc..bc91843b 100644
--- a/libraries/stdlib/src/kotlin/collections/Sequences.kt
+++ b/libraries/stdlib/src/kotlin/collections/Sequences.kt
@@ -8,6 +8,7 @@
 
 package kotlin.sequences
 
+import kotlin.internal.InlineOnly
 import kotlin.random.Random
 
 /**
@@ -37,6 +38,40 @@
 public fun <T> sequenceOf(vararg elements: T): Sequence<T> = elements.asSequence()
 
 /**
+ * Creates a [Sequence] that contains a single given element.
+ *
+ * @param element the single element to be contained in the resulting sequence.
+ * @return a sequence containing only the specified [element].
+ * @sample samples.collections.Sequences.Building.sequenceOfSingleValue
+ */
+@Suppress("NEWER_VERSION_IN_SINCE_KOTLIN")
+@SinceKotlin("2.2")
+public fun <T> sequenceOf(element: T): Sequence<T> = Sequence {
+    object : Iterator<T> {
+        private var _hasNext: Boolean = true
+
+        override fun next(): T {
+            if (!_hasNext) throw NoSuchElementException()
+            _hasNext = false
+            return element
+        }
+
+        override fun hasNext(): Boolean = _hasNext
+    }
+}
+
+/**
+ * Creates an empty [Sequence].
+ *
+ * @return an empty sequence.
+ * @sample samples.collections.Sequences.Building.sequenceOfEmpty
+ */
+@Suppress("NEWER_VERSION_IN_SINCE_KOTLIN")
+@SinceKotlin("2.2")
+@InlineOnly
+public inline fun <T> sequenceOf(): Sequence<T> = emptySequence()
+
+/**
  * Returns an empty sequence.
  */
 public fun <T> emptySequence(): Sequence<T> = EmptySequence
diff --git a/libraries/stdlib/test/collections/CollectionBehaviors.kt b/libraries/stdlib/test/collections/CollectionBehaviors.kt
index 1ee27b1..b580e7c 100644
--- a/libraries/stdlib/test/collections/CollectionBehaviors.kt
+++ b/libraries/stdlib/test/collections/CollectionBehaviors.kt
@@ -6,6 +6,7 @@
 package test.collections.behaviors
 
 import test.collections.CompareContext
+import kotlin.collections.contains
 
 public fun <T> CompareContext<List<T>>.listBehavior() {
     equalityBehavior()
@@ -119,4 +120,29 @@
     propertyEquals { containsAll(listOf<Any?>(null)) }
 }
 
+public fun <T> CompareContext<Sequence<T>>.sequenceBehavior() {
+    propertyEquals { count() }
+    propertyEquals { toList() }
+    propertyEquals { toSet() }
 
+    compareProperty({ iterator() }, { iteratorBehavior() })
+
+    if (expected.iterator().hasNext()) {
+        propertyEquals { first() }
+        propertyEquals { firstOrNull() }
+        propertyEquals { last() }
+        propertyEquals { lastOrNull() }
+    } else {
+        propertyFailsWith<NoSuchElementException> { first() }
+        propertyEquals { firstOrNull() }
+        propertyFailsWith<NoSuchElementException> { last() }
+        propertyEquals { lastOrNull() }
+    }
+
+    (object {}).let { propertyEquals { contains(it as Any?) } }
+
+    if (expected.iterator().hasNext()) {
+        val firstElement = expected.first()
+        propertyEquals { contains(firstElement) }
+    }
+}
\ No newline at end of file
diff --git a/libraries/stdlib/test/collections/SequenceTest.kt b/libraries/stdlib/test/collections/SequenceTest.kt
index 84b169c..98ccfe4 100644
--- a/libraries/stdlib/test/collections/SequenceTest.kt
+++ b/libraries/stdlib/test/collections/SequenceTest.kt
@@ -5,6 +5,7 @@
 
 package test.collections
 
+import test.collections.behaviors.sequenceBehavior
 import kotlin.random.Random
 import kotlin.test.*
 
@@ -752,11 +753,78 @@
         assertEquals(setOf(1, 2, 3), sequenceOf(1, 2, 1, 3, 2, 3).toSet())
     }
 
-    @Test fun toList() {
-        assertEquals(emptyList(), emptySequence<Int>().toList())
-        assertEquals(listOf(42), sequenceOf(42).toList())
-        assertEquals(listOf(3, 2, 1), sequenceOf(3, 2, 1).toList())
-        assertEquals(listOf(1, 2, 1, 3, 2, 3), sequenceOf(1, 2, 1, 3, 2, 3).toList())
+    @Test fun sequenceOfEmpty() {
+        compare(emptyList<Int>().asSequence(), sequenceOf<Int>()) {
+            sequenceBehavior()
+        }
+    }
+
+    @Test fun sequenceOfSingleElement() {
+        compare(listOf(42).asSequence(), sequenceOf(42)) {
+            sequenceBehavior()
+        }
+    }
+
+    @Test fun sequenceOfVararg() {
+        compare(listOf(1, 2, 3).asSequence(), sequenceOf(1, 2, 3)) {
+            sequenceBehavior()
+        }
+
+        compare(listOf(1, 2, 1, 3, 2, 3).asSequence(), sequenceOf(1, 2, 1, 3, 2, 3)) {
+            sequenceBehavior()
+        }
+    }
+
+    @Test fun sequenceOfDifferentTypes() {
+        compare(listOf("string").asSequence(), sequenceOf("string")) {
+            sequenceBehavior()
+        }
+
+        compare(listOf(42.5).asSequence(), sequenceOf(42.5)) {
+            sequenceBehavior()
+        }
+
+        compare(listOf(true).asSequence(), sequenceOf(true)) {
+            sequenceBehavior()
+        }
+    }
+
+    @Test fun sequenceOfComplexObjects() {
+        data class Person(val name: String, val yearOfBirth: Int? = null)
+
+        val john = Person("John", 1940)
+        val paul = Person("Paul", 1942)
+        val george = Person("George", 1943)
+        val ringo = Person("Ringo", 1940)
+
+        compare(listOf(john, paul, george, ringo).asSequence(), sequenceOf(john, paul, george, ringo)) {
+            sequenceBehavior()
+        }
+
+        compare(listOf(john).asSequence(), sequenceOf(john)) {
+            sequenceBehavior()
+        }
+
+        compare(
+            listOf(john, null, paul, null, george, null, ringo).asSequence(),
+            sequenceOf(john, null, paul, null, george, null, ringo)
+        ) {
+            sequenceBehavior()
+        }
+
+        compare(listOf<Person?>(null).asSequence(), sequenceOf<Person?>(null)) {
+            sequenceBehavior()
+        }
+    }
+
+    @Test fun sequenceOfCanBeUsedWithMethodReferences() {
+        val strings = listOf("a", "b", "c")
+
+        for ((expected, actual) in (strings.map { listOf(it).asSequence() } zip strings.map(::sequenceOf))) {
+            compare(expected, actual) {
+                sequenceBehavior()
+            }
+        }
     }
 
     /*
diff --git a/libraries/tools/binary-compatibility-validator/klib-public-api/kotlin-stdlib.api b/libraries/tools/binary-compatibility-validator/klib-public-api/kotlin-stdlib.api
index 8a1bad1..0706a66 100644
--- a/libraries/tools/binary-compatibility-validator/klib-public-api/kotlin-stdlib.api
+++ b/libraries/tools/binary-compatibility-validator/klib-public-api/kotlin-stdlib.api
@@ -6546,6 +6546,7 @@
 final fun <#A: kotlin/Any?> kotlin.sequences/emptySequence(): kotlin.sequences/Sequence<#A> // kotlin.sequences/emptySequence|emptySequence(){0§<kotlin.Any?>}[0]
 final fun <#A: kotlin/Any?> kotlin.sequences/iterator(kotlin.coroutines/SuspendFunction1<kotlin.sequences/SequenceScope<#A>, kotlin/Unit>): kotlin.collections/Iterator<#A> // kotlin.sequences/iterator|iterator(kotlin.coroutines.SuspendFunction1<kotlin.sequences.SequenceScope<0:0>,kotlin.Unit>){0§<kotlin.Any?>}[0]
 final fun <#A: kotlin/Any?> kotlin.sequences/sequence(kotlin.coroutines/SuspendFunction1<kotlin.sequences/SequenceScope<#A>, kotlin/Unit>): kotlin.sequences/Sequence<#A> // kotlin.sequences/sequence|sequence(kotlin.coroutines.SuspendFunction1<kotlin.sequences.SequenceScope<0:0>,kotlin.Unit>){0§<kotlin.Any?>}[0]
+final fun <#A: kotlin/Any?> kotlin.sequences/sequenceOf(#A): kotlin.sequences/Sequence<#A> // kotlin.sequences/sequenceOf|sequenceOf(0:0){0§<kotlin.Any?>}[0]
 final fun <#A: kotlin/Any?> kotlin.sequences/sequenceOf(kotlin/Array<out #A>...): kotlin.sequences/Sequence<#A> // kotlin.sequences/sequenceOf|sequenceOf(kotlin.Array<out|0:0>...){0§<kotlin.Any?>}[0]
 final fun <#A: kotlin/Any?> kotlin/lazy(kotlin/Any?, kotlin/Function0<#A>): kotlin/Lazy<#A> // kotlin/lazy|lazy(kotlin.Any?;kotlin.Function0<0:0>){0§<kotlin.Any?>}[0]
 final fun <#A: kotlin/Any?> kotlin/lazy(kotlin/Function0<#A>): kotlin/Lazy<#A> // kotlin/lazy|lazy(kotlin.Function0<0:0>){0§<kotlin.Any?>}[0]
@@ -8801,6 +8802,7 @@
 final inline fun <#A: kotlin/Any?> kotlin.comparisons/compareValuesBy(#A, #A, kotlin/Function1<#A, kotlin/Comparable<*>?>): kotlin/Int // kotlin.comparisons/compareValuesBy|compareValuesBy(0:0;0:0;kotlin.Function1<0:0,kotlin.Comparable<*>?>){0§<kotlin.Any?>}[0]
 final inline fun <#A: kotlin/Any?> kotlin.coroutines/Continuation(kotlin.coroutines/CoroutineContext, crossinline kotlin/Function1<kotlin/Result<#A>, kotlin/Unit>): kotlin.coroutines/Continuation<#A> // kotlin.coroutines/Continuation|Continuation(kotlin.coroutines.CoroutineContext;kotlin.Function1<kotlin.Result<0:0>,kotlin.Unit>){0§<kotlin.Any?>}[0]
 final inline fun <#A: kotlin/Any?> kotlin.sequences/Sequence(crossinline kotlin/Function0<kotlin.collections/Iterator<#A>>): kotlin.sequences/Sequence<#A> // kotlin.sequences/Sequence|Sequence(kotlin.Function0<kotlin.collections.Iterator<0:0>>){0§<kotlin.Any?>}[0]
+final inline fun <#A: kotlin/Any?> kotlin.sequences/sequenceOf(): kotlin.sequences/Sequence<#A> // kotlin.sequences/sequenceOf|sequenceOf(){0§<kotlin.Any?>}[0]
 final inline fun <#A: kotlin/Any?> kotlin.time/measureTimedValue(kotlin/Function0<#A>): kotlin.time/TimedValue<#A> // kotlin.time/measureTimedValue|measureTimedValue(kotlin.Function0<0:0>){0§<kotlin.Any?>}[0]
 final inline fun <#A: kotlin/Any?> kotlin/arrayOf(kotlin/Array<out #A>...): kotlin/Array<#A> // kotlin/arrayOf|arrayOf(kotlin.Array<out|0:0>...){0§<kotlin.Any?>}[0]
 final inline fun <#A: kotlin/Any?> kotlin/arrayOfNulls(kotlin/Int): kotlin/Array<#A?> // kotlin/arrayOfNulls|arrayOfNulls(kotlin.Int){0§<kotlin.Any?>}[0]
diff --git a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt
index a1c988d..663437c 100644
--- a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt
+++ b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt
@@ -5373,6 +5373,7 @@
 	public static final fun scan (Lkotlin/sequences/Sequence;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Lkotlin/sequences/Sequence;
 	public static final fun scanIndexed (Lkotlin/sequences/Sequence;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)Lkotlin/sequences/Sequence;
 	public static final fun sequence (Lkotlin/jvm/functions/Function2;)Lkotlin/sequences/Sequence;
+	public static final fun sequenceOf (Ljava/lang/Object;)Lkotlin/sequences/Sequence;
 	public static final fun sequenceOf ([Ljava/lang/Object;)Lkotlin/sequences/Sequence;
 	public static final fun shuffled (Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence;
 	public static final fun shuffled (Lkotlin/sequences/Sequence;Lkotlin/random/Random;)Lkotlin/sequences/Sequence;