more tests
This commit is contained in:
		
							parent
							
								
									cf79163802
								
							
						
					
					
						commit
						a5e51a3f90
					
				@ -16,9 +16,15 @@ fun naiveCountHappyNumbers() {
 | 
				
			|||||||
    count
 | 
					    count
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lyng.time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// After all optimizations it takes ~120ms.
 | 
					// After all optimizations it takes ~120ms.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
 | 
					//for( r in 1..100 ) {
 | 
				
			||||||
 | 
					//    val start = Instant.now()
 | 
				
			||||||
    val found = naiveCountHappyNumbers()
 | 
					    val found = naiveCountHappyNumbers()
 | 
				
			||||||
println("Found happy numbers: "+found)
 | 
					//    println("Found happy numbers: %d time %s"(found, Instant.now() - start))
 | 
				
			||||||
    assert( found == 55252 )
 | 
					    assert( found == 55252 )
 | 
				
			||||||
 | 
					//    delay(0.01)
 | 
				
			||||||
 | 
					//}
 | 
				
			||||||
@ -492,7 +492,8 @@ class Compiler(
 | 
				
			|||||||
                    // if it is an open end range, then the end of line could be here that we do not want
 | 
					                    // if it is an open end range, then the end of line could be here that we do not want
 | 
				
			||||||
                    // to skip in parseExpression:
 | 
					                    // to skip in parseExpression:
 | 
				
			||||||
                    val current = cc.current()
 | 
					                    val current = cc.current()
 | 
				
			||||||
                    val right = if( current.type == Token.Type.NEWLINE || current.type == Token.Type.SINLGE_LINE_COMMENT)
 | 
					                    val right =
 | 
				
			||||||
 | 
					                        if (current.type == Token.Type.NEWLINE || current.type == Token.Type.SINLGE_LINE_COMMENT)
 | 
				
			||||||
                            null
 | 
					                            null
 | 
				
			||||||
                        else
 | 
					                        else
 | 
				
			||||||
                            parseExpression()
 | 
					                            parseExpression()
 | 
				
			||||||
@ -1383,7 +1384,13 @@ class Compiler(
 | 
				
			|||||||
                    loopIterable(forContext, sourceObj, loopSO, body, elseStatement, label, canBreak)
 | 
					                    loopIterable(forContext, sourceObj, loopSO, body, elseStatement, label, canBreak)
 | 
				
			||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
                    val size = runCatching { sourceObj.invokeInstanceMethod(forContext, "size").toInt() }
 | 
					                    val size = runCatching { sourceObj.invokeInstanceMethod(forContext, "size").toInt() }
 | 
				
			||||||
                        .getOrElse { throw ScriptError(tOp.pos, "object is not enumerable: no size", it) }
 | 
					                        .getOrElse {
 | 
				
			||||||
 | 
					                            throw ScriptError(
 | 
				
			||||||
 | 
					                                tOp.pos,
 | 
				
			||||||
 | 
					                                "object is not enumerable: no size in $sourceObj",
 | 
				
			||||||
 | 
					                                it
 | 
				
			||||||
 | 
					                            )
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    var result: Obj = ObjVoid
 | 
					                    var result: Obj = ObjVoid
 | 
				
			||||||
                    var breakCaught = false
 | 
					                    var breakCaught = false
 | 
				
			||||||
 | 
				
			|||||||
@ -77,9 +77,8 @@ fun Iterable.dropLast(n) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fun Iterable.takeLast(n) {
 | 
					fun Iterable.takeLast(n) {
 | 
				
			||||||
    val list = this
 | 
					 | 
				
			||||||
    val buffer = RingBuffer(n)
 | 
					    val buffer = RingBuffer(n)
 | 
				
			||||||
    for( item in list ) buffer += item
 | 
					    for( item in this ) buffer += item
 | 
				
			||||||
    buffer
 | 
					    buffer
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -3123,9 +3123,47 @@ class ScriptTest {
 | 
				
			|||||||
                    println(e.toString())
 | 
					                    println(e.toString())
 | 
				
			||||||
                    println("-------------------- dee")
 | 
					                    println("-------------------- dee")
 | 
				
			||||||
                    println(decoded.toString())
 | 
					                    println(decoded.toString())
 | 
				
			||||||
//                    assertEquals( e.toString(), decoded.toString() )
 | 
					                    assertEquals( e.toString(), decoded.toString() )
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                """.trimIndent()
 | 
					                """.trimIndent()
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    fun testThisInClosure() = runTest {
 | 
				
			||||||
 | 
					        eval("""
 | 
				
			||||||
 | 
					            fun Iterable.sum2by(f) {
 | 
				
			||||||
 | 
					                var acc = null
 | 
				
			||||||
 | 
					                for( x in this ) {
 | 
				
			||||||
 | 
					                    println(x)
 | 
				
			||||||
 | 
					                    println(f(x))
 | 
				
			||||||
 | 
					                    acc = acc?.let { acc + f(x) } ?: f(x)
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            class T(val coll, val factor) {
 | 
				
			||||||
 | 
					                fun sum() {
 | 
				
			||||||
 | 
					                    // here we use ths::T and it must be available:
 | 
				
			||||||
 | 
					                    coll.sum2by { it * factor }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            assertEquals(60, T([1,2,3], 10).sum())
 | 
				
			||||||
 | 
					        """.trimIndent())
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Test
 | 
				
			||||||
 | 
					    fun testThisInFlowClosure() = runTest {
 | 
				
			||||||
 | 
					        eval("""
 | 
				
			||||||
 | 
					            class T(val coll, val factor) {
 | 
				
			||||||
 | 
					                fun seq() {
 | 
				
			||||||
 | 
					                    flow {
 | 
				
			||||||
 | 
					                        for( x in coll ) {
 | 
				
			||||||
 | 
					                            emit(x*factor)
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            assertEquals([10,20,30], T([1,2,3], 10).seq().toList())
 | 
				
			||||||
 | 
					        """.trimIndent())
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user