-
-
Notifications
You must be signed in to change notification settings - Fork 409
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
8 changed files
with
601 additions
and
151 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,37 +1,88 @@ | ||
// additional.c | ||
#include <stdio.h> | ||
#include <stdint.h> | ||
|
||
struct Vector2U32 { | ||
uint32_t x; | ||
uint32_t y; | ||
}; | ||
struct Vector2U32 build_vector2_u32(uint32_t x, uint32_t y) { | ||
return (struct Vector2U32) { .x = x, .y = y }; | ||
int sum_vector2_u32(struct Vector2U32 vec) { | ||
return (int)vec.x + (int)vec.y; | ||
} | ||
|
||
struct Vector3U32 { | ||
uint32_t x; | ||
uint32_t y; | ||
uint32_t z; | ||
}; | ||
struct Vector3U32 build_vector3_u32(uint32_t x, uint32_t y, uint32_t z) { | ||
return (struct Vector3U32) { .x = x, .y = y, .z = z }; | ||
int sum_vector3_u32(struct Vector3U32 vec) { | ||
return (int)vec.x + (int)vec.y + (int)vec.z; | ||
} | ||
|
||
struct Vector2U64 { | ||
uint64_t x; | ||
uint64_t y; | ||
}; | ||
struct Vector2U64 build_vector2_u64(uint64_t x, uint64_t y) { | ||
return (struct Vector2U64) { .x = x, .y = y }; | ||
int sum_vector2_u64(struct Vector2U64 vec) { | ||
return (int)vec.x + (int)vec.y; | ||
} | ||
|
||
struct Vector3U64 { | ||
uint64_t x; | ||
uint64_t y; | ||
uint64_t z; | ||
}; | ||
struct Vector3U64 build_vector3_u64(uint64_t x, uint64_t y, uint64_t z) { | ||
return (struct Vector3U64) { .x = x, .y = y, .z = z }; | ||
int sum_vector3_u64(struct Vector3U64 vec) { | ||
return (int)vec.x + (int)vec.y + (int)vec.z; | ||
} | ||
|
||
struct Vector2F32 { | ||
float x; | ||
float y; | ||
}; | ||
int sum_vector2_f32(struct Vector2F32 vec) { | ||
return (int)vec.x + (int)vec.y; | ||
} | ||
|
||
struct Vector3F32 { | ||
float x; | ||
float y; | ||
float z; | ||
}; | ||
int sum_vector3_f32(struct Vector3F32 vec) { | ||
return (int)vec.x + (int)vec.y + (int)vec.z; | ||
} | ||
|
||
struct Vector2F64 { | ||
double x; | ||
double y; | ||
}; | ||
int sum_vector2_f64(struct Vector2F64 vec) { | ||
return (int)vec.x + (int)vec.y; | ||
} | ||
|
||
struct Vector3F64 { | ||
double x; | ||
double y; | ||
double z; | ||
}; | ||
int sum_vector3_f64(struct Vector3F64 vec) { | ||
return (int)vec.x + (int)vec.y + (int)vec.z; | ||
} | ||
|
||
struct Vector3MixA { | ||
uint8_t x; | ||
float y; | ||
uint64_t z; | ||
}; | ||
int sum_vector3_mix_a(struct Vector3MixA vec) { | ||
return (int)vec.x + (int)vec.y + (int)vec.z; | ||
} | ||
|
||
struct Vector3MixB { | ||
float x; | ||
float y; | ||
double z; | ||
}; | ||
int sum_vector3_mix_b(struct Vector3MixB vec) { | ||
return (int)vec.x + (int)vec.y + (int)vec.z; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
55 | ||
95 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,40 +1,80 @@ | ||
// main.pony | ||
use "lib:ffi-tuple-parameters-additional" | ||
use @build_vector2_u32[Vector2U32](x: U32, y: U32) | ||
use @build_vector3_u32[Vector3U32](x: U32, y: U32, z: U32) | ||
use @build_vector2_u64[Vector2U64](x: U64, y: U64) | ||
use @build_vector3_u64[Vector3U64](x: U64, y: U64, z: U64) | ||
use @sum_vector2_u32[I32](vec: Vector2U32) | ||
use @sum_vector3_u32[I32](vec: Vector3U32) | ||
use @sum_vector2_u64[I32](vec: Vector2U64) | ||
use @sum_vector3_u64[I32](vec: Vector3U64) | ||
use @sum_vector2_f32[I32](vec: Vector2F32) | ||
use @sum_vector3_f32[I32](vec: Vector3F32) | ||
use @sum_vector2_f64[I32](vec: Vector2F64) | ||
use @sum_vector3_f64[I32](vec: Vector3F64) | ||
use @sum_vector3_mix_a[I32](vec: Vector3MixA) | ||
use @sum_vector3_mix_b[I32](vec: Vector3MixB) | ||
use @pony_exitcode[None](code: I32) | ||
|
||
type Vector2U32 is (U32, U32) | ||
type Vector3U32 is (U32, U32, U32) | ||
type Vector2U64 is (U64, U64) | ||
type Vector3U64 is (U64, U64, U64) | ||
type Vector2F32 is (F32, F32) | ||
type Vector3F32 is (F32, F32, F32) | ||
type Vector2F64 is (F64, F64) | ||
type Vector3F64 is (F64, F64, F64) | ||
type Vector3MixA is (U8, F32, U64) | ||
type Vector3MixB is (F32, F32, F64) | ||
|
||
actor Main | ||
new create(env: Env) => | ||
let vector2_u32 = @build_vector2_u32(1, 2) | ||
env.out.print(vector2_u32._1.string()) | ||
env.out.print(vector2_u32._2.string()) | ||
let vector2_u32: Vector2U32 = (1, 2) | ||
let vector2_u32_sum = @sum_vector2_u32(vector2_u32) | ||
env.out.print(vector2_u32_sum.string() + " (expected 3)") | ||
|
||
let vector3_u32 = @build_vector3_u32(3, 4, 5) | ||
env.out.print(vector3_u32._1.string()) | ||
env.out.print(vector3_u32._2.string()) | ||
env.out.print(vector3_u32._3.string()) | ||
let vector3_u32: Vector3U32 = (3, 4, 5) | ||
let vector3_u32_sum = @sum_vector3_u32(vector3_u32) | ||
env.out.print(vector3_u32_sum.string() + " (expected 12)") | ||
|
||
let vector2_u64 = @build_vector2_u64(6, 7) | ||
env.out.print(vector2_u64._1.string()) | ||
env.out.print(vector2_u64._2.string()) | ||
let vector2_u64: Vector2U64 = (6, 7) | ||
let vector2_u64_sum = @sum_vector2_u64(vector2_u64) | ||
env.out.print(vector2_u64_sum.string() + " (expected 13)") | ||
|
||
let vector3_u64 = @build_vector3_u64(8, 9, 10) | ||
env.out.print(vector3_u64._1.string()) | ||
env.out.print(vector3_u64._2.string()) | ||
env.out.print(vector3_u64._3.string()) | ||
let vector3_u64: Vector3U64 = (8, 9, 10) | ||
let vector3_u64_sum = @sum_vector3_u64(vector3_u64) | ||
env.out.print(vector3_u64_sum.string() + " (expected 27)") | ||
|
||
let vector2_f32: Vector2F32 = (11, 12) | ||
let vector2_f32_sum = @sum_vector2_f32(vector2_f32) | ||
env.out.print(vector2_f32_sum.string() + " (expected 23)") | ||
|
||
let vector3_f32: Vector3F32 = (13, 14, 15) | ||
let vector3_f32_sum = @sum_vector3_f32(vector3_f32) | ||
env.out.print(vector3_f32_sum.string() + " (expected 42)") | ||
|
||
let vector2_f64: Vector2F64 = (16, 17) | ||
let vector2_f64_sum = @sum_vector2_f64(vector2_f64) | ||
env.out.print(vector2_f64_sum.string() + " (expected 33)") | ||
|
||
let vector3_f64: Vector3F64 = (18, 19, 20) | ||
let vector3_f64_sum = @sum_vector3_f64(vector3_f64) | ||
env.out.print(vector3_f64_sum.string() + " (expected 57)") | ||
|
||
let vector3_mix_a: Vector3MixA = (21, 22, 23) | ||
let vector3_mix_a_sum = @sum_vector3_mix_a(vector3_mix_a) | ||
env.out.print(vector3_mix_a_sum.string() + " (expected 66)") | ||
|
||
let vector3_mix_b: Vector3MixB = (24, 25, 26) | ||
let vector3_mix_b_sum = @sum_vector3_mix_b(vector3_mix_b) | ||
env.out.print(vector3_mix_b_sum.string() + " (expected 75)") | ||
|
||
let total_sum: I32 = | ||
(vector2_u32._1 + vector2_u32._2).i32() + | ||
(vector3_u32._1 + vector3_u32._2 + vector3_u32._3).i32() + | ||
(vector2_u64._1 + vector2_u64._2).i32() + | ||
(vector3_u64._1 + vector3_u64._2 + vector3_u64._3).i32() | ||
vector2_u32_sum + | ||
vector3_u32_sum + | ||
vector2_u64_sum + | ||
vector3_u64_sum + | ||
vector2_f32_sum + | ||
vector3_f32_sum + | ||
vector2_f64_sum + | ||
vector3_f64_sum + | ||
vector3_mix_a_sum + | ||
vector3_mix_b_sum | ||
|
||
@pony_exitcode(total_sum) // expect 1 + 2 + ... + 10 == 55 | ||
let exit_code = total_sum % 256 | ||
@pony_exitcode(exit_code) // expect (1 + 2 + 3 + ... + 26) % 256 == 95 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
#include <stdio.h> | ||
#include <stdint.h> | ||
|
||
struct Vector2U32 { | ||
uint32_t x; | ||
uint32_t y; | ||
}; | ||
struct Vector2U32 build_vector2_u32(uint32_t x, uint32_t y) { | ||
return (struct Vector2U32) { .x = x, .y = y }; | ||
} | ||
|
||
struct Vector3U32 { | ||
uint32_t x; | ||
uint32_t y; | ||
uint32_t z; | ||
}; | ||
struct Vector3U32 build_vector3_u32(uint32_t x, uint32_t y, uint32_t z) { | ||
return (struct Vector3U32) { .x = x, .y = y, .z = z }; | ||
} | ||
|
||
struct Vector2U64 { | ||
uint64_t x; | ||
uint64_t y; | ||
}; | ||
struct Vector2U64 build_vector2_u64(uint64_t x, uint64_t y) { | ||
return (struct Vector2U64) { .x = x, .y = y }; | ||
} | ||
|
||
struct Vector3U64 { | ||
uint64_t x; | ||
uint64_t y; | ||
uint64_t z; | ||
}; | ||
struct Vector3U64 build_vector3_u64(uint64_t x, uint64_t y, uint64_t z) { | ||
return (struct Vector3U64) { .x = x, .y = y, .z = z }; | ||
} | ||
|
||
struct Vector2F32 { | ||
float x; | ||
float y; | ||
}; | ||
struct Vector2F32 build_vector2_f32(float x, float y) { | ||
return (struct Vector2F32) { .x = x, .y = y }; | ||
} | ||
|
||
struct Vector3F32 { | ||
float x; | ||
float y; | ||
float z; | ||
}; | ||
struct Vector3F32 build_vector3_f32(float x, float y, float z) { | ||
return (struct Vector3F32) { .x = x, .y = y, .z = z }; | ||
} | ||
|
||
struct Vector2F64 { | ||
double x; | ||
double y; | ||
}; | ||
struct Vector2F64 build_vector2_f64(double x, double y) { | ||
return (struct Vector2F64) { .x = x, .y = y }; | ||
} | ||
|
||
struct Vector3F64 { | ||
double x; | ||
double y; | ||
double z; | ||
}; | ||
struct Vector3F64 build_vector3_f64(double x, double y, double z) { | ||
return (struct Vector3F64) { .x = x, .y = y, .z = z }; | ||
} | ||
|
||
struct Vector3MixA { | ||
uint8_t x; | ||
float y; | ||
uint64_t z; | ||
}; | ||
struct Vector3MixA build_vector3_mix_a(uint8_t x, float y, uint64_t z) { | ||
return (struct Vector3MixA) { .x = x, .y = y, .z = z }; | ||
} | ||
|
||
struct Vector3MixB { | ||
float x; | ||
float y; | ||
double z; | ||
}; | ||
struct Vector3MixB build_vector3_mix_b(float x, float y, double z) { | ||
return (struct Vector3MixB) { .x = x, .y = y, .z = z }; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
95 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
use "lib:ffi-tuple-return-additional" | ||
use @build_vector2_u32[Vector2U32](x: U32, y: U32) | ||
use @build_vector3_u32[Vector3U32](x: U32, y: U32, z: U32) | ||
use @build_vector2_u64[Vector2U64](x: U64, y: U64) | ||
use @build_vector3_u64[Vector3U64](x: U64, y: U64, z: U64) | ||
use @build_vector2_f32[Vector2F32](x: F32, y: F32) | ||
use @build_vector3_f32[Vector3F32](x: F32, y: F32, z: F32) | ||
use @build_vector2_f64[Vector2F64](x: F64, y: F64) | ||
use @build_vector3_f64[Vector3F64](x: F64, y: F64, z: F64) | ||
use @build_vector3_mix_a[Vector3MixA](x: U8, y: F32, z: U64) | ||
use @build_vector3_mix_b[Vector3MixB](x: F32, y: F32, z: F64) | ||
use @pony_exitcode[None](code: I32) | ||
|
||
type Vector2U32 is (U32, U32) | ||
type Vector3U32 is (U32, U32, U32) | ||
type Vector2U64 is (U64, U64) | ||
type Vector3U64 is (U64, U64, U64) | ||
type Vector2F32 is (F32, F32) | ||
type Vector3F32 is (F32, F32, F32) | ||
type Vector2F64 is (F64, F64) | ||
type Vector3F64 is (F64, F64, F64) | ||
type Vector3MixA is (U8, F32, U64) | ||
type Vector3MixB is (F32, F32, F64) | ||
|
||
actor Main | ||
new create(env: Env) => | ||
let vector2_u32 = @build_vector2_u32(1, 2) | ||
env.out.print(vector2_u32._1.string()) | ||
env.out.print(vector2_u32._2.string()) | ||
|
||
let vector3_u32 = @build_vector3_u32(3, 4, 5) | ||
env.out.print(vector3_u32._1.string()) | ||
env.out.print(vector3_u32._2.string()) | ||
env.out.print(vector3_u32._3.string()) | ||
|
||
let vector2_u64 = @build_vector2_u64(6, 7) | ||
env.out.print(vector2_u64._1.string()) | ||
env.out.print(vector2_u64._2.string()) | ||
|
||
let vector3_u64 = @build_vector3_u64(8, 9, 10) | ||
env.out.print(vector3_u64._1.string()) | ||
env.out.print(vector3_u64._2.string()) | ||
env.out.print(vector3_u64._3.string()) | ||
|
||
let vector2_f32 = @build_vector2_f32(11, 12) | ||
env.out.print(vector2_f32._1.string()) | ||
env.out.print(vector2_f32._2.string()) | ||
|
||
let vector3_f32 = @build_vector3_f32(13, 14, 15) | ||
env.out.print(vector3_f32._1.string()) | ||
env.out.print(vector3_f32._2.string()) | ||
env.out.print(vector3_f32._3.string()) | ||
|
||
let vector2_f64 = @build_vector2_f64(16, 17) | ||
env.out.print(vector2_f64._1.string()) | ||
env.out.print(vector2_f64._2.string()) | ||
|
||
let vector3_f64 = @build_vector3_f64(18, 19, 20) | ||
env.out.print(vector3_f64._1.string()) | ||
env.out.print(vector3_f64._2.string()) | ||
env.out.print(vector3_f64._3.string()) | ||
|
||
let vector3_a = @build_vector3_mix_a(21, 22, 23) | ||
env.out.print(vector3_a._1.string()) | ||
env.out.print(vector3_a._2.string()) | ||
env.out.print(vector3_a._3.string()) | ||
|
||
let vector3_b = @build_vector3_mix_b(24, 25, 26) | ||
env.out.print(vector3_b._1.string()) | ||
env.out.print(vector3_b._2.string()) | ||
env.out.print(vector3_b._3.string()) | ||
|
||
let total_sum: I32 = | ||
(vector2_u32._1 + vector2_u32._2).i32() + | ||
(vector3_u32._1 + vector3_u32._2 + vector3_u32._3).i32() + | ||
(vector2_u64._1 + vector2_u64._2).i32() + | ||
(vector3_u64._1 + vector3_u64._2 + vector3_u64._3).i32() + | ||
(vector2_f32._1 + vector2_f32._2).i32() + | ||
(vector3_f32._1 + vector3_f32._2 + vector3_f32._3).i32() + | ||
(vector2_f64._1 + vector2_f64._2).i32() + | ||
(vector3_f64._1 + vector3_f64._2 + vector3_f64._3).i32() + | ||
(vector3_a._1.i32() + vector3_a._2.i32() + vector3_a._3.i32()) + | ||
(vector3_b._1.i32() + vector3_b._2.i32() + vector3_b._3.i32()) | ||
|
||
let exit_code = total_sum % 256 | ||
@pony_exitcode(exit_code) // expect (1 + 2 + 3 + ... + 26) % 256 == 95 |