Support extension variables in record and tag union encoding derive keys

This commit is contained in:
Ayaz Hafiz 2022-08-17 09:48:38 -05:00
parent a8b348506f
commit b5e59d22e3
No known key found for this signature in database
GPG key ID: 0E2A37416A25EF58
4 changed files with 86 additions and 20 deletions

View file

@ -8,10 +8,10 @@ use insta::assert_snapshot;
use crate::{
test_key_eq, test_key_neq,
util::{check_immediate, derive_test},
util::{check_derivable, check_immediate, derive_test},
v,
};
use roc_derive_key::DeriveBuiltin::ToEncoder;
use roc_derive_key::{encoding::FlatEncodableKey, DeriveBuiltin::ToEncoder, DeriveKey};
use roc_module::symbol::Symbol;
use roc_types::subs::Variable;
@ -118,6 +118,45 @@ fn immediates() {
check_immediate(ToEncoder, v!(STR), Symbol::ENCODE_STRING);
}
#[test]
fn derivable_record_ext_flex_var() {
check_derivable(
ToEncoder,
v!({ a: v!(STR), }* ),
DeriveKey::ToEncoder(FlatEncodableKey::Record(vec!["a".into()])),
);
}
#[test]
fn derivable_record_with_record_ext() {
check_derivable(
ToEncoder,
v!({ b: v!(STR), }{ a: v!(STR), } ),
DeriveKey::ToEncoder(FlatEncodableKey::Record(vec!["a".into(), "b".into()])),
);
}
#[test]
fn derivable_tag_ext_flex_var() {
check_derivable(
ToEncoder,
v!([ A v!(STR) ]* ),
DeriveKey::ToEncoder(FlatEncodableKey::TagUnion(vec![("A".into(), 1)])),
);
}
#[test]
fn derivable_tag_with_tag_ext() {
check_derivable(
ToEncoder,
v!([ B v!(STR) v!(U8) ][ A v!(STR) ]),
DeriveKey::ToEncoder(FlatEncodableKey::TagUnion(vec![
("A".into(), 1),
("B".into(), 2),
])),
);
}
#[test]
fn empty_record() {
derive_test(ToEncoder, v!(EMPTY_RECORD), |golden| {