Skip to content

Commit ad54db0

Browse files
authored
feat: haxe (#22)
1 parent b8266c0 commit ad54db0

File tree

24 files changed

+407
-23
lines changed

24 files changed

+407
-23
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ yarn dev
4343

4444
[docker](https://www.docker.com/)
4545

46-
[net5.0](https://dotnet.microsoft.com/)
46+
[netcore3.1](https://dotnet.microsoft.com/)
4747

4848
[node LTS](https://nodejs.org/)
4949

appveyor.yml

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,20 @@ install:
2525
- nvm use 14
2626
- python -V
2727
- curl -sSL https://get.haskellstack.org/ | sh
28+
# begin haxe && hashlink
29+
- sudo add-apt-repository ppa:haxe/releases -y
30+
- sudo apt-get update
31+
- sudo apt-get install haxe -y
32+
- mkdir /tmp/.hashlib && haxelib setup /tmp/.hashlib
33+
# - sudo apt-get install -y libpng-dev libturbojpeg-dev libvorbis-dev libopenal-dev libsdl2-dev libmbedtls-dev libuv1-dev
34+
# - wget https://github.com/HaxeFoundation/hashlink/archive/1.11.zip -O hashlink-1.11.zip
35+
# - unzip hashlink-1.11.zip
36+
# - pushd hashlink-1.11
37+
# - make
38+
# - sudo make install
39+
# - hl --version
40+
# - popd
41+
# end haxe && hashlink
2842
# begin tmp vlang installation
2943
- git clone https://github.com/vlang/v /tmp/vlang
3044
- pushd /tmp/vlang
@@ -50,9 +64,9 @@ install:
5064
# - popd
5165
build_script:
5266
- pushd bench
53-
- dotnet run -c Release -p tool -- --task build #--langs haskell --verbose true
54-
- dotnet run -c Release -p tool -- --task test #--langs haskell
55-
- dotnet run -c Release -p tool -- --task bench --fail-fast true #--langs haskell
67+
- dotnet run -c Release -p tool -- --task build #--langs haxe --verbose true
68+
- dotnet run -c Release -p tool -- --task test #--langs haxe
69+
- dotnet run -c Release -p tool -- --task bench --fail-fast true #--langs haxe
5670
- popd
5771
- pushd website
5872
- yarn

bench/algorithm/fasta/1.hx

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
/*
2+
The Computer Language Benchmarks Game
3+
http://shootout.alioth.debian.org/
4+
contributed by Ian Martins
5+
modified by hanabi1224
6+
*/
7+
class App {
8+
static function main() {
9+
var nn = Std.parseInt(Sys.args()[0]);
10+
var fasta = new Fasta();
11+
fasta.run(nn);
12+
}
13+
}
14+
15+
class Fasta {
16+
private var rnd:Float;
17+
18+
private var aluChar:String;
19+
20+
private var iubChar:String;
21+
private var iubProb:Array<Float>;
22+
23+
private var homosapiensChar:String;
24+
private var homosapiensProb:Array<Float>;
25+
26+
public function new() {
27+
rnd = 42;
28+
29+
aluChar = 'GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG' + 'GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA' + 'CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT'
30+
+ 'ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA' + 'GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG' + 'AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC'
31+
+ 'AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA';
32+
33+
iubChar = 'acgtBDHKMNRSVWY';
34+
iubProb = [
35+
0.27, 0.12, 0.12, 0.27, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02
36+
];
37+
38+
homosapiensChar = 'acgt';
39+
homosapiensProb = [0.3029549426680, 0.1979883004921, 0.1975473066391, 0.3015094502008];
40+
}
41+
42+
public function run(nn) {
43+
Sys.println('>ONE Homo sapiens alu');
44+
repeatFasta(aluChar, nn * 2);
45+
46+
Sys.println('>TWO IUB ambiguity codes');
47+
randomFasta(iubChar, iubProb, nn * 3);
48+
49+
Sys.println('>THREE Homo sapiens frequency');
50+
randomFasta(homosapiensChar, homosapiensProb, nn * 5);
51+
}
52+
53+
public function repeatFasta(src:String, nn:Int) {
54+
var width = 60;
55+
var rr = src.length;
56+
var ss = src + src + src.substr(0, nn % rr);
57+
var ii = 0;
58+
for (jj in 0...Std.int(nn / width)) {
59+
ii = (jj * width) % rr;
60+
Sys.println(ss.substr(ii, width));
61+
}
62+
63+
if ((nn % width) != 0)
64+
Sys.println(ss.substr(-(nn % width)));
65+
}
66+
67+
public function randomFasta(tableChar, tableProb, nn) {
68+
var width = 60;
69+
var probList = makeCumulative(tableProb);
70+
var buf = new StringBuf();
71+
for (ii in 0...nn) {
72+
buf.add(tableChar.charAt(bisect(probList, genRandom())));
73+
if ((ii + 1) % width == 0) {
74+
Sys.println(buf.toString());
75+
buf = new StringBuf();
76+
}
77+
}
78+
if (nn % width != 0)
79+
Sys.println(buf.toString());
80+
}
81+
82+
private function genRandom() {
83+
var lim = 1;
84+
var ia = 3877;
85+
var ic = 29573;
86+
var im = 139968;
87+
88+
rnd = (rnd * ia + ic) % im;
89+
return lim * rnd / im;
90+
}
91+
92+
private function makeCumulative(tableProb:Array<Float>) {
93+
var probList = new List<Float>();
94+
var prob = 0.0;
95+
for (ii in 0...tableProb.length) {
96+
prob += tableProb[ii];
97+
probList.add(prob);
98+
}
99+
return probList;
100+
}
101+
102+
// replace this with binary search
103+
private function bisect(list:List<Float>, item:Float) {
104+
var ret = 0;
105+
var iter = list.iterator();
106+
while (iter.hasNext()) {
107+
if (item < iter.next())
108+
return ret;
109+
else
110+
ret++;
111+
}
112+
return -1;
113+
}
114+
}

bench/algorithm/helloworld/1.hx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class App {
2+
static function main() {
3+
var args = Sys.args();
4+
var name = args.length > 0 ? args[0] : "";
5+
Sys.println('Hello world ${name}!');
6+
}
7+
}

bench/algorithm/nbody/1.hx

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
/*
2+
* The Computer Language Benchmarks Game
3+
* http://shootout.alioth.debian.org/
4+
*
5+
* Translated from Christoph Bauer's nbody.c by Ian Martins
6+
*/
7+
typedef Planet = {
8+
var x:Float;
9+
var y:Float;
10+
var z:Float;
11+
var vx:Float;
12+
var vy:Float;
13+
var vz:Float;
14+
var mass:Float;
15+
}
16+
17+
class App {
18+
private static var SOLAR_MASS = 4 * Math.PI * Math.PI;
19+
private static var DAYS_PER_YEAR = 365.24;
20+
private static var DT = 1e-2;
21+
private static var RECIP_DT = (1.0 / DT);
22+
23+
private static function advance(bodies:Array<Planet>) {
24+
for (i in 0...bodies.length) {
25+
var b = bodies[i];
26+
for (j in (i + 1)...bodies.length) {
27+
var b2 = bodies[j];
28+
var dx = b.x - b2.x;
29+
var dy = b.y - b2.y;
30+
var dz = b.z - b2.z;
31+
var invDist = 1.0 / Math.sqrt(dx * dx + dy * dy + dz * dz);
32+
var mag = invDist * invDist * invDist;
33+
b.vx -= dx * b2.mass * mag;
34+
b.vy -= dy * b2.mass * mag;
35+
b.vz -= dz * b2.mass * mag;
36+
b2.vx += dx * b.mass * mag;
37+
b2.vy += dy * b.mass * mag;
38+
b2.vz += dz * b.mass * mag;
39+
}
40+
}
41+
for (b in bodies) {
42+
b.x += b.vx;
43+
b.y += b.vy;
44+
b.z += b.vz;
45+
}
46+
}
47+
48+
private static function energy(bodies:Array<Planet>) {
49+
var e = 0.0;
50+
for (i in 0...bodies.length) {
51+
var b = bodies[i];
52+
e += 0.5 * b.mass * (b.vx * b.vx + b.vy * b.vy + b.vz * b.vz);
53+
for (j in (i + 1)...bodies.length) {
54+
var b2 = bodies[j];
55+
var dx = b.x - b2.x;
56+
var dy = b.y - b2.y;
57+
var dz = b.z - b2.z;
58+
var distance = Math.sqrt(dx * dx + dy * dy + dz * dz);
59+
e -= (b.mass * b2.mass) / distance;
60+
}
61+
}
62+
return e;
63+
}
64+
65+
private static function offsetMomentum(bodies:Array<Planet>) {
66+
var px = 0.0, py = 0.0, pz = 0.0;
67+
for (b in bodies) {
68+
px += b.vx * b.mass;
69+
py += b.vy * b.mass;
70+
pz += b.vz * b.mass;
71+
}
72+
bodies[0].vx = -px / SOLAR_MASS;
73+
bodies[0].vy = -py / SOLAR_MASS;
74+
bodies[0].vz = -pz / SOLAR_MASS;
75+
}
76+
77+
/*
78+
* Rescale certain properties of bodies. That allows doing
79+
* consequential advance()'s as if dt were equal to 1.0.
80+
*
81+
* When all advances done, rescale bodies back to obtain correct energy.
82+
*/
83+
private static function scaleBodies(bodies:Array<Planet>, scale:Float) {
84+
for (b in bodies) {
85+
b.mass *= scale * scale;
86+
b.vx *= scale;
87+
b.vy *= scale;
88+
b.vz *= scale;
89+
}
90+
}
91+
92+
inline private static function round(val:Float) {
93+
return Math.round(val * 1e9) / 1e9;
94+
}
95+
96+
public static function main() {
97+
var bodies = new Array<Planet>();
98+
bodies.push({
99+
x: 0, // sun
100+
y: 0,
101+
z: 0,
102+
vx: 0,
103+
vy: 0,
104+
vz: 0,
105+
mass: SOLAR_MASS
106+
});
107+
bodies.push({
108+
x: 4.84143144246472090e+00, // jupiter
109+
y: -1.16032004402742839e+00,
110+
z: -1.03622044471123109e-01,
111+
vx: 1.66007664274403694e-03 * DAYS_PER_YEAR,
112+
vy: 7.69901118419740425e-03 * DAYS_PER_YEAR,
113+
vz: -6.90460016972063023e-05 * DAYS_PER_YEAR,
114+
mass: 9.54791938424326609e-04 * SOLAR_MASS
115+
});
116+
bodies.push({
117+
x: 8.34336671824457987e+00, // saturn
118+
y: 4.12479856412430479e+00,
119+
z: -4.03523417114321381e-01,
120+
vx: -2.76742510726862411e-03 * DAYS_PER_YEAR,
121+
vy: 4.99852801234917238e-03 * DAYS_PER_YEAR,
122+
vz: 2.30417297573763929e-05 * DAYS_PER_YEAR,
123+
mass: 2.85885980666130812e-04 * SOLAR_MASS
124+
});
125+
bodies.push({
126+
x: 1.28943695621391310e+01, // uranus
127+
y: -1.51111514016986312e+01,
128+
z: -2.23307578892655734e-01,
129+
vx: 2.96460137564761618e-03 * DAYS_PER_YEAR,
130+
vy: 2.37847173959480950e-03 * DAYS_PER_YEAR,
131+
vz: -2.96589568540237556e-05 * DAYS_PER_YEAR,
132+
mass: 4.36624404335156298e-05 * SOLAR_MASS
133+
});
134+
bodies.push({
135+
x: 1.53796971148509165e+01, // neptune
136+
y: -2.59193146099879641e+01,
137+
z: 1.79258772950371181e-01,
138+
vx: 2.68067772490389322e-03 * DAYS_PER_YEAR,
139+
vy: 1.62824170038242295e-03 * DAYS_PER_YEAR,
140+
vz: -9.51592254519715870e-05 * DAYS_PER_YEAR,
141+
mass: 5.15138902046611451e-05 * SOLAR_MASS
142+
});
143+
144+
var n = Std.parseInt(Sys.args()[0]);
145+
offsetMomentum(bodies);
146+
Sys.println(round(energy(bodies)));
147+
scaleBodies(bodies, DT);
148+
for (i in 0...n)
149+
advance(bodies);
150+
scaleBodies(bodies, RECIP_DT);
151+
Sys.println(round(energy(bodies)));
152+
}
153+
}

bench/algorithm/spectral-norm/1.hx

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/*
2+
* The Great Computer Language Shootout
3+
* http://shootout.alioth.debian.org/
4+
*
5+
* Contributed by Ian Martins
6+
* modified by hanabi1224
7+
*/
8+
class App {
9+
private static function eval_A(i:Int, j:Int) {
10+
return return 1.0 / ((i + j) * (i + j + 1) / 2 + i + 1);
11+
}
12+
13+
private static function eval_A_times_u(N:Int, u:Array<Float>, Au:Array<Float>) {
14+
for (i in 0...N) {
15+
Au[i] = 0;
16+
for (j in 0...N)
17+
Au[i] += eval_A(i, j) * u[j];
18+
}
19+
}
20+
21+
private static function eval_At_times_u(N:Int, u:Array<Float>, Au:Array<Float>) {
22+
for (i in 0...N) {
23+
Au[i] = 0;
24+
for (j in 0...N)
25+
Au[i] += eval_A(j, i) * u[j];
26+
}
27+
}
28+
29+
private static function eval_AtA_times_u(N:Int, u:Array<Float>, AtAu:Array<Float>) {
30+
var v = new Array<Float>();
31+
eval_A_times_u(N, u, v);
32+
eval_At_times_u(N, v, AtAu);
33+
}
34+
35+
public static function main() {
36+
var N = Std.parseInt(Sys.args()[0]);
37+
if (N == null)
38+
N = 2000;
39+
40+
var u = new Array<Float>();
41+
var v = new Array<Float>();
42+
for (i in 0...N)
43+
u[i] = 1;
44+
for (i in 0...10) {
45+
eval_AtA_times_u(N, u, v);
46+
eval_AtA_times_u(N, v, u);
47+
}
48+
var vBv = 0.0;
49+
var vv = 0.0;
50+
for (i in 0...N) {
51+
vBv += u[i] * v[i];
52+
vv += v[i] * v[i];
53+
}
54+
Sys.println('${Std.string(Math.sqrt(vBv / vv)).substring(0, 11)}\n');
55+
}
56+
}

bench/bench.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,10 @@ problems:
7272
- input: 1000
7373
output: 1000_out
7474
tests:
75+
- input: 250000
76+
repeat: 3
7577
- input: 2500000
7678
repeat: 3
77-
- input: 25000000
78-
repeat: 2
7979
langs:
8080
# - lang: csharp: bench_csharp.yaml
8181
# - lang: javascript: bench_javascript.yaml

0 commit comments

Comments
 (0)