Up to Main Index Up to Journal for November, 2022 JOURNAL FOR SUNDAY 20TH NOVEMBER, 2022 ______________________________________________________________________________ SUBJECT: A quick state of play update DATE: Sun 20 Nov 19:40:23 GMT 2022 I’ve just realised it’s late November and I have not written anything since Halloween, and people are starting to ask questions about what’s going on… In a nutshell, I’ve been very busy with work to pay the bills. I’ve recently overhauled the company’s servers and then started a development contract with a new client. I’ve also been feeling ghastly after getting my latest COVID and flu shots. Just like last time, the shots are really making my hands ache :P When I get any spare time I’m hacking away on Mere. I’m still rewriting the operators and built-ins due to reworking the internal variable storage. The language is slowly coming together again and there are quite a few additional improvements under the hood. As each operator and built-in is rewritten a bucket load of unit tests are added. Of the 40 operators, 32 have tests. Of the 26 testable built-ins, 16 have tests. I currently have 50 odd test files with over 2700 asserts. Running the tests gives me a short report: b_assert.mr 68μs b_bool_array.mr 116μs b_bool_map.mr 245μs b_delete.mr 176μs b_exists.mr 114μs b_float_array.mr 128μs b_goto.mr 11μs b_int_array.mr 121μs b_int_map.mr 201μs b_keys.mr 38μs b_len.mr 47μs b_literal.mr 363μs b_sort.mr 82μs b_sprint.mr 145μs b_string_array.mr 133μs b_substr.mr 14μs issues.mr 92μs op_add.mr 44μs op_and.mr 20μs op_assign.mr 352μs op_bool.mr 41μs op_dec.mr 29μs op_div.mr 17μs op_eq.mr 109μs op_float.mr 68μs op_ge.mr 47μs op_gt.mr 51μs op_inc.mr 32μs op_index_assign.mr 905μs op_index.mr 112μs op_int.mr 29μs op_land.mr 22μs op_le.mr 49μs op_lor.mr 22μs op_lt.mr 49μs op_mod.mr 13μs op_mult_assign.mr 7μs op_mult.mr 20μs op_neg.mr 29μs op_ne.mr 106μs op_not.mr 16μs op_or.mr 19μs op_shift_left.mr 17μs op_shift_right.mr 15μs op_spaceship.mr 74μs op_string.mr 118μs op_sub.mr 36μs op_type.mr 26μs op_xor.mr 19μs Passed: 49/49, 0 failures. Not too exciting. I need to write a testing wrapper for Mere and these tests so I can use Go’s standard testing tooling. At the moment I just use an ugly Bash script: #!/bin/bash for i in `ls ./*.mr`; do printf "%-20s " `basename $i` ../bin/mere $i if [ "$?" -ne "0" ]; then fail=$(($fail+1)) else pass=$(($pass+1)) fi total=$(($total+1)) done printf "\n\tPassed: %d/%d, %d failures.\n\n" $pass $total $fail It works. Using standard tooling would let me get some meaningful benchmarks. For those interested in what the tests look like, here is the test for the increment (x++) operator: # Testing for inc operator end:int; start:int=time // int variables ai:int bi:int ai = 1 ; assert ai 1 ai++ ; assert ai 2 bi = ai++ ; assert ai 3 ; assert bi 3 bi = ai++++ ; assert ai 4 ; assert bi 5 // int literals assert 1++, 2 assert 1++++, 3 // int anonymous values assert((1+1)++, 3) assert((1+1)++++, 4) // int array element ia:[]int = []int 1 ia[0]++; assert ia[0] 2 // int map element im:[int] = [int] 1 2 im[1]++; assert im[1] 3 // float variables af:float bf:float af = 1.5 ; assert af 1.5 af++ ; assert af 2.5 bf = af++ ; assert af 3.5 ; assert bf 3.5 bf = af++++ ; assert af 4.5 ; assert bf 5.5 // float literals assert 1.5++, 2.5 assert 1.5++++, 3.5 // float anonymous values assert((1.5+1.1)++, 3.6) assert((1.5+1.1)++++, 4.6) // float array element fa:[]float = []float 1.1 fa[0]++; assert fa[0] 2.1 // float map element fm:[float] = [float] 1.1 2.2 fm[1.1]++; assert fm[1.1] 3.2 // manual iota... iota:int = 0 assert [int]((iota++) "a", (iota++) "b") [int](1 "a", 2 "b") end=time();printf "%6dμs\n" end-start Note that due to a change in the assert built-in the above test will not run in the online Mere ICE v0.0.4. Before assert took an expression and a message: assert true==false, "true is not false" assertion failed: true is not false 0: assert true == false , "true is not false" Now assert takes two expressions. If they are not equal to each other it generates its own message and complains: assert true false assertion failed have: bool true want: bool false 0: assert true false I hope to update the online Mere ICE to v0.0.5 soon. For now, that’s it. Not sure how much longer I’ll spend on Mere. However, this is all looking quite promising and I’m still having fun :) -- Diddymus Up to Main Index Up to Journal for November, 2022