Skip to content

Commit 2982f5c

Browse files
WIP sieve test case - unfortunately broken in optvm
1 parent c7afd55 commit 2982f5c

File tree

3 files changed

+220
-0
lines changed

3 files changed

+220
-0
lines changed

optvm/src/test/java/com/compilerprogramming/ezlang/interpreter/TestInterpreter.java

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -718,4 +718,80 @@ func main()->Int
718718
integerValue.value == 0);
719719
}
720720

721+
@Test
722+
public void testFunction109() {
723+
String src = """
724+
func sieve(N: Int)->[Int]
725+
{
726+
// The main Sieve array
727+
var ary = new [Int]{len=N,value=0}
728+
// The primes less than N
729+
var primes = new [Int]{len=N/2,value=0}
730+
// Number of primes so far, searching at index p
731+
var nprimes = 0
732+
var p=2
733+
// Find primes while p^2 < N
734+
while( p*p < N ) {
735+
// skip marked non-primes
736+
while( ary[p] ) {
737+
p = p + 1
738+
}
739+
// p is now a prime
740+
primes[nprimes] = p
741+
nprimes = nprimes+1
742+
// Mark out the rest non-primes
743+
var i = p + p
744+
while( i < N ) {
745+
ary[i] = 1
746+
i = i + p
747+
}
748+
p = p + 1
749+
}
750+
751+
// Now just collect the remaining primes, no more marking
752+
while ( p < N ) {
753+
if( !ary[p] ) {
754+
primes[nprimes] = p
755+
nprimes = nprimes + 1
756+
}
757+
p = p + 1
758+
}
759+
760+
// Copy/shrink the result array
761+
var rez = new [Int]{len=nprimes,value=0}
762+
var j = 0
763+
while( j < nprimes ) {
764+
rez[j] = primes[j]
765+
j = j + 1
766+
}
767+
return rez
768+
}
769+
func eq(a: [Int], b: [Int], n: Int)->Int
770+
{
771+
var result = 1
772+
var i = 0
773+
while (i < n)
774+
{
775+
if (a[i] != b[i])
776+
{
777+
result = 0
778+
break
779+
}
780+
i = i + 1
781+
}
782+
return result
783+
}
784+
785+
func main()->Int
786+
{
787+
var rez = sieve(20)
788+
var expected = new [Int]{2,3,5,7,11,13,17,19}
789+
return eq(rez,expected,8)
790+
}
791+
""";
792+
var value = compileAndRun(src, "main");
793+
Assert.assertNotNull(value);
794+
Assert.assertTrue(value instanceof Value.IntegerValue integerValue &&
795+
integerValue.value == 1);
796+
}
721797
}

registervm/src/test/java/com/compilerprogramming/ezlang/interpreter/TestInterpreter.java

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,4 +357,81 @@ func main()->Int
357357
Assert.assertTrue(value instanceof Value.IntegerValue integerValue &&
358358
integerValue.value == 0);
359359
}
360+
361+
@Test
362+
public void testFunction109() {
363+
String src = """
364+
func sieve(N: Int)->[Int]
365+
{
366+
// The main Sieve array
367+
var ary = new [Int]{len=N,value=0}
368+
// The primes less than N
369+
var primes = new [Int]{len=N/2,value=0}
370+
// Number of primes so far, searching at index p
371+
var nprimes = 0
372+
var p=2
373+
// Find primes while p^2 < N
374+
while( p*p < N ) {
375+
// skip marked non-primes
376+
while( ary[p] ) {
377+
p = p + 1
378+
}
379+
// p is now a prime
380+
primes[nprimes] = p
381+
nprimes = nprimes+1
382+
// Mark out the rest non-primes
383+
var i = p + p
384+
while( i < N ) {
385+
ary[i] = 1
386+
i = i + p
387+
}
388+
p = p + 1
389+
}
390+
391+
// Now just collect the remaining primes, no more marking
392+
while ( p < N ) {
393+
if( !ary[p] ) {
394+
primes[nprimes] = p
395+
nprimes = nprimes + 1
396+
}
397+
p = p + 1
398+
}
399+
400+
// Copy/shrink the result array
401+
var rez = new [Int]{len=nprimes,value=0}
402+
var j = 0
403+
while( j < nprimes ) {
404+
rez[j] = primes[j]
405+
j = j + 1
406+
}
407+
return rez
408+
}
409+
func eq(a: [Int], b: [Int], n: Int)->Int
410+
{
411+
var result = 1
412+
var i = 0
413+
while (i < n)
414+
{
415+
if (a[i] != b[i])
416+
{
417+
result = 0
418+
break
419+
}
420+
i = i + 1
421+
}
422+
return result
423+
}
424+
425+
func main()->Int
426+
{
427+
var rez = sieve(20)
428+
var expected = new [Int]{2,3,5,7,11,13,17,19}
429+
return eq(rez,expected,8)
430+
}
431+
""";
432+
var value = compileAndRun(src, "main");
433+
Assert.assertNotNull(value);
434+
Assert.assertTrue(value instanceof Value.IntegerValue integerValue &&
435+
integerValue.value == 1);
436+
}
360437
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
func sieve(N: Int)->[Int]
2+
{
3+
// The main Sieve array
4+
var ary = new [Int]{len=N,value=0}
5+
// The primes less than N
6+
var primes = new [Int]{len=N/2,value=0}
7+
// Number of primes so far, searching at index p
8+
var nprimes = 0
9+
var p=2
10+
// Find primes while p^2 < N
11+
while( p*p < N ) {
12+
// skip marked non-primes
13+
while( ary[p] ) {
14+
p = p + 1
15+
}
16+
// p is now a prime
17+
primes[nprimes] = p
18+
nprimes = nprimes+1
19+
// Mark out the rest non-primes
20+
var i = p + p
21+
while( i < N ) {
22+
ary[i] = 1
23+
i = i + p
24+
}
25+
p = p + 1
26+
}
27+
28+
// Now just collect the remaining primes, no more marking
29+
while ( p < N ) {
30+
if( !ary[p] ) {
31+
primes[nprimes] = p
32+
nprimes = nprimes + 1
33+
}
34+
p = p + 1
35+
}
36+
37+
// Copy/shrink the result array
38+
var rez = new [Int]{len=nprimes,value=0}
39+
var j = 0
40+
while( j < nprimes ) {
41+
rez[j] = primes[j]
42+
j = j + 1
43+
}
44+
return rez
45+
}
46+
func eq(a: [Int], b: [Int], n: Int)->Int
47+
{
48+
var result = 1
49+
var i = 0
50+
while (i < n)
51+
{
52+
if (a[i] != b[i])
53+
{
54+
result = 0
55+
break
56+
}
57+
i = i + 1
58+
}
59+
return result
60+
}
61+
62+
func main()->Int
63+
{
64+
var rez = sieve(20)
65+
var expected = new [Int]{2,3,5,7,11,13,17,19}
66+
return eq(rez,expected,8)
67+
}

0 commit comments

Comments
 (0)