Skip to content

Commit

Permalink
context tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Nan committed Aug 23, 2024
1 parent 0d8489b commit 35a1cf5
Show file tree
Hide file tree
Showing 5 changed files with 160 additions and 0 deletions.
Binary file added expected/context/additive_curl_contexts.rkyv
Binary file not shown.
25 changes: 25 additions & 0 deletions expected/context/additive_splay_contexts.rkyv
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
�x_U}��a�3��ٕ�X�q(�l�j��-E��b*
Q,��B�O�RĈ� �"�PY��E[4е�c�:`��g,�M�!,��u4mi��|���=��y���y����y��=��zs�r�u/��%K玄��ۘ�B�*�W��>��t�%���U�;���ٿ���^b�����y?���wYt����y���F}6}�C��ߓE�]��x�ǟ��b���^��*���g�Z���n�?/*�kJ����׿�d���I�������3�:��,����y?�ۘ�����6Y�<���o�~���w�U�|��������dnn�[弗�1���>�{���kTsφ���g��u�&��v������y?��;��w����}�,/�~%�XwV=_��w�X�����}���Sm�ާ_�~c�>y�{NR�t���On�~�[��pՖϟ��W�N��}�ȧ~������]��Kc��������d�5���CN1��/�Zb���s]��_5�d�}3Ǟ<��ɉ̹��k��������ܼofٍ[����f��_\s}���~�8�ଢ଼���%y�ͳ�N=�l��y��c�5˝>�-c����֏�t`���-��O_��__þ�_��O��k�zۜ��ؗO��߿�U�׺��^׾��-�ϼc���g�wҹ��-���8��e����������kZ�����n=�󙋯^z�+�]z܇��a?�������y��n��~'9����t�u5�|_�xz�y_�kn����/�s��^_�~�����W�����|�E�����][��q��o���s��}�s���9����W�{m����ԽO���b|���Ç�i�7��7��,���Y���9�3�9+���9'���әι霗Ίtޚ���9?���ӕ��tޑ��3�w�sa:�ӝλ�yO:���tV�sI:�K�'�K�y:�ӹ,��sy:L�7�+��P:k��p:I��t�J�/���su:פsm:ץ�6����t>���K��t>��M�|"����>��?H��*�W�?���m���o?~��2~�]񼏏��y��+1ƺ�]�>�b��o����������mw?��k�~q�����Ç~���K|.��m=��ۡ�=|���o+�������}�,/�~%�Xw��٧_�~�m��y?~;�6~����v��/n��>|����o���}෭g�6~;�����V�m��ہ��]񼏟�E߯��N�v=������6��o���o����ۮ}���{�Ç>|�M��/�������o������
��~;�W�+������c݉߮g�~���������|���m���~۵O���b|���Ç�i|�%>���߶�������>~[ᷕ�o�j�v��>~�}�c�;�����/v?�6~ۼ��~���v��o����_�>|���7������>���3~�z���o+��R��@_�߮x�����Wb�u'~��}�����o�����o����~�m�>����=��Ç>�����\�~�z�o�C�{��m��V
�������Y^��J����o׳O������m�~�v>�m�6~����ڧ_�~�>|���Ç�4>�����o[��m�v�y����J�}5~��y?ˋ�_�1֝��z���~�mޏ������o���]���/���>|����_�sy�m����=���~[)�v���oW<��gy��+1ƺ�]�>�b��o����������mw?��k�~q�����Ç~���K|.��m=��ۡ�=|���o+�������}�,/�~%�Xw��٧_�~�m��y?~;�6~����v��/n��>|����o���}෭g�6~;�����V�m��ہ��]񼏟�E߯��N�v=������6��o���o����ۮ}���{�Ç>|�M��/�������o������
��~;�W�+������c݉߮g�~���������|���m���~۵O���b|���Ç�i|�%>���߶�������>~[ᷕ�o�j�v��>~�}�c�;�����/v?�6~ۼ��~���v��o����_�>|���7������>���3~�z���o+��R��@_�߮x�����Wb�u'~��}�����o�����o����~�m�>����=��Ç>�����\�~�z�o�C�{��m��V
�������Y^��J����o׳O������m�~�v>�m�6~����ڧ_�~�>|���Ç�4>�����o[��m�v�y����J�}5~��y?ˋ�_�1֝��z���~�mޏ������o���]���/���>|����_�sy�m����=���~[)�v���oW<��gy��+1ƺ�]�>�b��o����������mw?��k�~q�����Ç~���K|.��m=��ۡ�=|���o+�������}�,/�~%�Xw��٧_�~�m��y?~;�6~����v��/n��>|����o���}෭g�6~;�����V�m��ہ��]񼏟�E߯��N�v=������6��o���o����ۮ}���{�Ç>|�M��/�������o������
��~;�W�+������c݉߮g�~���������|���m���~۵O���b|���Ç�i|�%>���߶�������>~[ᷕ�o�j�v��>~�}�c�;�����/v?�6~ۼ��~���v��o����_�>|���7������>���3~�z���o+��R��@_�߮x�����Wb�u'~��}�����o�����o����~�m�>����=��Ç>�����\�~�z�o�C�{��m��V
�������Y^��J����o׳O������m�~�v>�m�6~����ڧ_�~�>|���Ç�4>�����o[��m�v�y����J�}5~��y?ˋ�_�1֝��z���~�mޏ������o���]���/���>|����_�sy�m����=���~[)�v���oW<��gy��+1ƺ�]�>�b��o����������mw?��k�~q�����Ç~���K|.��m=��ۡ�=|���o+�������}�,/�~%�Xw��٧_�~�m��y?~;�6~����v��/n��>|����o���}෭g�6~;�����V�m��ہ��]񼏟�E߯��N�v=������6��o���o����ۮ}���{�Ç>|�M��/�������o������
��~;�W�+������c݉߮g�~���������|���m���~۵O���b|���Ç�i|�%>���߶�������>~[ᷕ�o�j�v��>~�}�c�;�����/v?�6~ۼ��~���v��o����_�>|���7������>���3~�z���o+��R��@_�߮x�����Wb�u'~��}�����o�����o����~�m�>����=��Ç>�����\�~�z�o�C�{��m��V
�������Y^��J����o׳O������m�~�v>�m�6~����ڧ_�~�>|���Ç�4>�����o[��m�v�y����J�}5~��y?ˋ�_�1֝��z���~�mޏ������o���]���/���>|����_�sy�m����=���~;��u����n��;~;��������I���~�mޏ������o���]���/���>|����_�sy�m����=���~[)�v���oW<��gy��+1ƺ�]�>�b��o����������mw?��k�~q�����Ç~���K|.��m=��ۡ�=|���o+�������}�,/�~%�Xw��٧_�~�m��y?~;�6~����v��/n��>|����o���}෭g�6~;�����V�m��ہ��]񼏟�E߯��N�v=������6��o���o����ۮ}���{�Ç>|�M��/�������o������
��~;�W�+������c݉߮g�~���������|���m���~۵O���b|���Ç�i|�%>���߶�������>~[ᷕ�o�j�v��>~�}�c�;�����/v?�6~ۼ��~���v��o����_�>|���7������>���3~�z���o+��R��@_�߮x�����Wb�u'~��}�����o�����o����~�m�>����=��Ç>�����\�~�z�o�C�{��m��V
�������Y^��J����o׳O������m�~�v>�m�6~����ڧ_�~�>|���Ç�4>�����o[��m�v�y����J�}5~��y?ˋ�_�1֝��z���~�mޏ������o���]���/���>|����_�sy�m����=���~[)�v���oW<��gy��+1ƺ�]�>�b��o����������mw?��k�~q�����Ç~���K|.��m=��ۡ�=|���o+�������}�,/�~%�Xw��٧_�~�m��y?~;�6~����v��/n��>|����o���}෭g�6~;�����V�m��ہ��]񼏟�E߯��N�v=������6��o���o����ۮ}���{�Ç>|�M��/�������o������
��~;�W�+������c݉߮g�~���������|���m���~۵O���b|���Ç�i|�%>���߶�������>~[ᷕ�o�j�v��>~�}�c�;�����/v?�6~ۼ��~���v��o����_�>|���7������>���3~�z���o+��R��@_�߮x�����Wb�u'~��}�����o�����o����~�m�>����=��Ç>�����\�~�z�o�C�{��m��V
�������Y^��J����o׳O������m�~�v>�m�6~����ڧ_�~�>|���Ç�4>�����o[��m�v�y����J�}5~��y?ˋ�_�1֝��z���~�mޏ������o���]���/���>|����_�sy�m����=���~[)�v���oW<��gy��+1ƺ�]�>�b��o����������mw?��k�~q�����Ç~���K|.��m=��ۡ�=|���o+�������}�,/�~%�Xw��٧_�~�m��y?~;�6~����v��/n��>|����o���}෭g�6~;�����V�m��ہ��]񼏟�E߯��N�v=������6��o���o����ۮ}���{�Ç>|�M��/�������o������
��~;�W�+������c݉߮g�~���������|���m���~۵O���b|���Ç�i|�%>���߶�������>~[ᷕ�o�j�v��>~�}�c�;�����/v?�6~ۼ��~���v��o����_�>|���7������>���3~�z���o+��R��@_�߮x�����Wb�u'~��}�����o�����o����~�m�>����=��Ç>�����\�~�z�o�C�{��m��V
�������Y^��J����o׳O������m�~�v>�m�6~����ڧ_�~�>|���Ç�4>�����o[��m�v�y����J�}5~��y?ˋ�_�1֝��z���~�mޏ������o���]���/���>|����_�sy�m����=���~[)�v���oW<��gy��+1ƺ�]�>�b��o����������mw?��k�~q�����Ç~���K|.��m=��ۡ�=|���o+�������}�,/�~%�Xw��٧_�~�m��y?~;�6~����v��/n��>|����o���}෭g�6~;�����V�m��ہ��]񼏟�E߯��N�v=������6��o���o����ۮ}���{�Ç>|�M��/�������o������
��~;�W�+������c݉߮g�~���������|���m���~۵O���b|���Ç�i|�%>���߶�������>~[ᷕ�o�j�v��>~�}�c�;�����/v?�6~ۼ��~���v��o����_�>|���7������>���3~�z���o+��R��@_�߮x�����Wb�u'~��}�����o�����o����~�m�>����=��Ç>�����\�~�z�o�C�{��m��V
�������Y^��J����o׳O������m�~�v>�m�6~����ڧ_�~�>|���Ç�4>�����o[��m�v�y����J�}5~��y?ˋ�_�1֝��z���~�mޏ������o���]���/���>|����_�sy�m����=���~[)�v���oW<��gy��+1ƺ�]�>�b��o����������mw?��k�~q�����Ç~���K|.��m=��ۡ�=|���o+�������}�,/�~%�Xw��٧_�~�m��y?~;�6~����v��/n��>|����o���}෭g�6~;�����V�m��ہ��]񼏟�E߯��N�v=������6��o���o����ۮ}���{�Ç>|�M��/�������o������
��~;�W�+������c݉߮g�~���������|���m���~۵O���b|���Ç�i|�%>���߶�������>~[ᷕ�o�j�v��>~�}�c�;�����/v?�6~ۼ��~���v��o����_�>|���7������>���3~�z���o+��R��@_�߮x�����Wb�u'~��}�����o�����o����~�m�>����=��Ç>�����\�~�z�o�C�{��m��V
�������Y^��J����o׳O������m�~�v>�m�6~����ڧ_�~�>|���Ç�4>�����o[��m�v�y����J�}5~��y?ˋ�_�1֝��z���~�mޏ������o���]���/���>|����_�sy�m����=���~[)�v���oW<��gy��+1ƺ�]�>�b��o����������mw?��k�~q�����Ç~���K|.��m=��ۡ�=|���o+�������}�,/�~%�Xw��٧_�~�m��y?~;�6~����v��/n��>|����o���}෭g�6~;�����V�m��ہ��]񼏟�E߯��N�v=������6��o���o����ۮ}���{�Ç>|�M��/�������o������
��~;�W�+������c݉߮g�~���������|���m���~۵O���b|���Ç�i|�%>���߶�������>~[ᷕ�o�j�v��>~�}�c�;�����/v?�6~ۼ��~���v��o����_�>|���7������>���3~�z���o+��R��@_�߮x�����Wb�u'~��}�����o�����o����~�m�>����=��Ç>�����\�~�z�o�C�{��m��V
�������Y^��J����o׳O������m�~�v>�m�6~����ڧ_�~�>|���Ç�4>���������%������G�v��w6������4ɇ�.�}:�w��C]�o���}�Ƙ�X){m���>ٛy��WJ�D��e�/�J�c�r���uRg^��w��m[/{��䃟�|��gn�|�s�߱��<T�I��~ߒ���eo��[6J~��{�*��M�Ͽ;�|���O.��l���eot��uo����%��Χ�<��o�>罕rz��~�-{�?����$WӒ���$���!?6I)g���v�������-yߡ�ߪ���{Y�:��v[)��E�f����ߕ�m $�~��/�y�1�O�F�g��9 n,�L���Y�ϖ���I�s���t��Tɻϒ��w���RN�ٺ_��\&{�o�|�R�����n�'�/�S�s�%�<U�ٶZ������,{����_�5:]+y�'%�������2N�ͺ�WdO}U���@��$�1��_�|۟H�Ȱ��^Z����J�����oJ���%�X�Û%�_�s0o��r����]��������|� ��y�?K>������sl)g�I�ٽ�����H�ſ �
��H�~���\~� K9���~�%{�G�^�K%i��A������/���G����R��Ѳ�~��u�*{�8�ۖJ~���O���C��O�1�o���Su�w���E��w��C�|���[%�P�.�1~+K9��~����7�>�\+�B��}H��$?j��;������~�������s�����k:���� ������)��ݮ�����Ͳ7�e���#�1:��3�ս����$���{u�Gdo�Q��O��$���'��oB�5��M���Gu�������7�gt~�λ��|�Y���4o�.�L����5�74���r�K����$����_,y��$�R�����RN�|ٛ�=�[p��%��k%?X��_%��B��h�������E�_������'K�}����|�tɻΓ������P)g�
��rٛ�!��@�J��+4���{%������]���+t�ߗ�d@�ڮ����W�|�FɗF��v����r�~_����74(���K���۾$��7$����`c)gd���7�����-���J~�·�+��$_���;�������7%{S;do�%�Oɷ�|���#?�|��w0V�ڡ��p��^��w˟?~*y�<�����>��^$��:��������~�-{m�������J~������C��|C�n���V�h���7�^��7�.y�$_��d�� �I~�黍���Rμ�u���޶U����/�|��gVJ>�^��X���<Z�IV�~���eo���� �q:��|�:��߸��L�rf��~${�w�^��%���K:�Z/y�ǒ�r��;x���{��U�ڿ+{*�� ɏ�y�ݒ������K9Sc�߿������=���U�[u>�]���K��q�w�RN���n�k�'{��C��=��D�?�|�9ɟ�k�v�r&��~��?��G��q��ߋߐ|�η�H�}���\�yai�������^��}�䓋%����]�'^/�So�c���K9�ޠ��/{�+e��4ɻ�.����-yg����c��)�t���>,{�O���-��G$�q��_&��+%�=�ߟ�rF���n�����ךH����_���%������c�9��Ӿ^����Mo���;$��������n���M��3�I������ײE��/�
�> y�?H~�v�wpX)�u���#ٛ|F���|�%P�-OI><-���1�K9���~�������9���n����4����9�ߋ_��x�����RNK��'{���^�ɇ^-�f��c$|��w���;8������f�[~��M�(��3%_��S%o9K��~����r�ٺ_�썭����I>p��_���E���_����3~ǔr�V�~����7������K~��{�J�>)��7?g����3�I��+�72,{] yr��_��������7���W�rz�u�����do|D����͒O�����7�.�Lޯ����=){��N��'$��������_���;h/�t=�������?���SI~�Η�H>� ������=��3�����[�7p��-~��ݭ�_����w�\�K��k�N,�,?Z�&O��y�����H>q��?���$_*��;���חr�:t�w�^r�쵝!y�$_���/�P��/�k�N*�,�H��Z�f�����I��ɟ�yۇ$�V�n��;�(�\���&{���ނ�$�����|h@��_�|�����RN����wdo�^���䣣�o���?�|�ɷ�k���r�������Geo�}�����g�|�a��&$?�Q�wpF)g����Oeob��%�&���H~���=-�г�o�i��*� ����'���O���_��_�|�Γ���x����\~���y�eo��do�"��=J���J�Q�3m�,���E�����RN�H�딽��7u��-�J~��{O�|�y��_����_ʙ9O��\�F���� $����_���*ɓ^�o�b��;XY��B��}�k����J�n���w�(����g��Yʙ����5�� {����}]�[u>q��ߐ|��w�]��ޠ�}O�Z��mߖ|�o$��;�+�ԃ�?���;���3��7%{�;d��%��O���|��w�P��w���K����C�;d��������?�|��y���$��'�S:������I����m��o���_���X���|�H�;_)��m����e��i����dO�.{�풏�Q��4����$�#������?�,���#{}�d��-�/�X�u>�R��J~Ϊ���`M��V�~��M����H>�1��yk��7H~��������?�����H�z�OK�xH�:\/y�K~ʝ������S��"{�c������l��A���-��_H��1�wpm���t�����eO}O���4��o��������;H~�� ���M��
Expand Down
Binary file added expected/context/blending_contexts.rkyv
Binary file not shown.
Binary file added expected/context/playback_contexts.rkyv
Binary file not shown.
135 changes: 135 additions & 0 deletions tests/context.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
use ozz_animation_rs::*;
use rand::{thread_rng, Rng};
use std::cell::RefCell;
use std::env;
use std::rc::Rc;
use wasm_bindgen_test::*;

mod common;

const N: i32 = 80;
const TIMES: usize = 400;

#[cfg(feature = "rkyv")]
#[test]
#[wasm_bindgen_test]
fn test_playback_contexts() {
execute_contexts(
"playback_contexts",
"./resource/playback/skeleton.ozz",
"./resource/playback/animation.ozz",
);
}

#[cfg(feature = "rkyv")]
#[test]
#[wasm_bindgen_test]
fn test_blending_contexts() {
execute_contexts(
"blending_contexts",
"./resource/blend/skeleton.ozz",
"./resource/blend/animation1.ozz",
);
}

#[cfg(feature = "rkyv")]
#[test]
#[wasm_bindgen_test]
fn test_additive_contexts() {
execute_contexts(
"additive_curl_contexts",
"./resource/additive/skeleton.ozz",
"./resource/additive/animation_curl_additive.ozz",
);
execute_contexts(
"additive_splay_contexts",
"./resource/additive/skeleton.ozz",
"./resource/additive/animation_splay_additive.ozz",
);
}

fn prepare_contexts(
name: &str,
skel_path: &str,
anim_path: &str,
) -> (Rc<Skeleton>, Rc<Animation>, Vec<SamplingContext>) {
let skeleton = Rc::new(Skeleton::from_path(skel_path).unwrap());
let animation = Rc::new(Animation::from_path(anim_path).unwrap());

if skeleton.num_joints() != animation.num_tracks() {
panic!("skeleton.num_joints() != animation.num_tracks()");
}

let to_expected = env::var("SAVE_TO_EXPECTED").is_ok();
if to_expected {
let mut sample_job: SamplingJob = SamplingJob::default();
sample_job.set_animation(animation.clone());
sample_job.set_context(SamplingContext::new(animation.num_tracks()));
let sample_out = Rc::new(RefCell::new(vec![SoaTransform::default(); skeleton.num_soa_joints()]));
sample_job.set_output(sample_out.clone());

let mut contexts = Vec::new();
for i in 0..=N {
let ratio = (i as f32) / (N as f32);
sample_job.set_ratio(ratio);
sample_job.run().unwrap();
contexts.push(sample_job.context().unwrap().clone_without_animation_id());
}
common::save_rkyv("context", name, &contexts, to_expected).unwrap();
return (skeleton, animation, contexts);
}

let contexts: Vec<SamplingContext> = common::load_rkyv("context", name).unwrap();
return (skeleton, animation, contexts);
}

#[derive(Debug)]
#[cfg_attr(feature = "rkyv", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize))]
struct ContextPair {
ratio1: f32,
ctx1: SamplingContext,
ratio2: f32,
ctx2: SamplingContext,
}

fn execute_contexts(name: &str, skel_path: &str, anim_path: &str) {
let (skeleton, animation, contexts) = prepare_contexts(name, skel_path, anim_path);

let mut sample_job: SamplingJob = SamplingJob::default();
sample_job.set_animation(animation.clone());
sample_job.set_context(SamplingContext::new(animation.num_tracks()));
let sample_out = Rc::new(RefCell::new(vec![SoaTransform::default(); skeleton.num_soa_joints()]));
sample_job.set_output(sample_out.clone());

let mut rng = thread_rng();
let rands = (0..TIMES)
.map(|_| rng.gen_range(-10..=N + 10).clamp(0, N))
.map(|n| (n as usize, (n as f32) / (N as f32)))
.collect::<Vec<(usize, f32)>>();

let mut prev_ratio = 0.0;
sample_job.set_ratio(0.0);
sample_job.run().unwrap();
for (idx, ratio) in rands {
println!("name: {} idx: {} ratio: [{}, {}]", name, idx, prev_ratio, ratio);
sample_job.set_ratio(ratio);
sample_job.run().unwrap();
let context = sample_job.context().unwrap().clone_without_animation_id();
if context != contexts[idx] {
common::save_rkyv(
"context",
name,
&ContextPair {
ratio1: prev_ratio,
ctx1: contexts[idx].clone(),
ratio2: ratio,
ctx2: context,
},
false,
)
.unwrap();
panic!("name: {} idx: {} ratio: {}", name, idx, ratio);
}
prev_ratio = ratio;
}
}

0 comments on commit 35a1cf5

Please sign in to comment.