aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorJeroen van Rijn <jeroen@paramythic.com>2019-03-02 13:21:01 +0100
committerJeroen van Rijn <jeroen@paramythic.com>2019-03-02 13:21:01 +0100
commitb6d6eb6ae2d22935d146df8bc715c580fe5cb321 (patch)
treed162882d756d24e00175d31fec3b7e6bcbbe1f10 /examples
parenta126d2ba16b54334e83ce3ec8fb7de99b67f5647 (diff)
Fix #345: Panic when using enum as map key
Also add a little map demo.
Diffstat (limited to 'examples')
-rw-r--r--examples/demo/demo.odin58
1 files changed, 57 insertions, 1 deletions
diff --git a/examples/demo/demo.odin b/examples/demo/demo.odin
index b4c67938f..ad7a2666d 100644
--- a/examples/demo/demo.odin
+++ b/examples/demo/demo.odin
@@ -530,7 +530,7 @@ parametric_polymorphism :: proc() {
// `I` is the type of N
// `T` is the type passed
fmt.printf("Generating an array of type %v from the value %v of type %v\n",
- typeid_of(type_of(res)), N, typeid_of(I));
+ typeid_of(type_of(res)), N, typeid_of(I));
for i in 0..N-1 {
res[i] = T(i*i);
}
@@ -691,6 +691,61 @@ using_enum :: proc() {
fmt.println(len(Foo));
}
+map_type :: proc() {
+ fmt.println("# map type");
+
+ // enums of type u16, u32, i16 & i32 also work
+ Enum_u8 :: enum u8 {
+ A = 0,
+ B = 1 << 8 - 1,
+ }
+ Enum_u64 :: enum u64 {
+ A = 0,
+ B = 1 << 64 - 1,
+ }
+ Enum_i32 :: enum i32 {
+ A = 0,
+ B = -(1 << 31),
+ }
+ Enum_i64 :: enum i64 {
+ A = 0,
+ B = -(1 << 63),
+ }
+
+ map_u8: map[Enum_u8]u8;
+ map_u8[Enum_u8.A] = u8(Enum_u8.B);
+ assert(map_u8[Enum_u8.A] == u8(Enum_u8.B));
+ fmt.println(map_u8);
+
+ map_u64: map[Enum_u64]u64;
+ map_u64[Enum_u64.A] = u64(Enum_u64.B);
+ assert(map_u64[Enum_u64.A] == u64(Enum_u64.B));
+ fmt.println(map_u64);
+
+ map_i8: map[Enum_i8]i8;
+ map_i8[Enum_i8.A] = i8(Enum_i8.B);
+ assert(map_i8[Enum_i8.A] == i8(Enum_i8.B));
+ fmt.println(map_i8);
+
+ map_i64: map[Enum_i64]i64;
+ map_i64[Enum_i64.A] = i64(Enum_i64.B);
+ assert(map_i64[Enum_i64.A] == i64(Enum_i64.B));
+ fmt.println(map_i64);
+
+ demo_struct :: struct {
+ member: Enum_i64,
+ }
+
+ map_string: map[string]demo_struct;
+ map_string["Hellope!"] = demo_struct{Enum_i64.B};
+ assert(map_string["Hellope!"].member == Enum_i64.B);
+ assert("Hellope?" notin map_string);
+ fmt.println(map_string);
+ fmt.println("Hellope! in map_string:", "Hellope!" in map_string);
+ fmt.println("Hellope? in map_string:", "Hellope?" in map_string);
+
+}
+
explicit_procedure_overloading :: proc() {
fmt.println("# explicit procedure overloading");
@@ -884,6 +939,7 @@ main :: proc() {
array_programming();
named_proc_return_parameters();
using_enum();
+ map_type();
explicit_procedure_overloading();
complete_switch();
cstring_example();